Update ShowInstances status

This commit is contained in:
Andi Skrgat 2024-02-26 09:08:11 +01:00
parent 890e5bc499
commit a3870300e4
7 changed files with 87 additions and 88 deletions

View File

@ -26,7 +26,7 @@ struct InstanceStatus {
std::string raft_socket_address; std::string raft_socket_address;
std::string coord_socket_address; std::string coord_socket_address;
std::string cluster_role; std::string cluster_role;
bool is_alive; std::string health;
}; };
} // namespace memgraph::coordination } // namespace memgraph::coordination

View File

@ -1265,14 +1265,13 @@ Callback HandleCoordinatorQuery(CoordinatorQuery *coordinator_query, const Param
throw QueryRuntimeException("Only coordinator can run SHOW INSTANCES."); throw QueryRuntimeException("Only coordinator can run SHOW INSTANCES.");
} }
callback.header = {"name", "raft_socket_address", "coordinator_socket_address", "alive", "role"}; callback.header = {"name", "raft_socket_address", "coordinator_socket_address", "health", "role"};
callback.fn = [handler = CoordQueryHandler{*coordinator_state}, callback.fn = [handler = CoordQueryHandler{*coordinator_state},
replica_nfields = callback.header.size()]() mutable { replica_nfields = callback.header.size()]() mutable {
auto const instances = handler.ShowInstances(); auto const instances = handler.ShowInstances();
auto const converter = [](const auto &status) -> std::vector<TypedValue> { auto const converter = [](const auto &status) -> std::vector<TypedValue> {
return {TypedValue{status.instance_name}, TypedValue{status.raft_socket_address}, return {TypedValue{status.instance_name}, TypedValue{status.raft_socket_address},
TypedValue{status.coord_socket_address}, TypedValue{status.is_alive}, TypedValue{status.coord_socket_address}, TypedValue{status.health}, TypedValue{status.cluster_role}};
TypedValue{status.cluster_role}};
}; };
return utils::fmap(converter, instances); return utils::fmap(converter, instances);

View File

@ -44,10 +44,10 @@ def test_coordinator_show_instances():
return sorted(list(execute_and_fetch_all(cursor, "SHOW INSTANCES;"))) return sorted(list(execute_and_fetch_all(cursor, "SHOW INSTANCES;")))
expected_data = [ expected_data = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("instance_1", "", "127.0.0.1:10011", True, "replica"), ("instance_1", "", "127.0.0.1:10011", "up", "replica"),
("instance_2", "", "127.0.0.1:10012", True, "replica"), ("instance_2", "", "127.0.0.1:10012", "up", "replica"),
("instance_3", "", "127.0.0.1:10013", True, "main"), ("instance_3", "", "127.0.0.1:10013", "up", "main"),
] ]
mg_sleep_and_assert(expected_data, retrieve_data) mg_sleep_and_assert(expected_data, retrieve_data)

View File

@ -143,20 +143,20 @@ def test_writing_disabled_on_main_restart():
return sorted(list(execute_and_fetch_all(coordinator3_cursor, "SHOW INSTANCES"))) return sorted(list(execute_and_fetch_all(coordinator3_cursor, "SHOW INSTANCES")))
expected_cluster_coord3 = [ expected_cluster_coord3 = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("coordinator_2", "127.0.0.1:10112", "", True, "coordinator"), ("coordinator_2", "127.0.0.1:10112", "", "unknown", "coordinator"),
("coordinator_3", "127.0.0.1:10113", "", True, "coordinator"), ("coordinator_3", "127.0.0.1:10113", "", "unknown", "coordinator"),
("instance_3", "", "127.0.0.1:10013", True, "main"), ("instance_3", "", "127.0.0.1:10013", "up", "main"),
] ]
mg_sleep_and_assert(expected_cluster_coord3, check_coordinator3) mg_sleep_and_assert(expected_cluster_coord3, check_coordinator3)
interactive_mg_runner.kill(MEMGRAPH_INSTANCES_DESCRIPTION, "instance_3") interactive_mg_runner.kill(MEMGRAPH_INSTANCES_DESCRIPTION, "instance_3")
expected_cluster_coord3 = [ expected_cluster_coord3 = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("coordinator_2", "127.0.0.1:10112", "", True, "coordinator"), ("coordinator_2", "127.0.0.1:10112", "", "unknown", "coordinator"),
("coordinator_3", "127.0.0.1:10113", "", True, "coordinator"), ("coordinator_3", "127.0.0.1:10113", "", "unknown", "coordinator"),
("instance_3", "", "127.0.0.1:10013", False, "unknown"), ("instance_3", "", "127.0.0.1:10013", "down", "unknown"),
] ]
mg_sleep_and_assert(expected_cluster_coord3, check_coordinator3) mg_sleep_and_assert(expected_cluster_coord3, check_coordinator3)
@ -173,10 +173,10 @@ def test_writing_disabled_on_main_restart():
) )
expected_cluster_coord3 = [ expected_cluster_coord3 = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("coordinator_2", "127.0.0.1:10112", "", True, "coordinator"), ("coordinator_2", "127.0.0.1:10112", "", "unknown", "coordinator"),
("coordinator_3", "127.0.0.1:10113", "", True, "coordinator"), ("coordinator_3", "127.0.0.1:10113", "", "unknown", "coordinator"),
("instance_3", "", "127.0.0.1:10013", True, "main"), ("instance_3", "", "127.0.0.1:10013", "up", "main"),
] ]
mg_sleep_and_assert(expected_cluster_coord3, check_coordinator3) mg_sleep_and_assert(expected_cluster_coord3, check_coordinator3)

View File

@ -149,12 +149,12 @@ def test_distributed_automatic_failover():
return sorted(list(execute_and_fetch_all(coord_cursor, "SHOW INSTANCES;"))) return sorted(list(execute_and_fetch_all(coord_cursor, "SHOW INSTANCES;")))
expected_data_on_coord = [ expected_data_on_coord = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("coordinator_2", "127.0.0.1:10112", "", True, "coordinator"), ("coordinator_2", "127.0.0.1:10112", "", "unknown", "coordinator"),
("coordinator_3", "127.0.0.1:10113", "", True, "coordinator"), ("coordinator_3", "127.0.0.1:10113", "", "unknown", "coordinator"),
("instance_1", "", "127.0.0.1:10011", True, "main"), ("instance_1", "", "127.0.0.1:10011", "up", "main"),
("instance_2", "", "127.0.0.1:10012", True, "replica"), ("instance_2", "", "127.0.0.1:10012", "up", "replica"),
("instance_3", "", "127.0.0.1:10013", False, "unknown"), ("instance_3", "", "127.0.0.1:10013", "down", "unknown"),
] ]
mg_sleep_and_assert(expected_data_on_coord, retrieve_data_show_repl_cluster) mg_sleep_and_assert(expected_data_on_coord, retrieve_data_show_repl_cluster)

View File

@ -200,9 +200,9 @@ def test_not_replicate_old_main_register_new_cluster():
return sorted(list(execute_and_fetch_all(first_cluster_coord_cursor, "SHOW INSTANCES;"))) return sorted(list(execute_and_fetch_all(first_cluster_coord_cursor, "SHOW INSTANCES;")))
expected_data_up_first_cluster = [ expected_data_up_first_cluster = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "up", "coordinator"),
("instance_2", "", "127.0.0.1:10012", True, "main"), ("instance_2", "", "127.0.0.1:10012", "up", "main"),
("shared_instance", "", "127.0.0.1:10011", True, "replica"), ("shared_instance", "", "127.0.0.1:10011", "up", "replica"),
] ]
mg_sleep_and_assert(expected_data_up_first_cluster, show_repl_cluster) mg_sleep_and_assert(expected_data_up_first_cluster, show_repl_cluster)
@ -254,9 +254,9 @@ def test_not_replicate_old_main_register_new_cluster():
return sorted(list(execute_and_fetch_all(second_cluster_coord_cursor, "SHOW INSTANCES;"))) return sorted(list(execute_and_fetch_all(second_cluster_coord_cursor, "SHOW INSTANCES;")))
expected_data_up_second_cluster = [ expected_data_up_second_cluster = [
("coordinator_1", "127.0.0.1:10112", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10112", "", "unknown", "coordinator"),
("instance_3", "", "127.0.0.1:10013", True, "main"), ("instance_3", "", "127.0.0.1:10013", "up", "main"),
("shared_instance", "", "127.0.0.1:10011", True, "replica"), ("shared_instance", "", "127.0.0.1:10011", "up", "replica"),
] ]
mg_sleep_and_assert(expected_data_up_second_cluster, show_repl_cluster) mg_sleep_and_assert(expected_data_up_second_cluster, show_repl_cluster)

View File

@ -923,10 +923,10 @@ def test_replication_works_on_failover_simple():
return sorted(list(execute_and_fetch_all(coord_cursor, "SHOW INSTANCES;"))) return sorted(list(execute_and_fetch_all(coord_cursor, "SHOW INSTANCES;")))
expected_data_on_coord = [ expected_data_on_coord = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("instance_1", "", "127.0.0.1:10011", True, "main"), ("instance_1", "", "127.0.0.1:10011", "up", "main"),
("instance_2", "", "127.0.0.1:10012", True, "replica"), ("instance_2", "", "127.0.0.1:10012", "up", "replica"),
("instance_3", "", "127.0.0.1:10013", False, "unknown"), ("instance_3", "", "127.0.0.1:10013", "down", "unknown"),
] ]
mg_sleep_and_assert(expected_data_on_coord, retrieve_data_show_repl_cluster) mg_sleep_and_assert(expected_data_on_coord, retrieve_data_show_repl_cluster)
@ -1040,10 +1040,10 @@ def test_replication_works_on_replica_instance_restart():
return sorted(list(execute_and_fetch_all(coord_cursor, "SHOW INSTANCES;"))) return sorted(list(execute_and_fetch_all(coord_cursor, "SHOW INSTANCES;")))
expected_data_on_coord = [ expected_data_on_coord = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("instance_1", "", "127.0.0.1:10011", True, "replica"), ("instance_1", "", "127.0.0.1:10011", "up", "replica"),
("instance_2", "", "127.0.0.1:10012", False, "unknown"), ("instance_2", "", "127.0.0.1:10012", "down", "unknown"),
("instance_3", "", "127.0.0.1:10013", True, "main"), ("instance_3", "", "127.0.0.1:10013", "up", "main"),
] ]
mg_sleep_and_assert_collection(expected_data_on_coord, retrieve_data_show_repl_cluster) mg_sleep_and_assert_collection(expected_data_on_coord, retrieve_data_show_repl_cluster)
@ -1106,10 +1106,10 @@ def test_replication_works_on_replica_instance_restart():
return sorted(list(execute_and_fetch_all(coord_cursor, "SHOW INSTANCES;"))) return sorted(list(execute_and_fetch_all(coord_cursor, "SHOW INSTANCES;")))
expected_data_on_coord = [ expected_data_on_coord = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("instance_1", "", "127.0.0.1:10011", True, "replica"), ("instance_1", "", "127.0.0.1:10011", "up", "replica"),
("instance_2", "", "127.0.0.1:10012", True, "replica"), ("instance_2", "", "127.0.0.1:10012", "up", "replica"),
("instance_3", "", "127.0.0.1:10013", True, "main"), ("instance_3", "", "127.0.0.1:10013", "up", "main"),
] ]
mg_sleep_and_assert(expected_data_on_coord, retrieve_data_show_repl_cluster) mg_sleep_and_assert(expected_data_on_coord, retrieve_data_show_repl_cluster)
@ -1154,10 +1154,10 @@ def test_show_instances():
return sorted(list(execute_and_fetch_all(coord_cursor, "SHOW INSTANCES;"))) return sorted(list(execute_and_fetch_all(coord_cursor, "SHOW INSTANCES;")))
expected_data = [ expected_data = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("instance_1", "", "127.0.0.1:10011", True, "replica"), ("instance_1", "", "127.0.0.1:10011", "up", "replica"),
("instance_2", "", "127.0.0.1:10012", True, "replica"), ("instance_2", "", "127.0.0.1:10012", "up", "replica"),
("instance_3", "", "127.0.0.1:10013", True, "main"), ("instance_3", "", "127.0.0.1:10013", "up", "main"),
] ]
mg_sleep_and_assert(expected_data, show_repl_cluster) mg_sleep_and_assert(expected_data, show_repl_cluster)
@ -1177,20 +1177,20 @@ def test_show_instances():
interactive_mg_runner.kill(MEMGRAPH_INSTANCES_DESCRIPTION, "instance_1") interactive_mg_runner.kill(MEMGRAPH_INSTANCES_DESCRIPTION, "instance_1")
expected_data = [ expected_data = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("instance_1", "", "127.0.0.1:10011", False, "unknown"), ("instance_1", "", "127.0.0.1:10011", "down", "unknown"),
("instance_2", "", "127.0.0.1:10012", True, "replica"), ("instance_2", "", "127.0.0.1:10012", "up", "replica"),
("instance_3", "", "127.0.0.1:10013", True, "main"), ("instance_3", "", "127.0.0.1:10013", "up", "main"),
] ]
mg_sleep_and_assert(expected_data, show_repl_cluster) mg_sleep_and_assert(expected_data, show_repl_cluster)
interactive_mg_runner.kill(MEMGRAPH_INSTANCES_DESCRIPTION, "instance_2") interactive_mg_runner.kill(MEMGRAPH_INSTANCES_DESCRIPTION, "instance_2")
expected_data = [ expected_data = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("instance_1", "", "127.0.0.1:10011", False, "unknown"), ("instance_1", "", "127.0.0.1:10011", "down", "unknown"),
("instance_2", "", "127.0.0.1:10012", False, "unknown"), ("instance_2", "", "127.0.0.1:10012", "down", "unknown"),
("instance_3", "", "127.0.0.1:10013", True, "main"), ("instance_3", "", "127.0.0.1:10013", "up", "main"),
] ]
mg_sleep_and_assert(expected_data, show_repl_cluster) mg_sleep_and_assert(expected_data, show_repl_cluster)
@ -1227,10 +1227,10 @@ def test_simple_automatic_failover():
return sorted(list(execute_and_fetch_all(coord_cursor, "SHOW INSTANCES;"))) return sorted(list(execute_and_fetch_all(coord_cursor, "SHOW INSTANCES;")))
expected_data_on_coord = [ expected_data_on_coord = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("instance_1", "", "127.0.0.1:10011", True, "main"), ("instance_1", "", "127.0.0.1:10011", "up", "main"),
("instance_2", "", "127.0.0.1:10012", True, "replica"), ("instance_2", "", "127.0.0.1:10012", "up", "replica"),
("instance_3", "", "127.0.0.1:10013", False, "unknown"), ("instance_3", "", "127.0.0.1:10013", "down", "unknown"),
] ]
mg_sleep_and_assert(expected_data_on_coord, retrieve_data_show_repl_cluster) mg_sleep_and_assert(expected_data_on_coord, retrieve_data_show_repl_cluster)
@ -1315,20 +1315,20 @@ def test_replica_instance_restarts():
return sorted(list(execute_and_fetch_all(cursor, "SHOW INSTANCES;"))) return sorted(list(execute_and_fetch_all(cursor, "SHOW INSTANCES;")))
expected_data_up = [ expected_data_up = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("instance_1", "", "127.0.0.1:10011", True, "replica"), ("instance_1", "", "127.0.0.1:10011", "up", "replica"),
("instance_2", "", "127.0.0.1:10012", True, "replica"), ("instance_2", "", "127.0.0.1:10012", "up", "replica"),
("instance_3", "", "127.0.0.1:10013", True, "main"), ("instance_3", "", "127.0.0.1:10013", "up", "main"),
] ]
mg_sleep_and_assert(expected_data_up, show_repl_cluster) mg_sleep_and_assert(expected_data_up, show_repl_cluster)
interactive_mg_runner.kill(MEMGRAPH_INSTANCES_DESCRIPTION, "instance_1") interactive_mg_runner.kill(MEMGRAPH_INSTANCES_DESCRIPTION, "instance_1")
expected_data_down = [ expected_data_down = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("instance_1", "", "127.0.0.1:10011", False, "unknown"), ("instance_1", "", "127.0.0.1:10011", "down", "unknown"),
("instance_2", "", "127.0.0.1:10012", True, "replica"), ("instance_2", "", "127.0.0.1:10012", "up", "replica"),
("instance_3", "", "127.0.0.1:10013", True, "main"), ("instance_3", "", "127.0.0.1:10013", "up", "main"),
] ]
mg_sleep_and_assert(expected_data_down, show_repl_cluster) mg_sleep_and_assert(expected_data_down, show_repl_cluster)
@ -1357,18 +1357,18 @@ def test_automatic_failover_main_back_as_replica():
return sorted(list(execute_and_fetch_all(coord_cursor, "SHOW INSTANCES;"))) return sorted(list(execute_and_fetch_all(coord_cursor, "SHOW INSTANCES;")))
expected_data_after_failover = [ expected_data_after_failover = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("instance_1", "", "127.0.0.1:10011", True, "main"), ("instance_1", "", "127.0.0.1:10011", "up", "main"),
("instance_2", "", "127.0.0.1:10012", True, "replica"), ("instance_2", "", "127.0.0.1:10012", "up", "replica"),
("instance_3", "", "127.0.0.1:10013", False, "unknown"), ("instance_3", "", "127.0.0.1:10013", "down", "unknown"),
] ]
mg_sleep_and_assert(expected_data_after_failover, retrieve_data_show_repl_cluster) mg_sleep_and_assert(expected_data_after_failover, retrieve_data_show_repl_cluster)
expected_data_after_main_coming_back = [ expected_data_after_main_coming_back = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("instance_1", "", "127.0.0.1:10011", True, "main"), ("instance_1", "", "127.0.0.1:10011", "up", "main"),
("instance_2", "", "127.0.0.1:10012", True, "replica"), ("instance_2", "", "127.0.0.1:10012", "up", "replica"),
("instance_3", "", "127.0.0.1:10013", True, "replica"), ("instance_3", "", "127.0.0.1:10013", "up", "replica"),
] ]
interactive_mg_runner.start(MEMGRAPH_INSTANCES_DESCRIPTION, "instance_3") interactive_mg_runner.start(MEMGRAPH_INSTANCES_DESCRIPTION, "instance_3")
@ -1396,20 +1396,20 @@ def test_automatic_failover_main_back_as_main():
return sorted(list(execute_and_fetch_all(coord_cursor, "SHOW INSTANCES;"))) return sorted(list(execute_and_fetch_all(coord_cursor, "SHOW INSTANCES;")))
expected_data_all_down = [ expected_data_all_down = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("instance_1", "", "127.0.0.1:10011", False, "unknown"), ("instance_1", "", "127.0.0.1:10011", "down", "unknown"),
("instance_2", "", "127.0.0.1:10012", False, "unknown"), ("instance_2", "", "127.0.0.1:10012", "down", "unknown"),
("instance_3", "", "127.0.0.1:10013", False, "unknown"), ("instance_3", "", "127.0.0.1:10013", "down", "unknown"),
] ]
mg_sleep_and_assert(expected_data_all_down, retrieve_data_show_repl_cluster) mg_sleep_and_assert(expected_data_all_down, retrieve_data_show_repl_cluster)
interactive_mg_runner.start(MEMGRAPH_INSTANCES_DESCRIPTION, "instance_3") interactive_mg_runner.start(MEMGRAPH_INSTANCES_DESCRIPTION, "instance_3")
expected_data_main_back = [ expected_data_main_back = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("instance_1", "", "127.0.0.1:10011", False, "unknown"), ("instance_1", "", "127.0.0.1:10011", "down", "unknown"),
("instance_2", "", "127.0.0.1:10012", False, "unknown"), ("instance_2", "", "127.0.0.1:10012", "down", "unknown"),
("instance_3", "", "127.0.0.1:10013", True, "main"), ("instance_3", "", "127.0.0.1:10013", "up", "main"),
] ]
mg_sleep_and_assert(expected_data_main_back, retrieve_data_show_repl_cluster) mg_sleep_and_assert(expected_data_main_back, retrieve_data_show_repl_cluster)
@ -1424,10 +1424,10 @@ def test_automatic_failover_main_back_as_main():
interactive_mg_runner.start(MEMGRAPH_INSTANCES_DESCRIPTION, "instance_2") interactive_mg_runner.start(MEMGRAPH_INSTANCES_DESCRIPTION, "instance_2")
expected_data_replicas_back = [ expected_data_replicas_back = [
("coordinator_1", "127.0.0.1:10111", "", True, "coordinator"), ("coordinator_1", "127.0.0.1:10111", "", "unknown", "coordinator"),
("instance_1", "", "127.0.0.1:10011", True, "replica"), ("instance_1", "", "127.0.0.1:10011", "up", "replica"),
("instance_2", "", "127.0.0.1:10012", True, "replica"), ("instance_2", "", "127.0.0.1:10012", "up", "replica"),
("instance_3", "", "127.0.0.1:10013", True, "main"), ("instance_3", "", "127.0.0.1:10013", "up", "main"),
] ]
mg_sleep_and_assert(expected_data_replicas_back, retrieve_data_show_repl_cluster) mg_sleep_and_assert(expected_data_replicas_back, retrieve_data_show_repl_cluster)