Hi Alex,

Tested the #2144 patch (Acknowledged by praveen on 2017/02/24) with #2145.

test scenario:
1. Campaign involves an Upgrade of the 2N  amf application version.
2. In the middle of the campaign killed the 2N application in one of the 
node, the following is observed in syslog:

Mar 24 08:32:22 SLES1 osafamfnd[22939]: NO not restarting comp because 
maintenance campaign is set: safSmfCampaign=Campaign1,safApp=safSmfService
Mar 24 08:32:22 SLES1 osafsmfd[22958]: ER SU: 
safSu=dummy_2n_1,safSg=SG_dummy_2n,safApp=2nApp failed after upgrade in 
campaign

But the campaign in moved to  EXECUTION_FAILED state instead of 
SA_SMF_CMPG_ERROR_DETECTED:
SLES1:~ # smf-state camp
safSmfCampaign=Campaign1,safApp=safSmfService
         state=EXECUTION_FAILED(10)
         error='safSu=dummy_2n_1,safSg=SG_dummy_2n,safApp=2nApp failed 
after upgrade'

Observation:
More analysis has to be done, why the state is not moved to 
SA_SMF_CMPG_ERROR_DETECTED.
I suggest to push the patches #2144 and #2145 at the same time(once 
#2145 is tested).


The following is the syslog snippet:
Mar 24 08:32:22 SLES1 osafsmfd[22958]: NO STEP: Create new 
SaAmfNodeSwBundle objects
Mar 24 08:32:22 SLES1 osafimmnd[22876]: NO Ccb 54 COMMITTED (SMFSERVICE)
Mar 24 08:32:22 SLES1 osafsmfd[22958]: NO STEP: Modify information model 
and set maintenance status
Mar 24 08:32:22 SLES1 osafimmnd[22876]: NO Ccb 55 COMMITTED (SMFSERVICE)
Mar 24 08:32:22 SLES1 osafamfnd[22939]: NO saAmfCompType changed to 
'safVersion=6.0.0,safCompType=Comp_2nApp_2n_1_1' for 
'safComp=Norm1,safSu=dummy_2n_1,safSg=SG_dummy_2n,safApp=2nApp'
Mar 24 08:32:22 SLES1 osafimmnd[22876]: NO Ccb 56 COMMITTED (SMFSERVICE)
Mar 24 08:32:22 SLES1 osafsmfd[22958]: NO STEP: Restart activation units
Mar 24 08:32:22 SLES1 osafamfnd[22939]: NO Admin restart requested for 
'safComp=Norm1,safSu=dummy_2n_1,safSg=SG_dummy_2n,safApp=2nApp'
Mar 24 08:32:22 SLES1 osafamfnd[22939]: NO not restarting comp because 
maintenance campaign is set: safSmfCampaign=Campaign1,safApp=safSmfService
Mar 24 08:32:22 SLES1 osafsmfd[22958]: ER SU: 
safSu=dummy_2n_1,safSg=SG_dummy_2n,safApp=2nApp failed after upgrade in 
campaign
Mar 24 08:42:22 SLES1 osafsmfd[22958]: NO Fail to invoke admin 
operation, rc=SA_AIS_ERR_TIMEOUT (5). 
dn=[safComp=Norm1,safSu=dummy_2n_1,safSg=SG_dummy_2n,safApp=2nApp], opId=[6]
Mar 24 08:42:22 SLES1 osafsmfd[22958]: NO adminOperation: 
immUtil.callAdminOperation() Fail SA_AIS_ERR_TIMEOUT (5), Failed unit is 
'safComp=Norm1,safSu=dummy_2n_1,safSg=SG_dummy_2n,safApp=2nApp'
Mar 24 08:42:22 SLES1 osafimmnd[22876]: WA IMMND - Client 3749506580751 
went down on syncronous request, discarding request
Mar 24 08:42:22 SLES1 osafimmnd[22876]: WA IMMND - Client Node Get 
Failed for cli_hdl 3749506580751
Mar 24 08:42:22 SLES1 osafsmfd[22958]: ER Failed to Restart activation units
Mar 24 08:42:22 SLES1 osafsmfd[22958]: ER Step execution failed, Try 
undoing the step
Mar 24 08:42:22 SLES1 osafsmfd[22958]: NO SmfStepStateUndoing::execute 
start undoing step.
Mar 24 08:42:22 SLES1 osafsmfd[22958]: NO STEP: Rolling back AU restart 
step 
safSmfStep=0001,safSmfProc=amfClusterProc-1,safSmfCampaign=Campaign1,safApp=safSmfService
Mar 24 08:42:22 SLES1 osafsmfd[22958]: NO STEP: Online installation of 
old software
Mar 24 08:42:22 SLES1 osafsmfnd[22955]: NO Successful start of command 
execution: /hostfs/online_install.sh bundle-old, timeout 60000
Mar 24 08:42:22 SLES1 osafsmfnd[22955]: NO Command execution OK
Mar 24 08:42:22 SLES1 osafimmnd[22876]: NO Ccb 58 COMMITTED (SMFSERVICE)
Mar 24 08:42:22 SLES1 osafsmfd[22958]: NO STEP: Reverse information 
model and set maintenance status for deactivation units
Mar 24 08:42:22 SLES1 osafimmnd[22876]: NO Ccb 59 COMMITTED (SMFSERVICE)
Mar 24 08:42:22 SLES1 osafamfnd[22939]: NO saAmfCompType changed to 
'safVersion=4.0.0,safCompType=Comp_2nApp_2n_1_1' for 
'safComp=Norm1,safSu=dummy_2n_1,safSg=SG_dummy_2n,safApp=2nApp'
Mar 24 08:42:22 SLES1 osafsmfd[22958]: NO STEP: Restart activation units
Mar 24 08:45:42 SLES1 osafsmfd[22958]: NO Fail to invoke admin 
operation, too many SA_AIS_ERR_TRY_AGAIN, giving up. 
dn=[safComp=Norm1,safSu=dummy_2n_1,safSg=SG_dummy_2n,safApp=2nApp], opId=[6]
Mar 24 08:45:42 SLES1 osafsmfd[22958]: NO adminOperation: 
immUtil.callAdminOperation() Fail SA_AIS_ERR_TRY_AGAIN (6), Failed unit 
is 'safComp=Norm1,safSu=dummy_2n_1,safSg=SG_dummy_2n,safApp=2nApp'
Mar 24 08:45:42 SLES1 osafsmfd[22958]: ER Failed to Restart activation units
Mar 24 08:45:42 SLES1 osafsmfd[22958]: ER Step undoing failed
Mar 24 08:45:42 SLES1 osafsmfd[22958]: NO Step safSmfStep=0001 in 
procedure safSmfProc=amfClusterProc-1 failed, step result 5
Mar 24 08:45:42 SLES1 osafsmfd[22958]: NO SmfCampState::procResult 
default implementation. Received response 5 from procedure 
safSmfProc=amfClusterProc-1

Thanks,
Neel.




On 2017/02/27 08:38 PM, Alex Jones wrote:
> Hi Guys,
>
>    I'd like your thoughts on whether or not we can push this now.
>
> (1) Praveen has acked the suMaintenanceCampaign changes in AMF. If I
> push this AMF change, but don't push the SMF changes, then if AMF sets
> oper state to disabled for an SU that has its suMaintenanceCampaign
> attribute set (which SMF already does), auto-repair will be disabled,
> and the SMF admin won't be told about it unless they look in the logs.
>
> (2) There is still an AMF change to not mark an SU disabled if the AMF
> node is in locked-in state, when SMF reboots the node (for rolling
> upgrade with reboot). If this change is not pushed, and the SMF changes
> are pushed, then rollback and undo will break in SMF for this case.
>
> (3) I don't think you guys have done much testing (if any) of the SMF
> patch because you wanted the AMF patch acked first, which makes sense.
> Is there enough time to test this?
>
> Alex
>
> On 02/27/2017 08:08 AM, Neelakanta Reddy wrote:
>> ------------------------------------------------------------------------
>> NOTICE: This email was received from an EXTERNAL sender
>> ------------------------------------------------------------------------
>>
>> Hi Alex,
>>
>> Are you Pushing(#2145) patch, along with #2144?
>>
>> Thanks,
>> Neel.
>>
>> On 2016/11/12 01:20 AM, Alex Jones wrote:
>>> osaf/services/saf/smfsv/smfd/SmfCampaignThread.cc | 235
>> +++++++++++++++++++++-
>>> osaf/services/saf/smfsv/smfd/SmfCampaignThread.hh | 15 +
>>> osaf/services/saf/smfsv/smfd/SmfStepTypes.cc | 32 +-
>>> 3 files changed, 263 insertions(+), 19 deletions(-)
>>>
>>>
>>> This patch adds support for section 4.2.1.3 of SMF A.01.02 spec.
>>>
>>> diff --git a/osaf/services/saf/smfsv/smfd/SmfCampaignThread.cc
>> b/osaf/services/saf/smfsv/smfd/SmfCampaignThread.cc
>>> --- a/osaf/services/saf/smfsv/smfd/SmfCampaignThread.cc
>>> +++ b/osaf/services/saf/smfsv/smfd/SmfCampaignThread.cc
>>> @@ -39,6 +39,7 @@
>>> #include "SmfUtils.hh"
>>>
>>> SmfCampaignThread *SmfCampaignThread::s_instance = NULL;
>>> +SaNtfSubscriptionIdT SmfCampaignThread::operStateSubId(1);
>>>
>>> #define SMF_RDA_RETRY_COUNT 25 /* This is taken as the csi's are
>> assigned in parallel */
>>> @@ -140,7 +141,12 @@ void SmfCampaignThread::main(NCSCONTEXT
>>> SmfCampaignThread::~SmfCampaignThread()
>>> {
>>> TRACE_ENTER();
>>> - SaAisErrorT rc = saNtfFinalize(m_ntfHandle);
>>> + SaAisErrorT rc(saNtfNotificationUnsubscribe(operStateSubId));
>>> + if (rc != SA_AIS_OK) {
>>> + LOG_ER("Failed to unsubscribe to oper state notifications %u", rc);
>>> + }
>>> +
>>> + rc = saNtfFinalize(m_ntfHandle);
>>> if (rc != SA_AIS_OK) {
>>> LOG_ER("Failed to finalize NTF handle %u", rc);
>>> }
>>> @@ -303,10 +309,14 @@ int SmfCampaignThread::initNtf(void)
>>> {
>>> SaAisErrorT rc = SA_AIS_ERR_TRY_AGAIN;
>>> SaVersionT ntfVersion = { 'A', 1, 1 };
>>> + SaNtfCallbacksT callbacks = {
>>> + ntfNotificationCallback,
>>> + 0
>>> + };
>>> unsigned int numOfTries = 50;
>>>
>>> while (rc == SA_AIS_ERR_TRY_AGAIN && numOfTries > 0) {
>>> - rc = saNtfInitialize(&m_ntfHandle, NULL, &ntfVersion);
>>> + rc = saNtfInitialize(&m_ntfHandle, &callbacks, &ntfVersion);
>>> if (rc != SA_AIS_ERR_TRY_AGAIN) {
>>> break;
>>> }
>>> @@ -319,9 +329,202 @@ int SmfCampaignThread::initNtf(void)
>>> return -1;
>>> }
>>>
>>> + // subscribe to operational state change notifications generated by AMF
>>> + rc = initNtfSubscriptions();
>>> + if (rc != SA_AIS_OK) {
>>> + LOG_ER("initNtfSubscriptions FAILED rc=%s", saf_error(rc));
>>> + return -1;
>>> + }
>>> +
>>> return 0;
>>> }
>>>
>>> +SaAisErrorT SmfCampaignThread::initNtfSubscriptions(void) {
>>> + TRACE_ENTER();
>>> + SaAisErrorT rc(SA_AIS_OK);
>>> +
>>> + do {
>>> + SaNtfStateChangeNotificationFilterT stateChangeFilter;
>>> +
>>> + SaAisErrorT rc(saNtfStateChangeNotificationFilterAllocate(
>>> + m_ntfHandle,
>>> + &stateChangeFilter,
>>> + 0,
>>> + 0,
>>> + 0,
>>> + 0,
>>> + 0,
>>> + 0));
>>> +
>>> + if (rc != SA_AIS_OK) {
>>> + LOG_ER("saNtfAttributeChangeNotificationFilterAllocate FAILED rc=%s",
>>> + saf_error(rc));
>>> + break;
>>> + }
>>> +
>>> + SaNtfNotificationTypeFilterHandlesT notificationFilterHandles = {
>>> + 0,
>>> + 0,
>>> + stateChangeFilter.notificationFilterHandle,
>>> + 0,
>>> + 0
>>> + };
>>> +
>>> + rc = saNtfNotificationSubscribe(&notificationFilterHandles,
>> operStateSubId);
>>> +
>>> + if (rc != SA_AIS_OK) {
>>> + LOG_ER("saNtfNotificationSubscribe FAILED rc=%s", saf_error(rc));
>>> + break;
>>> + }
>>> +
>>> + rc =
>> saNtfNotificationFilterFree(stateChangeFilter.notificationFilterHandle);
>>> + if (rc != SA_AIS_OK) {
>>> + LOG_ER("saNtfNotificationFilterFree FAILED rc=%s", saf_error(rc));
>>> + break;
>>> + }
>>> + } while (false);
>>> +
>>> + TRACE_LEAVE();
>>> + return rc;
>>> +}
>>> +
>>> +bool SmfCampaignThread::isAMFOperState(const SaNtfClassIdT& classId)
>> const {
>>> + TRACE_ENTER();
>>> + bool status(false);
>>> +
>>> + if (classId.vendorId == SA_NTF_VENDOR_ID_SAF &&
>>> + classId.majorId == SA_SVC_AMF &&
>>> + classId.minorId == SA_AMF_NTFID_SU_OP_STATE) {
>>> + status = true;
>>> + }
>>> +
>>> + TRACE_LEAVE2("%i", status);
>>> + return status;
>>> +}
>>> +
>>> +void SmfCampaignThread::handleStateChangeNotification(
>>> + const SaNtfStateChangeNotificationT& stateChangeNotification) {
>>> + TRACE_ENTER();
>>> + if (stateChangeNotification.notificationHeader.eventType) {
>>> + if (*stateChangeNotification.notificationHeader.eventType ==
>>> + SA_NTF_OBJECT_STATE_CHANGE) {
>>> + handleObjectStateChangeNotification(stateChangeNotification);
>>> + } else {
>>> + TRACE("ignoring state change notification with event type: %i",
>>> + *stateChangeNotification.notificationHeader.eventType);
>>> + }
>>> + }
>>> + TRACE_LEAVE();
>>> +}
>>> +
>>> +void SmfCampaignThread::handleAmfObjectStateChangeNotification(
>>> + const SaNtfStateChangeNotificationT& stateChangeNotification) {
>>> + TRACE_ENTER();
>>> +
>>> + do {
>>> + bool disabled(false);
>>> +
>>> + // see if this is a failure of an upgraded SU
>>> + for (SaUint16T i(0); i < stateChangeNotification.numStateChanges; i++) {
>>> + if (stateChangeNotification.changedStates[i].newState ==
>>> + SA_AMF_OPERATIONAL_DISABLED) {
>>> + disabled = true;
>>> + break;
>>> + }
>>> + }
>>> +
>>> + if (!disabled) {
>>> + TRACE("state change is not to DISABLED -- ignoring");
>>> + break;
>>> + }
>>> +
>>> + for (SaUint16T i(0);
>>> + i < stateChangeNotification.notificationHeader.numAdditionalInfo;
>>> + i++) {
>>> + if
>> (stateChangeNotification.notificationHeader.additionalInfo[i].infoId !=
>>> + SA_AMF_MAINTENANCE_CAMPAIGN_DN ||
>>> + stateChangeNotification.notificationHeader.additionalInfo[i].infoType
>>> + != SA_NTF_VALUE_LDAP_NAME) {
>>> + continue;
>>> + }
>>> +
>>> + SaNameT *name(0);
>>> + SaUint16T dataSize(0);
>>> +
>>> + SaAisErrorT rc(saNtfPtrValGet(
>>> + stateChangeNotification.notificationHandle,
>>> + &stateChangeNotification.notificationHeader.additionalInfo[i].infoValue,
>>> + reinterpret_cast<void **>(&name),
>>> + &dataSize));
>>> +
>>> + if (rc == SA_AIS_OK) {
>>> + SaConstStringT maintenanceCampaign(saAisNameBorrow(name));
>>> +
>>> + if (!strcmp(maintenanceCampaign,
>>> + s_instance->m_campaign->getDn().c_str())) {
>>> + LOG_ER("SU: %s failed after upgrade in campaign",
>>> +
>> saAisNameBorrow(stateChangeNotification.notificationHeader.notificationObject));
>>> + s_instance->m_campaign->getUpgradeCampaign()->suspend();
>>> + s_instance->m_campaign->getUpgradeCampaign()->setCampState(
>>> + SA_SMF_CMPG_ERROR_DETECTED);
>>> +
>>> + std::string error(saAisNameBorrow(
>>> + stateChangeNotification.notificationHeader.notificationObject));
>>> +
>>> + error += " failed after upgrade";
>>> + s_instance->m_campaign->setError(error);
>>> + } else {
>>> + LOG_ER("maintenance campaign received from AMF (%s) is not the "
>>> + "same as ours (%s)",
>>> + maintenanceCampaign,
>>> + s_instance->m_campaign->getDn().c_str());
>>> + }
>>> + } else {
>>> + LOG_ER("saNtfPtrValGet failed: %d", rc);
>>> + }
>>> + }
>>> + } while (false);
>>> +
>>> + TRACE_LEAVE();
>>> +}
>>> +
>>> +void SmfCampaignThread::handleObjectStateChangeNotification(
>>> + const SaNtfStateChangeNotificationT& stateChangeNotification) {
>>> + TRACE_ENTER();
>>> +
>>> + if (stateChangeNotification.notificationHeader.notificationClassId &&
>>> +
>> isAMFOperState(*stateChangeNotification.notificationHeader.notificationClassId))
>> {
>>> + handleAmfObjectStateChangeNotification(stateChangeNotification);
>>> + } else {
>>> + TRACE("ignoring non-AMF state change notification");
>>> + }
>>> +
>>> + TRACE_LEAVE();
>>> +}
>>> +
>>> +void SmfCampaignThread::ntfNotificationCallback(
>>> + SaNtfSubscriptionIdT subId,
>>> + const SaNtfNotificationsT *notification) {
>>> + TRACE_ENTER();
>>> +
>>> + do {
>>> + if (subId != operStateSubId) {
>>> + TRACE("unknown subscription id received in ntfNotificationCallback: %d",
>>> + subId);
>>> + break;
>>> + }
>>> +
>>> + if (notification->notificationType == SA_NTF_TYPE_STATE_CHANGE) {
>>> + s_instance->handleStateChangeNotification(
>>> + notification->notification.stateChangeNotification);
>>> + } else {
>>> + TRACE("ignoring NTF notification of type: %i",
>>> + notification->notificationType);
>>> + }
>>> + } while (false);
>>> +
>>> + TRACE_LEAVE();
>>> +}
>>> /**
>>> * SmfCampaignThread::send
>>> * send event to the thread.
>>> @@ -672,18 +875,31 @@ int SmfCampaignThread::handleEvents(void
>>> {
>>> TRACE_ENTER();
>>> NCS_SEL_OBJ mbx_fd = ncs_ipc_get_sel_obj(&m_mbx);
>>> - struct pollfd fds[1];
>>> +
>>> + SaSelectionObjectT ntfSelObj(0);
>>> +
>>> + SaAisErrorT rc(saNtfSelectionObjectGet(m_ntfHandle, &ntfSelObj));
>>> + if (rc != SA_AIS_OK) {
>>> + LOG_ER("saNtfSelectionObjectGet FAILED - %s", saf_error(rc));
>>> + return 1;
>>> + }
>>> +
>>> + struct pollfd fds[2];
>>>
>>> /* Set up all file descriptors to listen to */
>>> fds[0].fd = mbx_fd.rmv_obj;
>>> fds[0].events = POLLIN;
>>> fds[0].revents = 0;
>>>
>>> + fds[1].fd = ntfSelObj;
>>> + fds[1].events = POLLIN;
>>> + fds[1].revents = 0;
>>> +
>>> TRACE("Campaign thread %s waiting for events",
>> m_campaign->getDn().c_str());
>>> while (m_running) {
>>>
>>> - int ret = poll(fds, 1, SMF_UPDATE_ELAPSED_TIME_INTERVAL);
>>> + int ret = poll(fds, sizeof(fds) / sizeof(pollfd),
>> SMF_UPDATE_ELAPSED_TIME_INTERVAL);
>>> if (ret == -1) {
>>> if (errno == EINTR)
>>> @@ -699,7 +915,16 @@ int SmfCampaignThread::handleEvents(void
>>> processEvt();
>>> }
>>>
>>> - m_campaign->updateElapsedTime();
>>> + if (fds[1].revents & POLLIN) {
>>> + // dispatch NTF events
>>> + rc = saNtfDispatch(m_ntfHandle, SA_DISPATCH_ALL);
>>> +
>>> + if (rc != SA_AIS_OK) {
>>> + LOG_ER("saNtfDispatch FAILED - %s", saf_error(rc));
>>> + }
>>> + }
>>> +
>>> + m_campaign->updateElapsedTime();
>>> }
>>> TRACE_LEAVE();
>>> return 0;
>>> diff --git a/osaf/services/saf/smfsv/smfd/SmfCampaignThread.hh
>> b/osaf/services/saf/smfsv/smfd/SmfCampaignThread.hh
>>> --- a/osaf/services/saf/smfsv/smfd/SmfCampaignThread.hh
>>> +++ b/osaf/services/saf/smfsv/smfd/SmfCampaignThread.hh
>>> @@ -190,9 +190,24 @@ class SmfCampaignThread {
>>>
>>> SaAisErrorT createImmHandle(SmfCampaign * i_campaign);
>>> SaAisErrorT deleteImmHandle();
>>> + SaAisErrorT initNtfSubscriptions(void);
>>> +
>>> + void handleStateChangeNotification(const
>> SaNtfStateChangeNotificationT&);
>>> +
>>> + void handleObjectStateChangeNotification(
>>> + const SaNtfStateChangeNotificationT&);
>>> +
>>> + void handleAmfObjectStateChangeNotification(
>>> + const SaNtfStateChangeNotificationT&);
>>> +
>>> + bool isAMFOperState(const SaNtfClassIdT&) const;
>>> +
>>> + static void ntfNotificationCallback(SaNtfSubscriptionIdT,
>>> + const SaNtfNotificationsT *);
>>>
>>> static void main(NCSCONTEXT info);
>>> static SmfCampaignThread *s_instance;
>>> + static SaNtfSubscriptionIdT operStateSubId;
>>>
>>> NCSCONTEXT m_task_hdl;
>>> SYSF_MBX m_mbx; /* mailbox */
>>> diff --git a/osaf/services/saf/smfsv/smfd/SmfStepTypes.cc
>> b/osaf/services/saf/smfsv/smfd/SmfStepTypes.cc
>>> --- a/osaf/services/saf/smfsv/smfd/SmfStepTypes.cc
>>> +++ b/osaf/services/saf/smfsv/smfd/SmfStepTypes.cc
>>> @@ -1247,8 +1247,8 @@ SmfStepTypeNodeReboot::execute()
>>> return false;
>>> }
>>>
>>> - /* Modify information model and set maintenance status */
>>> - LOG_NO("STEP: Modify information model and set maintenance status");
>>> + /* Modify information model */
>>> + LOG_NO("STEP: Modify information model");
>>> if (m_step->modifyInformationModel() != SA_AIS_OK) {
>>> LOG_ER("Failed to Modify information model in
>> step=%s",m_step->getRdn().c_str());
>>> return false;
>>> @@ -1261,11 +1261,6 @@ SmfStepTypeNodeReboot::execute()
>>> return false;
>>> }
>>>
>>> - if (m_step->setMaintenanceStateActUnits() == false) {
>>> - LOG_ER("Failed to set maintenance state in
>> step=%s",m_step->getRdn().c_str());
>>> - return false;
>>> - }
>>> -
>>> /* The action below is an add on to
>> SMF.---------------------------------------*/
>>> /* See if any of the software bundles installed at online installation
>> has the */
>>> /* saSmfBundleInstallOfflineScope attribute set to
>> SA_SMF_CMD_SCOPE_PLM_EE */
>>> @@ -1372,6 +1367,13 @@ SmfStepTypeNodeReboot::execute()
>>> /* the units in the same state as before locking */
>>> m_step->copyDuInitStateToAu();
>>>
>>> + /* Now that the node is up, set the maintenance status */
>>> + LOG_NO("STEP: Set Maintenance Status");
>>> + if (m_step->setMaintenanceStateActUnits() == false) {
>>> + LOG_ER("Failed to set maintenance state in
>> step=%s",m_step->getRdn().c_str());
>>> + return false;
>>> + }
>>> +
>>> /* Instantiate activation units */
>>> LOG_NO("STEP: Instantiate activation units");
>>> if (m_step->instantiateActivationUnits() == false) {
>>> @@ -1685,8 +1687,8 @@ SmfStepTypeNodeRebootAct::execute()
>>> return false;
>>> }
>>>
>>> - /* Modify information model and set maintenance status */
>>> - LOG_NO("STEP: Modify information model and set maintenance status");
>>> + /* Modify information model */
>>> + LOG_NO("STEP: Modify information model");
>>> if (m_step->modifyInformationModel() != SA_AIS_OK) {
>>> LOG_ER("Failed to Modify information model in
>> step=%s",m_step->getRdn().c_str());
>>> return false;
>>> @@ -1699,11 +1701,6 @@ SmfStepTypeNodeRebootAct::execute()
>>> return false;
>>> }
>>>
>>> - if (m_step->setMaintenanceStateActUnits() == false) {
>>> - LOG_ER("Failed to set maintenance state in
>> step=%s",m_step->getRdn().c_str());
>>> - return false;
>>> - }
>>> -
>>> /* Offline installation of new software */
>>> LOG_NO("STEP: Offline installation of new software");
>>> if (m_step->offlineInstallNewBundles() == false) {
>>> @@ -1746,6 +1743,13 @@ SmfStepTypeNodeRebootAct::execute()
>>> /* the units in the same state as before locking */
>>> m_step->copyDuInitStateToAu();
>>>
>>> + /* Now that the node is up, set the maintenance status */
>>> + LOG_NO("STEP: Set Maintenance Status");
>>> + if (m_step->setMaintenanceStateActUnits() == false) {
>>> + LOG_ER("Failed to set maintenance state in
>> step=%s",m_step->getRdn().c_str());
>>> + return false;
>>> + }
>>> +
>>> /* Instantiate activation units */
>>> LOG_NO("STEP: Instantiate activation units");
>>> if (m_step->instantiateActivationUnits() == false) {
>>>


------------------------------------------------------------------------------
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