/** * This dumps the CLMS CB */ void clms_cb_dump(void) { CLMS_CLUSTER_NODE *node = NULL; CLMS_CLIENT_INFO *client = NULL; uint32_t client_id = 0; SaNameT nodename; TRACE("\n***************************************************************************************"); TRACE("My DB Snapshot \n"); TRACE("Number of member nodes = %d\n", osaf_cluster->num_nodes); TRACE("Async update count = %d\n", clms_cb->async_upd_cnt); TRACE("CLMS_CB last client id %u", clms_cb->last_client_id); TRACE("Dump nodedb"); memset(&nodename, '\0', sizeof(SaNameT)); while ((node = clms_node_getnext_by_name(&nodename)) != NULL) { memcpy(&nodename, &node->node_name, sizeof(SaNameT)); TRACE("Dump Runtime data of the node: %s", node->node_name.value); TRACE("Membership status %d", node->member); TRACE("Node Id %u", node->node_id); TRACE("Init_view %llu", node->init_view); TRACE("Admin_state %d", node->admin_state); TRACE("Change %d", node->change); TRACE("nodeup %d", node->nodeup); TRACE("stat_change %d", node->stat_change); TRACE("Admin_op %d", node->admin_op); #ifdef ENABLE_AIS_PLM TRACE("EE Readiness State %d", node->ee_red_state); #endif } TRACE("Dump Client data"); while ((client = clms_client_getnext_by_id(client_id)) != NULL) { client_id = client->client_id; TRACE("Client_id %u", client->client_id); TRACE("MDS Dest %" PRIx64, client->mds_dest); TRACE("Track flags %d", client->track_flags); } TRACE("\n***********************************************************************************"); }
SaAisErrorT clms_plm_init(CLMS_CB * cb) { SaAisErrorT rc = SA_AIS_OK; SaVersionT plmVersion = { 'A', 0x01, 0x01 }; SaNameT *entityNames = NULL; CLMS_CLUSTER_NODE *node = NULL; SaNameT nodename; SaUint32T i = 0, entityNamesNumber = ncs_patricia_tree_size(&clms_cb->ee_lookup); SaPlmReadinessTrackedEntitiesT *trackedEntities = NULL; TRACE_ENTER(); rc = saPlmInitialize(&cb->plm_hdl, &callbacks, &plmVersion); if (rc != SA_AIS_OK) { LOG_ER("saPlmInitialize FAILED rc = %d", rc); return rc; } rc = saPlmSelectionObjectGet(cb->plm_hdl, &cb->plm_sel_obj); if (rc != SA_AIS_OK) { LOG_ER("saPlmSelectionObjectGet FAILED rc = %d", rc); return rc; } if (clms_cb->reg_with_plm == SA_TRUE){ rc = saPlmEntityGroupCreate(cb->plm_hdl, &cb->ent_group_hdl); if (rc != SA_AIS_OK) { LOG_ER("saPlmEntityGroupCreate FAILED rc = %d", rc); return rc; } memset(&nodename, '\0', sizeof(SaNameT)); entityNames = (SaNameT *)malloc(sizeof(SaNameT) * entityNamesNumber); if (!entityNames) { LOG_ER("Malloc failed for entityNames"); assert(0); } TRACE("entityNamesNumber %d", entityNamesNumber); while ((node = clms_node_getnext_by_name(&nodename)) != NULL) { memcpy(&nodename, &node->node_name, sizeof(SaNameT)); if (node->ee_name.length != 0){ entityNames[i].length = node->ee_name.length; (void)memcpy(entityNames[i].value, node->ee_name.value, entityNames[i].length); i++; } } rc = saPlmEntityGroupAdd(cb->ent_group_hdl, entityNames, entityNamesNumber, SA_PLM_GROUP_SINGLE_ENTITY); if (rc != SA_AIS_OK) { LOG_ER("saPlmEntityGroupAdd FAILED rc = %d", rc); return rc; } trackedEntities = (SaPlmReadinessTrackedEntitiesT *) malloc(entityNamesNumber * sizeof(SaPlmReadinessTrackedEntitiesT)); if(!trackedEntities) { LOG_ER("Malloc failed for trackedEntities"); assert(0); } memset(trackedEntities, 0, (entityNamesNumber * sizeof(SaPlmReadinessTrackedEntitiesT))); rc = saPlmReadinessTrack(cb->ent_group_hdl, (SA_TRACK_CURRENT | SA_TRACK_CHANGES_ONLY | SA_TRACK_START_STEP | SA_TRACK_VALIDATE_STEP), 1, trackedEntities); /* trackCookie TBD */ if (rc != SA_AIS_OK) { LOG_ER("saPlmReadinessTrack FAILED rc = %d", rc); return rc; } TRACE("trackedEntities->numberOfEntities %d", trackedEntities->numberOfEntities); for (i = 0; i < trackedEntities->numberOfEntities; i++) { node = clms_node_get_by_eename(&trackedEntities->entities[i].entityName); if (node != NULL) { node->ee_red_state = trackedEntities->entities[i].currentReadinessStatus.readinessState; node->change = trackedEntities->entities[i].change; TRACE("node->ee_red_state %d", node->ee_red_state); } } } free(entityNames); free(trackedEntities); TRACE_LEAVE(); return rc; }