I just read the diff and I strongly object to it for the following reasons:
* It's *terribly* overcomplicated / overengineered. You're very close to having reimplemented Spring bean configuration (without strict DI). * There's significant logic in constructors (a code smell). * Configuration is now highly coupled to the storage format (java properties) * FlumeConfiguration has become a God Object. * A bunch of hoops are jumped to remain type safe, and then the rest of the code breaks all type safety by stringifying a ton of stuff. I'm not specifically against dynamic techniques or reflection, but I'd like to see it only when there's a true need and it adds real value. On Thu, Mar 1, 2012 at 1:35 PM, Hari Shreedharan <[email protected]>wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/4115/ > ----------------------------------------------------------- > > (Updated 2012-03-01 21:35:41.679397) > > > Review request for Flume. > > > Changes > ------- > > Note that I do know of a couple of bugs in the existing diff(like that if > the name of a config key starts with an Upper case letter, an exception is > thrown) - I will fix and upload the review here soon. > > > Summary (updated) > ------- > > Currently the configuration of each component sits deep inside the > component themselves. There is no way to verify if a configuration is valid > before run time. In most systems like Flume, it is likely that these confs > will be deployed from one single host, on to the machines where flume > agents are running. Only when each agent starts, invalid confs are > identified because the Agents would terminate by throwing exceptions. This > is a first attempt to make a component-aware configuration system which is > independent of the Flume, and does not require the Flume jar to be > installed. Each component needs a configuration manager, which configures > the components. > > I have not completed the validation part yet, but have completed the > configuration managers for all the components that come in the flume jar. I > will add support for the other components, such as HDFS sink, JDBC channel > etc soon. I will also add the validation support to the classes, but would > like a review of the model being proposed here. > > Note that I do know of a couple of bugs in the existing diff(like that if > the name of a config key starts with an Upper case letter, an exception is > thrown) - I will fix and upload the review here soon. > > > This addresses bug FLUME-992. > https://issues.apache.org/jira/browse/FLUME-992 > > > Diffs > ----- > > > flume-ng-channels/flume-jdbc-channel/src/main/java/org/apache/flume/channel/jdbc/JdbcChannel.java > bca0c50 > > flume-ng-channels/flume-jdbc-channel/src/main/java/org/apache/flume/channel/jdbc/JdbcChannelProvider.java > e445d61 > > flume-ng-channels/flume-jdbc-channel/src/main/java/org/apache/flume/channel/jdbc/JdbcChannelProviderFactory.java > 6fbd6ef > > flume-ng-channels/flume-jdbc-channel/src/main/java/org/apache/flume/channel/jdbc/impl/JdbcChannelProviderImpl.java > 1cf1c0c > > flume-ng-channels/flume-jdbc-channel/src/test/java/org/apache/flume/channel/jdbc/TestJdbcChannelProvider.java > 7710d46 > > flume-ng-clients/flume-ng-log4jappender/src/test/java/org/apache/flume/clients/log4jappender/TestLog4jAppender.java > 68d95fb > flume-ng-configuration/pom.xml PRE-CREATION > > flume-ng-configuration/src/main/java/org/apache/flume/conf/AbstractComponentConfiguration.java > PRE-CREATION > > flume-ng-configuration/src/main/java/org/apache/flume/conf/ConfigurationException.java > PRE-CREATION > flume-ng-configuration/src/main/java/org/apache/flume/conf/Context.java > PRE-CREATION > > flume-ng-configuration/src/main/java/org/apache/flume/conf/FlumeConfiguration.java > PRE-CREATION > > flume-ng-configuration/src/main/java/org/apache/flume/conf/FlumeConfigurationError.java > PRE-CREATION > > flume-ng-configuration/src/main/java/org/apache/flume/conf/FlumeConfigurationErrorType.java > PRE-CREATION > > flume-ng-configuration/src/main/java/org/apache/flume/conf/channel/MemoryChannelConfiguration.java > PRE-CREATION > > flume-ng-configuration/src/main/java/org/apache/flume/conf/channel/MultiplexingChannelSelectorConfiguration.java > PRE-CREATION > > flume-ng-configuration/src/main/java/org/apache/flume/conf/channel/PseudoTxnMemoryChannelConfiguration.java > PRE-CREATION > > flume-ng-configuration/src/main/java/org/apache/flume/conf/sink/AvroSinkConfiguration.java > PRE-CREATION > > flume-ng-configuration/src/main/java/org/apache/flume/conf/sink/FailoverSinkProcessorConfiguration.java > PRE-CREATION > > flume-ng-configuration/src/main/java/org/apache/flume/conf/sink/RollingFileSinkConfiguration.java > PRE-CREATION > > flume-ng-configuration/src/main/java/org/apache/flume/conf/sink/SinkGroupConfiguration.java > PRE-CREATION > > flume-ng-configuration/src/main/java/org/apache/flume/conf/source/AvroSourceConfiguration.java > PRE-CREATION > > flume-ng-configuration/src/main/java/org/apache/flume/conf/source/ExecSourceConfiguration.java > PRE-CREATION > > flume-ng-configuration/src/main/java/org/apache/flume/conf/source/NetcatSourceConfiguration.java > PRE-CREATION > flume-ng-configuration/src/test/resources/flume-ng-error-test PRE-CREATION > flume-ng-configuration/src/test/resources/flume-ng-test.conf PRE-CREATION > flume-ng-core/pom.xml d753fa1 > flume-ng-core/src/main/java/org/apache/flume/Context.java f1c8f85 > flume-ng-core/src/main/java/org/apache/flume/channel/AbstractChannel.java > 352bf08 > > flume-ng-core/src/main/java/org/apache/flume/channel/ChannelSelectorFactory.java > a7d5f94 > flume-ng-core/src/main/java/org/apache/flume/channel/MemoryChannel.java > e79490e > > flume-ng-core/src/main/java/org/apache/flume/channel/MultiplexingChannelSelector.java > c63d0a1 > > flume-ng-core/src/main/java/org/apache/flume/channel/PseudoTxnMemoryChannel.java > 1df580e > > flume-ng-core/src/main/java/org/apache/flume/channel/ReplicatingChannelSelector.java > 8f22746 > flume-ng-core/src/main/java/org/apache/flume/conf/Configurable.java > 0fa4839 > flume-ng-core/src/main/java/org/apache/flume/conf/Configurables.java > 84492e5 > flume-ng-core/src/main/java/org/apache/flume/sink/AvroSink.java 5440631 > flume-ng-core/src/main/java/org/apache/flume/sink/DefaultSinkProcessor.java > 257bab3 > flume-ng-core/src/main/java/org/apache/flume/sink/FailoverSinkProcessor.java > 9f5b856 > flume-ng-core/src/main/java/org/apache/flume/sink/RollingFileSink.java > 45c031d > flume-ng-core/src/main/java/org/apache/flume/sink/SinkGroup.java 1adc5ff > flume-ng-core/src/main/java/org/apache/flume/sink/SinkProcessorFactory.java > 859f4fd > flume-ng-core/src/main/java/org/apache/flume/source/AvroSource.java > 7b079f9 > flume-ng-core/src/main/java/org/apache/flume/source/ExecSource.java > a96016c > flume-ng-core/src/main/java/org/apache/flume/source/NetcatSource.java > d205bbc > flume-ng-core/src/test/java/org/apache/flume/TestContext.java a5e6aa8 > flume-ng-core/src/test/java/org/apache/flume/channel/TestMemoryChannel.java > 3392dff > > flume-ng-core/src/test/java/org/apache/flume/channel/TestMemoryChannelConcurrency.java > 8dad0b2 > > flume-ng-core/src/test/java/org/apache/flume/channel/TestMemoryChannelTransaction.java > bc81f26 > flume-ng-core/src/test/java/org/apache/flume/sink/TestAvroSink.java > 467785f > > flume-ng-core/src/test/java/org/apache/flume/sink/TestFailoverSinkProcessor.java > 93ad3bf > flume-ng-core/src/test/java/org/apache/flume/sink/TestLoggerSink.java > 92ff6fe > flume-ng-core/src/test/java/org/apache/flume/sink/TestRollingFileSink.java > 7e26e2a > flume-ng-core/src/test/java/org/apache/flume/source/TestAvroSource.java > c5c3f2f > flume-ng-core/src/test/java/org/apache/flume/source/TestExecSource.java > 6035270 > > flume-ng-core/src/test/java/org/apache/flume/source/TestPollableSourceRunner.java > c27f82c > > flume-ng-core/src/test/java/org/apache/flume/source/TestSequenceGeneratorSource.java > 579b257 > > flume-ng-legacy-sources/flume-avro-source/src/main/java/org/apache/flume/source/avroLegacy/AvroLegacySource.java > b1e67f7 > > flume-ng-legacy-sources/flume-avro-source/src/test/java/org/apache/flume/source/avroLegacy/TestLegacyAvroSource.java > 6e3eb53 > > flume-ng-legacy-sources/flume-thrift-source/src/main/java/org/apache/flume/source/thriftLegacy/ThriftLegacySource.java > 5fe270a > > flume-ng-legacy-sources/flume-thrift-source/src/test/java/org/apache/flume/source/thriftLegacy/TestThriftLegacySource.java > ddd9478 > flume-ng-node/pom.xml b9b062e > > flume-ng-node/src/main/java/org/apache/flume/conf/properties/FlumeConfiguration.java > d66f6d1 > > flume-ng-node/src/main/java/org/apache/flume/conf/properties/PropertiesFileConfigurationProvider.java > 97f72e1 > > flume-ng-node/src/test/java/org/apache/flume/node/TestAbstractLogicalNodeManager.java > 521b586 > flume-ng-node/src/test/java/org/apache/flume/source/TestNetcatSource.java > fb2a960 > > flume-ng-sinks/flume-hdfs-sink/src/main/java/org/apache/flume/sink/hdfs/HDFSEventSink.java > 3da90a5 > > flume-ng-sinks/flume-hdfs-sink/src/test/java/org/apache/flume/sink/hdfs/TestHDFSEventSink.java > 7d8ee8a > > flume-ng-sinks/flume-irc-sink/src/main/java/org/apache/flume/sink/irc/IRCSink.java > 0a5498f > pom.xml d785762 > > Diff: https://reviews.apache.org/r/4115/diff > > > Testing > ------- > > All existing unit tests for the components whose configuration has now > been moved to these stubs pass. > > > Thanks, > > Hari > > -- Eric Sammer twitter: esammer data: www.cloudera.com
