CVSROOT:        /cvs/cluster
Module name:    cluster
Branch:         RHEL5
Changes by:     [EMAIL PROTECTED]       2008-02-21 14:45:49

Modified files:
        cmirror/src    : Makefile cluster.c 

Log message:
        - couple fixes for checking error codes from openais

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/Makefile.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.5&r2=1.3.2.6
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/cluster.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.16&r2=1.1.2.17

--- cluster/cmirror/src/Attic/Makefile  2008/01/18 20:32:09     1.3.2.5
+++ cluster/cmirror/src/Attic/Makefile  2008/02/21 14:45:49     1.3.2.6
@@ -44,7 +44,6 @@
 
 all: ${TARGET}
 
-#clogd: rbtree.c link_mon.c logging.c queues.c local.c cluster.c functions.c 
clogd.c
 clogd: ${SOURCES}
        ${CC} ${CFLAGS} -o $@ $^ ${LDFLAGS}
 
--- cluster/cmirror/src/Attic/cluster.c 2008/02/08 14:30:10     1.1.2.16
+++ cluster/cmirror/src/Attic/cluster.c 2008/02/21 14:45:49     1.1.2.17
@@ -104,6 +104,7 @@
        return -EBADE;
 }
 
+/* FIXME: this is here for debugging... remove */
 int cluster_send_helper(struct clog_tfr *tfr, int line, char *file, const char 
*function)
 {
        int r;
@@ -121,10 +122,10 @@
 static int clog_tfr_cmp(struct clog_tfr *a, struct clog_tfr *b)
 {
        int r = 0;
-       ENTER();
+
        if (a->seq == b->seq)
                r = 1;
-       EXIT("%s", r ? "[MATCH]" : "");
+
        return r;
 }
 
@@ -132,8 +133,6 @@
 {
        int r = 0;
 
-       ENTER("%s", RQ_TYPE(tfr->request_type));
-
        /*
         * With resumes, we only handle our own.
         * Resume is a special case that requires
@@ -152,16 +151,15 @@
                 * Errors from previous functions are in the tfr struct.
                 */
                if (printz)
-                       LOG_DBG("[%s] Sending response to %u on cluster: 
[%s/%llu]",
-                               SHORT_UUID(tfr->uuid), tfr->originator,
-                               RQ_TYPE(tfr->request_type & ~DM_CLOG_RESPONSE),
-                               (unsigned long long)tfr->seq);
+                       LOG_PRINT("[%s] Sending response to %u on cluster: 
[%s/%llu]",
+                                 SHORT_UUID(tfr->uuid), tfr->originator,
+                                 RQ_TYPE(tfr->request_type & 
~DM_CLOG_RESPONSE),
+                                 (unsigned long long)tfr->seq);
                r = cluster_send(tfr);
                if (r)
                        LOG_ERROR("cluster_send failed: %s", strerror(-r));
        }
 
-       EXIT();
        return r;
 }
 
@@ -170,7 +168,6 @@
        int r = 0;
        struct clog_tfr *orig_tfr;
 
-       ENTER("%s", RQ_TYPE(tfr->request_type & ~DM_CLOG_RESPONSE));
        /*
         * If I didn't send it, then I don't care about the response
         */
@@ -217,7 +214,6 @@
                LOG_ERROR("Failed to send response to kernel");
 
 out:
-       EXIT();
        return r;
 }
 
@@ -298,6 +294,8 @@
                new->bitmap_size = 0;
        }
 
+       LOG_DBG("[%s] Checkpoint prepared for %u",
+               SHORT_UUID(new->uuid), cp_requester);
        return new;
 }
 
@@ -327,7 +325,6 @@
        int len;
        char buf[32];
 
-       ENTER();
        LOG_DBG("Sending checkpointed data to %u", cp->requester);
 
        len = snprintf((char *)(name.value), SA_MAX_NAME_LENGTH, 
"bitmaps_%s_%u",
@@ -355,12 +352,12 @@
 
        if (rv == SA_AIS_ERR_EXIST) {
                LOG_DBG("export_checkpoint: checkpoint already exists");
-               EXIT();
                return -EEXIST;
        }
 
        if (rv != SA_AIS_OK) {
-               EXIT();
+               LOG_ERROR("[%s] Failed to open checkpoint for %u",
+                         SHORT_UUID(cp->uuid), cp->requester);
                return -EIO; /* FIXME: better error */
        }
 
@@ -382,13 +379,13 @@
 
        if (rv == SA_AIS_ERR_EXIST) {
                LOG_DBG("export_checkpoint: sync checkpoint section already 
exists");
-               EXIT();
+               saCkptCheckpointClose(h);
                return -EEXIST;
        }
 
        if (rv != SA_AIS_OK) {
                LOG_ERROR("export_checkpoint: sync checkpoint section creation 
failed");
-               EXIT();
+               saCkptCheckpointClose(h);
                return -EIO; /* FIXME: better error */
        }
 
@@ -410,13 +407,13 @@
 
        if (rv == SA_AIS_ERR_EXIST) {
                LOG_DBG("export_checkpoint: clean checkpoint section already 
exists");
-               EXIT();
+               saCkptCheckpointClose(h);
                return -EEXIST;
        }
 
        if (rv != SA_AIS_OK) {
                LOG_ERROR("export_checkpoint: clean checkpoint section creation 
failed");
-               EXIT();
+               saCkptCheckpointClose(h);
                return -EIO; /* FIXME: better error */
        }
 
@@ -439,13 +436,13 @@
 
        if (rv == SA_AIS_ERR_EXIST) {
                LOG_DBG("export_checkpoint: RR checkpoint section already 
exists");
-               EXIT();
+               saCkptCheckpointClose(h);
                return -EEXIST;
        }
 
        if (rv != SA_AIS_OK) {
                LOG_ERROR("export_checkpoint: RR checkpoint section creation 
failed");
-               EXIT();
+               saCkptCheckpointClose(h);
                return -EIO; /* FIXME: better error */
        }
 
@@ -474,10 +471,27 @@
        }
        queue_add(tfr, free_queue);
 
-       EXIT();
+       LOG_DBG("[%s] Checkpoint ready, notification sent to %u",
+               SHORT_UUID(cp->uuid), cp->requester);
+
        return 0;
 }
 
+void ckpt_print (char *str, SaCkptCheckpointHandleT handle)
+{
+       SaCkptCheckpointDescriptorT descriptor;
+       SaAisErrorT rv;
+
+retry_statusget:
+       rv = saCkptCheckpointStatusGet (handle, &descriptor);
+       if (rv == SA_AIS_ERR_TRY_AGAIN)
+               goto retry_statusget;
+       
+       LOG_DBG("printing [%s] sections [%d] result [%d]",
+               str, descriptor.numberOfSections, rv);
+}
+
+
 static int import_checkpoint(struct clog_cpg *entry, int no_read)
 {
        int rtn = 0;
@@ -490,8 +504,6 @@
        char *bitmap = NULL;
        int len;
 
-       ENTER();
-
        bitmap = malloc(1024*1024);
        if (!bitmap)
                return -ENOMEM;
@@ -511,10 +523,11 @@
 
        if (rv != SA_AIS_OK) {
                LOG_ERROR("Failed to open checkpoint");
-               EXIT();
                return -EIO; /* FIXME: better error */
        }
 
+       ckpt_print ("Before unlink", h);
+
        saCkptCheckpointUnlink(ckpt_handle, &name);
 
        if (no_read) {
@@ -522,8 +535,10 @@
                goto no_read;
        }
 
+       ckpt_print ("After unlink", h);
+
 init_retry:
-       rv = saCkptSectionIterationInitialize(h, SA_CKPT_SECTIONS_ANY, 0, &itr);
+       rv = saCkptSectionIterationInitialize(h, SA_CKPT_SECTIONS_ANY, 
SA_TIME_END, &itr);
        if (rv == SA_AIS_ERR_TRY_AGAIN) {
                LOG_ERROR("import_checkpoint: sync create retry");
                sleep(1);
@@ -532,7 +547,6 @@
 
        if (rv != SA_AIS_OK) {
                LOG_ERROR("import_checkpoint: sync checkpoint section creation 
failed");
-               EXIT();
                return -EIO; /* FIXME: better error */
        }
 
@@ -541,8 +555,10 @@
                rv = saCkptSectionIterationNext(itr, &desc);
                if (rv == SA_AIS_OK)
                        len++;
-               else
+               else if (rv != SA_AIS_ERR_TRY_AGAIN) {
+                       LOG_ERROR("saCkptSectionIterationNext failure: %d", rv);
                        break;
+               }
        }
        saCkptSectionIterationFinalize(itr);
        if (len != 3) {
@@ -550,7 +566,7 @@
                sleep(1);
                goto init_retry;
        }
-       saCkptSectionIterationInitialize(h, SA_CKPT_SECTIONS_ANY, 0, &itr);
+       saCkptSectionIterationInitialize(h, SA_CKPT_SECTIONS_ANY, SA_TIME_END, 
&itr);
 
        while (1) {
                rv = saCkptSectionIterationNext(itr, &desc);
@@ -620,8 +636,18 @@
 no_read:
        saCkptCheckpointClose(h);
 
+       /*
+       LOG_PRINT("Testing if chkpoint exists after unlink/close");
+       rv = saCkptCheckpointOpen(ckpt_handle, &name, NULL,
+                                 SA_CKPT_CHECKPOINT_READ, 0, &h);
+       if (rv != SA_AIS_OK) {
+               LOG_PRINT("Checkpoint was not removed!!!");
+               saCkptCheckpointClose(h);
+       } else
+               LOG_PRINT("   rv == %d", rv);
+       */
+
        free(bitmap);
-       EXIT();
        return rtn;
 }
 
@@ -631,7 +657,6 @@
        struct clog_cpg *entry, *tmp;
        struct checkpoint_data *cp;
 
-       ENTER();
        list_for_each_entry_safe(entry, tmp, &clog_cpg_list, list) {
                r = cpg_dispatch(entry->handle, CPG_DISPATCH_ALL);
                if (r != SA_AIS_OK)
@@ -666,7 +691,6 @@
                        }
                }
        }
-       EXIT();
        return (r == SA_AIS_OK) ? 0 : -1;  /* FIXME: good error number? */
 }
 
@@ -681,8 +705,6 @@
        struct clog_tfr *startup_tfr = NULL;
        struct clog_cpg *match;
 
-       ENTER();
-
        if (msg_len != (sizeof(*tfr) + tfr->data_size))
                LOG_ERROR("Badly sized message recieved from cluster.");
 
@@ -835,7 +857,6 @@
                if (response)
                        sprintf(debugging[idx] + len, ", RSPR=%u", nodeid);
        }
-       EXIT();
 }
 
 static void cpg_config_callback(cpg_handle_t handle, struct cpg_name *gname,
@@ -849,8 +870,6 @@
        struct clog_cpg *match, *tmp;
        uint32_t lowest = 0xDEAD;
 
-       ENTER();
-
        memberz = member_list_entries;
 
        LOG_DBG("****** CPG config callback **[%s]**",
@@ -990,21 +1009,20 @@
 
 out:
        if (lowest != match->lowest_id)
-               LOG_DBG("[%s]  Server change %u -> %u (%u %s)",
-                       SHORT_UUID(match->name.value),
-                       lowest, match->lowest_id,
-                       (joined_list_entries) ? joined_list[0].nodeid : 
left_list[0].nodeid,
-                       (joined_list_entries && (member_list_entries == 1)) ? 
-                       "is first to join" : (joined_list_entries) ? "joined" : 
"left");
+               LOG_PRINT("[%s]  Server change %u -> %u (%u %s)",
+                         SHORT_UUID(match->name.value),
+                         lowest, match->lowest_id,
+                         (joined_list_entries) ? joined_list[0].nodeid : 
left_list[0].nodeid,
+                         (joined_list_entries && (member_list_entries == 1)) ? 
+                         "is first to join" : (joined_list_entries) ? "joined" 
: "left");
        else
-               LOG_DBG("[%s]  Server unchanged at %u (%u %s)",
-                       SHORT_UUID(match->name.value), lowest,
-                       (joined_list_entries) ? joined_list[0].nodeid : 
left_list[0].nodeid,
-                       (joined_list_entries) ? "joined" : "left");
+               LOG_PRINT("[%s]  Server unchanged at %u (%u %s)",
+                         SHORT_UUID(match->name.value), lowest,
+                         (joined_list_entries) ? joined_list[0].nodeid : 
left_list[0].nodeid,
+                         (joined_list_entries) ? "joined" : "left");
 
        if (joined_list_entries && (joined_list[0].nodeid == my_cluster_id))
                doit = 25;
-       EXIT();
 }
 
 cpg_callbacks_t cpg_callbacks = {
@@ -1019,8 +1037,6 @@
        struct clog_cpg *new;
        struct clog_cpg *tmp, *tmp2;
 
-       ENTER();
-
        list_for_each_entry_safe(tmp, tmp2, &clog_cpg_list, list)
                if (!strncmp(tmp->name.value, str, CPG_MAX_NAME_LENGTH)) {
                        LOG_ERROR("Log entry already exists: %s", str);
@@ -1030,7 +1046,6 @@
        new = malloc(sizeof(*new));
        if (!new) {
                LOG_ERROR("Unable to allocate memory for clog_cpg");
-               EXIT();
                return -ENOMEM;
        }
        memset(new, 0, sizeof(*new));
@@ -1041,7 +1056,6 @@
        if (!new->startup_queue) {
                free(new);
                LOG_ERROR("Unable to allocate memory for clog_cpg");
-               EXIT();
                return -ENOMEM;
        }
        INIT_LIST_HEAD(&(new->startup_queue->list));
@@ -1056,14 +1070,12 @@
        r = cpg_initialize(&new->handle, &cpg_callbacks);
        if (r != SA_AIS_OK) {
                LOG_ERROR("cpg_initialize failed:  Cannot join cluster");
-               EXIT();
                return -EPERM;
        }
 
        r = cpg_join(new->handle, &new->name);
        if (r != SA_AIS_OK) {
                LOG_ERROR("cpg_join failed:  Cannot join cluster");
-               EXIT();
                return -EPERM;
        }
 
@@ -1075,7 +1087,6 @@
        cpg_fd_get(new->handle, &r);
        links_register(r, "cluster", do_cluster_work, NULL);
 
-       EXIT();
        return 0;
 }
 
@@ -1084,7 +1095,6 @@
        int r;
        struct clog_cpg *del, *tmp;
 
-       ENTER();
        list_for_each_entry_safe(del, tmp, &clog_cpg_list, list)
                if (!strncmp(del->name.value, str, CPG_MAX_NAME_LENGTH)) {
                        r = cpg_leave(del->handle, &del->name);
@@ -1093,7 +1103,6 @@
                        break;
                }
 
-       EXIT();
        return 0;
 }
 
@@ -1101,8 +1110,6 @@
 {
        SaAisErrorT rv;
 
-       ENTER();
-
        {
                int i;
                for(i = 0; i < DEBUGGING_HISTORY; i++)
@@ -1112,12 +1119,9 @@
        INIT_LIST_HEAD(&clog_cpg_list);
        rv = saCkptInitialize(&ckpt_handle, &callbacks, &version);
 
-       if (rv != SA_AIS_OK) {
-               EXIT("saCkptInitialize failure");
+       if (rv != SA_AIS_OK)
                return EXIT_CLUSTER_CKPT_INIT;
-       }
 
-       EXIT();
        return 0;
 }
 

Reply via email to