[ 
https://issues.apache.org/jira/browse/CASSANDRA-3866?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Chris Lohfink updated CASSANDRA-3866:
-------------------------------------

    Attachment: patch.txt
                DnsSeedProvider.java
    
> Allow default constructor for seed providers
> --------------------------------------------
>
>                 Key: CASSANDRA-3866
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-3866
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Core
>    Affects Versions: 1.0.7
>            Reporter: Chris Lohfink
>            Priority: Trivial
>         Attachments: DnsSeedProvider.java, patch.txt
>
>
> Would be nice for cases where you do not have any parameters.  ie if you have 
> a simple custom seed provider.  In that scenario you will not provide a 
> parameters argument to the seed_provider (since using default constructor):
> {code}
> seed_provider:
>     - class_name: foo.bar.DnsSeedProvider
> {code}
> This causes an exception
> {code:java}ERROR 11:57:06,744 Fatal configuration error error 
> Can't construct a java object for 
> tag:yaml.org,2002:org.apache.cassandra.config.Config; exception=Cannot create 
> property=seed_provider for 
> JavaBean=org.apache.cassandra.config.Config@3c50507; 
> java.lang.reflect.InvocationTargetException 
> in "<reader>", line 10, column 1: 
> cluster_name: 'Test Cluster' 
> ^
> at 
> org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.construct(Constructor.java:372)
>  
> at 
> org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:177)
>  
> at 
> org.yaml.snakeyaml.constructor.BaseConstructor.constructDocument(BaseConstructor.java:136)
>  
> at 
> org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:122)
>  
> at org.yaml.snakeyaml.Loader.load(Loader.java:52) 
> at org.yaml.snakeyaml.Yaml.load(Yaml.java:166) 
> at 
> org.apache.cassandra.config.DatabaseDescriptor.<clinit>(DatabaseDescriptor.java:133)
>  
> at 
> org.apache.cassandra.service.AbstractCassandraDaemon.setup(AbstractCassandraDaemon.java:125)
>  
> at com.datastax.bdp.server.DseDaemon.setup(DseDaemon.java:89) 
> at 
> org.apache.cassandra.service.AbstractCassandraDaemon.init(AbstractCassandraDaemon.java:238)
>  
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
> at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
> at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>  
> at java.lang.reflect.Method.invoke(Method.java:597) 
> at org.apache.commons.daemon.support.DaemonLoader.load(DaemonLoader.java:212) 
> Caused by: org.yaml.snakeyaml.error.YAMLException: Cannot create 
> property=seed_provider for 
> JavaBean=org.apache.cassandra.config.Config@3c50507; 
> java.lang.reflect.InvocationTargetException 
> at 
> org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.constructJavaBean2ndStep(Constructor.java:305)
>  
> at 
> org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.construct(Constructor.java:184)
>  
> at 
> org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.construct(Constructor.java:370)
>  
> ... 14 more 
> Caused by: org.yaml.snakeyaml.error.YAMLException: 
> java.lang.reflect.InvocationTargetException 
> at 
> org.yaml.snakeyaml.constructor.Constructor$ConstructSequence.construct(Constructor.java:589)
>  
> at 
> org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:177)
>  
> at 
> org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.constructJavaBean2ndStep(Constructor.java:298)
>  
> ... 16 more 
> Caused by: java.lang.reflect.InvocationTargetException 
> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
> at 
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
>  
> at 
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
>  
> at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
> at 
> org.yaml.snakeyaml.constructor.Constructor$ConstructSequence.construct(Constructor.java:587)
>  
> ... 18 more 
> Caused by: java.lang.NullPointerException 
> at 
> org.apache.cassandra.config.SeedProviderDef.<init>(SeedProviderDef.java:34) 
> ... 23 more
> {code}
> If you then add parameters you get a java.lang.NoSuchMethodException.  The 
> workaround being you create a constructor that takes a Map argument, set the 
> parameters to anything and ignore them, which is fine but then has to be 
> documented as they are options that do not mean anything.  Would be nice to 
> make the parameters optional.  I attached a very simple example and a patch 
> that I think would work.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to