You've already forked mariadb-columnstore-engine
							
							
				mirror of
				https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
				synced 2025-10-31 18:30:33 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from integration_tests.ssh import ClusterConfig
 | |
| from integration_tests.utils import assert_dict_includes, drop_timestamp
 | |
| 
 | |
| ALL_MCS_SERVICES = {"StorageManager", "workernode", "controllernode", "PrimProc", "WriteEngineServer", "DDLProc", "DMLProc"}
 | |
| 
 | |
| 
 | |
| class TestAddNode:
 | |
|     def test_add_nodes(self, cluster_config: ClusterConfig, disconnected_cluster):
 | |
|         """Test adding hosts to the cluster"""
 | |
|         # Add primary host
 | |
|         print(f"Adding self ({cluster_config.primary}) to the cluster")
 | |
|         primary_private_ip = cluster_config.primary.private_ip
 | |
|         add_out = cluster_config.primary.exec_mcs(f"cluster node add --node {primary_private_ip}")
 | |
|         assert add_out[0]["node_id"] == str(primary_private_ip)
 | |
| 
 | |
|         status_out = cluster_config.primary.exec_mcs("cluster status")
 | |
|         assert status_out["num_nodes"] == 1
 | |
|         assert primary_private_ip in status_out
 | |
|         primary_status = drop_timestamp(status_out[primary_private_ip])
 | |
|         assert_dict_includes(
 | |
|             primary_status,
 | |
|             {
 | |
|                 "dbrm_mode": "master",
 | |
|                 "cluster_mode": "readwrite",
 | |
|                 "dbroots": ['1'],
 | |
|                 "module_id": 1,
 | |
|             },
 | |
|         )
 | |
|         services_in_status = {service_descr["name"] for service_descr in primary_status["services"]}
 | |
|         assert services_in_status == ALL_MCS_SERVICES
 | |
| 
 | |
|         # Add replicas
 | |
|         print(f"Adding replicas ({cluster_config.replicas}) to the cluster")
 | |
|         # Checking passing more that one node to the command
 | |
|         add_cmd = "cluster node add "
 | |
|         for replica in cluster_config.replicas:
 | |
|             add_cmd += f"--node {replica.private_ip} "
 | |
|         add_out = cluster_config.primary.exec_mcs(add_cmd)
 | |
|         assert len(add_out) == len(cluster_config.replicas)
 | |
|         added_node_ids = {node["node_id"] for node in add_out}
 | |
|         expected_node_ids = {str(replica.private_ip) for replica in cluster_config.replicas}
 | |
|         assert added_node_ids == expected_node_ids
 | |
| 
 | |
|         status_out = cluster_config.primary.exec_mcs("cluster status")
 | |
|         assert status_out["num_nodes"] == len(cluster_config.mcs_hosts)
 | |
|         for idx, replica in enumerate(cluster_config.replicas, start=2):
 | |
|             assert str(replica.private_ip) in status_out
 | |
|             replica_status = drop_timestamp(status_out[str(replica.private_ip)])
 | |
|             assert_dict_includes(
 | |
|                 replica_status,
 | |
|                 {
 | |
|                     "dbrm_mode": "slave",
 | |
|                     "cluster_mode": "readonly",
 | |
|                     "dbroots": [str(idx)],
 | |
|                     "module_id": idx,
 | |
|                 },
 | |
|             )
 | |
|             replica_expected_services = ALL_MCS_SERVICES - {"controllernode", "DDLProc", "DMLProc"}
 | |
|             services_in_status = {service_descr["name"] for service_descr in replica_status["services"]}
 | |
|             assert services_in_status == replica_expected_services |