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