osaf/services/saf/amf/amfd/include/ntf.h |    9 ++
 osaf/services/saf/amf/amfd/ntf.cc        |  124 +++++++++++++++++-------------
 2 files changed, 78 insertions(+), 55 deletions(-)


AMF sends error report and error clear notifications as alarms.
This patch changes this notification to state change notification.

diff --git a/osaf/services/saf/amf/amfd/include/ntf.h 
b/osaf/services/saf/amf/amfd/include/ntf.h
--- a/osaf/services/saf/amf/amfd/include/ntf.h
+++ b/osaf/services/saf/amf/amfd/include/ntf.h
@@ -34,6 +34,15 @@
 #define ADDITION_TEXT_LENGTH 320
 #define AMF_NTF_SENDER "safApp=safAmfService"
 
+/* For presence of additional inf in notification */
+#define ADDITIONAL_INFO_PRESENT true
+#define ADDITIONAL_INFO_NOT_PRESENT false
+
+/* All states like oper, readiness etc starts from 1, so defining not 
applicable values */
+#define STATE_ID_NA  0
+#define OLD_STATE_NA 0
+#define NEW_STATE_NA 0
+
 /* Alarms */
 void avd_send_comp_inst_failed_alarm(const SaNameT *comp_name, const SaNameT 
*node_name);
 void avd_send_comp_clean_failed_alarm(const SaNameT *comp_name, const SaNameT 
*node_name);
diff --git a/osaf/services/saf/amf/amfd/ntf.cc 
b/osaf/services/saf/amf/amfd/ntf.cc
--- a/osaf/services/saf/amf/amfd/ntf.cc
+++ b/osaf/services/saf/amf/amfd/ntf.cc
@@ -55,7 +55,7 @@ void avd_send_comp_inst_failed_alarm(con
                                 SA_NTF_SOFTWARE_ERROR,
                                 SA_NTF_SEVERITY_MAJOR,
                                 (NCSCONTEXT)node_name,
-                                1 /* add_info is node_name */); 
+                                ADDITIONAL_INFO_PRESENT /* add_info is 
node_name */); 
 }
 
 /*****************************************************************************
@@ -87,7 +87,7 @@ void avd_send_comp_clean_failed_alarm(co
                                 SA_NTF_SOFTWARE_ERROR,
                                 SA_NTF_SEVERITY_MAJOR,
                                 (NCSCONTEXT)node_name,
-                                1 /* add_info is node_name */); 
+                                ADDITIONAL_INFO_PRESENT /* add_info is 
node_name */); 
 
 }
 /*****************************************************************************
@@ -121,7 +121,7 @@ void avd_send_cluster_reset_alarm(const 
                                 SA_NTF_SOFTWARE_ERROR,
                                 SA_NTF_SEVERITY_MAJOR,
                                 NULL,
-                                0 /* No add_info */);
+                                ADDITIONAL_INFO_NOT_PRESENT /* No add_info */);
 
 }
 
@@ -152,7 +152,7 @@ void avd_send_si_unassigned_alarm(const 
                                 SA_NTF_SOFTWARE_ERROR,
                                 SA_NTF_SEVERITY_MAJOR,
                                 NULL,
-                                0 /* No add_info */);
+                                ADDITIONAL_INFO_NOT_PRESENT /* No add_info */);
 
 }
 
@@ -184,7 +184,7 @@ void avd_send_comp_proxy_status_unproxie
                                 SA_NTF_SOFTWARE_ERROR,
                                 SA_NTF_SEVERITY_MAJOR,
                                 NULL,
-                                0 /* No add_info */);
+                                ADDITIONAL_INFO_NOT_PRESENT /* No add_info */);
 
 }
 
@@ -220,7 +220,7 @@ void avd_send_admin_state_chg_ntf(const 
                                        old_state,
                                        new_state,
                                        NULL,
-                                       0);
+                                       ADDITIONAL_INFO_NOT_PRESENT);
 
 }
 
@@ -256,7 +256,7 @@ void avd_send_oper_chg_ntf(const SaNameT
                                        old_state,
                                        new_state,
                                        NULL,
-                                       0);
+                                       ADDITIONAL_INFO_NOT_PRESENT);
 }
 
 /*****************************************************************************
@@ -291,7 +291,7 @@ void avd_send_su_pres_state_chg_ntf(cons
                                        old_state,
                                        new_state,
                                        NULL,
-                                       0);
+                                       ADDITIONAL_INFO_NOT_PRESENT);
 
 }
 
@@ -330,7 +330,7 @@ void avd_send_su_ha_state_chg_ntf(const 
                                        old_state,
                                        new_state,
                                        (NCSCONTEXT)si_name,
-                                       2 /* Si_name */);
+                                       ADDITIONAL_INFO_PRESENT /* Si_name */);
 
 }
 
@@ -367,7 +367,7 @@ void avd_send_su_ha_readiness_state_chg_
                                        old_state,
                                        new_state,
                                        (NCSCONTEXT)si_name,
-                                       2 /* Si_name */);
+                                       ADDITIONAL_INFO_PRESENT /* Si_name */);
 
 }
 
@@ -402,7 +402,7 @@ void avd_send_si_assigned_ntf(const SaNa
                                        old_state,
                                        new_state,
                                        NULL,
-                                       0);
+                                       ADDITIONAL_INFO_NOT_PRESENT);
 
 }
 
@@ -439,7 +439,7 @@ void avd_send_comp_proxy_status_proxied_
                                        old_status,
                                        new_status,
                                        NULL,
-                                       0);
+                                       ADDITIONAL_INFO_NOT_PRESENT);
 
 }
 
@@ -472,7 +472,7 @@ void avd_alarm_clear(const SaNameT *name
               probableCause,
               SA_NTF_SEVERITY_CLEARED,
               NULL,
-              0);
+              ADDITIONAL_INFO_NOT_PRESENT);
 }
 
 SaAisErrorT fill_ntf_header_part_avd(SaNtfNotificationHeaderT 
*notificationHeader,
@@ -483,7 +483,7 @@ SaAisErrorT fill_ntf_header_part_avd(SaN
                              SaUint16T minorId,
                              SaInt8T *avd_name,
                              NCSCONTEXT add_info,
-                             int type,
+                             int is_additional_info_present,
                              SaNtfNotificationHandleT notificationHandle)
 {
 
@@ -503,30 +503,31 @@ SaAisErrorT fill_ntf_header_part_avd(SaN
        (void)strcpy(notificationHeader->additionalText, (SaInt8T*)add_text);
 
        /* Fill the additional info if present */
-       if (type != 0) {
-               switch (minorId) {
-               case SA_AMF_NTFID_ERROR_REPORT: 
-                       SaNtfAdditionalInfoT *info; 
-                       info = (SaNtfAdditionalInfoT *) add_info;       
-                       notificationHeader->additionalInfo[0].infoId = 
info->infoId;
-                       notificationHeader->additionalInfo[0].infoType = 
info->infoType;
-                       notificationHeader->additionalInfo[0].infoValue = 
info->infoValue;
-                       break;
-               default:
+       if (is_additional_info_present == ADDITIONAL_INFO_PRESENT) {
+               if (minorId == SA_AMF_NTFID_ERROR_REPORT) {
+                       SaAmfRecommendedRecoveryT *recovery = 
(SaAmfRecommendedRecoveryT *) (add_info);
+                       notificationHeader->additionalInfo[0].infoId = 
SA_AMF_AI_APPLIED_RECOVERY;
+                       notificationHeader->additionalInfo[0].infoType = 
SA_NTF_VALUE_UINT64;
+                       
notificationHeader->additionalInfo[0].infoValue.uint64Val = *recovery;
+               } else {
                        SaStringT dest_ptr;
                        SaAisErrorT ret;
                        SaNameT *name = (SaNameT*)(add_info);
-                       if (type == 1) {
+
+                       if ((minorId == SA_AMF_NTFID_COMP_INSTANTIATION_FAILED) 
||
+                                       (minorId == 
SA_AMF_NTFID_COMP_CLEANUP_FAILED)) {
                                /* node_name */
                                notificationHeader->additionalInfo[0].infoId = 
SA_AMF_NODE_NAME;
                                notificationHeader->additionalInfo[0].infoType 
= SA_NTF_VALUE_LDAP_NAME;
 
-                       } else if (type == 2) {
+                       } else if ((minorId == SA_AMF_NTFID_SU_SI_HA_STATE) || 
+                                       (minorId == 
SA_AMF_NTFID_SU_SI_HA_READINESS_STATE)) {
                                /* si_name */
                                notificationHeader->additionalInfo[0].infoId = 
SA_AMF_SI_NAME;
                                notificationHeader->additionalInfo[0].infoType 
= SA_NTF_VALUE_LDAP_NAME;
 
                        }
+
                        ret = saNtfPtrValAllocate(notificationHandle,
                                        sizeof (SaNameT) + 1,
                                        (void**)&dest_ptr,
@@ -538,7 +539,6 @@ SaAisErrorT fill_ntf_header_part_avd(SaN
                        }
 
                        memcpy(dest_ptr, name, sizeof(SaNameT));
-                       break;
                }
        }
        return SA_AIS_OK;
@@ -641,22 +641,29 @@ uint32_t sendStateChangeNotificationAvd(
                                     SaUint16T oldstate,
                                     SaUint16T newState,
                                     NCSCONTEXT add_info,
-                                    int type)
+                                    int is_additionalInfo_present)
 {
        uint32_t status = NCSCC_RC_FAILURE;
        SaNtfStateChangeNotificationT myStateNotification;
        SaUint16T add_info_items = 0;
        SaUint64T allocation_size = 0;
+       SaUint16T num_of_changedStates = 1;
 
        if (!avd_cb->active_services_exist) {
                // TODO #3051
                LOG_WA("State change notification lost for '%s'", 
ntf_object.value);
                return status;
        }
-
-       if (type != 0) {
+       if (is_additionalInfo_present == ADDITIONAL_INFO_PRESENT) {
                add_info_items = 1;
                allocation_size = SA_NTF_ALLOC_SYSTEM_LIMIT;
+       } else {
+               add_info_items = 0;
+               allocation_size = 0;
+       }
+
+       if (stateId == STATE_ID_NA) {
+               num_of_changedStates = 0;
        }
 
        status = saNtfStateChangeNotificationAllocate(avd_cb->ntfHandle,/* 
handle to Notification Service instance */
@@ -668,7 +675,7 @@ uint32_t sendStateChangeNotificationAvd(
                                                      /* number of additional 
info items */
                                                      add_info_items,
                                                      /* number of state 
changes */
-                                                     1,
+                                                     num_of_changedStates,
                                                      /* use default allocation 
size */
                                                      allocation_size);
 
@@ -685,7 +692,7 @@ uint32_t sendStateChangeNotificationAvd(
                                 minorId,
                                 const_cast<SaInt8T*>(AMF_NTF_SENDER),
                                 add_info,
-                                type,
+                                is_additionalInfo_present,
                                 myStateNotification.notificationHandle);
        
        if (status != SA_AIS_OK) {
@@ -695,10 +702,13 @@ uint32_t sendStateChangeNotificationAvd(
        }
 
        *(myStateNotification.sourceIndicator) = 
static_cast<SaNtfSourceIndicatorT>(sourceIndicator);
-       myStateNotification.changedStates->stateId = stateId;
-       myStateNotification.changedStates->oldStatePresent = SA_TRUE;
-       myStateNotification.changedStates->oldState = oldstate;
-       myStateNotification.changedStates->newState = newState;
+       
+       if (num_of_changedStates == 1) {
+               myStateNotification.changedStates->stateId = stateId;
+               myStateNotification.changedStates->oldStatePresent = SA_TRUE;
+               myStateNotification.changedStates->oldState = oldstate;
+               myStateNotification.changedStates->newState = newState;
+       }
 
        status = saNtfNotificationSend(myStateNotification.notificationHandle);
 
@@ -724,28 +734,32 @@ void avd_send_error_report_ntf(const SaN
 {
 
         TRACE_ENTER();
-       if ((recovery > SA_AMF_NO_RECOMMENDATION) && (recovery < 
SA_AMF_CONTAINER_RESTART)) {
-               char add_text[ADDITION_TEXT_LENGTH];
-               SaNtfAdditionalInfoT add_info;
-               add_info.infoId = SA_AMF_AI_RECOMMENDED_RECOVERY;
-               add_info.infoType = SA_NTF_VALUE_UINT64;
-               add_info.infoValue.uint64Val = recovery;
+       char add_text[ADDITION_TEXT_LENGTH];
+       SaAmfNotificationMinorIdT minorid;
+       bool is_additionalInfo_present;
+
+       if ((recovery >= SA_AMF_NO_RECOMMENDATION) && (recovery < 
SA_AMF_CONTAINER_RESTART)) {
                snprintf(add_text, ADDITION_TEXT_LENGTH, "Error reported on %s 
with recovery %s", name->value,
                                amf_recovery[recovery]);
-               sendAlarmNotificationAvd(avd_cb,
-                               *name,
-                               (SaUint8T*)add_text,
-                               SA_SVC_AMF,
-                               SA_AMF_NTFID_ERROR_REPORT,
-                               SA_NTF_SOFTWARE_ERROR,
-                               SA_NTF_SEVERITY_MAJOR,
-                               (NCSCONTEXT) &add_info,
-                               1 /* No add_info */);
+               minorid = SA_AMF_NTFID_ERROR_REPORT;
+               is_additionalInfo_present = ADDITIONAL_INFO_PRESENT;
+       } else {
+               snprintf(add_text, ADDITION_TEXT_LENGTH, "Error reported on %s 
is now cleared", name->value);
+               minorid = SA_AMF_NTFID_ERROR_CLEAR;
+               is_additionalInfo_present = ADDITIONAL_INFO_NOT_PRESENT;
+       }
 
-       } else {
-               avd_alarm_clear(name, SA_AMF_NTFID_ERROR_CLEAR,
-                               SA_NTF_SOFTWARE_ERROR);
-       }
+       sendStateChangeNotificationAvd(avd_cb,
+                       *name,
+                       (SaUint8T*)add_text,
+                       SA_SVC_AMF,
+                       minorid,
+                       SA_NTF_UNKNOWN_OPERATION,
+                       STATE_ID_NA, 
+                       OLD_STATE_NA,
+                       NEW_STATE_NA,
+                       (NCSCONTEXT)&recovery,
+                       is_additionalInfo_present);
 
        TRACE_LEAVE();
 }

------------------------------------------------------------------------------
Want excitement?
Manually upgrade your production database.
When you want reliability, choose Perforce
Perforce version control. Predictably reliable.
http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to