Summary
When running upgradesstables
, an error can occur if an old dse.yaml
is in the path where the tool is run from, or if the old version of the file is used. This note documents the particular error seen when this occurs
Symptoms
This is an example of the error that may be seen when running upgradesstables
$ nodetool upgradesstables
error: Unable to find property 'threshold_ms' on class: com.datastax.bdp.config.CqlSlowLogOptions
-- StackTrace --
org.yaml.snakeyaml.error.YAMLException: Unable to find property 'threshold_ms' on class: com.datastax.bdp.config.CqlSlowLogOptions
at com.datastax.bdp.config.DseYamlPropertyUtils.getProperty(DseYamlPropertyUtils.java:58)
at org.yaml.snakeyaml.introspector.PropertyUtils.getProperty(PropertyUtils.java:121)
at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.getProperty(Constructor.java:308)
at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.constructJavaBean2ndStep(Constructor.java:240)
at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.construct(Constructor.java:189)
at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:182)
at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.constructJavaBean2ndStep(Constructor.java:296)
at org.yaml.snakeyaml.constructor.Constructor$ConstructMapping.construct(Constructor.java:189)
at org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.construct(Constructor.java:331)
at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:182)
at org.yaml.snakeyaml.constructor.BaseConstructor.constructDocument(BaseConstructor.java:141)
at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:127)
at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:481)
at org.yaml.snakeyaml.Yaml.loadAs(Yaml.java:475)
at com.datastax.bdp.config.DseConfigYamlLoader.<clinit>(DseConfigYamlLoader.java:57)
at com.datastax.bdp.cassandra.auth.DseRoleManager.initGroupCache(DseRoleManager.java:327)
at com.datastax.bdp.cassandra.auth.DseRoleManager.<clinit>(DseRoleManager.java:63)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at org.apache.cassandra.utils.FBUtilities.classForName(FBUtilities.java:476)
at org.apache.cassandra.utils.FBUtilities.construct(FBUtilities.java:513)
at org.apache.cassandra.utils.FBUtilities.newRoleManager(FBUtilities.java:463)
at org.apache.cassandra.config.DatabaseDescriptor.applyConfig(DatabaseDescriptor.java:336)
at org.apache.cassandra.config.DatabaseDescriptor.<clinit>(DatabaseDescriptor.java:119)
at org.apache.cassandra.tools.NodeProbe.checkJobs(NodeProbe.java:262)
at org.apache.cassandra.tools.NodeProbe.upgradeSSTables(NodeProbe.java:298)
at org.apache.cassandra.tools.nodetool.UpgradeSSTable.execute(UpgradeSSTable.java:54)
at org.apache.cassandra.tools.NodeTool$NodeToolCmd.run(NodeTool.java:247)
at org.apache.cassandra.tools.NodeTool.main(NodeTool.java:161)
Cause
A previous version’s dse.yaml
was in the path of where the tool was run from. The threshold_ms
property was dropped from the options for the CQL slow log and instead used for the Solr slow logs.
Any missing property (perhaps added as well) will create a similar error.
Solution
As per the documentation:
http://docs.datastax.com/en/latest-upgrade/upgrade/datastax_enterprise/upgdDSE50.html
Back up the configuration files you use to a folder that is not in the directory where you normally run commands.
The configuration files are overwritten with default values during installation of the new version.