CVSROOT:        /cvs/cluster
Module name:    cluster
Changes by:     [EMAIL PROTECTED]       2007-11-30 21:01:27

Modified files:
        rgmanager/src/clulib: msg_socket.c vft.c 
        rgmanager/src/daemons: depends.c reslist.c restree.c 

Log message:
        Merge from RHEL5 branch, pass 3

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/clulib/msg_socket.c.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/clulib/vft.c.diff?cvsroot=cluster&r1=1.21&r2=1.22
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/depends.c.diff?cvsroot=cluster&r1=1.3&r2=1.4
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/reslist.c.diff?cvsroot=cluster&r1=1.20&r2=1.21
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/restree.c.diff?cvsroot=cluster&r1=1.38&r2=1.39

--- cluster/rgmanager/src/clulib/msg_socket.c   2007/10/26 19:02:43     1.2
+++ cluster/rgmanager/src/clulib/msg_socket.c   2007/11/30 21:01:27     1.3
@@ -44,7 +44,7 @@
 
        memset(&sun, 0, sizeof(sun));
        sun.sun_family = PF_LOCAL;
-       snprintf(sun.sun_path, sizeof(sun.sun_path), RGMGR_SOCK);
+       snprintf(sun.sun_path, sizeof(sun.sun_path), "%s", RGMGR_SOCK);
 
        sock = socket(PF_LOCAL, SOCK_STREAM, 0);
        if (sock < 0) {
--- cluster/rgmanager/src/clulib/vft.c  2007/07/23 20:49:13     1.21
+++ cluster/rgmanager/src/clulib/vft.c  2007/11/30 21:01:27     1.22
@@ -734,7 +734,7 @@
        if (!fp)
                return -1;
 
-#if defined(__sparc__) || defined(__sparc64__)
+#if defined(__sparc__) || defined(__hppa__) || defined(__sparc64__) || defined 
(__hppa64__)
        rv = fscanf(fp,"%ld.%d %ld.%d\n", &tv->tv_sec, &tv->tv_usec,
                    &junk.tv_sec, &junk.tv_usec);
 #else
@@ -1368,6 +1368,7 @@
 {
        vf_msg_t *hdrp;
        int ret;
+       key_node_t *kn;
 
        if ((nbytes <= 0) || (nbytes < sizeof(generic_msg_hdr)) ||
            (msgp->gh_command != VF_MESSAGE))
@@ -1422,8 +1423,13 @@
 #endif
                pthread_mutex_lock(&key_list_mutex);
                vf_buffer_commit(msgp->gh_arg2);
-               ret = (vf_resolve_views(kn_find_trans(msgp->gh_arg2)) ?
-                       VFR_COMMIT : VFR_OK);
+               kn = kn_find_trans(msgp->gh_arg2);
+               if (!kn) {
+                       pthread_mutex_unlock(&key_list_mutex);
+                       return VFR_OK;
+               }
+
+               ret = (vf_resolve_views(kn) ? VFR_COMMIT : VFR_OK);
                pthread_mutex_unlock(&key_list_mutex);
                return ret;
 
--- cluster/rgmanager/src/daemons/depends.c     2007/03/20 17:09:57     1.3
+++ cluster/rgmanager/src/daemons/depends.c     2007/11/30 21:01:27     1.4
@@ -36,6 +36,8 @@
  */
 #include <string.h>
 #include <list.h>
+#include <time.h>
+#include <restart_counter.h>
 #include <clulog.h>
 #include <resgroup.h>
 #include <reslist.h>
--- cluster/rgmanager/src/daemons/reslist.c     2007/11/30 20:36:17     1.20
+++ cluster/rgmanager/src/daemons/reslist.c     2007/11/30 21:01:27     1.21
@@ -824,7 +824,6 @@
        }
 
        if (!found) {
-               //printf("No attributes found for %s\n", base);
                destroy_resource(res);
                return NULL;
        }
--- cluster/rgmanager/src/daemons/restree.c     2007/11/30 20:36:17     1.38
+++ cluster/rgmanager/src/daemons/restree.c     2007/11/30 21:01:27     1.39
@@ -561,7 +561,6 @@
                free(ref);
        }
 
-
        curres->r_refs++;
 
        *newnode = node;
@@ -822,7 +821,6 @@
 {
        resource_node_t *node;
        int x, y;
-       char *val;
 
        list_do(tree, node) {
                for (x = 0; x < level; x++)
@@ -847,14 +845,11 @@
                     node->rn_resource->r_attrs[x].ra_value; x++) {
                        for (y = 0; y < level+1; y++)
                                printf("  ");
-
-                       val = attr_value(node,
-                                        node->rn_resource->r_attrs[x].ra_name);
-                       if (!val &&
-                           node->rn_resource->r_attrs[x].ra_flags&RA_INHERIT)
-                               continue;
                        printf("%s = \"%s\";\n",
-                              node->rn_resource->r_attrs[x].ra_name, val);
+                              node->rn_resource->r_attrs[x].ra_name,
+                              attr_value(node,
+                                         node->rn_resource->r_attrs[x].ra_name)
+                             );
                }
 
                _print_resource_tree(&node->rn_child, level + 1);
@@ -1080,38 +1075,20 @@
        if (idx == -1) {
                if (node->rn_checked)
                        return node->rn_last_status;
-               return 0;
+               return 0;
        }
 
-       /* Clear all check levels lower than us */
-       for (x = 0; node->rn_actions[x].ra_name; x++) {
-               if (x == idx) {
-                       node->rn_actions[idx].ra_last = now;
-                       continue;
-               }
-               if (strcmp(node->rn_actions[x].ra_name, "status"))
-                       continue;
- 
-               if (node->rn_actions[x].ra_depth <
-                   node->rn_actions[idx].ra_depth)
-                       node->rn_actions[x].ra_last = now;
-       }
- 
-       /*printf("-> %s:%s %s level %d interval = %d\n",
-               node->rn_resource->r_rule->rr_type,
-               node->rn_resource->r_attrs->ra_value,
-               node->rn_actions[idx].ra_name,
-               node->rn_actions[idx].ra_depth,
-               (int)node->rn_actions[idx].ra_interval);*/
- 
-       node->rn_actions[idx].ra_last = now;
-       x = res_exec(node, RS_STATUS, NULL, node->rn_actions[idx].ra_depth);
- 
-       node->rn_last_status = x;
-       node->rn_last_depth = node->rn_actions[idx].ra_depth;
-       node->rn_checked = 1;
-       if (x == 0)
-               return 0;
+
+       node->rn_actions[idx].ra_last = now;
+       x = res_exec(node, RS_STATUS, NULL, node->rn_actions[idx].ra_depth);
+
+       node->rn_last_status = x;
+       node->rn_last_depth = node->rn_actions[idx].ra_depth;
+       node->rn_checked = 1;
+
+       if (x == 0)
+               return 0;
+
        if (!has_recover)
                return x;
 
@@ -1200,7 +1177,6 @@
    @param realop       Operation to perform if either first is found,
                        or no first is declared (in which case, all nodes
                        in the subtree).
-   @param node         Node we're operating on
    @see                        _res_op_by_level res_exec
  */
 static inline int
@@ -1306,9 +1282,23 @@
 
        }
 
-       if (node->rn_child)
-               rv |= _res_op_by_level(&node, me?NULL:first, ret, op);
+       if (node->rn_child) {
+                rv |= _res_op_by_level(&node, me?NULL:first, ret, op);
 
+               /* If one or more child resources are failed and at least one
+                 of them is not an independent subtree then let's check if
+                 if we are an independent subtree.  If so, mark ourself
+                 and all our children as failed and return a flag stating
+                 that this section is recoverable apart from siblings in
+                 the resource tree. */
+               if (op == RS_STATUS && (rv & SFL_FAILURE) &&
+                   (node->rn_flags & RF_INDEPENDENT)) {
+                       mark_nodes(node, RES_FAILED,
+                                  RF_NEEDSTART | RF_NEEDSTOP);
+                       rv = SFL_RECOVERABLE;
+               }
+       }
+                       
        /* Stop should occur after children have stopped */
        if (me && (op == RS_STOP)) {
                node->rn_flags &= ~RF_NEEDSTOP;

Reply via email to