You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@drill.apache.org by ja...@apache.org on 2014/05/22 03:14:44 UTC

[07/24] status changes

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/5472140a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestBroadcastExchange.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestBroadcastExchange.java b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestBroadcastExchange.java
index 69ba832..826ebf5 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestBroadcastExchange.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestBroadcastExchange.java
@@ -17,22 +17,21 @@
  */
 package org.apache.drill.exec.physical.impl;
 
-import com.google.common.base.Charsets;
-import com.google.common.io.Files;
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+
 import org.apache.drill.common.util.FileUtils;
 import org.apache.drill.exec.client.DrillClient;
-import org.apache.drill.exec.physical.PhysicalPlan;
 import org.apache.drill.exec.pop.PopUnitTestBase;
-import org.apache.drill.exec.proto.UserProtos;
+import org.apache.drill.exec.proto.UserBitShared.QueryType;
 import org.apache.drill.exec.rpc.user.QueryResultBatch;
 import org.apache.drill.exec.server.Drillbit;
 import org.apache.drill.exec.server.RemoteServiceSet;
-import org.junit.Ignore;
 import org.junit.Test;
 
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
+import com.google.common.base.Charsets;
+import com.google.common.io.Files;
 
 public class TestBroadcastExchange extends PopUnitTestBase {
   @Test
@@ -51,7 +50,7 @@ public class TestBroadcastExchange extends PopUnitTestBase {
               FileUtils.getResourceAsFile("/sender/broadcast_exchange.json"), Charsets.UTF_8)
               .replace("#{LEFT_FILE}", FileUtils.getResourceAsFile("/join/merge_single_batch.left.json").toURI().toString())
               .replace("#{RIGHT_FILE}", FileUtils.getResourceAsFile("/join/merge_single_batch.right.json").toURI().toString());
-      List<QueryResultBatch> results = client.runQuery(UserProtos.QueryType.PHYSICAL, physicalPlan);
+      List<QueryResultBatch> results = client.runQuery(QueryType.PHYSICAL, physicalPlan);
       int count = 0;
       for(QueryResultBatch b : results) {
         if (b.getHeader().getRowCount() != 0) count += b.getHeader().getRowCount();
@@ -75,7 +74,7 @@ public class TestBroadcastExchange extends PopUnitTestBase {
 
       String physicalPlan = Files.toString(
           FileUtils.getResourceAsFile("/sender/broadcast_exchange_long_run.json"), Charsets.UTF_8);
-      List<QueryResultBatch> results = client.runQuery(UserProtos.QueryType.PHYSICAL, physicalPlan);
+      List<QueryResultBatch> results = client.runQuery(QueryType.PHYSICAL, physicalPlan);
       int count = 0;
       for(QueryResultBatch b : results) {
         if (b.getHeader().getRowCount() != 0) count += b.getHeader().getRowCount();

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/5472140a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestExecutionAbstractions.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestExecutionAbstractions.java b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestExecutionAbstractions.java
deleted file mode 100644
index 24cae70..0000000
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/TestExecutionAbstractions.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.drill.exec.physical.impl;
-
-import java.lang.reflect.Field;
-import java.nio.ByteBuffer;
-import java.util.Random;
-
-import sun.misc.Unsafe;
-import com.google.caliper.Benchmark;
-import com.google.caliper.Param;
-
-@SuppressWarnings("restriction")
-public class TestExecutionAbstractions extends Benchmark {
-  static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(TestExecutionAbstractions.class);
-
-  /**
-   * General goal is compare the performance of abstract versus concrete
-   * implementations of selection vector dereferencing.
-   */
-
-  private static enum Implementation {
-    CONCRETE, ABSTRACT
-  };
-
-  private static enum SelectionVectorMode {
-    NONE, SV2, SV4
-  };
-
-  @Param
-  private Implementation impl;
-  @Param
-  private SelectionVectorMode mode;
-
-  private int scale = 1024*1024*8;
-
-  private final Unsafe unsafe = retrieveUnsafe();
-  private final ByteBuffer a;
-  private final ByteBuffer b;
-  private final ByteBuffer b2;
-  private final ByteBuffer c;
-  private final ByteBuffer sv2;
-  private final ByteBuffer sv4;
-  private final int max;
-  
-
-  public TestExecutionAbstractions() throws Exception {
-    sv2 = ByteBuffer.allocateDirect(scale * 2);
-    sv4 = ByteBuffer.allocateDirect(scale * 4);
-    a = ByteBuffer.allocateDirect(scale * 8);
-    b = ByteBuffer.allocateDirect(scale * 8);
-    b2 = ByteBuffer.allocateDirect(scale * 8);
-    c = ByteBuffer.allocateDirect(scale * 8);
-    int svPos = 0;
-    int i = 0;
-    try {
-
-      Random r = new Random();
-      for (; i < scale; i++) {
-        a.putLong(i * 8, r.nextLong());
-        b.putLong(i * 8, r.nextLong());
-
-        if (r.nextBoolean()) {
-          sv2.putChar(svPos * 2, (char) i);
-          sv4.putInt(svPos * 4, i);
-          svPos++;
-        }
-      }
-      System.out.println("Created test data.");
-      max = mode == SelectionVectorMode.NONE ? 1024 : svPos;
-
-    } catch (Exception ex) {
-      System.out.println("i: " + i + ", svPos" + svPos);
-      throw ex;
-    }
-  }
-
-   private Unsafe retrieveUnsafe(){
-     sun.misc.Unsafe localUnsafe = null;
-  
-   try {
-   Field field = sun.misc.Unsafe.class.getDeclaredField("theUnsafe");
-   field.setAccessible(true);
-   localUnsafe = (sun.misc.Unsafe) field.get(null);
-   } catch (Exception e) {
-   throw new AssertionError(e);
-   }
-  
-   return localUnsafe;
-   }
-
-  public void timeAdd(int reps) {
-    for (int r = 0; r < reps; r++) {
-      switch (impl) {
-
-      case CONCRETE:
-        switch (mode) {
-
-        case NONE:
-          for (int i = 0; i < max; i++) {
-            
-            c.putLong(i * 8, a.getLong(i * 8) + b.getLong(i * 8));
-          }
-
-          break;
-        case SV2:
-          for (int i = 0; i < max; i++) {
-            int index = sv2.getChar(i*2) * 8;
-            c.putLong(i * 8, a.getLong(index) + b.getLong(index));
-          }
-          break;
-        case SV4:
-          for (int i = 0; i < max; i++) {
-            int index = sv4.getInt(i*4) * 8;
-            c.putLong(i * 8, a.getLong(index) + b.getLong(index));
-          }
-          break;
-        }
-        break;
-      case ABSTRACT:
-        LongGetter aGetter = null;
-        LongGetter bGetter = null;
-
-        switch (mode) {
-
-        case NONE:
-          aGetter = new StraightGetter(a);
-          bGetter = new StraightGetter(b);
-          break;
-        case SV2:
-          aGetter = new Sv2Getter(sv2, a);
-          bGetter = new Sv2Getter(sv2, b);
-          break;
-        case SV4:
-          aGetter = new Sv4Getter(sv4, a);
-          bGetter = new Sv4Getter(sv4, b);
-          break;
-
-        }
-
-        for (int i = 0; i < max; i++) {
-          c.putLong(i * 8, aGetter.getLong(i) + bGetter.getLong(i));
-        }
-        break;
-      }
-    }
-
-  }
-
-  private static interface LongGetter {
-    long getLong(int index);
-  }
-
-  private static class StraightGetter implements LongGetter {
-
-    final ByteBuffer b;
-
-    public StraightGetter(ByteBuffer b) {
-      super();
-      this.b = b;
-    }
-
-    @Override
-    public long getLong(int index) {
-      return b.getLong(index * 8);
-    }
-  }
-
-  private static class Sv2Getter implements LongGetter {
-    final ByteBuffer b;
-    final ByteBuffer sv;
-
-    public Sv2Getter(ByteBuffer sv, ByteBuffer b) {
-      super();
-      this.b = b;
-      this.sv = sv;
-    }
-
-    @Override
-    public long getLong(int index) {
-      int pos = sv.getChar(index * 2);
-      return b.getLong(pos * 8);
-    }
-  }
-
-  private static class Sv4Getter implements LongGetter {
-    final ByteBuffer b;
-    final ByteBuffer sv;
-
-    public Sv4Getter(ByteBuffer sv, ByteBuffer b) {
-      super();
-      this.b = b;
-      this.sv = sv;
-    }
-
-    @Override
-    public long getLong(int index) {
-      int pos = sv.getInt(index * 4);
-      return b.getLong(pos * 8);
-    }
-  }
-  
-  private long allocate(long bytes){
-    return unsafe.allocateMemory(bytes);
-    
-  }
-  
-  
-  
-}

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/5472140a/exec/java-exec/src/test/java/org/apache/drill/exec/server/DrillClientFactory.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/server/DrillClientFactory.java b/exec/java-exec/src/test/java/org/apache/drill/exec/server/DrillClientFactory.java
new file mode 100644
index 0000000..216cb3b
--- /dev/null
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/server/DrillClientFactory.java
@@ -0,0 +1,21 @@
+package org.apache.drill.exec.server;
+
+import org.apache.drill.exec.client.DrillClient;
+import org.glassfish.hk2.api.Factory;
+
+public class DrillClientFactory implements Factory<DrillClient>{
+  static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(DrillClientFactory.class);
+
+
+
+  @Override
+  public void dispose(DrillClient arg0) {
+  }
+
+  @Override
+  public DrillClient provide() {
+    return new DrillClient();
+  }
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/5472140a/exec/java-exec/src/test/java/org/apache/drill/exec/server/HelloResource.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/server/HelloResource.java b/exec/java-exec/src/test/java/org/apache/drill/exec/server/HelloResource.java
new file mode 100644
index 0000000..cdb04ec
--- /dev/null
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/server/HelloResource.java
@@ -0,0 +1,22 @@
+package org.apache.drill.exec.server;
+
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.apache.drill.exec.client.DrillClient;
+
+@Path("hello")
+public class HelloResource {
+  static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(HelloResource.class);
+
+  @Inject DrillClient client;
+
+  @GET
+  @Produces("text/plain")
+  public String getHello() {
+    return "hello world" + client;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/5472140a/exec/java-exec/src/test/java/org/apache/drill/exec/server/TestJersey.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/server/TestJersey.java b/exec/java-exec/src/test/java/org/apache/drill/exec/server/TestJersey.java
new file mode 100644
index 0000000..6e873ed
--- /dev/null
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/server/TestJersey.java
@@ -0,0 +1,48 @@
+package org.apache.drill.exec.server;
+
+import org.apache.drill.exec.client.DrillClient;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+import org.glassfish.hk2.utilities.binding.AbstractBinder;
+import org.glassfish.jersey.jackson.JacksonFeature;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.server.ServerProperties;
+import org.glassfish.jersey.servlet.ServletContainer;
+import org.junit.Test;
+
+public class TestJersey {
+  static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(TestJersey.class);
+
+  @Test
+  public void x() throws Exception {
+    Server server = new Server(8112);
+    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
+    context.setContextPath("/");
+    server.setHandler(context);
+    ServletHolder h = new ServletHolder(new ServletContainer(new MyApplication()));
+    h.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "org.apache.drill.exec.server");
+    h.setInitOrder(1);
+    context.addServlet(h, "/*");
+    server.start();
+    server.join();
+
+  }
+
+  public class MyApplication extends ResourceConfig {
+
+    public MyApplication() {
+        registerClasses(HelloResource.class);
+        register(JacksonFeature.class);
+        property(ServerProperties.METAINF_SERVICES_LOOKUP_DISABLE, true);
+        register(new AbstractBinder() {
+            @Override
+            protected void configure() {
+              this.bind(new DrillClient()).to(DrillClient.class);
+            }
+        });
+    }
+}
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/5472140a/exec/java-exec/src/test/java/org/apache/drill/exec/server/rest/RootResource.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/server/rest/RootResource.java b/exec/java-exec/src/test/java/org/apache/drill/exec/server/rest/RootResource.java
new file mode 100644
index 0000000..42fc39e
--- /dev/null
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/server/rest/RootResource.java
@@ -0,0 +1,9 @@
+package org.apache.drill.exec.server.rest;
+
+import javax.ws.rs.Path;
+
+@Path("/")
+public class RootResource {
+  public int hi = 5;
+  public String blue = "yo";
+}

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/5472140a/exec/java-exec/src/test/resources/logback.xml
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/logback.xml b/exec/java-exec/src/test/resources/logback.xml
index b8e0ca2..b13bc58 100644
--- a/exec/java-exec/src/test/resources/logback.xml
+++ b/exec/java-exec/src/test/resources/logback.xml
@@ -42,7 +42,7 @@
 <!--   </logger> -->
 
 	<root>
-		<level value="error" />
+		<level value="debug" />
 		<appender-ref ref="STDOUT" />
 	</root>
 

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/5472140a/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillResultSet.java
----------------------------------------------------------------------
diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillResultSet.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillResultSet.java
index be56b96..594e3ff 100644
--- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillResultSet.java
+++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillResultSet.java
@@ -31,7 +31,7 @@ import net.hydromatic.avatica.AvaticaStatement;
 
 import org.apache.drill.exec.client.DrillClient;
 import org.apache.drill.exec.proto.UserBitShared.QueryId;
-import org.apache.drill.exec.proto.UserProtos.QueryType;
+import org.apache.drill.exec.proto.UserBitShared.QueryType;
 import org.apache.drill.exec.record.RecordBatchLoader;
 import org.apache.drill.exec.rpc.RpcException;
 import org.apache.drill.exec.rpc.user.ConnectionThrottle;
@@ -48,8 +48,8 @@ public class DrillResultSet extends AvaticaResultSet {
   private volatile QueryId queryId;
   private final DrillClient client;
   final RecordBatchLoader currentBatch;
-  final DrillCursor cursor; 
-  
+  final DrillCursor cursor;
+
   public DrillResultSet(AvaticaStatement statement, AvaticaPrepareResult prepareResult,
       ResultSetMetaData resultSetMetaData, TimeZone timeZone) {
     super(statement, prepareResult, resultSetMetaData, timeZone);
@@ -60,7 +60,7 @@ public class DrillResultSet extends AvaticaResultSet {
     this.client = client;
     cursor = new DrillCursor(this);
   }
-  
+
   @Override
   protected void cancel() {
     cleanup();
@@ -73,7 +73,7 @@ public class DrillResultSet extends AvaticaResultSet {
     }
     listener.close();
   }
-  
+
   @Override protected DrillResultSet execute() throws SQLException{
     // Call driver's callback. It is permitted to throw a RuntimeException.
     DrillConnectionImpl connection = (DrillConnectionImpl) statement.getConnection();
@@ -89,10 +89,10 @@ public class DrillResultSet extends AvaticaResultSet {
       cursor.next();
     } catch (InterruptedException e) {
     }
-    
+
     return this;
   }
-  
+
   class Listener implements UserResultsListener {
     private static final int MAX = 100;
     private volatile RpcException ex;
@@ -102,9 +102,9 @@ public class DrillResultSet extends AvaticaResultSet {
     private volatile boolean closed = false;
     private CountDownLatch latch = new CountDownLatch(1);
     private AtomicBoolean receivedMessage = new AtomicBoolean(false);
-    
-    
-    
+
+
+
     final LinkedBlockingDeque<QueryResultBatch> queue = Queues.newLinkedBlockingDeque();
 
     private boolean releaseIfFirst(){
@@ -112,10 +112,10 @@ public class DrillResultSet extends AvaticaResultSet {
         latch.countDown();
         return true;
       }
-      
+
       return false;
     }
-    
+
     @Override
     public void submissionFailed(RpcException ex) {
       releaseIfFirst();
@@ -151,7 +151,7 @@ public class DrillResultSet extends AvaticaResultSet {
       if (result.getHeader().getErrorCount() > 0) {
         submissionFailed(new RpcException(String.format("%s", result.getHeader().getErrorList())));
       }
-      
+
       releaseIfFirst();
 
     }

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/5472140a/protocol/src/main/java/org/apache/drill/common/types/TypeProtos.java
----------------------------------------------------------------------
diff --git a/protocol/src/main/java/org/apache/drill/common/types/TypeProtos.java b/protocol/src/main/java/org/apache/drill/common/types/TypeProtos.java
index 9480ba4..a2e97d1 100644
--- a/protocol/src/main/java/org/apache/drill/common/types/TypeProtos.java
+++ b/protocol/src/main/java/org/apache/drill/common/types/TypeProtos.java
@@ -47,21 +47,13 @@ public final class TypeProtos {
      */
     MAP(1, 1),
     /**
-     * <code>REPEATMAP = 2;</code>
-     *
-     * <pre>
-     *  a repeated map column (means that multiple children sit below this)
-     * </pre>
-     */
-    REPEATMAP(2, 2),
-    /**
      * <code>TINYINT = 3;</code>
      *
      * <pre>
      *  single byte signed integer
      * </pre>
      */
-    TINYINT(3, 3),
+    TINYINT(2, 3),
     /**
      * <code>SMALLINT = 4;</code>
      *
@@ -69,7 +61,7 @@ public final class TypeProtos {
      *  two byte signed integer
      * </pre>
      */
-    SMALLINT(4, 4),
+    SMALLINT(3, 4),
     /**
      * <code>INT = 5;</code>
      *
@@ -77,7 +69,7 @@ public final class TypeProtos {
      *  four byte signed integer
      * </pre>
      */
-    INT(5, 5),
+    INT(4, 5),
     /**
      * <code>BIGINT = 6;</code>
      *
@@ -85,7 +77,7 @@ public final class TypeProtos {
      *  eight byte signed integer
      * </pre>
      */
-    BIGINT(6, 6),
+    BIGINT(5, 6),
     /**
      * <code>DECIMAL9 = 7;</code>
      *
@@ -93,7 +85,7 @@ public final class TypeProtos {
      *  a decimal supporting precision between 1 and 9
      * </pre>
      */
-    DECIMAL9(7, 7),
+    DECIMAL9(6, 7),
     /**
      * <code>DECIMAL18 = 8;</code>
      *
@@ -101,7 +93,7 @@ public final class TypeProtos {
      *  a decimal supporting precision between 10 and 18
      * </pre>
      */
-    DECIMAL18(8, 8),
+    DECIMAL18(7, 8),
     /**
      * <code>DECIMAL28SPARSE = 9;</code>
      *
@@ -109,7 +101,7 @@ public final class TypeProtos {
      *  a decimal supporting precision between 19 and 28
      * </pre>
      */
-    DECIMAL28SPARSE(9, 9),
+    DECIMAL28SPARSE(8, 9),
     /**
      * <code>DECIMAL38SPARSE = 10;</code>
      *
@@ -117,7 +109,7 @@ public final class TypeProtos {
      *  a decimal supporting precision between 29 and 38
      * </pre>
      */
-    DECIMAL38SPARSE(10, 10),
+    DECIMAL38SPARSE(9, 10),
     /**
      * <code>MONEY = 11;</code>
      *
@@ -125,7 +117,7 @@ public final class TypeProtos {
      *  signed decimal with two digit precision
      * </pre>
      */
-    MONEY(11, 11),
+    MONEY(10, 11),
     /**
      * <code>DATE = 12;</code>
      *
@@ -133,7 +125,7 @@ public final class TypeProtos {
      *  days since 4713bc
      * </pre>
      */
-    DATE(12, 12),
+    DATE(11, 12),
     /**
      * <code>TIME = 13;</code>
      *
@@ -141,7 +133,7 @@ public final class TypeProtos {
      *  time in micros before or after 2000/1/1
      * </pre>
      */
-    TIME(13, 13),
+    TIME(12, 13),
     /**
      * <code>TIMETZ = 14;</code>
      *
@@ -149,7 +141,7 @@ public final class TypeProtos {
      *  time in micros before or after 2000/1/1 with timezone
      * </pre>
      */
-    TIMETZ(14, 14),
+    TIMETZ(13, 14),
     /**
      * <code>TIMESTAMPTZ = 15;</code>
      *
@@ -157,7 +149,7 @@ public final class TypeProtos {
      *  unix epoch time in millis
      * </pre>
      */
-    TIMESTAMPTZ(15, 15),
+    TIMESTAMPTZ(14, 15),
     /**
      * <code>TIMESTAMP = 16;</code>
      *
@@ -165,7 +157,7 @@ public final class TypeProtos {
      *  TBD
      * </pre>
      */
-    TIMESTAMP(16, 16),
+    TIMESTAMP(15, 16),
     /**
      * <code>INTERVAL = 17;</code>
      *
@@ -173,7 +165,7 @@ public final class TypeProtos {
      *  TBD
      * </pre>
      */
-    INTERVAL(17, 17),
+    INTERVAL(16, 17),
     /**
      * <code>FLOAT4 = 18;</code>
      *
@@ -181,7 +173,7 @@ public final class TypeProtos {
      *  4 byte ieee 754 
      * </pre>
      */
-    FLOAT4(18, 18),
+    FLOAT4(17, 18),
     /**
      * <code>FLOAT8 = 19;</code>
      *
@@ -189,7 +181,7 @@ public final class TypeProtos {
      *  8 byte ieee 754
      * </pre>
      */
-    FLOAT8(19, 19),
+    FLOAT8(18, 19),
     /**
      * <code>BIT = 20;</code>
      *
@@ -197,7 +189,7 @@ public final class TypeProtos {
      *  single bit value (boolean)
      * </pre>
      */
-    BIT(20, 20),
+    BIT(19, 20),
     /**
      * <code>FIXEDCHAR = 21;</code>
      *
@@ -205,11 +197,11 @@ public final class TypeProtos {
      *  utf8 fixed length string, padded with spaces
      * </pre>
      */
-    FIXEDCHAR(21, 21),
+    FIXEDCHAR(20, 21),
     /**
      * <code>FIXED16CHAR = 22;</code>
      */
-    FIXED16CHAR(22, 22),
+    FIXED16CHAR(21, 22),
     /**
      * <code>FIXEDBINARY = 23;</code>
      *
@@ -217,7 +209,7 @@ public final class TypeProtos {
      *  fixed length binary, padded with 0 bytes
      * </pre>
      */
-    FIXEDBINARY(23, 23),
+    FIXEDBINARY(22, 23),
     /**
      * <code>VARCHAR = 24;</code>
      *
@@ -225,7 +217,7 @@ public final class TypeProtos {
      *  utf8 variable length string
      * </pre>
      */
-    VARCHAR(24, 24),
+    VARCHAR(23, 24),
     /**
      * <code>VAR16CHAR = 25;</code>
      *
@@ -233,7 +225,7 @@ public final class TypeProtos {
      * utf16 variable length string
      * </pre>
      */
-    VAR16CHAR(25, 25),
+    VAR16CHAR(24, 25),
     /**
      * <code>VARBINARY = 26;</code>
      *
@@ -241,7 +233,7 @@ public final class TypeProtos {
      *  variable length binary
      * </pre>
      */
-    VARBINARY(26, 26),
+    VARBINARY(25, 26),
     /**
      * <code>UINT1 = 29;</code>
      *
@@ -249,7 +241,7 @@ public final class TypeProtos {
      *  unsigned 1 byte integer
      * </pre>
      */
-    UINT1(27, 29),
+    UINT1(26, 29),
     /**
      * <code>UINT2 = 30;</code>
      *
@@ -257,7 +249,7 @@ public final class TypeProtos {
      *  unsigned 2 byte integer
      * </pre>
      */
-    UINT2(28, 30),
+    UINT2(27, 30),
     /**
      * <code>UINT4 = 31;</code>
      *
@@ -265,7 +257,7 @@ public final class TypeProtos {
      *  unsigned 4 byte integer
      * </pre>
      */
-    UINT4(29, 31),
+    UINT4(28, 31),
     /**
      * <code>UINT8 = 32;</code>
      *
@@ -273,7 +265,7 @@ public final class TypeProtos {
      *  unsigned 8 byte integer
      * </pre>
      */
-    UINT8(30, 32),
+    UINT8(29, 32),
     /**
      * <code>DECIMAL28DENSE = 33;</code>
      *
@@ -281,7 +273,7 @@ public final class TypeProtos {
      * dense decimal representation, supporting precision between 19 and 28
      * </pre>
      */
-    DECIMAL28DENSE(31, 33),
+    DECIMAL28DENSE(30, 33),
     /**
      * <code>DECIMAL38DENSE = 34;</code>
      *
@@ -289,7 +281,7 @@ public final class TypeProtos {
      * dense decimal representation, supporting precision between 28 and 38
      * </pre>
      */
-    DECIMAL38DENSE(32, 34),
+    DECIMAL38DENSE(31, 34),
     /**
      * <code>NULL = 37;</code>
      *
@@ -300,7 +292,7 @@ public final class TypeProtos {
      *    MSGPACK4 = 36;   //  msgpack encoded complex type. (up to 2^32 in length)
      * </pre>
      */
-    NULL(33, 37),
+    NULL(32, 37),
     /**
      * <code>INTERVALYEAR = 38;</code>
      *
@@ -308,7 +300,7 @@ public final class TypeProtos {
      * Interval type specifying YEAR to MONTH
      * </pre>
      */
-    INTERVALYEAR(34, 38),
+    INTERVALYEAR(33, 38),
     /**
      * <code>INTERVALDAY = 39;</code>
      *
@@ -316,11 +308,11 @@ public final class TypeProtos {
      * Interval type specifying DAY to SECONDS
      * </pre>
      */
-    INTERVALDAY(35, 39),
+    INTERVALDAY(34, 39),
     /**
      * <code>LIST = 40;</code>
      */
-    LIST(36, 40),
+    LIST(35, 40),
     ;
 
     /**
@@ -340,14 +332,6 @@ public final class TypeProtos {
      */
     public static final int MAP_VALUE = 1;
     /**
-     * <code>REPEATMAP = 2;</code>
-     *
-     * <pre>
-     *  a repeated map column (means that multiple children sit below this)
-     * </pre>
-     */
-    public static final int REPEATMAP_VALUE = 2;
-    /**
      * <code>TINYINT = 3;</code>
      *
      * <pre>
@@ -622,7 +606,6 @@ public final class TypeProtos {
       switch (value) {
         case 0: return LATE;
         case 1: return MAP;
-        case 2: return REPEATMAP;
         case 3: return TINYINT;
         case 4: return SMALLINT;
         case 5: return INT;
@@ -1788,22 +1771,22 @@ public final class TypeProtos {
       "inor_type\030\001 \001(\0162\021.common.MinorType\022\036\n\004mo" +
       "de\030\002 \001(\0162\020.common.DataMode\022\r\n\005width\030\003 \001(" +
       "\005\022\021\n\tprecision\030\004 \001(\005\022\r\n\005scale\030\005 \001(\005\022\020\n\010t" +
-      "imeZone\030\006 \001(\005*\205\004\n\tMinorType\022\010\n\004LATE\020\000\022\007\n" +
-      "\003MAP\020\001\022\r\n\tREPEATMAP\020\002\022\013\n\007TINYINT\020\003\022\014\n\010SM" +
-      "ALLINT\020\004\022\007\n\003INT\020\005\022\n\n\006BIGINT\020\006\022\014\n\010DECIMAL" +
-      "9\020\007\022\r\n\tDECIMAL18\020\010\022\023\n\017DECIMAL28SPARSE\020\t\022" +
-      "\023\n\017DECIMAL38SPARSE\020\n\022\t\n\005MONEY\020\013\022\010\n\004DATE\020" +
-      "\014\022\010\n\004TIME\020\r\022\n\n\006TIMETZ\020\016\022\017\n\013TIMESTAMPTZ\020\017",
-      "\022\r\n\tTIMESTAMP\020\020\022\014\n\010INTERVAL\020\021\022\n\n\006FLOAT4\020" +
-      "\022\022\n\n\006FLOAT8\020\023\022\007\n\003BIT\020\024\022\r\n\tFIXEDCHAR\020\025\022\017\n" +
-      "\013FIXED16CHAR\020\026\022\017\n\013FIXEDBINARY\020\027\022\013\n\007VARCH" +
-      "AR\020\030\022\r\n\tVAR16CHAR\020\031\022\r\n\tVARBINARY\020\032\022\t\n\005UI" +
-      "NT1\020\035\022\t\n\005UINT2\020\036\022\t\n\005UINT4\020\037\022\t\n\005UINT8\020 \022\022" +
-      "\n\016DECIMAL28DENSE\020!\022\022\n\016DECIMAL38DENSE\020\"\022\010" +
-      "\n\004NULL\020%\022\020\n\014INTERVALYEAR\020&\022\017\n\013INTERVALDA" +
-      "Y\020\'\022\010\n\004LIST\020(*4\n\010DataMode\022\014\n\010OPTIONAL\020\000\022" +
-      "\014\n\010REQUIRED\020\001\022\014\n\010REPEATED\020\002B-\n\035org.apach" +
-      "e.drill.common.typesB\nTypeProtosH\001"
+      "imeZone\030\006 \001(\005*\366\003\n\tMinorType\022\010\n\004LATE\020\000\022\007\n" +
+      "\003MAP\020\001\022\013\n\007TINYINT\020\003\022\014\n\010SMALLINT\020\004\022\007\n\003INT" +
+      "\020\005\022\n\n\006BIGINT\020\006\022\014\n\010DECIMAL9\020\007\022\r\n\tDECIMAL1" +
+      "8\020\010\022\023\n\017DECIMAL28SPARSE\020\t\022\023\n\017DECIMAL38SPA" +
+      "RSE\020\n\022\t\n\005MONEY\020\013\022\010\n\004DATE\020\014\022\010\n\004TIME\020\r\022\n\n\006" +
+      "TIMETZ\020\016\022\017\n\013TIMESTAMPTZ\020\017\022\r\n\tTIMESTAMP\020\020",
+      "\022\014\n\010INTERVAL\020\021\022\n\n\006FLOAT4\020\022\022\n\n\006FLOAT8\020\023\022\007" +
+      "\n\003BIT\020\024\022\r\n\tFIXEDCHAR\020\025\022\017\n\013FIXED16CHAR\020\026\022" +
+      "\017\n\013FIXEDBINARY\020\027\022\013\n\007VARCHAR\020\030\022\r\n\tVAR16CH" +
+      "AR\020\031\022\r\n\tVARBINARY\020\032\022\t\n\005UINT1\020\035\022\t\n\005UINT2\020" +
+      "\036\022\t\n\005UINT4\020\037\022\t\n\005UINT8\020 \022\022\n\016DECIMAL28DENS" +
+      "E\020!\022\022\n\016DECIMAL38DENSE\020\"\022\010\n\004NULL\020%\022\020\n\014INT" +
+      "ERVALYEAR\020&\022\017\n\013INTERVALDAY\020\'\022\010\n\004LIST\020(*4" +
+      "\n\010DataMode\022\014\n\010OPTIONAL\020\000\022\014\n\010REQUIRED\020\001\022\014" +
+      "\n\010REPEATED\020\002B-\n\035org.apache.drill.common." +
+      "typesB\nTypeProtosH\001"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
       new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/5472140a/protocol/src/main/java/org/apache/drill/exec/proto/BitControl.java
----------------------------------------------------------------------
diff --git a/protocol/src/main/java/org/apache/drill/exec/proto/BitControl.java b/protocol/src/main/java/org/apache/drill/exec/proto/BitControl.java
index a1cf6f8..9e041dc 100644
--- a/protocol/src/main/java/org/apache/drill/exec/proto/BitControl.java
+++ b/protocol/src/main/java/org/apache/drill/exec/proto/BitControl.java
@@ -1675,6 +1675,20 @@ public final class BitControl {
      * <code>optional int64 running_time = 9;</code>
      */
     long getRunningTime();
+
+    // optional .exec.shared.MinorFragmentProfile profile = 10;
+    /**
+     * <code>optional .exec.shared.MinorFragmentProfile profile = 10;</code>
+     */
+    boolean hasProfile();
+    /**
+     * <code>optional .exec.shared.MinorFragmentProfile profile = 10;</code>
+     */
+    org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile getProfile();
+    /**
+     * <code>optional .exec.shared.MinorFragmentProfile profile = 10;</code>
+     */
+    org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfileOrBuilder getProfileOrBuilder();
   }
   /**
    * Protobuf type {@code exec.bit.control.FragmentStatus}
@@ -1794,6 +1808,19 @@ public final class BitControl {
               runningTime_ = input.readInt64();
               break;
             }
+            case 82: {
+              org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile.Builder subBuilder = null;
+              if (((bitField0_ & 0x00000200) == 0x00000200)) {
+                subBuilder = profile_.toBuilder();
+              }
+              profile_ = input.readMessage(org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile.PARSER, extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(profile_);
+                profile_ = subBuilder.buildPartial();
+              }
+              bitField0_ |= 0x00000200;
+              break;
+            }
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
@@ -2108,6 +2135,28 @@ public final class BitControl {
       return runningTime_;
     }
 
+    // optional .exec.shared.MinorFragmentProfile profile = 10;
+    public static final int PROFILE_FIELD_NUMBER = 10;
+    private org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile profile_;
+    /**
+     * <code>optional .exec.shared.MinorFragmentProfile profile = 10;</code>
+     */
+    public boolean hasProfile() {
+      return ((bitField0_ & 0x00000200) == 0x00000200);
+    }
+    /**
+     * <code>optional .exec.shared.MinorFragmentProfile profile = 10;</code>
+     */
+    public org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile getProfile() {
+      return profile_;
+    }
+    /**
+     * <code>optional .exec.shared.MinorFragmentProfile profile = 10;</code>
+     */
+    public org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfileOrBuilder getProfileOrBuilder() {
+      return profile_;
+    }
+
     private void initFields() {
       memoryUse_ = 0L;
       batchesCompleted_ = 0L;
@@ -2118,6 +2167,7 @@ public final class BitControl {
       handle_ = org.apache.drill.exec.proto.ExecProtos.FragmentHandle.getDefaultInstance();
       error_ = org.apache.drill.exec.proto.UserBitShared.DrillPBError.getDefaultInstance();
       runningTime_ = 0L;
+      profile_ = org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile.getDefaultInstance();
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -2158,6 +2208,9 @@ public final class BitControl {
       if (((bitField0_ & 0x00000100) == 0x00000100)) {
         output.writeInt64(9, runningTime_);
       }
+      if (((bitField0_ & 0x00000200) == 0x00000200)) {
+        output.writeMessage(10, profile_);
+      }
       getUnknownFields().writeTo(output);
     }
 
@@ -2203,6 +2256,10 @@ public final class BitControl {
         size += com.google.protobuf.CodedOutputStream
           .computeInt64Size(9, runningTime_);
       }
+      if (((bitField0_ & 0x00000200) == 0x00000200)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(10, profile_);
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -2313,6 +2370,7 @@ public final class BitControl {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
           getHandleFieldBuilder();
           getErrorFieldBuilder();
+          getProfileFieldBuilder();
         }
       }
       private static Builder create() {
@@ -2347,6 +2405,12 @@ public final class BitControl {
         bitField0_ = (bitField0_ & ~0x00000080);
         runningTime_ = 0L;
         bitField0_ = (bitField0_ & ~0x00000100);
+        if (profileBuilder_ == null) {
+          profile_ = org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile.getDefaultInstance();
+        } else {
+          profileBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000200);
         return this;
       }
 
@@ -2419,6 +2483,14 @@ public final class BitControl {
           to_bitField0_ |= 0x00000100;
         }
         result.runningTime_ = runningTime_;
+        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
+          to_bitField0_ |= 0x00000200;
+        }
+        if (profileBuilder_ == null) {
+          result.profile_ = profile_;
+        } else {
+          result.profile_ = profileBuilder_.build();
+        }
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -2462,6 +2534,9 @@ public final class BitControl {
         if (other.hasRunningTime()) {
           setRunningTime(other.getRunningTime());
         }
+        if (other.hasProfile()) {
+          mergeProfile(other.getProfile());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -2957,6 +3032,123 @@ public final class BitControl {
         return this;
       }
 
+      // optional .exec.shared.MinorFragmentProfile profile = 10;
+      private org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile profile_ = org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile, org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile.Builder, org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfileOrBuilder> profileBuilder_;
+      /**
+       * <code>optional .exec.shared.MinorFragmentProfile profile = 10;</code>
+       */
+      public boolean hasProfile() {
+        return ((bitField0_ & 0x00000200) == 0x00000200);
+      }
+      /**
+       * <code>optional .exec.shared.MinorFragmentProfile profile = 10;</code>
+       */
+      public org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile getProfile() {
+        if (profileBuilder_ == null) {
+          return profile_;
+        } else {
+          return profileBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>optional .exec.shared.MinorFragmentProfile profile = 10;</code>
+       */
+      public Builder setProfile(org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile value) {
+        if (profileBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          profile_ = value;
+          onChanged();
+        } else {
+          profileBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000200;
+        return this;
+      }
+      /**
+       * <code>optional .exec.shared.MinorFragmentProfile profile = 10;</code>
+       */
+      public Builder setProfile(
+          org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile.Builder builderForValue) {
+        if (profileBuilder_ == null) {
+          profile_ = builderForValue.build();
+          onChanged();
+        } else {
+          profileBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000200;
+        return this;
+      }
+      /**
+       * <code>optional .exec.shared.MinorFragmentProfile profile = 10;</code>
+       */
+      public Builder mergeProfile(org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile value) {
+        if (profileBuilder_ == null) {
+          if (((bitField0_ & 0x00000200) == 0x00000200) &&
+              profile_ != org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile.getDefaultInstance()) {
+            profile_ =
+              org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile.newBuilder(profile_).mergeFrom(value).buildPartial();
+          } else {
+            profile_ = value;
+          }
+          onChanged();
+        } else {
+          profileBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000200;
+        return this;
+      }
+      /**
+       * <code>optional .exec.shared.MinorFragmentProfile profile = 10;</code>
+       */
+      public Builder clearProfile() {
+        if (profileBuilder_ == null) {
+          profile_ = org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile.getDefaultInstance();
+          onChanged();
+        } else {
+          profileBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000200);
+        return this;
+      }
+      /**
+       * <code>optional .exec.shared.MinorFragmentProfile profile = 10;</code>
+       */
+      public org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile.Builder getProfileBuilder() {
+        bitField0_ |= 0x00000200;
+        onChanged();
+        return getProfileFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>optional .exec.shared.MinorFragmentProfile profile = 10;</code>
+       */
+      public org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfileOrBuilder getProfileOrBuilder() {
+        if (profileBuilder_ != null) {
+          return profileBuilder_.getMessageOrBuilder();
+        } else {
+          return profile_;
+        }
+      }
+      /**
+       * <code>optional .exec.shared.MinorFragmentProfile profile = 10;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilder<
+          org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile, org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile.Builder, org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfileOrBuilder> 
+          getProfileFieldBuilder() {
+        if (profileBuilder_ == null) {
+          profileBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile, org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfile.Builder, org.apache.drill.exec.proto.UserBitShared.MinorFragmentProfileOrBuilder>(
+                  profile_,
+                  getParentForChildren(),
+                  isClean());
+          profile_ = null;
+        }
+        return profileBuilder_;
+      }
+
       // @@protoc_insertion_point(builder_scope:exec.bit.control.FragmentStatus)
     }
 
@@ -5898,7 +6090,7 @@ public final class BitControl {
       "(\0162\027.exec.shared.RpcChannel:\013BIT_CONTROL" +
       "\022(\n\010endpoint\030\003 \001(\0132\026.exec.DrillbitEndpoi" +
       "nt\"F\n\tBitStatus\0229\n\017fragment_status\030\001 \003(\013" +
-      "2 .exec.bit.control.FragmentStatus\"\261\003\n\016F" +
+      "2 .exec.bit.control.FragmentStatus\"\345\003\n\016F" +
       "ragmentStatus\022\022\n\nmemory_use\030\001 \001(\003\022\031\n\021bat" +
       "ches_completed\030\002 \001(\003\022\031\n\021records_complete",
       "d\030\003 \001(\003\022\'\n\037estimated_completion_percenta" +
@@ -5907,30 +6099,31 @@ public final class BitControl {
       "processed\030\006 \001(\003\022(\n\006handle\030\007 \001(\0132\030.exec.b" +
       "it.FragmentHandle\022(\n\005error\030\010 \001(\0132\031.exec." +
       "shared.DrillPBError\022\024\n\014running_time\030\t \001(" +
-      "\003\"k\n\rFragmentState\022\013\n\007SENDING\020\000\022\027\n\023AWAIT" +
-      "ING_ALLOCATION\020\001\022\013\n\007RUNNING\020\002\022\014\n\010FINISHE" +
-      "D\020\003\022\r\n\tCANCELLED\020\004\022\n\n\006FAILED\020\005\"\276\003\n\014PlanF" +
-      "ragment\022(\n\006handle\030\001 \001(\0132\030.exec.bit.Fragm",
-      "entHandle\022\024\n\014network_cost\030\004 \001(\002\022\020\n\010cpu_c" +
-      "ost\030\005 \001(\002\022\021\n\tdisk_cost\030\006 \001(\002\022\023\n\013memory_c" +
-      "ost\030\007 \001(\002\022\025\n\rfragment_json\030\010 \001(\t\022*\n\nassi" +
-      "gnment\030\n \001(\0132\026.exec.DrillbitEndpoint\022\025\n\r" +
-      "leaf_fragment\030\t \001(\010\022\'\n\007foreman\030\013 \001(\0132\026.e" +
-      "xec.DrillbitEndpoint\022\035\n\013mem_initial\030\014 \001(" +
-      "\003:\01020000000\022\034\n\007mem_max\030\r \001(\003:\0132000000000" +
-      "0\022\030\n\020query_start_time\030\016 \001(\003\0221\n\013credentia" +
-      "ls\030\017 \001(\0132\034.exec.shared.UserCredentials\022\021" +
-      "\n\ttime_zone\030\020 \001(\005\022\024\n\014options_json\030\021 \001(\t\"",
-      "f\n\017WorkQueueStatus\022(\n\010endpoint\030\001 \001(\0132\026.e" +
-      "xec.DrillbitEndpoint\022\024\n\014queue_length\030\002 \001" +
-      "(\005\022\023\n\013report_time\030\003 \001(\003*\332\001\n\007RpcType\022\r\n\tH" +
-      "ANDSHAKE\020\000\022\007\n\003ACK\020\001\022\013\n\007GOODBYE\020\002\022\033\n\027REQ_" +
-      "INIATILIZE_FRAGMENT\020\003\022\027\n\023REQ_CANCEL_FRAG" +
-      "MENT\020\006\022\027\n\023REQ_FRAGMENT_STATUS\020\007\022\022\n\016REQ_B" +
-      "IT_STATUS\020\010\022\030\n\024RESP_FRAGMENT_HANDLE\020\t\022\030\n" +
-      "\024RESP_FRAGMENT_STATUS\020\n\022\023\n\017RESP_BIT_STAT" +
-      "US\020\013B+\n\033org.apache.drill.exec.protoB\nBit" +
-      "ControlH\001"
+      "\003\0222\n\007profile\030\n \001(\0132!.exec.shared.MinorFr" +
+      "agmentProfile\"k\n\rFragmentState\022\013\n\007SENDIN" +
+      "G\020\000\022\027\n\023AWAITING_ALLOCATION\020\001\022\013\n\007RUNNING\020" +
+      "\002\022\014\n\010FINISHED\020\003\022\r\n\tCANCELLED\020\004\022\n\n\006FAILED",
+      "\020\005\"\276\003\n\014PlanFragment\022(\n\006handle\030\001 \001(\0132\030.ex" +
+      "ec.bit.FragmentHandle\022\024\n\014network_cost\030\004 " +
+      "\001(\002\022\020\n\010cpu_cost\030\005 \001(\002\022\021\n\tdisk_cost\030\006 \001(\002" +
+      "\022\023\n\013memory_cost\030\007 \001(\002\022\025\n\rfragment_json\030\010" +
+      " \001(\t\022*\n\nassignment\030\n \001(\0132\026.exec.Drillbit" +
+      "Endpoint\022\025\n\rleaf_fragment\030\t \001(\010\022\'\n\007forem" +
+      "an\030\013 \001(\0132\026.exec.DrillbitEndpoint\022\035\n\013mem_" +
+      "initial\030\014 \001(\003:\01020000000\022\034\n\007mem_max\030\r \001(\003" +
+      ":\01320000000000\022\030\n\020query_start_time\030\016 \001(\003\022" +
+      "1\n\013credentials\030\017 \001(\0132\034.exec.shared.UserC",
+      "redentials\022\021\n\ttime_zone\030\020 \001(\005\022\024\n\014options" +
+      "_json\030\021 \001(\t\"f\n\017WorkQueueStatus\022(\n\010endpoi" +
+      "nt\030\001 \001(\0132\026.exec.DrillbitEndpoint\022\024\n\014queu" +
+      "e_length\030\002 \001(\005\022\023\n\013report_time\030\003 \001(\003*\332\001\n\007" +
+      "RpcType\022\r\n\tHANDSHAKE\020\000\022\007\n\003ACK\020\001\022\013\n\007GOODB" +
+      "YE\020\002\022\033\n\027REQ_INIATILIZE_FRAGMENT\020\003\022\027\n\023REQ" +
+      "_CANCEL_FRAGMENT\020\006\022\027\n\023REQ_FRAGMENT_STATU" +
+      "S\020\007\022\022\n\016REQ_BIT_STATUS\020\010\022\030\n\024RESP_FRAGMENT" +
+      "_HANDLE\020\t\022\030\n\024RESP_FRAGMENT_STATUS\020\n\022\023\n\017R" +
+      "ESP_BIT_STATUS\020\013B+\n\033org.apache.drill.exe",
+      "c.protoB\nBitControlH\001"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
       new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -5954,7 +6147,7 @@ public final class BitControl {
           internal_static_exec_bit_control_FragmentStatus_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_exec_bit_control_FragmentStatus_descriptor,
-              new java.lang.String[] { "MemoryUse", "BatchesCompleted", "RecordsCompleted", "EstimatedCompletionPercentage", "State", "DataProcessed", "Handle", "Error", "RunningTime", });
+              new java.lang.String[] { "MemoryUse", "BatchesCompleted", "RecordsCompleted", "EstimatedCompletionPercentage", "State", "DataProcessed", "Handle", "Error", "RunningTime", "Profile", });
           internal_static_exec_bit_control_PlanFragment_descriptor =
             getDescriptor().getMessageTypes().get(3);
           internal_static_exec_bit_control_PlanFragment_fieldAccessorTable = new