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

Reply via email to