Skip to content

Commit

Permalink
fix snitch/ilp setting
Browse files Browse the repository at this point in the history
  • Loading branch information
krummas authored and beobal committed Dec 18, 2024
1 parent cda502c commit 0e91982
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 12 deletions.
7 changes: 3 additions & 4 deletions ccmlib/cluster.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,11 +275,10 @@ def populate(self, nodes, debug=False, tokens=None, use_vnodes=None, ipprefix='1
self.use_vnodes = use_vnodes

if isinstance(nodes, list):
# We set both the legacy and modern config options here, although they are mutually exclusive. When we
# actually finalise the config for nodes in the cluster we select which one to keep based on the supplied
# yaml file. One of the two keys must be present in the yaml, so we retain whichever that is.
# We set PFS here as a "marker" that we need to read cassandra-topology.properties for this cluster
# This is then checked in node.py::_update_yaml where we check if initial_location_provider is set in
# the yaml (indicating that modern config is supported) and we set TopologyFileLocationProvider if so
self.set_configuration_options(values={'endpoint_snitch': 'org.apache.cassandra.locator.PropertyFileSnitch'})
self.set_configuration_options(values={'initial_location_provider': 'org.apache.cassandra.locator.TopologyFileLocationProvider'})

node_count = 0
i = 0
Expand Down
21 changes: 13 additions & 8 deletions ccmlib/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -1760,20 +1760,25 @@ def _update_yaml(self):
if self.cluster.partitioner:
data['partitioner'] = self.cluster.partitioner


# Get a map of combined cluster and node configuration with the node
# configuration taking precedence.
full_options = common.merge_configuration(
self.cluster._config_options,
self.__config_options, delete_empty=False)

if 'initial_location_provider' in data:
common.debug("yaml contained initial_location_provider, removing endpoint_snitch from merged config")
full_options.pop('endpoint_snitch', None)
elif 'endpoint_snitch' in data:
common.debug("yaml contained endpoint_snitch, removing initial_location_provider from merged config")
full_options.pop('initial_location_provider', None)
full_options.pop('node_proximity', None)
if 'endpoint_snitch' in full_options and full_options['endpoint_snitch'] == 'org.apache.cassandra.locator.PropertyFileSnitch':
# multi dc cluster, needs to read cassandra-topology.properties - if cassandra.yaml is modern, we use TFLP and unset the endpoint_snitch
if 'initial_location_provider' in data:
data['initial_location_provider'] = 'org.apache.cassandra.locator.TopologyFileLocationProvider'
full_options.pop('endpoint_snitch', None)
else:
# test might set endpoint_snitch: GPFS for example, in this case we need to keep that and unset ILP (or other way round)
if 'initial_location_provider' in full_options:
data.pop('endpoint_snitch', None)
elif 'endpoint_snitch' in full_options:
data.pop('initial_location_provider', None)
data.pop('node_proximity', None)


# Merge options with original yaml data.
data = common.merge_configuration(data, full_options)
Expand Down

0 comments on commit 0e91982

Please sign in to comment.