The patch marks force-gossip-topology-changes as deprecated and removes tests that use it. There is one test (test_different_group0_ids) which is marked as xfail instead since it looks like gossiper mode was used there as a way to easily achieve a certain state, so more investigation is needed if the tests can be fixed to use raft mode instead. Closes scylladb/scylladb#28383
80 lines
3.8 KiB
Python
80 lines
3.8 KiB
Python
#
|
|
# Copyright (C) 2025-present ScyllaDB
|
|
#
|
|
# SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
|
|
#
|
|
import pytest
|
|
import logging
|
|
|
|
from cassandra.policies import WhiteListRoundRobinPolicy
|
|
from cassandra.protocol import ConfigurationException
|
|
|
|
from test.pylib.manager_client import ManagerClient
|
|
from test.cluster.conftest import cluster_con
|
|
from test.cluster.util import create_new_test_keyspace, get_replication, get_replica_count
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.parametrize("tablets_enabled", [True, False])
|
|
@pytest.mark.parametrize("rf_rack_valid_keyspaces", [False, True])
|
|
async def test_create_keyspace_with_default_replication_factor(manager: ManagerClient, tablets_enabled: bool, rf_rack_valid_keyspaces: bool):
|
|
def get_pf(dc: str, rack: str) -> dict:
|
|
return {'dc': dc, 'rack': rack}
|
|
|
|
normal_cfg = {
|
|
'tablets_mode_for_new_keyspaces': 'enabled' if tablets_enabled else 'disabled',
|
|
'rf_rack_valid_keyspaces': rf_rack_valid_keyspaces
|
|
}
|
|
zero_token_cfg = normal_cfg | {'join_ring': False}
|
|
|
|
logging.info("Adding the dc1/r1/s1 server")
|
|
server = await manager.server_add(config=normal_cfg, property_file=get_pf("dc1", "r1"))
|
|
|
|
logging.info("Adding dc1/rz rack server as zero-token")
|
|
await manager.server_add(config=zero_token_cfg, property_file=get_pf("dc1", "rz"))
|
|
|
|
logging.info("Adding dc1/r2 rack server")
|
|
await manager.server_add(config=normal_cfg, property_file=get_pf("dc1", "r2"))
|
|
|
|
logging.info("Adding dc2/r1 rack server")
|
|
await manager.server_add(config=normal_cfg, property_file=get_pf("dc2", "r1"))
|
|
|
|
logging.info("Adding dc2/r2 rack server")
|
|
await manager.server_add(config=normal_cfg, property_file=get_pf("dc2", "r2"))
|
|
|
|
if rf_rack_valid_keyspaces == False:
|
|
logging.info("Adding dc3/rz1 rack server as zero-token")
|
|
await manager.server_add(config=zero_token_cfg, property_file=get_pf("dc3", "rz"))
|
|
|
|
logging.info("Adding dc3/rz2 rack server as zero-token")
|
|
await manager.server_add(config=zero_token_cfg, property_file=get_pf("dc3", "r2"))
|
|
|
|
cql = cluster_con([server.ip_addr], 9042, False,
|
|
load_balancing_policy=WhiteListRoundRobinPolicy([server.ip_addr])).connect()
|
|
|
|
logging.info("Create NetworkTopologyStrategy keyspace with default replication factor")
|
|
ks_name = await create_new_test_keyspace(cql, f"""WITH replication =
|
|
{{'class': 'NetworkTopologyStrategy'}}
|
|
AND tablets = {{ 'enabled': {str(tablets_enabled).lower()} }}""")
|
|
rep = get_replication(cql, ks_name)
|
|
assert len(rep) == 3
|
|
assert rep['class'] == 'org.apache.cassandra.locator.NetworkTopologyStrategy'
|
|
assert get_replica_count(rep['dc1']) == 2
|
|
assert get_replica_count(rep['dc2']) == 2
|
|
|
|
logging.info("Try to create SimpleStrategy keyspace with default replication factor")
|
|
with pytest.raises(ConfigurationException, match="SimpleStrategy requires a replication_factor strategy option."):
|
|
await create_new_test_keyspace(cql, f"""WITH replication =
|
|
{{'class': 'SimpleStrategy'}}
|
|
AND tablets = {{ 'enabled': {str(tablets_enabled).lower()} }}""")
|
|
|
|
logging.info("Create keyspace with default replication options")
|
|
ks_name = await create_new_test_keyspace(cql, f"""WITH replication =
|
|
{{}}
|
|
AND tablets = {{ 'enabled': {str(tablets_enabled).lower()} }}""")
|
|
rep = get_replication(cql, ks_name)
|
|
assert len(rep) == 3
|
|
assert rep['class'] == 'org.apache.cassandra.locator.NetworkTopologyStrategy'
|
|
assert get_replica_count(rep['dc1']) == 2
|
|
assert get_replica_count(rep['dc2']) == 2
|