osaf/services/saf/plmsv/plms/hpi_intf/plms_hsm.c | 47 ++++++++++++++++++++++++
osaf/services/saf/plmsv/plms/plms_stdby.c | 17 ++++++++
2 files changed, 64 insertions(+), 0 deletions(-)
Apr 29 09:01:38 q50-s1 osafplmd[6482]: ER Invalid state model: 0
Apr 29 09:01:38 q50-s1 osafplmd[6482]: ER Ent
safHE=Stirling_Blade_slot_6,safDomain=Q50chassis deactivation failed.
After switchover PLM does not set the state_model variable in PLMS_ENTITY.
The only time it gets set is when a hotswap event comes up from HPI. At this
point PLM admin operations on HEs without the state_model set all fail with the
above log message.
Solution is to set the state_model after switchover.
diff --git a/osaf/services/saf/plmsv/plms/hpi_intf/plms_hsm.c
b/osaf/services/saf/plmsv/plms/hpi_intf/plms_hsm.c
--- a/osaf/services/saf/plmsv/plms/hpi_intf/plms_hsm.c
+++ b/osaf/services/saf/plmsv/plms/hpi_intf/plms_hsm.c
@@ -51,6 +51,8 @@ PLMS_HSM_CB *hsm_cb = &_hsm_cb;
***********************************************************************/
SaUint32T plms_hsm_initialize(PLMS_HPI_CONFIG *hpi_cfg);
SaUint32T plms_hsm_finalize(void);
+SaUint32T plms_get_hotswap_model(const SaHpiEntityPathT *,
+ PLMS_HPI_STATE_MODEL *);
static SaUint32T hsm_get_hotswap_model(SaHpiRptEntryT *rpt_entry,
SaUint32T *hotswap_state_model);
static SaUint32T hsm_send_hotswap_event(SaHpiRptEntryT *rpt_entry,
@@ -237,6 +239,51 @@ SaUint32T plms_hsm_finalize(void)
return NCSCC_RC_SUCCESS;
}
+
+SaUint32T plms_get_hotswap_model(const SaHpiEntityPathT *epath_ptr,
+ PLMS_HPI_STATE_MODEL *model)
+{
+ PLMS_HSM_CB *cb = hsm_cb;
+ SaUint32T rc = NCSCC_RC_SUCCESS;
+
+ do {
+ SaHpiUint32T instanceId = SAHPI_FIRST_ENTRY;
+ SaHpiResourceIdT resourceId = 0;
+ SaHpiInstrumentIdT instrumentId = 0;
+ SaHpiUint32T rptUpdateCount = 0;
+
+ SaErrorT hpirc = saHpiGetIdByEntityPath(cb->session_id,
+ *epath_ptr,
+ SAHPI_NO_RECORD,
+ &instanceId,
+ &resourceId,
+ &instrumentId,
+ &rptUpdateCount);
+
+ if (hpirc != SA_OK) {
+ LOG_ER("failed to get resource id: %i", hpirc);
+ rc = NCSCC_RC_FAILURE;
+ break;
+ }
+
+ SaHpiRptEntryT rptEntry;
+
+ hpirc = saHpiRptEntryGetByResourceId(cb->session_id,
+ resourceId,
+ &rptEntry);
+
+ if (hpirc != SA_OK) {
+ LOG_ER("failed to get rpt entry id: %i", hpirc);
+ rc = NCSCC_RC_FAILURE;
+ break;
+ }
+
+ rc = hsm_get_hotswap_model(&rptEntry, model);
+ } while (false);
+
+ return rc;
+}
+
/*********************************************************************
* Name : plms_send_hpi_evt_ntf
*
diff --git a/osaf/services/saf/plmsv/plms/plms_stdby.c
b/osaf/services/saf/plmsv/plms/plms_stdby.c
--- a/osaf/services/saf/plmsv/plms/plms_stdby.c
+++ b/osaf/services/saf/plmsv/plms/plms_stdby.c
@@ -96,6 +96,7 @@ SaUint32T plms_proc_standby_active_role_
TRACE_LEAVE();
return NCSCC_RC_SUCCESS;
}
+
/***********************************************************************
* Name : plms_build_epath_to_entity_map_tree
*
@@ -110,6 +111,8 @@ SaUint32T plms_proc_standby_active_role_
SaUint32T plms_build_epath_to_entity_map_tree()
{
SaUint32T (* hsm_func_ptr)(SaInt8T *epath_str,SaHpiEntityPathT
*epath_ptr) = NULL;
+ SaUint32T (* hsm_get_state_model)(const SaHpiEntityPathT *epath_ptr,
+ PLMS_HPI_STATE_MODEL *model) =
NULL;
PLMS_EPATH_TO_ENTITY_MAP_INFO *epath_to_ent;
PLMS_ENTITY *plm_ent;
PLMS_CB *cb = plms_cb;
@@ -120,6 +123,13 @@ SaUint32T plms_build_epath_to_entity_map
LOG_ER("dlsym() of HPI lib failed with error %s", dlerror());
return NCSCC_RC_FAILURE;
}
+
+ hsm_get_state_model = dlsym(cb->hpi_intf_hdl, "plms_get_hotswap_model");
+ if ( NULL == hsm_get_state_model ) {
+ LOG_ER("dlsym() for plms_get_hotswap_model failed %s",
dlerror());
+ return NCSCC_RC_FAILURE;
+ }
+
plm_ent = (PLMS_ENTITY *) ncs_patricia_tree_getnext(&cb->entity_info,
(SaUint8T *) 0);
while (plm_ent != NULL) {
@@ -152,6 +162,13 @@ SaUint32T plms_build_epath_to_entity_map
}
TRACE("Entity Path: %s of entity: %s added to
epath_to_ent_map tree",
plm_ent->entity.he_entity.saPlmHECurrEntityPath, plm_ent->dn_name_str);
+
+ /* get the state model so we can perform HPI operations
*/
+ ret_err =
(*hsm_get_state_model)(&epath_to_ent->epath_key, &plm_ent->state_model);
+ if ( NCSCC_RC_SUCCESS != ret_err ){
+ LOG_ER("unable to get state_model %d", ret_err);
+ return ret_err;
+ }
}
plm_ent = (PLMS_ENTITY *)
ncs_patricia_tree_getnext(&cb->entity_info,
(SaUint8T *) &plm_ent->dn_name);
------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel