[PATCH 1/5] TEST: Use pacemaker repeat macro

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is to simulate the way pacemaker uses the cpg api.
With this you can run testcpg directly after corosync
starts and it should initialise ok.

Signed-off-by: Angus Salkeld <asalkeld@xxxxxxxxxx>
---
 test/testcpg.c |   42 +++++++++++++++++++++++++++++++++++-------
 1 files changed, 35 insertions(+), 7 deletions(-)

diff --git a/test/testcpg.c b/test/testcpg.c
index bab6006..016b67f 100644
--- a/test/testcpg.c
+++ b/test/testcpg.c
@@ -165,11 +165,36 @@ static void sigintr_handler (int signum) {
 }
 static struct cpg_name group_name;
 
+
+#define cs_repeat_init(counter, max, code) do {    \
+	code;                                 \
+	if (result == CS_ERR_TRY_AGAIN || result == CS_ERR_QUEUE_FULL || result == CS_ERR_LIBRARY) {  \
+		counter++;                    \
+		printf("Retrying operation after %ds\n", counter); \
+		sleep(counter);               \
+	} else {                              \
+		break;                        \
+	}                                     \
+} while (counter < max)
+
+#define cs_repeat(counter, max, code) do {    \
+	code;                                 \
+	if (result == CS_ERR_TRY_AGAIN || result == CS_ERR_QUEUE_FULL) {  \
+		counter++;                    \
+		printf("Retrying operation after %ds\n", counter); \
+		sleep(counter);               \
+	} else {                              \
+		break;                        \
+	}                                     \
+} while (counter < max)
+
+
 int main (int argc, char *argv[]) {
 	cpg_handle_t handle;
 	fd_set read_fds;
 	int select_fd;
 	int result;
+	int retries;
 	const char *options = "i";
 	int opt;
 	unsigned int nodeid;
@@ -195,27 +220,30 @@ int main (int argc, char *argv[]) {
 		group_name.length = 6;
 	}
 
-	result = cpg_model_initialize (&handle, CPG_MODEL_V1, (cpg_model_data_t *)&model_data, NULL);
+	retries = 0;
+	cs_repeat_init(retries, 30, result = cpg_model_initialize (&handle, CPG_MODEL_V1, (cpg_model_data_t *)&model_data, NULL));
 	if (result != CS_OK) {
 		printf ("Could not initialize Cluster Process Group API instance error %d\n", result);
 		exit (1);
 	}
-	result = cpg_local_get (handle, &nodeid);
+	retries = 0;
+	cs_repeat(retries, 30, result = cpg_local_get(handle, &nodeid));
 	if (result != CS_OK) {
 		printf ("Could not get local node id\n");
 		exit (1);
 	}
-
 	printf ("Local node id is %x\n", nodeid);
-	result = cpg_join(handle, &group_name);
+
+	retries = 0;
+	cs_repeat(retries, 30, result = cpg_join(handle, &group_name));
 	if (result != CS_OK) {
 		printf ("Could not join process group, error %d\n", result);
 		exit (1);
 	}
 
-	sleep (1);
-	result = cpg_membership_get (handle, &group_name,
-		(struct cpg_address *)&member_list, &member_list_entries);
+	retries = 0;
+	cs_repeat(retries, 30, result = cpg_membership_get (handle, &group_name,
+		(struct cpg_address *)&member_list, &member_list_entries));
 	if (result != CS_OK) {
 		printf ("Could not get current membership list %d\n", result);
 		exit (1);
-- 
1.7.7.6

_______________________________________________
discuss mailing list
discuss@xxxxxxxxxxxx
http://lists.corosync.org/mailman/listinfo/discuss


[Index of Archives]     [Linux Clusters]     [Corosync Project]     [Linux USB Devel]     [Linux Audio Users]     [Photo]     [Yosemite News]    [Yosemite Photos]    [Linux Kernel]     [Linux SCSI]     [X.Org]

  Powered by Linux