osaf/libs/common/immsv/include/immsv_api.h |   1 +
 osaf/services/saf/immsv/README             |  46 ++++++++++++++++++++++++++---
 osaf/services/saf/immsv/immnd/ImmModel.cc  |  31 ++++++++++++++++++++
 osaf/services/saf/immsv/immnd/ImmModel.hh  |   1 +
 osaf/services/saf/immsv/immnd/immnd_init.h |   1 +
 5 files changed, 74 insertions(+), 6 deletions(-)


New message types and new server states have been added to the immsv
in OpenSAF 4.5. During upgrades from older OpenSAF releases to the
OpenSAF 4.5 release, usage of the new message types and new states would
cause problems for the mixed version cluster.

The OpensAF IMM uses the opensafImmNostdFlags in the imm service object:
'opensafImm=opensafImm,safApp=safImmService' for managing such transient
and special functionality. This changeset allocates bit 5 of the bitvector
for this purpose. See osaf/services/saf/immsv/README for details.

diff --git a/osaf/libs/common/immsv/include/immsv_api.h 
b/osaf/libs/common/immsv/include/immsv_api.h
--- a/osaf/libs/common/immsv/include/immsv_api.h
+++ b/osaf/libs/common/immsv/include/immsv_api.h
@@ -119,6 +119,7 @@ extern "C" {
 #define OPENSAF_IMM_FLAG_PRT41_ALLOW 0x00000002
 #define OPENSAF_IMM_FLAG_PRT43_ALLOW 0x00000004
 #define OPENSAF_IMM_FLAG_2PBE1_ALLOW 0x00000008
+#define OPENSAF_IMM_FLAG_PRT45_ALLOW 0x00000010
 
 
 #define OPENSAF_IMM_SERVICE_NAME "safImmService"
diff --git a/osaf/services/saf/immsv/README b/osaf/services/saf/immsv/README
--- a/osaf/services/saf/immsv/README
+++ b/osaf/services/saf/immsv/README
@@ -1625,12 +1625,7 @@ has the meaning of 'flags-ON'. Operation
 This flag needs to be turned ON when the upgrade to OpenSAF 4.3 has been
 successfully completed. Thus in the final steps of the upgrade. A cluster
 start/restart of an OpenSAF4.3 system will always automatically turn on
-this flag. In summary:
-
-Bit 1 controls schema (imm class) changes allowed or not.
-Bit 2 controls OpenSAF4.1 protocols allowed or not.
-Bit 3 controls OpenSAF4.3 protocols allowed or not.
-Bit 4 controls 2PBE oneSafe2PBE (see 2PBE feature in OpenSAF4.4 below).
+this flag. 
 
 2PBE Allow IMM PBE to be configured without shared file system (4.4)
 ===================================================================
@@ -1870,6 +1865,45 @@ Currently the default OI callback timeou
 recommended to set an OI callback timeout to a value higher than 10 seconds, 
since
 that is the default om/oi-client side timeout for synchronous downcalls. 
 
+
+Notes on upgrading from OpenSAF 4.[1,2,3,4] to OpenSAF 4.5
+==========================================================
+Several enhancements in OpenSAF4.5 add new message types or add new imm server 
states
+for ccb handling (#798,  #799, #16). During a rolling upgrade from an earlier 
OpenSAF
+release to the 4.5 release there will be nodes executing the older release 
concurrently
+with nodes executing OpenSAF 4.5. Nodes executing the earlier release will not
+recognize new message types originating from nodes executing 4.5 and messages 
from
+nodes executing the old release may interfere with the extended state machine 
for ccbs
+in new 4.5 nodes.
+
+Because of this upgrade issue, the older more restrictive behavior is still 
enforced
+in OpenSAF 4.5 unless a flag is toggled on in the opensafImmNostdFlags runtime
+attribute in the object: opensafImm=opensafImm,safApp=safImmService.
+The following is the shell command:
+
+        immadm -o 1 -p opensafImmNostdFlags:SA_UINT32_T:16 \
+           opensafImm=opensafImm,safApp=safImmService
+
+This will set bit 5 of the 'opensafImmNostdFlags' runtime attribute inside the 
immsv.
+Operation-id '1' invoked on the object:
+
+ 'opensafImm=opensafImm,safApp=safImmService'
+
+has the meaning of 'flags-ON'. Operation-id '2' has the meaning of 'flags-OFF'.
+This flag (and possibly other relevant flags) needs to be toggled ON when the 
upgrade
+to OpenSAF 4.5 has been successfully completed. This would be in some final 
step of
+the upgrade. Any cluster start/restart of an OpenSAF4.5 system will always
+automatically toggle on relevant flags. 
+
+In summary:
+
+Bit 1 controls schema (imm class) changes allowed or not.
+Bit 2 controls OpenSAF4.1 protocols allowed or not.
+Bit 3 controls OpenSAF4.3 protocols allowed or not.
+Bit 4 controls 2PBE oneSafe2PBE (see 2PBE feature in OpenSAF4.4 above).
+Bit 5 controls OpenSAF4.5 protocols allowed or not.
+
+
 ----------------------------------------
 DEPENDENCIES
 ============
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
@@ -890,6 +890,14 @@ immModel_oneSafe2PBEAllowed(IMMND_CB *cb
 }
 
 SaBoolT
+immModel_protocol45Allowed(IMMND_CB *cb)
+{
+    return (ImmModel::instance(&cb->immModel)->protocol45Allowed()) ?
+        SA_TRUE : SA_FALSE;
+}
+
+
+SaBoolT
 immModel_purgeSyncRequest(IMMND_CB *cb, SaUint32T clientId)
 {
     return (ImmModel::instance(&cb->immModel)->purgeSyncRequest(clientId)) ?
@@ -3282,6 +3290,28 @@ ImmModel::protocol43Allowed()
 }
 
 bool
+ImmModel::protocol45Allowed()
+{
+    //TRACE_ENTER();
+    ObjectMap::iterator oi = sObjectMap.find(immObjectDn);
+    if(oi == sObjectMap.end()) {
+        TRACE_LEAVE();
+        return false;
+    }
+
+    ObjectInfo* immObject =  oi->second;
+    ImmAttrValueMap::iterator avi = 
+        immObject->mAttrValueMap.find(immAttrNostFlags);
+    osafassert(avi != immObject->mAttrValueMap.end());
+    osafassert(!(avi->second->isMultiValued()));
+    ImmAttrValue* valuep = avi->second;
+    unsigned int noStdFlags = valuep->getValue_int();
+
+    //TRACE_LEAVE();
+    return noStdFlags & OPENSAF_IMM_FLAG_PRT45_ALLOW;
+}
+
+bool
 ImmModel::protocol41Allowed()
 {
     //TRACE_ENTER();
@@ -4078,6 +4108,7 @@ ImmModel::adminOwnerDelete(SaUint32T own
                     unsigned int noStdFlags = valuep->getValue_int();
                     noStdFlags |= OPENSAF_IMM_FLAG_PRT41_ALLOW;
                     noStdFlags |= OPENSAF_IMM_FLAG_PRT43_ALLOW;
+                    noStdFlags |= OPENSAF_IMM_FLAG_PRT45_ALLOW;
                     valuep->setValue_int(noStdFlags);
                     LOG_NO("%s changed to: 0x%x", immAttrNostFlags.c_str(), 
noStdFlags);
                     /* END Temporary code. */
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
@@ -105,6 +105,7 @@ public:
     bool                schemaChangeAllowed();
     bool                protocol41Allowed();
     bool                protocol43Allowed();
+    bool                protocol45Allowed();
     bool                oneSafe2PBEAllowed();
     bool                purgeSyncRequest(SaUint32T clientId);
     bool                verifySchemaChange(const std::string& className,
diff --git a/osaf/services/saf/immsv/immnd/immnd_init.h 
b/osaf/services/saf/immsv/immnd/immnd_init.h
--- a/osaf/services/saf/immsv/immnd/immnd_init.h
+++ b/osaf/services/saf/immsv/immnd/immnd_init.h
@@ -293,6 +293,7 @@ extern "C" {
 
        SaBoolT immModel_protocol41Allowed(IMMND_CB *cb);
        SaBoolT immModel_protocol43Allowed(IMMND_CB *cb);
+       SaBoolT immModel_protocol45Allowed(IMMND_CB *cb);
        SaBoolT immModel_oneSafe2PBEAllowed(IMMND_CB *cb);
 
        SaBoolT immModel_purgeSyncRequest(IMMND_CB *cb, SaUint32T clientId);

------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.
Get unparalleled scalability from the best Selenium testing platform available
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to