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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel