You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by ja...@apache.org on 2014/06/11 05:52:43 UTC

[58/61] [abbrv] git commit: DRILL-943 - Enable/disable Storage Plugin Instance

DRILL-943 - Enable/disable Storage Plugin Instance


Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/20cb63c4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/20cb63c4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/20cb63c4

Branch: refs/heads/master
Commit: 20cb63c4ed3089fef4ff6806ca18b42c19145b8c
Parents: 8b4a210
Author: Aditya Kishore <ad...@maprtech.com>
Authored: Mon Jun 9 18:37:07 2014 -0700
Committer: Jacques Nadeau <ja...@apache.org>
Committed: Tue Jun 10 18:59:41 2014 -0700

----------------------------------------------------------------------
 .../common/logical/StoragePluginConfig.java     |  15 ++-
 .../common/logical/StoragePluginConfigBase.java |   9 +-
 .../store/hbase/HBaseStoragePluginConfig.java   |   2 +-
 .../exec/store/NamedStoragePluginConfig.java    |   8 +-
 .../drill/exec/store/StoragePluginRegistry.java | 109 ++++++++++---------
 .../drill/exec/store/dfs/FileSystemConfig.java  |   3 +-
 .../exec/store/dfs/FileSystemFormatConfig.java  |  10 +-
 .../exec/store/ischema/InfoSchemaConfig.java    |   2 +-
 .../exec/store/sys/SystemTablePluginConfig.java |   8 +-
 .../resources/bootstrap-storage-plugins.json    |  27 +++--
 10 files changed, 110 insertions(+), 83 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/20cb63c4/common/src/main/java/org/apache/drill/common/logical/StoragePluginConfig.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/drill/common/logical/StoragePluginConfig.java b/common/src/main/java/org/apache/drill/common/logical/StoragePluginConfig.java
index 7d7cf38..d9b8123 100644
--- a/common/src/main/java/org/apache/drill/common/logical/StoragePluginConfig.java
+++ b/common/src/main/java/org/apache/drill/common/logical/StoragePluginConfig.java
@@ -22,7 +22,18 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
 
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property="type")
-public interface StoragePluginConfig{
+public abstract class StoragePluginConfig{
+
+  private boolean enabled = true;
+
+  public boolean isEnabled() {
+    return enabled;
+  }
+
+  public void setEnabled(boolean enabled) {
+    this.enabled = enabled;
+  }
+
+  public abstract boolean equals(Object o);
 
-  public boolean equals(Object o);
 }

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/20cb63c4/common/src/main/java/org/apache/drill/common/logical/StoragePluginConfigBase.java
----------------------------------------------------------------------
diff --git a/common/src/main/java/org/apache/drill/common/logical/StoragePluginConfigBase.java b/common/src/main/java/org/apache/drill/common/logical/StoragePluginConfigBase.java
index 8e01493..278bb08 100644
--- a/common/src/main/java/org/apache/drill/common/logical/StoragePluginConfigBase.java
+++ b/common/src/main/java/org/apache/drill/common/logical/StoragePluginConfigBase.java
@@ -23,12 +23,9 @@ import org.apache.drill.common.config.CommonConstants;
 import org.apache.drill.common.config.DrillConfig;
 import org.apache.drill.common.util.PathScanner;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public abstract class StoragePluginConfigBase implements StoragePluginConfig{
+public abstract class StoragePluginConfigBase extends StoragePluginConfig {
   static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(StoragePluginConfigBase.class);
-  
-  
+
   public synchronized static Class<?>[] getSubTypes(DrillConfig config){
     List<String> packages = config.getStringList(CommonConstants.STORAGE_PLUGIN_CONFIG_SCAN_PACKAGES);
     Class<?>[] sec = PathScanner.scanForImplementationsArr(StoragePluginConfig.class, packages);
@@ -37,5 +34,5 @@ public abstract class StoragePluginConfigBase implements StoragePluginConfig{
   }
 
   public abstract boolean equals(Object o);
-  
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/20cb63c4/contrib/storage-hbase/src/main/java/org/apache/drill/exec/store/hbase/HBaseStoragePluginConfig.java
----------------------------------------------------------------------
diff --git a/contrib/storage-hbase/src/main/java/org/apache/drill/exec/store/hbase/HBaseStoragePluginConfig.java b/contrib/storage-hbase/src/main/java/org/apache/drill/exec/store/hbase/HBaseStoragePluginConfig.java
index 2a0f837..d7d20a5 100644
--- a/contrib/storage-hbase/src/main/java/org/apache/drill/exec/store/hbase/HBaseStoragePluginConfig.java
+++ b/contrib/storage-hbase/src/main/java/org/apache/drill/exec/store/hbase/HBaseStoragePluginConfig.java
@@ -49,7 +49,7 @@ public class HBaseStoragePluginConfig extends StoragePluginConfigBase implements
     if (config == null) {
       config = Maps.newHashMap();
     }
-    logger.debug("Configuring HBase StoragePlugin with zookeeper quorum '{}', port '{}'.",
+    logger.debug("Initializing HBase StoragePlugin configuration with zookeeper quorum '{}', port '{}'.",
         config.get(HConstants.ZOOKEEPER_QUORUM), config.get(HBASE_ZOOKEEPER_PORT));
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/20cb63c4/exec/java-exec/src/main/java/org/apache/drill/exec/store/NamedStoragePluginConfig.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/NamedStoragePluginConfig.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/NamedStoragePluginConfig.java
index b67c019..23c907d 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/NamedStoragePluginConfig.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/NamedStoragePluginConfig.java
@@ -22,6 +22,12 @@ import org.apache.drill.common.logical.StoragePluginConfig;
 import com.fasterxml.jackson.annotation.JsonTypeName;
 
 @JsonTypeName("named")
-public class NamedStoragePluginConfig implements StoragePluginConfig{
+public class NamedStoragePluginConfig extends StoragePluginConfig {
   public String name;
+
+  @Override
+  public boolean equals(Object o) {
+    return this == o;
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/20cb63c4/exec/java-exec/src/main/java/org/apache/drill/exec/store/StoragePluginRegistry.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/StoragePluginRegistry.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/StoragePluginRegistry.java
index a4f94e3..4e49a1c 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/StoragePluginRegistry.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/StoragePluginRegistry.java
@@ -59,11 +59,10 @@ import com.google.common.base.Charsets;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSet.Builder;
 import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import com.google.common.io.Resources;
-import com.google.hive12.common.collect.Maps;
 
-
-public class StoragePluginRegistry implements Iterable<Map.Entry<String, StoragePlugin>>{
+public class StoragePluginRegistry implements Iterable<Map.Entry<String, StoragePlugin>> {
   static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(StoragePluginRegistry.class);
 
   private Map<Object, Constructor<? extends StoragePlugin>> availablePlugins = new HashMap<Object, Constructor<? extends StoragePlugin>>();
@@ -78,7 +77,7 @@ public class StoragePluginRegistry implements Iterable<Map.Entry<String, Storage
   private static final long UPDATE_FREQUENCY = 2 * 60 * 1000;
 
   public StoragePluginRegistry(DrillbitContext context) {
-    try{
+    try {
       this.context = context;
       this.pluginSystemTable = context //
           .getPersistentStoreProvider() //
@@ -86,13 +85,13 @@ public class StoragePluginRegistry implements Iterable<Map.Entry<String, Storage
               .newJacksonBuilder(context.getConfig().getMapper(), StoragePluginConfig.class) //
               .name("sys.storage_plugins") //
               .build());
-    }catch(IOException | RuntimeException e){
+    } catch (IOException | RuntimeException e) {
       logger.error("Failure while loading storage plugin registry.", e);
       throw new RuntimeException("Faiure while reading and loading storage plugin configuration.", e);
     }
   }
 
-  public PStore<StoragePluginConfig> getStore(){
+  public PStore<StoragePluginConfig> getStore() {
     return pluginSystemTable;
   }
 
@@ -101,21 +100,21 @@ public class StoragePluginRegistry implements Iterable<Map.Entry<String, Storage
     DrillConfig config = context.getConfig();
     Collection<Class<? extends StoragePlugin>> plugins = PathScanner.scanForImplementations(StoragePlugin.class, config.getStringList(ExecConstants.STORAGE_ENGINE_SCAN_PACKAGES));
     logger.debug("Loading storage plugins {}", plugins);
-    for(Class<? extends StoragePlugin> plugin: plugins){
-      int i =0;
-      for(Constructor<?> c : plugin.getConstructors()){
+    for (Class<? extends StoragePlugin> plugin : plugins) {
+      int i = 0;
+      for (Constructor<?> c : plugin.getConstructors()) {
         Class<?>[] params = c.getParameterTypes();
         if(params.length != 3
             || params[1] != DrillbitContext.class
             || !StoragePluginConfig.class.isAssignableFrom(params[0])
-            || params[2] != String.class){
+            || params[2] != String.class) {
           logger.info("Skipping StoragePlugin constructor {} for plugin class {} since it doesn't implement a [constructor(StoragePluginConfig, DrillbitContext, String)]", c, plugin);
           continue;
         }
         availablePlugins.put(params[0], (Constructor<? extends StoragePlugin>) c);
         i++;
       }
-      if(i == 0){
+      if (i == 0) {
         logger.debug("Skipping registration of StoragePlugin {} as it doesn't have a constructor with the parameters of (StorangePluginConfig, Config)", plugin.getCanonicalName());
       }
     }
@@ -141,35 +140,37 @@ public class StoragePluginRegistry implements Iterable<Map.Entry<String, Storage
      */
     Map<String, StoragePlugin> activePlugins = new HashMap<String, StoragePlugin>();
 
-    try{
+    try {
 
-      if(!pluginSystemTable.iterator().hasNext()){
+      if (!pluginSystemTable.iterator().hasNext()) {
         // bootstrap load the config since no plugins are stored.
-        logger.info("Bootstrap loading the storage plugin configs.");
         URL url = Resources.class.getClassLoader().getResource("bootstrap-storage-plugins.json");
+        logger.info("Bootstrap loading the storage plugin configs from URL {}.", url);
         if (url != null) {
           String pluginsData = Resources.toString(url, Charsets.UTF_8);
           StoragePlugins plugins = context.getConfig().getMapper().readValue(pluginsData, StoragePlugins.class);
 
-          for(Map.Entry<String, StoragePluginConfig> config : plugins){
+          for (Map.Entry<String, StoragePluginConfig> config : plugins) {
             pluginSystemTable.put(config.getKey(), config.getValue());
           }
 
-        }else{
+        } else {
           throw new IOException("Failure finding bootstrap-storage-plugins.json");
         }
       }
 
-      for(Map.Entry<String, StoragePluginConfig> config : pluginSystemTable){
-        try{
-          StoragePlugin plugin = create(config.getKey(), config.getValue());
-          activePlugins.put(config.getKey(), plugin);
-        }catch(ExecutionSetupException e){
+      for (Map.Entry<String, StoragePluginConfig> config : pluginSystemTable) {
+        try {
+          if (config.getValue().isEnabled()) {
+            StoragePlugin plugin = create(config.getKey(), config.getValue());
+            activePlugins.put(config.getKey(), plugin);
+          }
+        } catch (ExecutionSetupException e) {
           logger.error("Failure while setting up StoragePlugin with name: '{}'.", config.getKey(), e);
         }
       }
 
-    }catch(IOException e){
+    } catch (IOException e) {
       logger.error("Failure setting up storage plugins.  Drillbit exiting.", e);
       throw new IllegalStateException(e);
     }
@@ -180,30 +181,35 @@ public class StoragePluginRegistry implements Iterable<Map.Entry<String, Storage
     return activePlugins;
   }
 
-  public void deletePlugin(String name){
+  public void deletePlugin(String name) {
     plugins.remove(name);
     pluginSystemTable.delete(name);
   }
 
-  public StoragePlugin createOrUpdate(String name, StoragePluginConfig config, boolean persist) throws ExecutionSetupException{
+  public StoragePlugin createOrUpdate(String name, StoragePluginConfig config, boolean persist) throws ExecutionSetupException {
     StoragePlugin oldPlugin = plugins.get(name);
 
     StoragePlugin newPlugin = create(name, config);
-    boolean ok;
-    if(oldPlugin != null){
-      ok = plugins.replace(name, oldPlugin, newPlugin);
-    }else{
+    boolean ok = true;
+    if (oldPlugin != null) {
+      if (config.isEnabled()) {
+        ok = plugins.replace(name, oldPlugin, newPlugin);
+      } else {
+        ok = plugins.remove(name, oldPlugin);
+      }
+    } else if (config.isEnabled()) {
       ok = (null == plugins.putIfAbsent(name, newPlugin));
     }
 
-    if(!ok) throw new ExecutionSetupException("Two processes tried to change a plugin at the same time.");
+    if(!ok) {
+      throw new ExecutionSetupException("Two processes tried to change a plugin at the same time.");
+    }
 
     if(persist) pluginSystemTable.put(name, config);
 
     return newPlugin;
   }
 
-
   public StoragePlugin getPlugin(String name) throws ExecutionSetupException {
     StoragePlugin plugin = plugins.get(name);
     if(name.equals("sys") || name.equals("INFORMATION_SCHEMA")) return plugin;
@@ -212,11 +218,11 @@ public class StoragePluginRegistry implements Iterable<Map.Entry<String, Storage
 
     // since we lazily manage the list of plugins per server, we need to update this once we know that it is time.
 
-    if(config == null){
+    if (config == null) {
       if(plugin != null) plugins.remove(name);
       return null;
-    }else{
-      if(plugin == null || !plugin.getConfig().equals(config)){
+    } else {
+      if (plugin == null || !plugin.getConfig().equals(config)) {
         plugin = createOrUpdate(name, config, false);
       }
       return plugin;
@@ -225,15 +231,15 @@ public class StoragePluginRegistry implements Iterable<Map.Entry<String, Storage
   }
 
   public StoragePlugin getPlugin(StoragePluginConfig config) throws ExecutionSetupException {
-    if(config instanceof NamedStoragePluginConfig){
+    if (config instanceof NamedStoragePluginConfig) {
       return getPlugin(((NamedStoragePluginConfig) config).name);
-    }else{
-      // TODO: for now, we'll throw away transient configs.  we really ought to clean these up.
+    } else {
+      // TODO: for now, we'll throw away transient configs. we really ought to clean these up.
       return create(null, config);
     }
   }
 
-  public FormatPlugin getFormatPlugin(StoragePluginConfig storageConfig, FormatPluginConfig formatConfig) throws ExecutionSetupException{
+  public FormatPlugin getFormatPlugin(StoragePluginConfig storageConfig, FormatPluginConfig formatConfig) throws ExecutionSetupException {
     StoragePlugin p = getPlugin(storageConfig);
     if(!(p instanceof FileSystemPlugin)) throw new ExecutionSetupException(String.format("You tried to request a format plugin for a storage plugin that wasn't of type FileSystemPlugin.  The actual type of plugin was %s.", p.getClass().getName()));
     FileSystemPlugin storage = (FileSystemPlugin) p;
@@ -258,7 +264,6 @@ public class StoragePluginRegistry implements Iterable<Map.Entry<String, Storage
     }
   }
 
-
   @Override
   public Iterator<Entry<String, StoragePlugin>> iterator() {
     return plugins.entrySet().iterator();
@@ -268,30 +273,26 @@ public class StoragePluginRegistry implements Iterable<Map.Entry<String, Storage
     return storagePluginsRuleSet;
   }
 
-  public DrillSchemaFactory getSchemaFactory(){
+  public DrillSchemaFactory getSchemaFactory() {
     return schemaFactory;
   }
 
-  public class DrillSchemaFactory implements SchemaFactory{
+  public class DrillSchemaFactory implements SchemaFactory {
 
     @Override
     public void registerSchemas(UserSession session, SchemaPlus parent) {
-      try{
-      for(Map.Entry<String, StoragePluginConfig> e : pluginSystemTable){
-        StoragePlugin p = getPlugin(e.getKey());
-        if(p != null){
-          p.registerSchemas(session, parent);
+      try {
+        for (StoragePlugin plugin : plugins.values()) {
+          plugin.registerSchemas(session, parent);
         }
-      }
 
-      getPlugin("sys").registerSchemas(session, parent);
-      getPlugin("INFORMATION_SCHEMA").registerSchemas(session, parent);
+        getPlugin("sys").registerSchemas(session, parent);
+        getPlugin("INFORMATION_SCHEMA").registerSchemas(session, parent);
 
-      }catch(ExecutionSetupException e){
+      } catch (ExecutionSetupException e) {
         throw new DrillRuntimeException("Failure while updating storage plugins", e);
       }
 
-
       // Add second level schema as top level schema with name qualified with parent schema name
       // Ex: "dfs" schema has "default" and "tmp" as sub schemas. Add following extra schemas "dfs.default" and
       // "dfs.tmp" under root schema.
@@ -318,18 +319,18 @@ public class StoragePluginRegistry implements Iterable<Map.Entry<String, Storage
       //    -- "hive.default"
       //    -- "hive.hivedb1"
       List<SchemaPlus> secondLevelSchemas = Lists.newArrayList();
-      for(String firstLevelSchemaName : parent.getSubSchemaNames()) {
+      for (String firstLevelSchemaName : parent.getSubSchemaNames()) {
         SchemaPlus firstLevelSchema = parent.getSubSchema(firstLevelSchemaName);
-        for(String secondLevelSchemaName : firstLevelSchema.getSubSchemaNames()) {
+        for (String secondLevelSchemaName : firstLevelSchema.getSubSchemaNames()) {
           secondLevelSchemas.add(firstLevelSchema.getSubSchema(secondLevelSchemaName));
         }
       }
 
-      for(SchemaPlus schema : secondLevelSchemas) {
+      for (SchemaPlus schema : secondLevelSchemas) {
         AbstractSchema drillSchema;
         try {
           drillSchema = schema.unwrap(AbstractSchema.class);
-        } catch(ClassCastException e) {
+        } catch (ClassCastException e) {
           throw new RuntimeException(String.format("Schema '%s' is not expected under root schema", schema.getName()));
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/20cb63c4/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/FileSystemConfig.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/FileSystemConfig.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/FileSystemConfig.java
index 48a8943..a64ad52 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/FileSystemConfig.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/FileSystemConfig.java
@@ -25,7 +25,7 @@ import org.apache.drill.common.logical.StoragePluginConfig;
 import com.fasterxml.jackson.annotation.JsonTypeName;
 
 @JsonTypeName(FileSystemConfig.NAME)
-public class FileSystemConfig implements StoragePluginConfig{
+public class FileSystemConfig extends StoragePluginConfig {
   static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(FileSystemConfig.class);
   public static final String NAME = "file";
   public String connection;
@@ -43,4 +43,5 @@ public class FileSystemConfig implements StoragePluginConfig{
             ((this.formats== null && that.formats == null) || this.formats.equals(that.formats));
     return same;
   }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/20cb63c4/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/FileSystemFormatConfig.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/FileSystemFormatConfig.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/FileSystemFormatConfig.java
index be396a8..bb363cf 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/FileSystemFormatConfig.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/FileSystemFormatConfig.java
@@ -20,10 +20,16 @@ package org.apache.drill.exec.store.dfs;
 import org.apache.drill.common.logical.FormatPluginConfig;
 import org.apache.drill.common.logical.StoragePluginConfig;
 
-public class FileSystemFormatConfig<T extends FormatPluginConfig> implements StoragePluginConfig{
+public class FileSystemFormatConfig<T extends FormatPluginConfig> extends StoragePluginConfig {
   static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(FileSystemFormatConfig.class);
-  
+
   public T getFormatConfig(){
     return null;
   }
+
+  @Override
+  public boolean equals(Object o) {
+    return this == o;
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/20cb63c4/exec/java-exec/src/main/java/org/apache/drill/exec/store/ischema/InfoSchemaConfig.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/ischema/InfoSchemaConfig.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/ischema/InfoSchemaConfig.java
index 77bd254..2adce9f 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/ischema/InfoSchemaConfig.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/ischema/InfoSchemaConfig.java
@@ -19,7 +19,7 @@ package org.apache.drill.exec.store.ischema;
 
 import org.apache.drill.common.logical.StoragePluginConfig;
 
-public class InfoSchemaConfig implements StoragePluginConfig{
+public class InfoSchemaConfig extends StoragePluginConfig {
   static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(InfoSchemaConfig.class);
 
   public static final String NAME = "ischema";

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/20cb63c4/exec/java-exec/src/main/java/org/apache/drill/exec/store/sys/SystemTablePluginConfig.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/sys/SystemTablePluginConfig.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/sys/SystemTablePluginConfig.java
index 758368f..93fe68e 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/sys/SystemTablePluginConfig.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/sys/SystemTablePluginConfig.java
@@ -19,7 +19,7 @@ package org.apache.drill.exec.store.sys;
 
 import org.apache.drill.common.logical.StoragePluginConfig;
 
-public class SystemTablePluginConfig implements StoragePluginConfig{
+public class SystemTablePluginConfig extends StoragePluginConfig {
   static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(SystemTablePluginConfig.class);
 
   public static String NAME = "system-tables";
@@ -29,4 +29,10 @@ public class SystemTablePluginConfig implements StoragePluginConfig{
   private SystemTablePluginConfig(){
 
   }
+
+  @Override
+  public boolean equals(Object o) {
+    return this == o;
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/20cb63c4/exec/java-exec/src/main/resources/bootstrap-storage-plugins.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/resources/bootstrap-storage-plugins.json b/exec/java-exec/src/main/resources/bootstrap-storage-plugins.json
index 3b1cbd0..e6623e9 100644
--- a/exec/java-exec/src/main/resources/bootstrap-storage-plugins.json
+++ b/exec/java-exec/src/main/resources/bootstrap-storage-plugins.json
@@ -38,33 +38,32 @@
         }
       }
     },
+
     cp: {
       type: "file",
       connection: "classpath:///"
-    } 
+    },
 
-    /*,
     hive : {
-        type:"hive",
-        config :
-          {
-            "hive.metastore.uris" : "",
-            "javax.jdo.option.ConnectionURL" : "jdbc:derby:;databaseName=../../sample-data/drill_hive_db;create=true",
-            "hive.metastore.warehouse.dir" : "/tmp/drill_hive_wh",
-            "fs.default.name" : "file:///",
-            "hive.metastore.sasl.enabled" : "false"
-          }
+      type:"hive",
+      enabled: false,
+      config : {
+        "hive.metastore.uris" : "",
+        "javax.jdo.option.ConnectionURL" : "jdbc:derby:;databaseName=../../sample-data/drill_hive_db;create=true",
+        "hive.metastore.warehouse.dir" : "/tmp/drill_hive_wh",
+        "fs.default.name" : "file:///",
+        "hive.metastore.sasl.enabled" : "false"
       }
-      */
+    },
 
-    /*,
     hbase : {
       type:"hbase",
+      enabled: false,
       config : {
         "hbase.zookeeper.quorum" : "localhost",
         "hbase.zookeeper.property.clientPort" : 2181
       }
     }
-    */
+
   }
 }