Hi Hung,

Nice work with MBC versions.
Reviewed the patch.
Ack from me.

Thanks,
Zoran

-----Original Message-----
From: Hung Nguyen [mailto:hung.d.ngu...@dektech.com.au] 
Sent: den 21 oktober 2016 06:39
To: Zoran Milinkovic <zoran.milinko...@ericsson.com>; 
reddy.neelaka...@oracle.com
Cc: opensaf-devel@lists.sourceforge.net
Subject: [PATCH 1 of 1] imm: Store mScAbsenceAllowed as 32 bit unsigned integer 
[#2130]

 osaf/services/saf/immsv/immd/immd_cb.h    |   4 +-
 osaf/services/saf/immsv/immd/immd_main.c  |   2 +-
 osaf/services/saf/immsv/immd/immd_mbcsv.c |  32 +++++++++++++++++++++++++++---
 osaf/services/saf/immsv/immnd/ImmModel.cc |   2 +-
 osaf/services/saf/immsv/immnd/ImmModel.hh |   2 +-
 osaf/services/saf/immsv/immnd/immnd_cb.h  |   2 +-
 6 files changed, 34 insertions(+), 10 deletions(-)


Store mScAbsenceAllowed as 32 bit unsigned integer.

diff --git a/osaf/services/saf/immsv/immd/immd_cb.h 
b/osaf/services/saf/immsv/immd/immd_cb.h
--- a/osaf/services/saf/immsv/immd/immd_cb.h
+++ b/osaf/services/saf/immsv/immd/immd_cb.h
@@ -39,7 +39,7 @@
          IMMD_WRT_IMMND_SUBPART_VER_MIN + 1 )
 
 #define IMMSV_IMMD_MBCSV_VERSION_MIN 4
-#define IMMSV_IMMD_MBCSV_VERSION 6
+#define IMMSV_IMMD_MBCSV_VERSION 7
 
 typedef struct immd_saved_fevs_msg {
        IMMSV_FEVS fevsMsg;
@@ -139,7 +139,7 @@ typedef struct immd_cb_tag {
        bool m2PbeExtraWait;    /* true => Used only to prolong wait if both SCs
                                   have been introduced but one has not yet 
replied. */
        bool nid_started;       /* true if started by NID */
-       SaUint16T mScAbsenceAllowed; /* Non zero if SC absence is allowed (loss 
of both IMMDs/SCs).
+       SaUint32T mScAbsenceAllowed; /* Non zero if SC absence is allowed (loss 
of both IMMDs/SCs).
                                       Value is number of seconds of SC absence 
tolerated. */
        MDS_DEST payload_coord_dest; /* IMMND coord may be at payload if 
mScAbsenceAllowed is nonzero */
        uint32_t mScAbsenceVeteranMaxWait; /* Amount of seconds IMMD waits for 
veteran IMMDs after sc absence */ diff --git 
a/osaf/services/saf/immsv/immd/immd_main.c 
b/osaf/services/saf/immsv/immd/immd_main.c
--- a/osaf/services/saf/immsv/immd/immd_main.c
+++ b/osaf/services/saf/immsv/immd/immd_main.c
@@ -276,7 +276,7 @@ int main(int argc, char *argv[])
        int64_t start_time = 0LL;
        uint32_t print_at_secs = 1LL;
        int term_fd;
-       uint16_t scAbsenceAllowed = 0;
+       uint32_t scAbsenceAllowed = 0;
 
        daemonize(argc, argv);
 
diff --git a/osaf/services/saf/immsv/immd/immd_mbcsv.c 
b/osaf/services/saf/immsv/immd/immd_mbcsv.c
--- a/osaf/services/saf/immsv/immd/immd_mbcsv.c
+++ b/osaf/services/saf/immsv/immd/immd_mbcsv.c
@@ -770,11 +770,19 @@ static uint32_t mbcsv_enc_msg_resp(IMMD_
                ncs_encode_8bit(&uns8_ptr, cb->mIs2Pbe);
        }
 
-       if (peer_version >= 6) {
+       /* See ticket #2130 */
+       if (peer_version == 6) {
                uns16_ptr = ncs_enc_reserve_space(&arg->info.encode.io_uba, 
sizeof(uint16_t));
                osafassert(uns16_ptr);
                ncs_enc_claim_space(&arg->info.encode.io_uba, sizeof(uint16_t));
-               ncs_encode_16bit(&uns16_ptr, cb->mScAbsenceAllowed);
+               ncs_encode_16bit(&uns16_ptr, (uint16_t) cb->mScAbsenceAllowed);
+       }
+
+       if (peer_version >= 7) {
+               uns32_ptr = ncs_enc_reserve_space(&arg->info.encode.io_uba, 
sizeof(uint32_t));
+               osafassert(uns32_ptr);
+               ncs_enc_claim_space(&arg->info.encode.io_uba, sizeof(uint32_t));
+               ncs_encode_32bit(&uns32_ptr, cb->mScAbsenceAllowed);
        }
 
        /* Alter this to follow same pattern as logsv */ @@ -1184,16 +1192,32 
@@ static uint32_t mbcsv_dec_sync_resp(IMMD
                }
        }
 
-       if (peer_version >= 6) {
+       /* See ticket #2130 */
+       if (peer_version == 6) {
                uint16_t scAbsenceAllowed;
 
                ptr = ncs_dec_flatten_space(&arg->info.decode.i_uba, data, 
sizeof(uint16_t));
                scAbsenceAllowed = ncs_decode_16bit(&ptr);
                ncs_dec_skip_space(&arg->info.decode.i_uba, sizeof(uint16_t));
 
+               if((uint16_t) cb->mScAbsenceAllowed != scAbsenceAllowed) {
+                       LOG_ER("SC absence allowed in not the same as on active 
IMMD. "
+                                       "Active: %u, Standby: %u. Exiting.",
+                                       scAbsenceAllowed, (uint16_t) 
cb->mScAbsenceAllowed);
+                       exit(1);
+               }
+       }
+
+       if (peer_version >= 7) {
+               uint32_t scAbsenceAllowed;
+
+               ptr = ncs_dec_flatten_space(&arg->info.decode.i_uba, data, 
sizeof(uint32_t));
+               scAbsenceAllowed = ncs_decode_32bit(&ptr);
+               ncs_dec_skip_space(&arg->info.decode.i_uba, sizeof(uint32_t));
+
                if(cb->mScAbsenceAllowed != scAbsenceAllowed) {
                        LOG_ER("SC absence allowed in not the same as on active 
IMMD. "
-                                       "Active: %u, Standby: %d. Exiting.",
+                                       "Active: %u, Standby: %u. Exiting.",
                                        scAbsenceAllowed, 
cb->mScAbsenceAllowed);
                        exit(1);
                }
diff --git a/osaf/services/saf/immsv/immnd/ImmModel.cc 
b/osaf/services/saf/immsv/immnd/ImmModel.cc
--- a/osaf/services/saf/immsv/immnd/ImmModel.cc
+++ b/osaf/services/saf/immsv/immnd/ImmModel.cc
@@ -18425,7 +18425,7 @@ ImmModel::getParentDn(std::string& paren  }
 
 void
-ImmModel::setScAbsenceAllowed(SaUint16T scAbsenceAllowed)
+ImmModel::setScAbsenceAllowed(SaUint32T scAbsenceAllowed)
 {
     ObjectMap::iterator oi = sObjectMap.find(immObjectDn);
     osafassert(oi != sObjectMap.end()); diff --git 
a/osaf/services/saf/immsv/immnd/ImmModel.hh 
b/osaf/services/saf/immsv/immnd/ImmModel.hh
--- a/osaf/services/saf/immsv/immnd/ImmModel.hh
+++ b/osaf/services/saf/immsv/immnd/ImmModel.hh
@@ -493,7 +493,7 @@ public:
                                       struct ImmsvAdminOperationParam 
**rparams,
                                       SaUint64T searchcount);
 
-    void              setScAbsenceAllowed(SaUint16T scAbsenceAllowed);
+    void              setScAbsenceAllowed(SaUint32T scAbsenceAllowed);
     
     SaAisErrorT       objectSync(const ImmsvOmObjectSync* req);
     bool              fetchRtUpdate(ImmsvOmObjectSync* syncReq,
diff --git a/osaf/services/saf/immsv/immnd/immnd_cb.h 
b/osaf/services/saf/immsv/immnd/immnd_cb.h
--- a/osaf/services/saf/immsv/immnd/immnd_cb.h
+++ b/osaf/services/saf/immsv/immnd/immnd_cb.h
@@ -132,7 +132,7 @@ typedef struct immnd_cb_tag {
        bool mIsOtherScUp; //If set & this is an SC then other SC is up(2pbe).
                   //False=> *allow* 1safe 2pbe. May err conservatively (true) 
        bool mForceClean; //true => Force cleanTheHouse to run once *now*.
-       SaUint16T mScAbsenceAllowed; /* Non zero if SC absence is allowed (loss 
of both IMMDs/SCs).
+       SaUint32T mScAbsenceAllowed; /* Non zero if SC absence is allowed (loss 
of both IMMDs/SCs).
                                       Value is number of seconds of SC absence 
tolerated. */
 
        /* Information about the IMMD */

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to