ClRcT clCpmNodeNameGet(ClUint32T argc, ClCharT *argv[], ClCharT **retStr) { ClRcT rc = CL_OK; ClNameT nodeName={0}; *retStr = NULL; if(argc > 1 ) { ClCharT tempStr[0x100]; rc = CL_CPM_RC(CL_ERR_INVALID_PARAMETER); snprintf(tempStr, sizeof(tempStr), "Usage: nodename\n"); *retStr = (ClCharT *) clHeapAllocate(strlen(tempStr) + 1); if (*retStr) strcpy(*retStr, tempStr); goto out; } rc = clCpmLocalNodeNameGet(&nodeName); if(rc != CL_OK) { rc = CL_CPM_RC(CL_ERR_UNSPECIFIED); goto out; } *retStr = clHeapCalloc(1,nodeName.length+1); if(!*retStr) { rc = CL_CPM_RC(CL_ERR_NO_MEMORY); goto out; } strncpy(*retStr,nodeName.value,nodeName.length); rc = CL_OK; out: return rc; }
ClRcT clNodeCacheInitialize(ClBoolT createFlag) { ClRcT rc = CL_OK; ClUint32T capability = 0; SaNameT nodeName = {0}; if(gpClNodeCache) goto out; gClAspNativeLeaderElection = !clParseEnvBoolean("CL_ASP_OPENAIS_LEADER_ELECTION"); snprintf(gClNodeCacheSegment, sizeof(gClNodeCacheSegment)-1, "%s_%d", CL_NODE_CACHE_SEGMENT, clIocLocalAddressGet()); if(createFlag == CL_TRUE) { rc = clNodeCacheCreate(); } else { rc = clNodeCacheOpen(); } if(rc != CL_OK) { clLogError("NODE", "CACHE", "Segment initialize returned [%#x]", rc); goto out; } CL_ASSERT(gpClNodeCache != NULL); if(!createFlag) { goto out; } CL_NODE_CACHE_HEADER_BASE(gpClNodeCache)->maxNodes = CL_IOC_MAX_NODES; CL_NODE_CACHE_HEADER_BASE(gpClNodeCache)->currentNodes = 0; memset(CL_NODE_CACHE_HEADER_BASE(gpClNodeCache)->nodeMap, 0, sizeof(CL_NODE_CACHE_HEADER_BASE(gpClNodeCache)->nodeMap)); if(clCpmIsSC()) { CL_NODE_CACHE_SC_CAPABILITY_SET(capability); CL_NODE_CACHE_SC_PROMOTE_CAPABILITY_SET(capability); } else if(clCpmIsSCCapable()) { CL_NODE_CACHE_SC_PROMOTE_CAPABILITY_SET(capability); CL_NODE_CACHE_PL_CAPABILITY_SET(capability); } else { CL_NODE_CACHE_PL_CAPABILITY_SET(capability); } clCpmLocalNodeNameGet(&nodeName); clNodeCacheUpdate(clIocLocalAddressGet(),CL_VERSION_CURRENT, capability, &nodeName); rc = clOsalMsync(gpClNodeCache, CL_NODE_CACHE_SEGMENT_SIZE, MS_ASYNC); if(rc != CL_OK) { clLogError("NODE", "CACHE", "Node cache segment msync returned [%#x]", rc); goto out; } gClNodeCacheOwner = CL_TRUE; out: return rc; }