This patch fixes an assert in YKD where an ATTEMPT message is received while the state machine is in SENDSTATE. I have no idea if it's theoretically correct or not, but it works on my 16 node cluster.

It also fixes a send routine so it puts the right type of message in the header (now that we're looking it that matters!)

Chrissie
Index: exec/vsf_ykd.c
===================================================================
--- exec/vsf_ykd.c      (revision 2761)
+++ exec/vsf_ykd.c      (working copy)
@@ -193,7 +193,7 @@
        struct ykd_header header;
        int res;
 
-       header.id = YKD_HEADER_SENDSTATE;
+       header.id = YKD_HEADER_ATTEMPT;
 
        iovec.iov_base = (char *)&header;
        iovec.iov_len = sizeof (struct ykd_header);
@@ -343,6 +343,7 @@
        int all_received = 1;
        int state_position = 0;
        int i;
+       struct ykd_header *header = (struct ykd_header *)msg;
        char *msg_state = (char *)msg + sizeof (struct ykd_header);
 
        /*
@@ -390,6 +391,13 @@
                }
        }
 
+       /*
+        * Ignore messages from a different state
+        */
+       if ((ykd_mode == YKD_MODE_SENDSTATE && header->id == 
YKD_HEADER_ATTEMPT) ||
+           (ykd_mode == YKD_MODE_ATTEMPT && header->id == 
YKD_HEADER_SENDSTATE))
+               return;
+
        switch (ykd_mode) {
                case YKD_MODE_SENDSTATE:
                        assert (msg_len > sizeof (struct ykd_header));
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to