[tarantool-patches] [PATCH 1/6] test: rename swim_cluster_node to swim_cluster_member
Vladislav Shpilevoy
v.shpilevoy at tarantool.org
Wed Apr 24 17:36:15 MSK 2019
There are two different structures - public struct swim_member
exposed by SWIM API, and struct swim_node defined and used inside
tests. Before this patch swim_cluster_node() was returning struct
swim_member, just historically. But more and more places appear
where it is wanted to safely take struct swim_node, not
swim_member, with an appropriate assertion on an invalid index.
This patch renames swim_cluster_node() to swim_cluster_member(),
and introduces new swim_cluster_node() returning swim_node.
---
test/unit/swim.c | 28 ++++++++++----------
test/unit/swim_test_utils.c | 51 +++++++++++++++++++++----------------
test/unit/swim_test_utils.h | 2 +-
3 files changed, 44 insertions(+), 37 deletions(-)
diff --git a/test/unit/swim.c b/test/unit/swim.c
index 1cdfd45aa..e375e6607 100644
--- a/test/unit/swim.c
+++ b/test/unit/swim.c
@@ -105,7 +105,7 @@ swim_test_uuid_update(void)
struct swim_cluster *cluster = swim_cluster_new(2);
swim_cluster_add_link(cluster, 0, 1);
fail_if(swim_cluster_wait_fullmesh(cluster, 1) != 0);
- struct swim *s = swim_cluster_node(cluster, 0);
+ struct swim *s = swim_cluster_member(cluster, 0);
struct tt_uuid old_uuid = *swim_member_uuid(swim_self(s));
struct tt_uuid new_uuid = uuid_nil;
new_uuid.time_low = 1000;
@@ -180,8 +180,8 @@ swim_test_add_remove(void)
struct swim_cluster *cluster = swim_cluster_new(2);
swim_cluster_add_link(cluster, 0, 1);
fail_if(swim_cluster_wait_fullmesh(cluster, 1) != 0);
- struct swim *s1 = swim_cluster_node(cluster, 0);
- struct swim *s2 = swim_cluster_node(cluster, 1);
+ struct swim *s1 = swim_cluster_member(cluster, 0);
+ struct swim *s2 = swim_cluster_member(cluster, 1);
const struct swim_member *s2_self = swim_self(s2);
is(swim_add_member(s1, swim_member_uri(s2_self),
@@ -272,8 +272,8 @@ swim_test_basic_failure_detection(void)
swim_cluster_block_io(cluster, 1);
/* Next round after 1 sec + let ping hang for 0.25 sec. */
swim_run_for(1.25);
- struct swim *s1 = swim_cluster_node(cluster, 0);
- struct swim *s2 = swim_cluster_node(cluster, 1);
+ struct swim *s1 = swim_cluster_member(cluster, 0);
+ struct swim *s2 = swim_cluster_member(cluster, 1);
const struct swim_member *s2_self = swim_self(s2);
swim_remove_member(s1, swim_member_uuid(s2_self));
swim_cluster_unblock_io(cluster, 1);
@@ -343,8 +343,8 @@ swim_test_probe(void)
swim_start_test(2);
struct swim_cluster *cluster = swim_cluster_new(2);
- struct swim *s1 = swim_cluster_node(cluster, 0);
- struct swim *s2 = swim_cluster_node(cluster, 1);
+ struct swim *s1 = swim_cluster_member(cluster, 0);
+ struct swim *s2 = swim_cluster_member(cluster, 1);
const char *s2_uri = swim_member_uri(swim_self(s2));
is(swim_probe_member(s1, s2_uri), 0, "send probe");
is(swim_cluster_wait_fullmesh(cluster, 0.1), 0,
@@ -503,11 +503,11 @@ swim_test_quit(void)
* received the 'quit' message with the same UUID. Of
* course, it should be refuted.
*/
- struct swim *s0 = swim_cluster_node(cluster, 0);
+ struct swim *s0 = swim_cluster_member(cluster, 0);
struct tt_uuid s0_uuid = *swim_member_uuid(swim_self(s0));
- struct swim *s1 = swim_cluster_node(cluster, 1);
+ struct swim *s1 = swim_cluster_member(cluster, 1);
swim_remove_member(s1, &s0_uuid);
- struct swim *s2 = swim_cluster_node(cluster, 2);
+ struct swim *s2 = swim_cluster_member(cluster, 2);
swim_remove_member(s2, &s0_uuid);
swim_cluster_quit_node(cluster, 0);
@@ -578,7 +578,7 @@ swim_test_uri_update(void)
swim_cluster_add_link(cluster, 2, 1);
swim_cluster_add_link(cluster, 2, 0);
- struct swim *s0 = swim_cluster_node(cluster, 0);
+ struct swim *s0 = swim_cluster_member(cluster, 0);
const struct swim_member *s0_self = swim_self(s0);
const char *new_s0_uri = "127.0.0.5:1";
fail_if(swim_cfg(s0, "127.0.0.5:1", -1, -1, -1, NULL) != 0);
@@ -586,7 +586,7 @@ swim_test_uri_update(void)
* Since S1 knows about S2 only, one round step is enough.
*/
swim_run_for(1);
- struct swim *s1 = swim_cluster_node(cluster, 1);
+ struct swim *s1 = swim_cluster_member(cluster, 1);
const struct swim_member *s0_view =
swim_member_by_uuid(s1, swim_member_uuid(s0_self));
is(strcmp(new_s0_uri, swim_member_uri(s0_view)), 0,
@@ -619,8 +619,8 @@ swim_test_broadcast(void)
swim_start_test(6);
int size = 4;
struct swim_cluster *cluster = swim_cluster_new(size);
- struct swim *s0 = swim_cluster_node(cluster, 0);
- struct swim *s1 = swim_cluster_node(cluster, 1);
+ struct swim *s0 = swim_cluster_member(cluster, 0);
+ struct swim *s1 = swim_cluster_member(cluster, 1);
const char *s1_uri = swim_member_uri(swim_self(s1));
struct uri u;
fail_if(uri_parse(&u, s1_uri) != 0 || u.service == NULL);
diff --git a/test/unit/swim_test_utils.c b/test/unit/swim_test_utils.c
index 45570cce5..4f488fb7b 100644
--- a/test/unit/swim_test_utils.c
+++ b/test/unit/swim_test_utils.c
@@ -137,12 +137,25 @@ swim_cluster_delete(struct swim_cluster *cluster)
free(cluster);
}
+/** Safely get node of @a cluster with id @a i. */
+static inline struct swim_node *
+swim_cluster_node(struct swim_cluster *cluster, int i)
+{
+ assert(i >= 0 && i < cluster->size);
+ return &cluster->node[i];
+}
+
+struct swim *
+swim_cluster_member(struct swim_cluster *cluster, int i)
+{
+ return swim_cluster_node(cluster, i)->swim;
+}
+
int
swim_cluster_update_uuid(struct swim_cluster *cluster, int i,
const struct tt_uuid *new_uuid)
{
- assert(i >= 0 && i < cluster->size);
- struct swim_node *n = &cluster->node[i];
+ struct swim_node *n = swim_cluster_node(cluster, i);
if (swim_cfg(n->swim, NULL, -1, -1, -1, new_uuid) != 0)
return -1;
n->uuid = *new_uuid;
@@ -152,9 +165,10 @@ swim_cluster_update_uuid(struct swim_cluster *cluster, int i,
int
swim_cluster_add_link(struct swim_cluster *cluster, int to_id, int from_id)
{
- const struct swim_member *from = swim_self(cluster->node[from_id].swim);
- return swim_add_member(cluster->node[to_id].swim, swim_member_uri(from),
- swim_member_uuid(from));
+ const struct swim_member *from =
+ swim_self(swim_cluster_member(cluster, from_id));
+ return swim_add_member(swim_cluster_member(cluster, to_id),
+ swim_member_uri(from), swim_member_uuid(from));
}
static const struct swim_member *
@@ -165,8 +179,9 @@ swim_cluster_member_view(struct swim_cluster *cluster, int node_id,
* Do not use node[member_id].swim - it can be NULL
* already, for example, in case of quit or deletion.
*/
- return swim_member_by_uuid(cluster->node[node_id].swim,
- &cluster->node[member_id].uuid);
+ struct swim_node *n = swim_cluster_node(cluster, member_id);
+ return swim_member_by_uuid(swim_cluster_member(cluster, node_id),
+ &n->uuid);
}
enum swim_member_status
@@ -208,22 +223,14 @@ int
swim_cluster_member_set_payload(struct swim_cluster *cluster, int i,
const char *payload, uint16_t size)
{
- struct swim *s = swim_cluster_node(cluster, i);
+ struct swim *s = swim_cluster_member(cluster, i);
return swim_set_payload(s, payload, size);
}
-struct swim *
-swim_cluster_node(struct swim_cluster *cluster, int i)
-{
- assert(i >= 0 && i < cluster->size);
- return cluster->node[i].swim;
-}
-
void
swim_cluster_quit_node(struct swim_cluster *cluster, int i)
{
- assert(i >= 0 && i < cluster->size);
- struct swim_node *n = &cluster->node[i];
+ struct swim_node *n = swim_cluster_node(cluster, i);
assert(tt_uuid_is_equal(&n->uuid,
swim_member_uuid(swim_self(n->swim))));
swim_quit(n->swim);
@@ -233,8 +240,7 @@ swim_cluster_quit_node(struct swim_cluster *cluster, int i)
void
swim_cluster_restart_node(struct swim_cluster *cluster, int i)
{
- assert(i >= 0 && i < cluster->size);
- struct swim_node *n = &cluster->node[i];
+ struct swim_node *n = swim_cluster_node(cluster, i);
struct swim *s = n->swim;
char uri[128];
swim_cluster_id_to_uri(uri, i);
@@ -261,7 +267,8 @@ swim_cluster_block_io(struct swim_cluster *cluster, int i)
void
swim_cluster_unblock_io(struct swim_cluster *cluster, int i)
{
- swim_test_transport_unblock_fd(swim_fd(cluster->node[i].swim));
+ struct swim *s = swim_cluster_member(cluster, i);
+ swim_test_transport_unblock_fd(swim_fd(s));
}
/** A structure used by drop rate packet filter. */
@@ -308,7 +315,7 @@ static void
swim_cluster_set_drop_generic(struct swim_cluster *cluster, int i,
double value, bool is_for_in, bool is_for_out)
{
- int fd = swim_fd(swim_cluster_node(cluster, i));
+ int fd = swim_fd(swim_cluster_member(cluster, i));
if (value == 0) {
swim_test_transport_remove_filter(fd, swim_filter_drop_rate);
return;
@@ -374,7 +381,7 @@ void
swim_cluster_drop_components(struct swim_cluster *cluster, int i,
const int *keys, int key_count)
{
- int fd = swim_fd(swim_cluster_node(cluster, i));
+ int fd = swim_fd(swim_cluster_member(cluster, i));
if (key_count == 0) {
swim_test_transport_remove_filter(fd,
swim_filter_drop_component);
diff --git a/test/unit/swim_test_utils.h b/test/unit/swim_test_utils.h
index 100a67e0c..145af9b1f 100644
--- a/test/unit/swim_test_utils.h
+++ b/test/unit/swim_test_utils.h
@@ -70,7 +70,7 @@ swim_error_check_match(const char *msg);
/** Get a SWIM instance by its ordinal number. */
struct swim *
-swim_cluster_node(struct swim_cluster *cluster, int i);
+swim_cluster_member(struct swim_cluster *cluster, int i);
/** Quit a member with id @a id. */
void
--
2.20.1 (Apple Git-117)
More information about the Tarantool-patches
mailing list