drill-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From paul-rogers <...@git.apache.org>
Subject [GitHub] drill pull request #870: DRILL-5664: Enable security for Drill HiveStoragePl...
Date Wed, 12 Jul 2017 01:30:32 GMT
Github user paul-rogers commented on a diff in the pull request:

    --- 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,
                 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);
    -              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
    --- 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 infrastructure@apache.org or file a JIRA ticket
with INFRA.

View raw message