osaf/services/saf/smfsv/smfd/SmfUpgradeAction.cc    |   9 +++++++++
 osaf/services/saf/smfsv/smfd/SmfUpgradeAction.hh    |   7 +++++++
 osaf/services/saf/smfsv/smfd/SmfUpgradeProcedure.cc |  11 +++++++++++
 3 files changed, 27 insertions(+), 0 deletions(-)


Whitout the patch, ff two procedures which will be merged address
the same IMM object for creation/deletion/modify in the procInit
and/or procWrapup, multiple rollback element may receive the same DN
causing the campaign to fail.

Solution: in merging method, renumber the Id of the procInit and
procWrapup actions.

diff --git a/osaf/services/saf/smfsv/smfd/SmfUpgradeAction.cc 
b/osaf/services/saf/smfsv/smfd/SmfUpgradeAction.cc
--- a/osaf/services/saf/smfsv/smfd/SmfUpgradeAction.cc
+++ b/osaf/services/saf/smfsv/smfd/SmfUpgradeAction.cc
@@ -97,6 +97,15 @@ SmfUpgradeAction::getId()
        return m_id;
 }
 
+//------------------------------------------------------------------------------
+// changeId()
+//------------------------------------------------------------------------------
+void
+SmfUpgradeAction::changeId(int i_id)
+{
+       m_id = i_id;
+}
+
 
//================================================================================
 // Class SmfCliCommandAction
 // Purpose:
diff --git a/osaf/services/saf/smfsv/smfd/SmfUpgradeAction.hh 
b/osaf/services/saf/smfsv/smfd/SmfUpgradeAction.hh
--- a/osaf/services/saf/smfsv/smfd/SmfUpgradeAction.hh
+++ b/osaf/services/saf/smfsv/smfd/SmfUpgradeAction.hh
@@ -92,6 +92,13 @@ class SmfUpgradeAction {
 ///
        virtual int getId();
 
+///
+/// Purpose: Change action Id.
+/// @param   An int containing the new action Id.
+/// @return  None
+///
+       virtual void changeId(int i_id);
+
  private:
 
 ///
diff --git a/osaf/services/saf/smfsv/smfd/SmfUpgradeProcedure.cc 
b/osaf/services/saf/smfsv/smfd/SmfUpgradeProcedure.cc
--- a/osaf/services/saf/smfsv/smfd/SmfUpgradeProcedure.cc
+++ b/osaf/services/saf/smfsv/smfd/SmfUpgradeProcedure.cc
@@ -1164,6 +1164,9 @@ SmfUpgradeProcedure::mergeStepIntoSingle
        newStep->setMaxRetry(0);
        newStep->setRestartOption(0);
 
+       int initActionId = 1;
+       int wrapupActionId = 1;
+
         std::list < unitNameAndState > forAddRemoveAU;
         std::list < unitNameAndState > forAddRemoveDU;
        std::list < unitNameAndState > tmpDU;
@@ -1248,6 +1251,10 @@ SmfUpgradeProcedure::mergeStepIntoSingle
                        if (cbkAction != NULL) {
                                
const_cast<SmfCallbackAction*>(cbkAction)->setCallbackProcedure(this);
                        }
+                       //Renumber to action id aviod DN name collision in the 
merged procedure
+                       (*actioniter)->changeId(initActionId);
+                       initActionId++;
+
                        actioniter++;
                }
 
@@ -1261,6 +1268,10 @@ SmfUpgradeProcedure::mergeStepIntoSingle
                        if (cbkAction != NULL) {
                                
const_cast<SmfCallbackAction*>(cbkAction)->setCallbackProcedure(this);
                        }
+                       //Renumber to action id aviod DN name collision in the 
merged procedure
+                       (*actioniter)->changeId(wrapupActionId);
+                       wrapupActionId++;
+
                        actioniter++;
                }
 

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to