Ejemplo n.º 1
0
/**
* 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***********************************************************************************");
}
Ejemplo n.º 2
0
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;
}