osaf/libs/common/avsv/avsv_d2nedu.c            |  35 +++++++++++++++----------
 osaf/libs/common/avsv/include/avsv_d2nmsg.h    |   4 ++-
 osaf/services/saf/avsv/avd/avd_mds.c           |  11 +++++--
 osaf/services/saf/avsv/avd/avd_util.c          |   1 +
 osaf/services/saf/avsv/avd/include/avd_mds.h   |   2 +-
 osaf/services/saf/avsv/avnd/avnd_mds.c         |  20 +++++++++++---
 osaf/services/saf/avsv/avnd/avnd_sidb.c        |  17 +++++++++--
 osaf/services/saf/avsv/avnd/include/avnd_mds.h |   2 +-
 8 files changed, 62 insertions(+), 30 deletions(-)


When the AMF node director receives the SUSI ASGN message, it reads SI rank
from IMM. If IMM does not respond in a timely manner the amfnd process will be
aborted and the node restarted (by the AMF watchdog).

By including SI rank (an int) in the SUSI ASGN msg, the read from IMM can be
skipped/done conditionally based on the amfd MDS version.

diff --git a/osaf/libs/common/avsv/avsv_d2nedu.c 
b/osaf/libs/common/avsv/avsv_d2nedu.c
--- a/osaf/libs/common/avsv/avsv_d2nedu.c
+++ b/osaf/libs/common/avsv/avsv_d2nedu.c
@@ -56,6 +56,7 @@ uint32_t avsv_edp_dnd_msg(EDU_HDL *hdl, 
        uint32_t rc = NCSCC_RC_SUCCESS;
        AVSV_DND_MSG *struct_ptr = NULL, **d_ptr = NULL;
        uint16_t ver3 = AVSV_AVD_AVND_MSG_FMT_VER_3;
+       uint16_t ver5 = AVSV_AVD_AVND_MSG_FMT_VER_5;
 
        EDU_INST_SET avsv_dnd_msg_rules[] = {
                {EDU_START, avsv_edp_dnd_msg, 0, 0, 0,
@@ -217,6 +218,12 @@ uint32_t avsv_edp_dnd_msg(EDU_HDL *hdl, 
                 (long)&((AVSV_DND_MSG *)0)->msg_info.d2n_su_si_assign.su_name, 
0, NULL},
                {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0,
                 (long)&((AVSV_DND_MSG *)0)->msg_info.d2n_su_si_assign.si_name, 
0, NULL},
+
+               /* Include SI rank in version 5 and higher */
+               {EDU_VER_GE, NULL, 0, 0, 2, 0, 0, (EDU_EXEC_RTINE)((uint16_t 
*)(&(ver5)))},
+               {EDU_EXEC, ncs_edp_uns32, 0, 0, 0,
+                (long)&((AVSV_DND_MSG *)0)->msg_info.d2n_su_si_assign.si_rank, 
0, NULL},
+
                {EDU_EXEC, m_NCS_EDP_SAAMFHASTATET, 0, 0, 0,
                 (long)&((AVSV_DND_MSG 
*)0)->msg_info.d2n_su_si_assign.ha_state, 0, NULL},
                {EDU_VER_GE, NULL,   0, 0, 2, 0, 0, (EDU_EXEC_RTINE)((uint16_t 
*)(&(ver3)))},
@@ -410,20 +417,20 @@ int avsv_dnd_msg_test_type_fnc(NCSCONTEX
                LCL_JMP_OFFSET_AVSV_D2N_REG_SU_MSG = 48,
                LCL_JMP_OFFSET_AVSV_D2N_REG_COMP_MSG = 53,
                LCL_JMP_OFFSET_AVSV_D2N_INFO_SU_SI_ASSIGN_MSG = 58,
-               LCL_JMP_OFFSET_AVSV_D2N_PG_TRACK_ACT_RSP_MSG = 68,
-               LCL_JMP_OFFSET_AVSV_D2N_PG_UPD_MSG = 75,
-               LCL_JMP_OFFSET_AVSV_D2N_OPERATION_REQUEST_MSG = 79,
-               LCL_JMP_OFFSET_AVSV_D2N_PRESENCE_SU_MSG = 82,
-               LCL_JMP_OFFSET_AVSV_D2N_DATA_VERIFY_MSG = 86,
-               LCL_JMP_OFFSET_AVSV_D2N_DATA_ACK_MSG = 91,
-               LCL_JMP_OFFSET_AVSV_D2N_SHUTDOWN_APP_SU_MSG = 93,
-               LCL_JMP_OFFSET_AVSV_D2N_SET_LEDS_MSG = 95,
-               LCL_JMP_OFFSET_AVSV_N2D_COMP_VALID_MSG = 97,
-               LCL_JMP_OFFSET_AVSV_D2N_COMP_VALID_RESP_MSG = 105,
-               LCL_JMP_OFFSET_AVSV_D2N_ROLE_CHANGE_MSG = 109,
-               LCL_JMP_OFFSET_AVSV_D2N_ADMIN_OP_REQ_MSG = 112,
-               LCL_JMP_OFFSET_AVSV_D2N_HEARTBEAT_MSG = 116,
-               LCL_JMP_OFFSET_AVSV_D2N_REBOOT_MSG = 117
+               LCL_JMP_OFFSET_AVSV_D2N_PG_TRACK_ACT_RSP_MSG = 70,
+               LCL_JMP_OFFSET_AVSV_D2N_PG_UPD_MSG = 77,
+               LCL_JMP_OFFSET_AVSV_D2N_OPERATION_REQUEST_MSG = 81,
+               LCL_JMP_OFFSET_AVSV_D2N_PRESENCE_SU_MSG = 84,
+               LCL_JMP_OFFSET_AVSV_D2N_DATA_VERIFY_MSG = 88,
+               LCL_JMP_OFFSET_AVSV_D2N_DATA_ACK_MSG = 93,
+               LCL_JMP_OFFSET_AVSV_D2N_SHUTDOWN_APP_SU_MSG = 95,
+               LCL_JMP_OFFSET_AVSV_D2N_SET_LEDS_MSG = 97,
+               LCL_JMP_OFFSET_AVSV_N2D_COMP_VALID_MSG = 99,
+               LCL_JMP_OFFSET_AVSV_D2N_COMP_VALID_RESP_MSG = 107,
+               LCL_JMP_OFFSET_AVSV_D2N_ROLE_CHANGE_MSG = 111,
+               LCL_JMP_OFFSET_AVSV_D2N_ADMIN_OP_REQ_MSG = 114,
+               LCL_JMP_OFFSET_AVSV_D2N_HEARTBEAT_MSG = 118,
+               LCL_JMP_OFFSET_AVSV_D2N_REBOOT_MSG = 119
        };
        AVSV_DND_MSG_TYPE type;
 
diff --git a/osaf/libs/common/avsv/include/avsv_d2nmsg.h 
b/osaf/libs/common/avsv/include/avsv_d2nmsg.h
--- a/osaf/libs/common/avsv/include/avsv_d2nmsg.h
+++ b/osaf/libs/common/avsv/include/avsv_d2nmsg.h
@@ -40,13 +40,14 @@
 #include <stdbool.h>
 
 /* In Service upgrade support */
-#define AVND_MDS_SUB_PART_VERSION   4
+#define AVND_MDS_SUB_PART_VERSION   5
 
 /* Message format versions */
 #define AVSV_AVD_AVND_MSG_FMT_VER_1    1
 #define AVSV_AVD_AVND_MSG_FMT_VER_2    2
 #define AVSV_AVD_AVND_MSG_FMT_VER_3    3
 #define AVSV_AVD_AVND_MSG_FMT_VER_4    4
+#define AVSV_AVD_AVND_MSG_FMT_VER_5    5
 
 /* Internode/External Components Validation result */
 typedef enum {
@@ -470,6 +471,7 @@ typedef struct avsv_d2n_info_su_si_assig
        bool single_csi; /* To differentiate single csi assignment from SI 
assignment.*/
        uint32_t num_assigns;
        AVSV_SUSI_ASGN *list;
+       uint32_t si_rank;
 } AVSV_D2N_INFO_SU_SI_ASSIGN_MSG_INFO;
 
 typedef struct avsv_d2n_pg_track_act_rsp_msg_info_tag {
diff --git a/osaf/services/saf/avsv/avd/avd_mds.c 
b/osaf/services/saf/avsv/avd/avd_mds.c
--- a/osaf/services/saf/avsv/avd/avd_mds.c
+++ b/osaf/services/saf/avsv/avd/avd_mds.c
@@ -42,14 +42,17 @@
 #include <avd_msg.h>
 #include "avd.h"
 
-const MDS_CLIENT_MSG_FORMAT_VER 
avd_avnd_msg_fmt_map_table[AVD_AVND_SUBPART_VER_MAX] = {
+const MDS_CLIENT_MSG_FORMAT_VER avd_avnd_msg_fmt_map_table[] = {
        AVSV_AVD_AVND_MSG_FMT_VER_1, AVSV_AVD_AVND_MSG_FMT_VER_2,
-       AVSV_AVD_AVND_MSG_FMT_VER_3, AVSV_AVD_AVND_MSG_FMT_VER_4};
+       AVSV_AVD_AVND_MSG_FMT_VER_3, AVSV_AVD_AVND_MSG_FMT_VER_4,
+       AVSV_AVD_AVND_MSG_FMT_VER_5
+};
 
-const MDS_CLIENT_MSG_FORMAT_VER 
avd_avd_msg_fmt_map_table[AVD_AVD_SUBPART_VER_MAX] = {
+const MDS_CLIENT_MSG_FORMAT_VER avd_avd_msg_fmt_map_table[] = {
        AVD_AVD_MSG_FMT_VER_1, AVD_AVD_MSG_FMT_VER_2,
        AVD_AVD_MSG_FMT_VER_3, AVD_AVD_MSG_FMT_VER_4,
-       AVD_AVD_MSG_FMT_VER_5};
+       AVD_AVD_MSG_FMT_VER_5
+};
 
 /* fwd decl */
 
diff --git a/osaf/services/saf/avsv/avd/avd_util.c 
b/osaf/services/saf/avsv/avd/avd_util.c
--- a/osaf/services/saf/avsv/avd/avd_util.c
+++ b/osaf/services/saf/avsv/avd/avd_util.c
@@ -930,6 +930,7 @@ uint32_t avd_snd_susi_msg(AVD_CL_CB *cb,
 
                susi_msg->msg_info.d2n_su_si_assign.si_name = susi->si->name;
                susi_msg->msg_info.d2n_su_si_assign.ha_state = susi->state;
+               susi_msg->msg_info.d2n_su_si_assign.si_rank = 
susi->si->saAmfSIRank;
 
                /* Fill the SU SI pointer to l_susi which will be used from now
                 * for information related to this SU SI
diff --git a/osaf/services/saf/avsv/avd/include/avd_mds.h 
b/osaf/services/saf/avsv/avd/include/avd_mds.h
--- a/osaf/services/saf/avsv/avd/include/avd_mds.h
+++ b/osaf/services/saf/avsv/avd/include/avd_mds.h
@@ -33,7 +33,7 @@
 
 /* In Service upgrade support */
 #define AVD_MDS_SUB_PART_VERSION_4 4
-#define AVD_MDS_SUB_PART_VERSION   5
+#define AVD_MDS_SUB_PART_VERSION   6
 
 #define AVD_AVND_SUBPART_VER_MIN   1
 #define AVD_AVND_SUBPART_VER_MAX   4
diff --git a/osaf/services/saf/avsv/avnd/avnd_mds.c 
b/osaf/services/saf/avsv/avnd/avnd_mds.c
--- a/osaf/services/saf/avsv/avnd/avnd_mds.c
+++ b/osaf/services/saf/avsv/avnd/avnd_mds.c
@@ -37,11 +37,21 @@
 #include "avsv_n2avaedu.h"
 #include "ncsencdec_pub.h"
 
-const MDS_CLIENT_MSG_FORMAT_VER 
avnd_avd_msg_fmt_map_table[AVND_AVD_SUBPART_VER_MAX] =
-    { AVSV_AVD_AVND_MSG_FMT_VER_1, AVSV_AVD_AVND_MSG_FMT_VER_2, 
AVSV_AVD_AVND_MSG_FMT_VER_3, AVSV_AVD_AVND_MSG_FMT_VER_4};
-const MDS_CLIENT_MSG_FORMAT_VER 
avnd_avnd_msg_fmt_map_table[AVND_AVND_SUBPART_VER_MAX] =
-    { AVSV_AVND_AVND_MSG_FMT_VER_1 };
-const MDS_CLIENT_MSG_FORMAT_VER 
avnd_ava_msg_fmt_map_table[AVND_AVA_SUBPART_VER_MAX] = { 
AVSV_AVND_AVA_MSG_FMT_VER_1 };
+/* The table is indexed with peer version minus 1, it should return the
+ * corresponding node director MDS version */
+const MDS_CLIENT_MSG_FORMAT_VER avnd_avd_msg_fmt_map_table[] = {
+       AVSV_AVD_AVND_MSG_FMT_VER_1, AVSV_AVD_AVND_MSG_FMT_VER_2,
+       AVSV_AVD_AVND_MSG_FMT_VER_3, AVSV_AVD_AVND_MSG_FMT_VER_4,
+       AVSV_AVD_AVND_MSG_FMT_VER_4, AVSV_AVD_AVND_MSG_FMT_VER_5
+};
+
+const MDS_CLIENT_MSG_FORMAT_VER avnd_avnd_msg_fmt_map_table[] = {
+       AVSV_AVND_AVND_MSG_FMT_VER_1
+};
+
+const MDS_CLIENT_MSG_FORMAT_VER avnd_ava_msg_fmt_map_table[] = {
+       AVSV_AVND_AVA_MSG_FMT_VER_1
+};
 
 /* static function declarations */
 
diff --git a/osaf/services/saf/avsv/avnd/avnd_sidb.c 
b/osaf/services/saf/avsv/avnd/avnd_sidb.c
--- a/osaf/services/saf/avsv/avnd/avnd_sidb.c
+++ b/osaf/services/saf/avsv/avnd/avnd_sidb.c
@@ -156,6 +156,10 @@ static uint32_t get_sirank(const SaNameT
        SaVersionT immVersion = {'A', 2, 1};
        uint32_t rank = -1; // lowest possible rank if uninitialized
 
+       // TODO remove, just for test
+       LOG_NO("get_sirank %s", dn->value);
+
+       TRACE_ENTER2("%s", dn->value);
        immutil_saImmOmInitialize(&immOmHandle, NULL, &immVersion);
        immutil_saImmOmAccessorInitialize(immOmHandle, &accessorHandle);
 
@@ -220,6 +224,7 @@ AVND_SU_SI_REC *avnd_su_si_rec_add(AVND_
         */
        /* update the si-name (key) */
        memcpy(&si_rec->name, &param->si_name, sizeof(SaNameT));
+       si_rec->rank = param->si_rank;
        si_rec->curr_state = param->ha_state;
 
        /*
@@ -246,10 +251,13 @@ AVND_SU_SI_REC *avnd_su_si_rec_add(AVND_
 
        /* Add to global SI list sorted by rank if appl SU */
        if (!su->is_ncs) {
-               uint32_t res;
-               si_rec->rank = get_sirank(&param->si_name);
+               /* SI rank was introduced in director version 6, if the 
director is
+                * older then that, read SI rank from IMM */
+               if (cb->avd_mds_ver < 6)
+                       si_rec->rank = get_sirank(&param->si_name);
+
                si_rec->cb_dll_node.key = (uint8_t *)&si_rec->rank;
-               res = ncs_db_link_list_add(&cb->si_list, &si_rec->cb_dll_node);
+               uint32_t res = ncs_db_link_list_add(&cb->si_list, 
&si_rec->cb_dll_node);
                osafassert(res == NCSCC_RC_SUCCESS);
        }
 
@@ -268,7 +276,8 @@ AVND_SU_SI_REC *avnd_su_si_rec_add(AVND_
                csi_param = csi_param->next;
        }
 
-       TRACE_1("SU-SI record added, SU= %s : 
SI=%s",param->su_name.value,param->si_name.value);
+       TRACE_1("SU-SI record added, '%s', '%s', rank:%u", param->su_name.value,
+                       param->si_name.value, si_rec->rank);
        return si_rec;
 
  err:
diff --git a/osaf/services/saf/avsv/avnd/include/avnd_mds.h 
b/osaf/services/saf/avsv/avnd/include/avnd_mds.h
--- a/osaf/services/saf/avsv/avnd/include/avnd_mds.h
+++ b/osaf/services/saf/avsv/avnd/include/avnd_mds.h
@@ -31,7 +31,7 @@
 #define AVND_MDS_H
 
 #define AVND_AVD_SUBPART_VER_MIN   1
-#define AVND_AVD_SUBPART_VER_MAX   4
+#define AVND_AVD_SUBPART_VER_MAX   5
 
 #define AVND_AVND_SUBPART_VER_MIN   1
 #define AVND_AVND_SUBPART_VER_MAX   1

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to