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