Github user paul-rogers commented on a diff in the pull request:

    https://github.com/apache/drill/pull/870#discussion_r126840721
  
    --- Diff: 
exec/java-exec/src/main/java/org/apache/drill/exec/store/StoragePluginRegistryImpl.java
 ---
    @@ -146,23 +148,37 @@ public void init() throws DrillbitStartupException {
                 String pluginsData = Resources.toString(url, Charsets.UTF_8);
                 StoragePlugins plugins = 
lpPersistence.getMapper().readValue(pluginsData, StoragePlugins.class);
                 for (Map.Entry<String, StoragePluginConfig> config : plugins) {
    -              if (!definePluginConfig(config.getKey(), config.getValue())) 
{
    +
    +              final String pluginName = config.getKey();
    +              final StoragePluginConfig pluginConfig = config.getValue();
    +
    +              if (!definePluginConfig(pluginName, pluginConfig)) {
                     logger.warn("Duplicate plugin instance '{}' defined in 
[{}, {}], ignoring the later one.",
    -                    config.getKey(), pluginURLMap.get(config.getKey()), 
url);
    +                    config.getKey(), pluginURLMap.get(pluginName), url);
                     continue;
                   }
    -              pluginURLMap.put(config.getKey(), url);
    +              pluginURLMap.put(pluginName, url);
                 }
               }
             } else {
               throw new IOException("Failure finding " + 
ExecConstants.BOOTSTRAP_STORAGE_PLUGINS_FILE);
             }
           }
     
    -      Map<String, StoragePlugin> activePlugins = new HashMap<String, 
StoragePlugin>();
    +      final Map<String, StoragePlugin> activePlugins = new HashMap<String, 
StoragePlugin>();
           for (Map.Entry<String, StoragePluginConfig> entry : 
Lists.newArrayList(pluginSystemTable.getAll())) {
    -        String name = entry.getKey();
    -        StoragePluginConfig config = entry.getValue();
    +        final String name = entry.getKey();
    +        final StoragePluginConfig config = entry.getValue();
    +
    +        // Update the security setting inside StoragePluginConfig based on 
secureStoragePlugin flag
    --- End diff --
    
    This doesn't seem right at all... We are updating in ZK the value of a 
plugin property based on something defined in config. All this can ever be is 
wrong an out-of-date. If the user changes the plugin after start, do we honor 
the boot option or the storage plugin option? Will they understand when we 
change the option back on next restart? A big mess...
    
    Better: add a new `configure(PluginContext context)` method to the base 
plugin class. One hopes that there is an abstract base class that can provide 
the default implementation.
    
    Then, define the `PluginContext` class with information of interest to the 
plugins. This might include the `DrillConfig` and your security setting.
    
    Plugins are then obligated to use the provided value; not one stored in the 
plugin config.
    
    But, this has a separate problem. What if I have two Hive servers: one 
which is secure, and one which is open? The same rule must be applied to both. 
So, this argument says that security of a Hive server is *not* a Drill 
boot-time config setting, it is instead and attribute of the remote system and 
*should* be part of the storage plugin config, and should *not* be altered by 
Drill.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to