Code Examples.
The below code snippet shows the possible AMS Entity Management admin and query operations on the AMS entities.
#if defined (CL_AMS_MGMT_FUNC)
ClRcT clAmsMgmtEntityTestAdminAndQueryOps(
void)
{
.majorVersion=1,
.minorVersion=1,
};
{
clLogError(NULL,NULL,"AMS Mgmt Initialize failed.rc [0x%x]",rc);
return rc;
}
entity.
type = CL_AMS_ENTITY_TYPE_SG;
{
clLogError(NULL,
NULL,
"Lock assignment failed on SG [%s] with rc [0x%x]",
rc);
return rc;
}
{
clLogError(NULL,
NULL,
"Lock instantiation failed on SG [%s] with rc [0x%x]",
"amsTestSG",
rc);
return rc;
}
{
clLogError(NULL,
NULL,
"Unlocked on SG [%s] succeeded from LOCKED_I state.",
"amsTestSG");
}
{
clLogError(NULL,
NULL,
"Lock assignment on SG [%s] returned rc [0x%x]",
"amsTestSG",
rc);
return rc;
}
{
clLogError(NULL,NULL,"Unlock on SG [%s] returned rc [0x%x]",
"amsTestSG",rc);
return rc;
}
entity.
type = CL_AMS_ENTITY_TYPE_SU;
{
clLogError(NULL,NULL,"Restart on SU [%s] returned rc [0x%x]",
"amsTestSU",rc);
return rc;
}
{
clLogError(NULL,NULL,"Shutdown on SU [%s] returned rc [0x%x]",
"amsTestSU",rc);
return rc;
}
entity.
type = CL_AMS_ENTITY_TYPE_SG;
{
clLogError(NULL, NULL, "Entity get config returned [%#x]", rc);
return rc;
}
{
clLogError(NULL, NULL, "Entity get status returned [%#x]", rc);
return rc;
}
ClAmsEntityBufferT entityBuffer = { .count = 0 };
{
clLogError(NULL, NULL, "GetSGSUList returned [%#x]", rc);
return rc;
}
if(entityBuffer.entity)
ClAmsSUSIRefBufferT suSIRefBuffer;
entity.
type = CL_AMS_ENTITY_TYPE_SU;
&suSIRefBuffer);
{
clLogError(NULL, NULL, "SUAssignedSIList returned [%#x]", rc);
return rc;
}
ClAmsCompCSIRefBufferT compCSIRefBuffer;
entity.
type = CL_AMS_ENTITY_TYPE_COMP;
{
clLogError(NULL, NULL, "GetCompCSIList returned [%#x]", rc);
return rc;
}
ClInt32T i;
ClUint32T size = (ClUint32T) sizeof(ClAmsCompCSIRefT);
for(i = 0; i < compCSIRefBuffer.count ; ++i)
{
ClAmsCompCSIRefT *pRef = (ClAmsCompCSIRefT*)(
(ClInt8T*)compCSIRefBuffer.entityRef + i*size);
if(pRef->activeComp)
clHeapFree(pRef->activeComp);
}
{
clLogError(NULL,NULL,
"AMS Management finalize returned rc [0x%x]",rc);
return rc;
}
clLogInfo(NULL,NULL,"Admin Test Complete");
return rc;
}
#endif //CL_AMS_MGMT_FUNC
The below code snippet demonstrates dynamic HA model creation using AMS management control APIs.
The created model is a simple model, consisting of a node, service group having one service instance which consists of one component service instance. The service group protects two service units, each service unit consisting of one component. Each of these component support one component service instance.
In general the following is the work flow when creating dynamic HA model using AMS management control APIs:
static ClRcT clAmsMgmtTestFillConfig(ClAmsMgmtHandleT mgmtHandle,
ClAmsMgmtCCBHandleT ccbHandle,
ClAmsEntityTypeT type,
const ClCharT *pBaseName)
{
switch(type)
{
case CL_AMS_ENTITY_TYPE_SG:
{
&entity,
&pEntityConfig);
{
clLogError(NULL, NULL, "SG config get returned [%#x]", rc);
goto out;
}
memcpy(&sgConfig, pEntityConfig, sizeof(sgConfig));
targetEntity.
type = CL_AMS_ENTITY_TYPE_SI;
"%sSI",
pBaseName);
&entity,
&targetEntity);
{
clLogError(NULL, NULL, "SG set SI returned [%#x]", rc);
goto out;
}
targetEntity.
type = CL_AMS_ENTITY_TYPE_SU;
"%sSU0",
pBaseName);
&entity,
&targetEntity);
{
clLogError(NULL, NULL, "SG set SU returned [%#x]", rc);
goto out;
}
"%sSU1",
pBaseName);
&entity,
&targetEntity);
{
clLogError(NULL, NULL, "SG set SU returned [%#x]", rc);
goto out;
}
{
clLogError(NULL, NULL, "SG commit returned [%#x]", rc);
goto out;
}
}
break;
case CL_AMS_ENTITY_TYPE_SI:
{
ClUint64T bitMask = 0;
"%sSI",
pBaseName);
&entity,
&pEntityConfig);
{
clLogError(NULL, NULL, "SI config get returned [%#x]", rc);
goto out;
}
memcpy(&siConfig, pEntityConfig, sizeof(siConfig));
bitMask |= SI_CONFIG_NUM_CSIS | SI_CONFIG_NUM_STANDBY_ASSIGNMENTS;
&bitMask);
{
clLogError(NULL, NULL, "SI config set returned [%#x]", rc);
goto out;
}
targetEntity.
type = CL_AMS_ENTITY_TYPE_CSI;
"%sCSI",
pBaseName);
&entity,
&targetEntity);
{
clLogError(NULL, NULL, "SI set CSI returned [%#x]", rc);
goto out;
}
{
clLogError(NULL, NULL, "SI commit returned [%#x]", rc);
goto out;
}
}
break;
case CL_AMS_ENTITY_TYPE_CSI:
{
ClUint64T bitMask = 0;
"%sCSI",
pBaseName);
&entity,
&pEntityConfig);
{
clLogError(NULL, NULL, "CSI config get returned [%#x]", rc);
goto out;
}
memcpy(&csiConfig, pEntityConfig, sizeof(csiConfig));
bitMask |= CSI_CONFIG_TYPE;
"%sType",
&bitMask);
{
clLogError(NULL, NULL, "CSI type set returned [%#x]", rc);
goto out;
}
.length=sizeof("model") },
.paramValue = {.value = "twoN",
.length = sizeof("twoN") },
};
&entity,
&nvp);
{
clLogError(NULL, NULL, "CSI set nvplist returned [%#x]", rc);
goto out;
}
{
clLogError(NULL, NULL, "CSI ccb commit returned [%#x]", rc);
goto out;
}
}
break;
case CL_AMS_ENTITY_TYPE_NODE:
{
"%sNode",
pBaseName);
&entity,
&pEntityConfig);
{
clLogError(NULL, NULL, "NODE config get returned [%#x]", rc);
goto out;
}
memcpy(&nodeConfig, pEntityConfig, sizeof(nodeConfig));
targetEntity.
type = CL_AMS_ENTITY_TYPE_SU;
"%sSU1",
pBaseName);
&entity,
&targetEntity);
{
clLogError(NULL, NULL, "Node set SU returned [%#x]", rc);
goto out;
}
"%sSU0",
pBaseName);
&entity,
&targetEntity);
{
clLogError(NULL, NULL, "Node set SU returned [%#x]", rc);
goto out;
}
{
clLogError(NULL, NULL, "Node commit returned [%#x]", rc);
goto out;
}
ClCpmNodeConfigT cpmNodeConfig = {{0}};
{
clLogError(NULL, NULL,
"CPM master get returned returned [%#x]",
rc);
goto out;
}
{
clLogError(NULL, NULL, "Slot name get returned [%#x]", rc);
goto out;
}
&cpmNodeConfig.nodeMoIdStr);
{
clLogError(NULL, NULL, "Slot MOID get returned [%#x]", rc);
goto out;
}
strncpy(cpmNodeConfig.nodeName,
sizeof(cpmNodeConfig.nodeName)-1);
strncpy(cpmNodeConfig.cpmType,
"LOCAL",
sizeof(cpmNodeConfig.cpmType)-1);
rc = clCpmNodeConfigSet(&cpmNodeConfig);
{
clLogError(NULL, NULL, "Node config set returned [%#x]", rc);
goto out;
}
}
break;
case CL_AMS_ENTITY_TYPE_SU:
{
ClUint64T bitMask = 0;
"%sSU0",
pBaseName);
&entity,
&pEntityConfig);
{
clLogError(NULL, NULL, "SU config get returned [%#x]", rc);
goto out;
}
memcpy(&suConfig, pEntityConfig, sizeof(suConfig));
bitMask |= SU_CONFIG_NUM_COMPONENTS;
&bitMask);
{
clLogError(NULL, NULL, "SU config set returned [%#x]", rc);
goto out;
}
"%sSU1",
pBaseName);
&bitMask);
{
clLogError(NULL, NULL, "SU config set returned [%#x]", rc);
goto out;
}
targetEntity.
type = CL_AMS_ENTITY_TYPE_COMP;
"%sComp0",
pBaseName);
&entity,
&targetEntity);
{
clLogError(NULL, NULL, "SU add comp returned [%#x]", rc);
goto out;
}
"%sComp1",
pBaseName);
&entity,
&targetEntity);
{
clLogError(NULL, NULL, "SU add comp returned [%#x]", rc);
goto out;
}
{
clLogError(NULL, NULL, "SU commit returned [%#x]", rc);
goto out;
}
}
break;
case CL_AMS_ENTITY_TYPE_COMP:
{
ClUint64T bitMask = 0;
"%sComp0",
pBaseName);
&entity,
&pEntityConfig);
{
clLogError(NULL, NULL, "COMP config get returned [%#x]", rc);
goto out;
}
memcpy(&compConfig, pEntityConfig, sizeof(compConfig));
bitMask |= COMP_CONFIG_CAPABILITY_MODEL |
COMP_CONFIG_TIMEOUTS |
COMP_CONFIG_RECOVERY_ON_TIMEOUT;
compConfig.
timeouts.instantiate = 30000;
compConfig.
timeouts.quiescingComplete = 30000;
compConfig.
timeouts.instantiateDelay = 10000;
bitMask |= COMP_CONFIG_SUPPORTED_CSI_TYPE;
snprintf(supportedCSIType.
value,
sizeof(supportedCSIType.
value),
"%sCSIType",
pBaseName);
supportedCSIType.
length = strlen(supportedCSIType.
value)+1;
bitMask |= COMP_CONFIG_INSTANTIATE_COMMAND;
snprintf(compConfig.instantiateCommand,
sizeof(compConfig.instantiateCommand),
"asp_noRredundancyComp dummy");
&bitMask);
{
clLogError(NULL, NULL, "Comp config set returned [%#x]", rc);
goto out;
}
"%sComp1",
pBaseName);
&bitMask);
{
clLogError(NULL, NULL, "Comp config set returned [%#x]", rc);
goto out;
}
{
clLogError(NULL, NULL, "Comp commit returned [%#x]", rc);
goto out;
}
}
break;
default:
{
}
}
out:
return rc;
}
static ClRcT clAmsMgmtTestUnlock(ClAmsMgmtHandleT mgmtHandle,
ClAmsMgmtCCBHandleT ccbHandle,
const ClCharT *pBaseName)
{
entity.
type = CL_AMS_ENTITY_TYPE_SU;
"%sSU0",
pBaseName);
{
clLogError(NULL, NULL, "Lock assignment of SU returned [%#x]", rc);
goto out;
}
{
clLogError(NULL, NULL, "Unlock of SU returned [%#x]", rc);
goto out;
}
"%sSU1",
pBaseName);
&entity);
{
clLogError(NULL, NULL, "Lock assignment of SU returned [%#x]", rc);
goto out;
}
{
clLogError(NULL, NULL, "Unlock of SU returned [%#x]", rc);
goto out;
}
entity.
type = CL_AMS_ENTITY_TYPE_SI;
"%sSI",
pBaseName);
{
clLogError(NULL, NULL, "Unlock of SI returned [%#x]", rc);
goto out;
}
entity.
type = CL_AMS_ENTITY_TYPE_SG;
"%sSG",
pBaseName);
{
clLogError(NULL, NULL, "Lock assignment of SG returned [%#x]", rc);
goto out;
}
{
clLogError(NULL, NULL, "Unlock of SG returned [%#x]", rc);
goto out;
}
entity.
type = CL_AMS_ENTITY_TYPE_NODE;
"%sNode",
pBaseName);
{
clLogError(NULL, NULL, "Lock assignment of Node returned [%#x]", rc);
goto out;
}
{
clLogError(NULL, NULL, "Unlock of Node returned [%#x]", rc);
goto out;
}
out:
return rc;
}
ClRcT clAmsMgmtTest(
void)
{
const ClCharT *pBaseName = "dummyTwoN";
{
clLogError(NULL, NULL, "MGMT initialize returned [%#x]", rc);
goto out;
}
{
clLogError(NULL, NULL, "MGMT CCB initialize returned [%#x]", rc);
goto out1;
}
entity.
type = CL_AMS_ENTITY_TYPE_SG;
{
clLogError(NULL, NULL, "SG create returned [%#x]", rc);
goto out2;
}
entity.
type = CL_AMS_ENTITY_TYPE_SI;
{
clLogError(NULL, NULL, "SI create returned [%#x]", rc);
goto out2;
}
entity.
type = CL_AMS_ENTITY_TYPE_CSI;
{
clLogError(NULL, NULL, "CSI create returned [%#x]", rc);
goto out2;
}
entity.
type = CL_AMS_ENTITY_TYPE_NODE;
{
clLogError(NULL, NULL, "Node create returned [%#x]", rc);
goto out2;
}
entity.
type = CL_AMS_ENTITY_TYPE_SU;
{
clLogError(NULL, NULL, "SU create returned [%#x]", rc);
goto out2;
}
{
clLogError(NULL, NULL, "SU create returned [%#x]", rc);
goto out2;
}
entity.
type = CL_AMS_ENTITY_TYPE_COMP;
{
clLogError(NULL, NULL, "Component create returned [%#x]", rc);
goto out2;
}
{
clLogError(NULL, NULL, "Component create returned [%#x]", rc);
goto out2;
}
{
clLogError(NULL, NULL, "CCB commit returned [%#x]", rc);
goto out2;
}
rc = clAmsMgmtTestFillConfig(mgmtHandle,
ccbHandle,
CL_AMS_ENTITY_TYPE_SG,
pBaseName);
{
clLogError(NULL, NULL, "SG config fill returned [%#x]", rc);
goto out2;
}
rc = clAmsMgmtTestFillConfig(mgmtHandle,
ccbHandle,
CL_AMS_ENTITY_TYPE_SI,
pBaseName);
{
clLogError(NULL, NULL, "SG config fill returned [%#x]", rc);
goto out2;
}
rc = clAmsMgmtTestFillConfig(mgmtHandle,
ccbHandle,
CL_AMS_ENTITY_TYPE_CSI,
pBaseName);
{
clLogError(NULL, NULL, "SG config fill returned [%#x]", rc);
goto out2;
}
rc = clAmsMgmtTestFillConfig(mgmtHandle,
ccbHandle,
CL_AMS_ENTITY_TYPE_NODE,
pBaseName);
{
clLogError(NULL, NULL, "SG config fill returned [%#x]", rc);
goto out2;
}
rc = clAmsMgmtTestFillConfig(mgmtHandle,
ccbHandle,
CL_AMS_ENTITY_TYPE_SU,
pBaseName);
{
clLogError(NULL, NULL, "SG config fill returned [%#x]", rc);
goto out2;
}
rc = clAmsMgmtTestFillConfig(mgmtHandle,
ccbHandle,
CL_AMS_ENTITY_TYPE_COMP,
pBaseName);
{
clLogError(NULL, NULL, "SG config fill returned [%#x]", rc);
goto out2;
}
rc = clAmsMgmtTestUnlock(mgmtHandle,
ccbHandle,
pBaseName);
{
clLogError(NULL, NULL, "Unlock AMS entities returned [%#x]", rc);
goto out2;
}
out2:
out1:
out:
return rc;
}