[ 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