<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://help.openclovis.com/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://help.openclovis.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Karthick</id>
		<title>OpenClovis Product Documentation - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://help.openclovis.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Karthick"/>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Special:Contributions/Karthick"/>
		<updated>2026-04-08T04:29:26Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.20.2</generator>

	<entry>
		<id>https://help.openclovis.com/index.php/ClLogFilterSet</id>
		<title>ClLogFilterSet</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/ClLogFilterSet"/>
				<updated>2013-04-16T19:24:04Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here's how you can override the default log filters for the various log streams.&lt;br /&gt;
For the openclovis nodename log files in var/log/&amp;lt;NODENAME&amp;gt;.log, you can use the env &lt;br /&gt;
&lt;br /&gt;
export CL_LOG_SEVERITY=DEBUG &lt;br /&gt;
&lt;br /&gt;
to override the default severity of NOTICE.&lt;br /&gt;
&lt;br /&gt;
For pre-created openclovis sys or app log streams, you can use the env:&lt;br /&gt;
&lt;br /&gt;
export CL_LOG_STREAM_SEVERITY=NOTICE &lt;br /&gt;
&lt;br /&gt;
to override the default severity of DEBUG.&lt;br /&gt;
&lt;br /&gt;
For dynamically created runtime log streams, there is another env. to make your life easier that overrides the default DEBUG severity.&lt;br /&gt;
&lt;br /&gt;
export CL_LOG_STREAM_SEVERITY_CUSTOM=TRACE&lt;br /&gt;
&lt;br /&gt;
and runtime log streams would start getting trace instead of debug.&lt;br /&gt;
&lt;br /&gt;
This can be achieved without writing any code to modify the severity of runtime created stream/s. &lt;br /&gt;
&lt;br /&gt;
All of the above can be configured pretty easily by modifications to asp.conf.&lt;br /&gt;
&lt;br /&gt;
However, if you still want to modify runtime stream filter level using code/api given the clLogStreamOpen returned stream handle after open, you can use the below code snippet that uses clLogFilterSet to modify the log severity.&lt;br /&gt;
&lt;br /&gt;
ClRcT setLogStreamSeverity(const ClNameT *pStreamName,&lt;br /&gt;
                           ClLogStreamHandleT stream,&lt;br /&gt;
                           ClUint32T sev)&lt;br /&gt;
{&lt;br /&gt;
    ClRcT rc = CL_OK;&lt;br /&gt;
    ClLogFilterT filter = {0};&lt;br /&gt;
    filter.severityFilter = ( 1 &amp;lt;&amp;lt; sev) -1;&lt;br /&gt;
    clLogDebug(&amp;quot;FILTER&amp;quot;, &amp;quot;SET&amp;quot;, &amp;quot;Setting log severity for stream [%.*s] to [%s]&amp;quot;, &lt;br /&gt;
                pStreamName-&amp;gt;length, pStreamName-&amp;gt;value, clLogSeverityStrGet(sev));&lt;br /&gt;
    rc = clLogFilterSet(stream, CL_LOG_FILTER_ASSIGN, filter);&lt;br /&gt;
    if(rc != CL_OK)&lt;br /&gt;
    {&lt;br /&gt;
        clLogError(&amp;quot;FILTER&amp;quot;, &amp;quot;SET&amp;quot;, &amp;quot;Setting log filter for app stream returned with [%#x]&amp;quot;,&lt;br /&gt;
                   rc);&lt;br /&gt;
    }&lt;br /&gt;
    return rc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
For eg:, to change the severity of a runtime example_stream to TRACE, you can use it as below:&lt;br /&gt;
&lt;br /&gt;
ClNameT streamName;&lt;br /&gt;
&lt;br /&gt;
clNameSet(&amp;amp;streamName, &amp;quot;example_stream&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
setLogStreamSeverity(&amp;amp;streamName, streamOpenHandle, CL_LOG_SEV_TRACE);&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/ClLogFilterSet</id>
		<title>ClLogFilterSet</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/ClLogFilterSet"/>
				<updated>2013-04-16T19:22:26Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here's how you can override the default log filters for the various log streams.&lt;br /&gt;
For the openclovis nodename log files in var/log/&amp;lt;NODENAME&amp;gt;.log, you can use the env &lt;br /&gt;
&lt;br /&gt;
export CL_LOG_SEVERITY=DEBUG &lt;br /&gt;
&lt;br /&gt;
to override the default severity of NOTICE.&lt;br /&gt;
&lt;br /&gt;
For pre-created openclovis sys or app log streams, you can use the env:&lt;br /&gt;
&lt;br /&gt;
export CL_LOG_STREAM_SEVERITY=NOTICE &lt;br /&gt;
&lt;br /&gt;
to override the default severity of DEBUG.&lt;br /&gt;
&lt;br /&gt;
For dynamically created runtime log streams, there is another env. to make your life easier that overrides the default DEBUG severity.&lt;br /&gt;
&lt;br /&gt;
export CL_LOG_STREAM_SEVERITY_CUSTOM=TRACE&lt;br /&gt;
&lt;br /&gt;
and runtime log streams would start getting trace instead of debug.&lt;br /&gt;
&lt;br /&gt;
This can be achieved without writing any code to modify the severity of runtime created stream/s. &lt;br /&gt;
&lt;br /&gt;
All of the above can be configured pretty easily by modifications to asp.conf.&lt;br /&gt;
&lt;br /&gt;
However, if you still want to modify runtime stream filter level using code/api given the clLogStreamOpen returned stream handle after open, you can use the below code snippet that uses clLogFilterSet to modify the log severity.&lt;br /&gt;
&lt;br /&gt;
ClRcT setLogStreamSeverity(const ClNameT *pStreamName, ClLogStreamHandleT stream, ClUint32T sev)&lt;br /&gt;
{&lt;br /&gt;
    ClRcT rc = CL_OK;&lt;br /&gt;
    ClLogFilterT filter = {0};&lt;br /&gt;
    filter.severityFilter = ( 1 &amp;lt;&amp;lt; sev) -1;&lt;br /&gt;
    clLogDebug(&amp;quot;FILTER&amp;quot;, &amp;quot;SET&amp;quot;, &amp;quot;Setting log severity for stream [%.*s] to [%s]&amp;quot;, &lt;br /&gt;
                pStreamName-&amp;gt;length, pStreamName-&amp;gt;value, clLogSeverityStrGet(sev));&lt;br /&gt;
    rc = clLogFilterSet(stream, CL_LOG_FILTER_ASSIGN, filter);&lt;br /&gt;
    if(rc != CL_OK)&lt;br /&gt;
    {&lt;br /&gt;
        clLogError(&amp;quot;FILTER&amp;quot;, &amp;quot;SET&amp;quot;, &amp;quot;Setting log filter for app stream returned with [%#x]&amp;quot;,&lt;br /&gt;
                   rc);&lt;br /&gt;
    }&lt;br /&gt;
    return rc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
For eg:, to change the severity of a runtime example_stream to TRACE, you can use it as below:&lt;br /&gt;
&lt;br /&gt;
ClNameT streamName;&lt;br /&gt;
&lt;br /&gt;
clNameSet(&amp;amp;streamName, &amp;quot;example_stream&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
setLogStreamSeverity(&amp;amp;streamName, streamOpenHandle, CL_LOG_SEV_TRACE);&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/ClLogFilterSet</id>
		<title>ClLogFilterSet</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/ClLogFilterSet"/>
				<updated>2013-04-16T19:22:05Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here's how you can override the default log filters for the various log streams.&lt;br /&gt;
For the openclovis nodename log files in var/log/&amp;lt;NODENAME&amp;gt;.log, you can use the env &lt;br /&gt;
&lt;br /&gt;
export CL_LOG_SEVERITY=DEBUG &lt;br /&gt;
&lt;br /&gt;
to override the default severity of NOTICE.&lt;br /&gt;
&lt;br /&gt;
For pre-created openclovis sys or app log streams, you can use the env:&lt;br /&gt;
&lt;br /&gt;
export CL_LOG_STREAM_SEVERITY=NOTICE &lt;br /&gt;
&lt;br /&gt;
to override the default severity of DEBUG.&lt;br /&gt;
&lt;br /&gt;
For dynamically created runtime log streams, there is another env. to make your life easier that overrides the default DEBUG severity.&lt;br /&gt;
&lt;br /&gt;
export CL_LOG_STREAM_SEVERITY_CUSTOM=TRACE&lt;br /&gt;
&lt;br /&gt;
and runtime log streams would start getting trace instead of debug.&lt;br /&gt;
&lt;br /&gt;
This can be achieved without writing any code to modify the severity of runtime created stream/s. &lt;br /&gt;
&lt;br /&gt;
All of the above can be configured pretty easily by modifications to asp.conf.&lt;br /&gt;
&lt;br /&gt;
However, if you still want to modify runtime stream filter level using code/api given the clLogStreamOpen returned stream handle after open, you can use the below code snippet that uses clLogFilterSet to modify the log severity.&lt;br /&gt;
&lt;br /&gt;
ClRcT setLogStreamSeverity(const ClNameT *pStreamName, ClLogStreamHandleT stream, ClUint32T sev)&lt;br /&gt;
{&lt;br /&gt;
    ClRcT rc = CL_OK;&lt;br /&gt;
    ClLogFilterT filter = {0};&lt;br /&gt;
    filter.severityFilter = ( 1 &amp;lt;&amp;lt; sev) -1;&lt;br /&gt;
    clLogDebug(&amp;quot;FILTER&amp;quot;, &amp;quot;SET&amp;quot;, &amp;quot;Setting log severity for stream [%.*s] to [%s]&amp;quot;, &lt;br /&gt;
                pStreamName-&amp;gt;length, pStreamName-&amp;gt;value, clLogSeverityStrGet(sev));&lt;br /&gt;
    rc = clLogFilterSet(stream, CL_LOG_FILTER_ASSIGN, filter);&lt;br /&gt;
    if(rc != CL_OK)&lt;br /&gt;
    {&lt;br /&gt;
        clLogError(&amp;quot;FILTER&amp;quot;, &amp;quot;SET&amp;quot;, &amp;quot;Setting log filter for app stream returned with [%#x]&amp;quot;,&lt;br /&gt;
                   rc);&lt;br /&gt;
    }&lt;br /&gt;
   return rc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
For eg:, to change the severity of a runtime example_stream to TRACE, you can use it as below:&lt;br /&gt;
&lt;br /&gt;
ClNameT streamName;&lt;br /&gt;
&lt;br /&gt;
clNameSet(&amp;amp;streamName, &amp;quot;example_stream&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
setLogStreamSeverity(&amp;amp;streamName, streamOpenHandle, CL_LOG_SEV_TRACE);&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/ClLogFilterSet</id>
		<title>ClLogFilterSet</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/ClLogFilterSet"/>
				<updated>2013-04-16T19:21:34Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here's how you can override the default log filters for the various log streams.&lt;br /&gt;
For the openclovis nodename log files in var/log/&amp;lt;NODENAME&amp;gt;.log, you can use the env &lt;br /&gt;
&lt;br /&gt;
export CL_LOG_SEVERITY=DEBUG &lt;br /&gt;
&lt;br /&gt;
to override the default severity of NOTICE.&lt;br /&gt;
&lt;br /&gt;
For pre-created openclovis sys or app log streams, you can use the env:&lt;br /&gt;
export CL_LOG_STREAM_SEVERITY=NOTICE to override the default severity of DEBUG.&lt;br /&gt;
&lt;br /&gt;
For dynamically created runtime log streams, there is another env. to make your life easier that overrides the default DEBUG severity.&lt;br /&gt;
&lt;br /&gt;
export CL_LOG_STREAM_SEVERITY_CUSTOM=TRACE&lt;br /&gt;
&lt;br /&gt;
and runtime log streams would start getting trace instead of debug.&lt;br /&gt;
&lt;br /&gt;
This can be achieved without writing any code to modify the severity of runtime created stream/s. &lt;br /&gt;
&lt;br /&gt;
All of the above can be configured pretty easily by modifications to asp.conf.&lt;br /&gt;
&lt;br /&gt;
However, if you still want to modify runtime stream filter level using code/api given the clLogStreamOpen returned stream handle after open, you can use the below code snippet that uses clLogFilterSet to modify the log severity.&lt;br /&gt;
&lt;br /&gt;
ClRcT setLogStreamSeverity(const ClNameT *pStreamName, ClLogStreamHandleT stream, ClUint32T sev)&lt;br /&gt;
{&lt;br /&gt;
    ClRcT rc = CL_OK;&lt;br /&gt;
    ClLogFilterT filter = {0};&lt;br /&gt;
    filter.severityFilter = ( 1 &amp;lt;&amp;lt; sev) -1;&lt;br /&gt;
    clLogDebug(&amp;quot;FILTER&amp;quot;, &amp;quot;SET&amp;quot;, &amp;quot;Setting log severity for stream [%.*s] to [%s]&amp;quot;, &lt;br /&gt;
                pStreamName-&amp;gt;length, pStreamName-&amp;gt;value, clLogSeverityStrGet(sev));&lt;br /&gt;
    rc = clLogFilterSet(stream, CL_LOG_FILTER_ASSIGN, filter);&lt;br /&gt;
    if(rc != CL_OK)&lt;br /&gt;
    {&lt;br /&gt;
        clLogError(&amp;quot;FILTER&amp;quot;, &amp;quot;SET&amp;quot;, &amp;quot;Setting log filter for app stream returned with [%#x]&amp;quot;,&lt;br /&gt;
                   rc);&lt;br /&gt;
    }&lt;br /&gt;
   return rc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
For eg:, to change the severity of a runtime example_stream to TRACE, you can use it as below:&lt;br /&gt;
&lt;br /&gt;
ClNameT streamName;&lt;br /&gt;
&lt;br /&gt;
clNameSet(&amp;amp;streamName, &amp;quot;example_stream&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
setLogStreamSeverity(&amp;amp;streamName, streamOpenHandle, CL_LOG_SEV_TRACE);&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/ClLogFilterSet</id>
		<title>ClLogFilterSet</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/ClLogFilterSet"/>
				<updated>2013-04-16T19:19:40Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: Created page with &amp;quot;Here's how you can override the default log filters for the various log streams. For the openclovis nodename log files in var/log/&amp;lt;NODENAME&amp;gt;.log, you can use the env. -- expor...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here's how you can override the default log filters for the various log streams.&lt;br /&gt;
For the openclovis nodename log files in var/log/&amp;lt;NODENAME&amp;gt;.log, you can use the env. --&lt;br /&gt;
export CL_LOG_SEVERITY=DEBUG &lt;br /&gt;
to override the default severity of NOTICE.&lt;br /&gt;
&lt;br /&gt;
For pre-created openclovis sys or app log streams, you can use the env:&lt;br /&gt;
export CL_LOG_STREAM_SEVERITY=NOTICE to override the default severity of DEBUG.&lt;br /&gt;
&lt;br /&gt;
For dynamically created runtime log streams, there is another env. to make your life easier that overrides the default DEBUG severity.&lt;br /&gt;
&lt;br /&gt;
export CL_LOG_STREAM_SEVERITY_CUSTOM=TRACE&lt;br /&gt;
and runtime log streams would start getting trace instead of debug.&lt;br /&gt;
&lt;br /&gt;
This can be achieved without writing any code to modify the severity of runtime created stream/s. &lt;br /&gt;
&lt;br /&gt;
All of the above can be configured pretty easily by modifications to asp.conf.&lt;br /&gt;
&lt;br /&gt;
However, if you still want to modify runtime stream filter level using code/api given the clLogStreamOpen returned stream handle after open, you can use the below code snippet that uses clLogFilterSet to modify the log severity.&lt;br /&gt;
&lt;br /&gt;
ClRcT setLogStreamSeverity(const ClNameT *pStreamName, ClLogStreamHandleT stream, ClUint32T sev)&lt;br /&gt;
{&lt;br /&gt;
    ClRcT rc = CL_OK;&lt;br /&gt;
    ClLogFilterT filter = {0};&lt;br /&gt;
    filter.severityFilter = ( 1 &amp;lt;&amp;lt; sev) -1;&lt;br /&gt;
    clLogDebug(&amp;quot;FILTER&amp;quot;, &amp;quot;SET&amp;quot;, &amp;quot;Setting log severity for stream [%.*s] to [%s]&amp;quot;, &lt;br /&gt;
                pStreamName-&amp;gt;length, pStreamName-&amp;gt;value, clLogSeverityStrGet(sev));&lt;br /&gt;
    rc = clLogFilterSet(stream, CL_LOG_FILTER_ASSIGN, filter);&lt;br /&gt;
    if(rc != CL_OK)&lt;br /&gt;
    {&lt;br /&gt;
        clLogError(&amp;quot;FILTER&amp;quot;, &amp;quot;SET&amp;quot;, &amp;quot;Setting log filter for app stream returned with [%#x]&amp;quot;,&lt;br /&gt;
                   rc);&lt;br /&gt;
    }&lt;br /&gt;
   return rc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
For eg:, to change the severity of a runtime example_stream to TRACE, you can use it as below:&lt;br /&gt;
ClNameT streamName = {0};&lt;br /&gt;
clNameSet(&amp;amp;streamName, &amp;quot;example_stream&amp;quot;); &lt;br /&gt;
setLogStreamSeverity(&amp;amp;streamName, streamOpenHandle, CL_LOG_SEV_TRACE);&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Doc:latest/evalguide/dhaDemo</id>
		<title>Doc:latest/evalguide/dhaDemo</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Doc:latest/evalguide/dhaDemo"/>
				<updated>2012-11-16T21:46:44Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dynamic HA Evaluation Guide==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
&lt;br /&gt;
This sample application demonstrates dynamic HA (High Availability) functionality. The application has two components : dhaDemo and dummyComp  &lt;br /&gt;
*dhaDemo creates/deletes the AMF entities (SG, SI, CSI, SU, Component, etc) dynamically. &lt;br /&gt;
*dummyComp is a sample SAF component whose binary(executable) will be used while launching the dynamically created component.&lt;br /&gt;
&lt;br /&gt;
===What you will learn===&lt;br /&gt;
&lt;br /&gt;
*How to create a 2N model dynamically by creating/deleting various AMF entities using Clovis AMF management APIs related to Dynamic HA.&lt;br /&gt;
&lt;br /&gt;
===Building the dynamic HA model (dynamicHaDemo) and deploying runtime images===&lt;br /&gt;
&lt;br /&gt;
The Clovis dynamic HA Application is located in : &amp;lt;b&amp;gt;&amp;lt;install_dir&amp;gt;/sdk-5.0/src/examples/dynamicHaDemo&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to build the model and deploy the runtime images for following nodes : SysCtrlI0, WorkerI0, WorkerI1 &lt;br /&gt;
&lt;br /&gt;
It can be done in very similar manner to evaluation system model (eval). For more information about building and deploying a model, please refer to the following section of evalguide:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Building the Evaluation System and Deploying Runtime Images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Code===&lt;br /&gt;
&lt;br /&gt;
The application code can be found within the following directory &lt;br /&gt;
 &amp;lt;project-area_dir&amp;gt;/dynamicHaDemo/src/app/dhaDemo&lt;br /&gt;
&lt;br /&gt;
This sample component is implemented in a single C module (clCompAppMain.c). &lt;br /&gt;
It uses the AMF dynamic HA apis to create a 2N SG on the fly using the clAmsMgmtCCB apis.&lt;br /&gt;
&lt;br /&gt;
There is an alternate version of this C file: clCompAppMain_batch.c which uses a faster version of these apis using clAmsMgmtCCBBatch apis.&lt;br /&gt;
&lt;br /&gt;
The batch version of the dynamic HA apis are faster as the AMF entity CRUD operatons are batched/cached on the client side before they are&lt;br /&gt;
committed with clAmsMgmtCCBBatchCommit api.&lt;br /&gt;
&lt;br /&gt;
Both the clAmsMgmtCCB and clAmsMgmtCCBBatch version of the APIs are declared in clAmsMgmtClientApi.h which needs to be included for usage.&lt;br /&gt;
&lt;br /&gt;
====Start/Stop the application====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;clCompAppAMFCSISet()&amp;lt;/code&amp;gt; function is called to set the component's HA state, and the following block of code assigns this requested state to the component, while verbosely detailing this process:&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffccaa;&amp;quot; align=&amp;quot;center&amp;quot;| clCompAppMain.c&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    switch ( haState )&lt;br /&gt;
    {&lt;br /&gt;
        case SA_AMF_HA_ACTIVE:&lt;br /&gt;
        {&lt;br /&gt;
            /*&lt;br /&gt;
             * AMF has requested application to take the active HA state &lt;br /&gt;
             * for the CSI.&lt;br /&gt;
             */&lt;br /&gt;
&lt;br /&gt;
            /*&lt;br /&gt;
             * ---BEGIN_APPLICATION_CODE---&lt;br /&gt;
             */&lt;br /&gt;
            clprintf(CL_LOG_SEV_NOTICE, &amp;quot;Starting dynamic HA demo.&amp;quot;);&lt;br /&gt;
            clprintf(CL_LOG_SEV_NOTICE, &amp;quot;It will create 2N SG : %sSG&amp;quot;, BASE_NAME);&lt;br /&gt;
            rc = clDhaDemoStart();&lt;br /&gt;
            if(rc != CL_OK)&lt;br /&gt;
            {&lt;br /&gt;
                clprintf(CL_LOG_SEV_CRITICAL, &amp;quot;Failed to start dynamic HA demo.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            /*&lt;br /&gt;
             * ---End_APPLICATION_CODE---&lt;br /&gt;
             */&lt;br /&gt;
&lt;br /&gt;
            saAmfResponse(amfHandle, invocation, SA_AIS_OK);&lt;br /&gt;
            break;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* clDhaDemoStart() will start the workload in a separate thread to create the AMF entities (SG, SI, CSI, SU, Components, etc) when the HA state of dhaDemo becomes ACTIVE. In this case dhaDemo will be assigned active state when you unlock the SG 'dhaDemoSG'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffccaa;&amp;quot; align=&amp;quot;center&amp;quot;| clCompAppMain.c&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        case SA_AMF_HA_QUIESCED:&lt;br /&gt;
        {&lt;br /&gt;
            /*&lt;br /&gt;
             * AMF has requested application to quiesce the CSI currently&lt;br /&gt;
             * assigned the active or quiescing HA state. The application &lt;br /&gt;
             * must stop work associated with the CSI immediately.&lt;br /&gt;
             */&lt;br /&gt;
&lt;br /&gt;
            /*&lt;br /&gt;
             * ---BEGIN_APPLICATION_CODE---&lt;br /&gt;
             */&lt;br /&gt;
&lt;br /&gt;
            rc = clDhaDemoStop();&lt;br /&gt;
            if(rc != CL_OK)&lt;br /&gt;
            {&lt;br /&gt;
                clprintf(CL_LOG_SEV_CRITICAL, &amp;quot;Failed to stop dynamic HA demo.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            /*&lt;br /&gt;
             * ---END_APPLICATION_CODE---&lt;br /&gt;
             */&lt;br /&gt;
&lt;br /&gt;
            saAmfResponse(amfHandle, invocation, SA_AIS_OK);&lt;br /&gt;
            break;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* clDhaDemoStop() will start the workload in a separate thread to delete the AMF entities (SG, SI, CSI, SU, Components, etc) only if they are already created, when the HA state of dhaDemo becomes QUIESCED or QUIESCING. In this case dhaDemo will be get QUIESCED state when you lock the unlocked SG 'dhaDemoSG'&lt;br /&gt;
&lt;br /&gt;
====Create/Delete the AMF entities====&lt;br /&gt;
&lt;br /&gt;
* clDhaDemoCreate() contains the code to create various AMF entities dynamically.&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffccaa;&amp;quot; align=&amp;quot;center&amp;quot;| clCompAppMain.c&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    rc = clAmsMgmtInitialize(&amp;amp;mgmtHandle, NULL, &amp;amp;version);&lt;br /&gt;
    if(rc != CL_OK)&lt;br /&gt;
    {&lt;br /&gt;
        clprintf(CL_LOG_SEV_ERROR, &amp;quot;AmsMgmt initialize returned [%#x]&amp;quot;, rc);&lt;br /&gt;
        return NULL;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    clDhaExmpExec((&amp;quot;Running MGMT CCB initialize&amp;quot;),&lt;br /&gt;
                  (rc = clAmsMgmtCCBInitialize(mgmtHandle, &amp;amp;ccbHandle)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;MGMT CCB initialize returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out1);&lt;br /&gt;
&lt;br /&gt;
    /*                                                                                                                                                               &lt;br /&gt;
     * Create the entities only if they are not created already                                                                                                      &lt;br /&gt;
     */&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SG;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value), &amp;quot;%sSG&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
&lt;br /&gt;
    rc = clAmsMgmtEntityGetConfig(mgmtHandle,&lt;br /&gt;
                                  &amp;amp;entity,&lt;br /&gt;
                                  &amp;amp;pEntityConfig);&lt;br /&gt;
&lt;br /&gt;
    clHeapFree(pEntityConfig);&lt;br /&gt;
&lt;br /&gt;
    if(rc == CL_OK)&lt;br /&gt;
    {&lt;br /&gt;
        clprintf(CL_LOG_SEV_INFO, &amp;quot;Not creating SG[%sSG], it already exist&amp;quot;, pBaseName);&lt;br /&gt;
		goto out2;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* SG doesn't exist, create SG and other entities dynamically*/&lt;br /&gt;
&lt;br /&gt;
    /*First create the service hierarchies*/&lt;br /&gt;
&lt;br /&gt;
    clprintf(CL_LOG_SEV_NOTICE,&lt;br /&gt;
             &amp;quot;Creating 2N SG [%sSG] and other entities(si, csi, su, comp, etc)&amp;quot;,&lt;br /&gt;
             pBaseName);&lt;br /&gt;
&lt;br /&gt;
    /* Create SG*/&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SG;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value),&lt;br /&gt;
             &amp;quot;%sSG&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
&lt;br /&gt;
    clDhaExmpExec((&amp;quot;Creating SG [%s]&amp;quot;,&lt;br /&gt;
                   entity.name.value),&lt;br /&gt;
                  (rc = clAmsMgmtCCBEntityCreate(ccbHandle,&lt;br /&gt;
                                                 &amp;amp;entity)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;SG create returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out2);&lt;br /&gt;
&lt;br /&gt;
    /* Create SI*/&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SI;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value),&lt;br /&gt;
             &amp;quot;%sSI&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
    clDhaExmpExec( (&amp;quot;Create SI [%s]&amp;quot;, entity.name.value),&lt;br /&gt;
                   (rc = clAmsMgmtCCBEntityCreate(ccbHandle, &amp;amp;entity)) == CL_OK,&lt;br /&gt;
                   (&amp;quot;SI create returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                   goto out2);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    ...&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    /* CCB Commit*/&lt;br /&gt;
    clDhaExmpExec((&amp;quot;CCB Commit Create&amp;quot;),&lt;br /&gt;
                  (rc = clAmsMgmtCCBCommit(ccbHandle)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;CCB commit returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out2);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* clDhaDemoDelete() contains the code to delete the created AMF entities dynamically.&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffccaa;&amp;quot; align=&amp;quot;center&amp;quot;| clCompAppMain.c&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    rc = clAmsMgmtInitialize(&amp;amp;mgmtHandle, NULL, &amp;amp;version);&lt;br /&gt;
    if(rc != CL_OK)&lt;br /&gt;
    {&lt;br /&gt;
        clprintf(CL_LOG_SEV_ERROR, &amp;quot;AmsMgmt initialize returned [%#x]&amp;quot;, rc);&lt;br /&gt;
		return NULL;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    clDhaExmpExec((&amp;quot;Running MGMT CCB initialize&amp;quot;),&lt;br /&gt;
                  (rc = clAmsMgmtCCBInitialize(mgmtHandle, &amp;amp;ccbHandle)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;MGMT CCB initialize returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out1);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    /*                                                                                                                                                               &lt;br /&gt;
     * Delete the entities only if they exist                                                                                                                        &lt;br /&gt;
     */&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SG;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value), &amp;quot;%sSG&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
&lt;br /&gt;
    rc = clAmsMgmtEntityGetConfig(mgmtHandle,&lt;br /&gt;
                                  &amp;amp;entity,&lt;br /&gt;
                                  &amp;amp;pEntityConfig);&lt;br /&gt;
    clHeapFree(pEntityConfig);&lt;br /&gt;
    if(rc != CL_OK)&lt;br /&gt;
    {&lt;br /&gt;
        clprintf(CL_LOG_SEV_INFO, &amp;quot;Not deleting SG[%sSG],  SG config get returned [%#x]&amp;quot;, pBaseName, rc);&lt;br /&gt;
        goto out2;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* SG exist, Delete SG and other entities dynamically*/&lt;br /&gt;
&lt;br /&gt;
    clprintf(CL_LOG_SEV_NOTICE,&lt;br /&gt;
             &amp;quot;Deleting SG [%sSG] and other entities(si, csi, su, comp, etc)&amp;quot;,&lt;br /&gt;
             pBaseName);&lt;br /&gt;
&lt;br /&gt;
    /*First move entities to lock instantiated mode*/&lt;br /&gt;
    clDhaExmpExec((&amp;quot;LockI AMS entities&amp;quot;),&lt;br /&gt;
                  (rc = clAmsMgmtTestLockI(mgmtHandle, ccbHandle, pBaseName)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;Unlock AMS entities returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out2);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    /* Delete SI*/&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SI;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value),&lt;br /&gt;
             &amp;quot;%sSI&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
    clDhaExmpExec( (&amp;quot;Delete SI [%s]&amp;quot;, entity.name.value),&lt;br /&gt;
                   (rc = clAmsMgmtCCBEntityDelete(ccbHandle, &amp;amp;entity)) == CL_OK,&lt;br /&gt;
                   (&amp;quot;SI delete returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                   goto out2);&lt;br /&gt;
&lt;br /&gt;
    /* Delete SG*/&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SG;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value),&lt;br /&gt;
             &amp;quot;%sSG&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
    clDhaExmpExec((&amp;quot;Deleting SG [%s]&amp;quot;,&lt;br /&gt;
                   entity.name.value),&lt;br /&gt;
                  (rc = clAmsMgmtCCBEntityDelete(ccbHandle,&lt;br /&gt;
                                                 &amp;amp;entity)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;SG delete returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out2);&lt;br /&gt;
&lt;br /&gt;
    /* CCB Commit*/&lt;br /&gt;
    clDhaExmpExec((&amp;quot;CCB Commit Delete&amp;quot;),&lt;br /&gt;
                  (rc = clAmsMgmtCCBCommit(ccbHandle)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;CCB commit returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out2);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Usage of AMF management APIs for Dynamic HA====&lt;br /&gt;
&lt;br /&gt;
The detailed documentation of AMF management APIs can be found in &amp;quot;OpenClovis API Reference Guide&amp;quot;. Please refer &amp;quot;Availability Management Service&amp;quot; section under the High Availability.&lt;br /&gt;
&lt;br /&gt;
===How to Run dhaDemo application and What to Observe===&lt;br /&gt;
&lt;br /&gt;
We will use the SAFplus Platform Console to manipulate the administrative state of the dhaDemoSG service group.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Start the SAFplus Platform on all deployed nodes&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # cd /root/asp/&lt;br /&gt;
 # ./etc/init.d/asp start&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Start the SAFplus Platform Console&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # cd /root/asp/bin&lt;br /&gt;
 # ./asp_console&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Then put the dhaDemoSG service group into lock assignment state using the following commands.&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # cli[Test]-&amp;gt; setc master&lt;br /&gt;
 # cli[Test:SysCtrlI0]-&amp;gt; setc cpm&lt;br /&gt;
 # cli[Test:SysCtrlI0:CPM]-&amp;gt;  amsLockAssignment sg dhaDemoSG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The logs for dhaDemo application will be logged into file &amp;lt;code&amp;gt;/root/asp/var/log/app.0&amp;lt;/code&amp;gt; on node &amp;lt;b&amp;gt;WorkerI0&amp;lt;/b&amp;gt;. Viewing these application logs using the &amp;lt;code&amp;gt;tail -f&amp;lt;/code&amp;gt;, you should see the following :&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffffaa;&amp;quot; align=&amp;quot;center&amp;quot;| /root/asp/var/log/app.0&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:03:02 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00031 :   INFO) Component [dhaDemo] : PID [21785]. Initializing&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:03:02 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00032 :   INFO)    IOC Address             : 0x3&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:03:02 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00033 :   INFO)    IOC Port                : 0x80&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To create the AMF entities dynamically, unlock the dhaDemoSG service group using the following SAFplus Platform Console command.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # cli[Test:SysCtrlI0:CPM]-&amp;gt;  amsUnlock sg dhaDemoSG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
and in the  &amp;lt;code&amp;gt;/root/asp/var/log/app.0&amp;lt;/code&amp;gt; file (on node &amp;lt;b&amp;gt;WorkerI0&amp;lt;/b&amp;gt;) , we should see:&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffffaa;&amp;quot; align=&amp;quot;center&amp;quot;| /root/asp/var/log/app.0&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00036 :   INFO) Component [dhaDemo] : PID [21785]. CSI Set Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00037 :   INFO) CSI Flags : [Add One]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00038 :   INFO) CSI Name : [dhaDemoCSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00039 :   INFO) Name value pairs :&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00040 :   INFO) HA state : [Active]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00041 :   INFO) Active Descriptor :&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00042 :   INFO) Transition Descriptor : [1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00043 :   INFO) Active Component : [dhaDemo]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00044 : NOTICE) Starting dynamic HA demo.&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00045 : NOTICE) It will create 2N SG : dynamicTwoNSG&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00046 :   INFO) Running MGMT initialize&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00047 :   INFO) Running MGMT CCB initialize&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00048 : NOTICE) Creating 2N SG [dynamicTwoNSG] and other entities(si, csi, su, comp, etc)&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00049 :   INFO) Creating SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00050 :   INFO) Create SI [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00051 :   INFO) Create CSI [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00052 :   INFO) Create SU [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00053 :   INFO) Create SU [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00054 :   INFO) Create COMP [dynamicComp0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00055 :   INFO) Create COMP [dynamicComp1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00056 :   INFO) CCB Commit Create&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00057 :   INFO) Fill SG config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00058 :   INFO) SG config get [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00059 :   INFO) SG set SI [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00060 :   INFO) SG set SU [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00061 :   INFO) SG set SU [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00062 :   INFO) SG set commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00063 :   INFO) Fill SI config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00064 :   INFO) SI config get [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00065 :   INFO) SI config set [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00066 :   INFO) SI set CSI [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00067 :   INFO) SI set commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00068 :   INFO) Fill CSI config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00069 :   INFO) CSI config get [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00070 :   INFO) CSI type set [dynamicTwoNCSIType]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00071 :   INFO) CSI set nvplist&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00072 :   INFO) CSI ccb commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00073 :   INFO) Fill SU config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00074 :   INFO) SU config get [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00075 :   INFO) SU config set [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00076 :   INFO) SU config set [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00077 :   INFO) SU [dynamicTwoNSU0] add comp [dynamicComp0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00078 :   INFO) SU [dynamicTwoNSU1] add comp [dynamicComp1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00079 :   INFO) SU set commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00080 :   INFO) Fill NODE config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00081 :   INFO) NODE config get [WorkerI1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00082 :   INFO) Node set SU [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00083 :   INFO) NODE config get [WorkerI0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00084 :   INFO) Node set SU [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00085 :   INFO) Node set commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00086 :   INFO) Fill COMP config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00087 :   INFO) COMP config get [dynamicComp0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00088 :   INFO) Comp config set [dynamicComp0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00089 :   INFO) Comp config set [dynamicComp1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00090 :   INFO) Comp set commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00091 :   INFO) Unlock AMS entities&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00092 :   INFO) LockA [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00093 :   INFO) Unlock [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00094 :   INFO) LockA [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00095 :   INFO) Unlock [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00096 :   INFO) Unlock SI [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00097 :   INFO) LockA SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00098 :   INFO) Unlock SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00099 :   INFO) Running CCB finalize&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00100 :   INFO) Running MGMT finalize&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00101 : NOTICE) Successfully created 2N SG [dynamicTwoNSG] and its entities(si, csi, su, comp, etc) dynamically&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*The dynamically created components 'dynamicComp0' and 'dynamicComp1' will come up as active/standby. Which can be verified through the logs present at nodes WorkerI0 and WorkerI1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/root/asp/var/log/app.0&amp;lt;/code&amp;gt; file (on node &amp;lt;b&amp;gt;WorkerI0&amp;lt;/b&amp;gt;) , we should see the dynamically created component getting assigned ACTIVE state:&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffffaa;&amp;quot; align=&amp;quot;center&amp;quot;| /root/asp/var/log/app.0&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00031 :   INFO) Component [dynamicComp0] : PID [22187]. Initializing&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00032 :   INFO)    IOC Address             : 0x3&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00033 :   INFO)    IOC Port                : 0x81&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00036 :   INFO) Component [dynamicComp0] : PID [22187]. CSI Set Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00037 :   INFO) CSI Flags : [Add One]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00038 :   INFO) CSI Name : [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00039 :   INFO) Name value pairs :&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00040 :   INFO) Name : [model]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00041 :   INFO) Value : [twoN]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00042 :   INFO) HA state : [Active]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00043 :   INFO) Active Descriptor :&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00044 :   INFO) Transition Descriptor : [1]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00045 :   INFO) Active Component : [dynamicComp0]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/root/asp/var/log/app.0&amp;lt;/code&amp;gt; file (on node &amp;lt;b&amp;gt;WorkerI1&amp;lt;/b&amp;gt;) , we should see the dynamically created component getting assigned STANDBY state:&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffffaa;&amp;quot; align=&amp;quot;center&amp;quot;| /root/asp/var/log/app.0&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00031 :   INFO) Component [dynamicComp1] : PID [14623]. Initializing&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00032 :   INFO)    IOC Address             : 0x4&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00033 :   INFO)    IOC Port                : 0x80&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00036 :   INFO) Component [dynamicComp1] : PID [14623]. CSI Set Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00037 :   INFO) CSI Flags : [Add One]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00038 :   INFO) CSI Name : [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00039 :   INFO) Name value pairs :&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00040 :   INFO) Name : [model]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00041 :   INFO) Value : [twoN]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00042 :   INFO) HA state : [Standby]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00043 :   INFO) Standby Descriptor :&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00044 :   INFO) Standby Rank : [1]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00045 :   INFO) Active Component : [dynamicComp0]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:OpenClovis_Note.png]]Note : The dynamically created component might come up as ACTIVE on WorkerI1 and STANDBY on WorkerI0 or vice versa (depending on the order in which they are launched).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To delete the AMF entities dynamically, lock the dhaDemoSG service group using the following SAFplus Platform Console command.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # cli[Test:SysCtrlI0:CPM]-&amp;gt;  amsLockAssignment sg dhaDemoSG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
and in the  &amp;lt;code&amp;gt;/root/asp/var/log/app.0&amp;lt;/code&amp;gt; (on node WorkerI0) file, we should see:&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffffaa;&amp;quot; align=&amp;quot;center&amp;quot;| /root/asp/var/log/app.0&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00102 :   INFO) Component [dhaDemo] : PID [17193]. CSI Set Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00103 :   INFO) CSI Flags : [Target One]     &lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00104 :   INFO) CSI Name : [dhaDemoCSI]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00105 :   INFO) HA state : [Quiesced]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00106 :   INFO) Running MGMT initialize&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00109 :   INFO) Component [dhaDemo] : PID [17193]. CSI Remove Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00110 :   INFO)    CSI                     : dhaDemoCSI&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00111 :   INFO)    CSI Flags               : 0x2&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00112 :   INFO) Running MGMT CCB initialize&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00113 : NOTICE) Deleting SG [dynamicTwoNSG] and other entities(si, csi, su, comp, etc)&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00114 :   INFO) LockI AMS entities &lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00115 :   INFO) LockA [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00116 :   INFO) LockI [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00046 :   INFO) Component [dynamicComp0] : PID [17217]. CSI Set Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00047 :   INFO) CSI Flags : [Target One]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00048 :   INFO) CSI Name : [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00049 :   INFO) HA state : [Quiesced]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00052 :   INFO) Component [dynamicComp0] : PID [17217]. CSI Remove Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00053 :   INFO)    CSI                     : dynamicTwoNCSI&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00054 :   INFO)    CSI Flags               : 0x2&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:29 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00117 :   INFO) LockA [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:34:29 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00118 :   INFO) LockI [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00119 :   INFO) LockA SI [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00120 :   INFO) LockA SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00121 :   INFO) LockI SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00122 :   INFO) Delete COMP [dynamicComp0]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00123 :   INFO) Delete COMP [dynamicComp1]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00124 :   INFO) Delete SU [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00125 :   INFO) Delete SU [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00126 :   INFO) Delete CSI [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00127 :   INFO) Delete SI [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00128 :   INFO) Deleting SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00129 :   INFO) CCB Commit Delete&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00130 :   INFO) Running CCB finalize&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00131 :   INFO) Running MGMT finalize&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00132 : NOTICE) Successfully deleted dynamically created SG [dynamicTwoNSG] and other entities(si, csi, su, comp, etc)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These can be watched in a separate terminal window using &amp;lt;code&amp;gt;tail -f &amp;lt;file_name&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can continue to observe this create/delete of AMF entities dynamically by unlocking/locking the SG dhaDemoSG.&lt;br /&gt;
&lt;br /&gt;
*To unlock the dhaDemoSG using the SAFplus Platform Console (this will create the AMF entities dynamically):&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# cli[Test:SysCtrlI0:CPM]-&amp;gt; amsUnlock sg dhaDemoSG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*To lock the dhaDemoSG using the SAFplus Platform Console (this will delete the AMF entities dynamically):&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# cli[Test:SysCtrlI0:CPM]-&amp;gt; amsLockAssignment sg dhaDemoSG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*To stop the demo and exit, following CLI commands may be used:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# cli[Test:SysCtrlI0:CPM]-&amp;gt; amsLockAssignment sg dhaDemoSG&lt;br /&gt;
# cli[Test:SysCtrlI0:CPM]-&amp;gt; amsLockInstantiation sg dhaDemoSG&lt;br /&gt;
# cli[Test:SysCtrlI0:CPM]-&amp;gt; bye&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Summary===&lt;br /&gt;
&lt;br /&gt;
This Sample Application has covered basic dynamic HA functionality, with creation/deletion of AMF entities (SG, SI, CSI, SU, Component, etc) using Clovis AMF management APIs.&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Doc:latest/evalguide/dhaDemo</id>
		<title>Doc:latest/evalguide/dhaDemo</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Doc:latest/evalguide/dhaDemo"/>
				<updated>2012-11-16T21:45:59Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dynamic HA Evaluation Guide==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
&lt;br /&gt;
This sample application demonstrates dynamic HA (High Availability) functionality. The application has two components : dhaDemo and dummyComp  &lt;br /&gt;
*dhaDemo creates/deletes the AMF entities (SG, SI, CSI, SU, Component, etc) dynamically. &lt;br /&gt;
*dummyComp is a sample SAF component whose binary(executable) will be used while launching the dynamically created component.&lt;br /&gt;
&lt;br /&gt;
===What you will learn===&lt;br /&gt;
&lt;br /&gt;
*How to create a 2N model dynamically by creating/deleting various AMF entities using Clovis AMF management APIs related to Dynamic HA.&lt;br /&gt;
&lt;br /&gt;
===Building the dynamic HA model (dynamicHaDemo) and deploying runtime images===&lt;br /&gt;
&lt;br /&gt;
The Clovis dynamic HA Application is located in : &amp;lt;b&amp;gt;&amp;lt;install_dir&amp;gt;/sdk-5.0/src/examples/dynamicHaDemo&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to build the model and deploy the runtime images for following nodes : SysCtrlI0, WorkerI0, WorkerI1 &lt;br /&gt;
&lt;br /&gt;
It can be done in very similar manner to evaluation system model (eval). For more information about building and deploying a model, please refer to the following section of evalguide:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Building the Evaluation System and Deploying Runtime Images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Code===&lt;br /&gt;
&lt;br /&gt;
The application code can be found within the following directory &lt;br /&gt;
 &amp;lt;project-area_dir&amp;gt;/dynamicHaDemo/src/app/dhaDemo&lt;br /&gt;
&lt;br /&gt;
This sample component is implemented in a single C module (clCompAppMain.c). &lt;br /&gt;
It uses the AMF dynamic HA apis to create a 2N SG on the fly using the clAmsMgmtCCB apis.&lt;br /&gt;
&lt;br /&gt;
There is an alternate version of this C file: clCompAppMain_batch.c which uses a faster version of these apis using clAmsMgmtCCBBatch apis.&lt;br /&gt;
&lt;br /&gt;
The batch version of the dynamic HA apis are faster as the AMF entity CRUD operatons are batched/cached on the client side before they are&lt;br /&gt;
committed with clAmsMgmtCCBBatchCommit api.&lt;br /&gt;
&lt;br /&gt;
Both the clAmsMgmtCCB and clAmsMgmtCCBBatch versions of the API are declared in clAmsMgmtClientApi.h which needs to be included for usage.&lt;br /&gt;
&lt;br /&gt;
====Start/Stop the application====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;clCompAppAMFCSISet()&amp;lt;/code&amp;gt; function is called to set the component's HA state, and the following block of code assigns this requested state to the component, while verbosely detailing this process:&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffccaa;&amp;quot; align=&amp;quot;center&amp;quot;| clCompAppMain.c&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    switch ( haState )&lt;br /&gt;
    {&lt;br /&gt;
        case SA_AMF_HA_ACTIVE:&lt;br /&gt;
        {&lt;br /&gt;
            /*&lt;br /&gt;
             * AMF has requested application to take the active HA state &lt;br /&gt;
             * for the CSI.&lt;br /&gt;
             */&lt;br /&gt;
&lt;br /&gt;
            /*&lt;br /&gt;
             * ---BEGIN_APPLICATION_CODE---&lt;br /&gt;
             */&lt;br /&gt;
            clprintf(CL_LOG_SEV_NOTICE, &amp;quot;Starting dynamic HA demo.&amp;quot;);&lt;br /&gt;
            clprintf(CL_LOG_SEV_NOTICE, &amp;quot;It will create 2N SG : %sSG&amp;quot;, BASE_NAME);&lt;br /&gt;
            rc = clDhaDemoStart();&lt;br /&gt;
            if(rc != CL_OK)&lt;br /&gt;
            {&lt;br /&gt;
                clprintf(CL_LOG_SEV_CRITICAL, &amp;quot;Failed to start dynamic HA demo.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            /*&lt;br /&gt;
             * ---End_APPLICATION_CODE---&lt;br /&gt;
             */&lt;br /&gt;
&lt;br /&gt;
            saAmfResponse(amfHandle, invocation, SA_AIS_OK);&lt;br /&gt;
            break;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* clDhaDemoStart() will start the workload in a separate thread to create the AMF entities (SG, SI, CSI, SU, Components, etc) when the HA state of dhaDemo becomes ACTIVE. In this case dhaDemo will be assigned active state when you unlock the SG 'dhaDemoSG'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffccaa;&amp;quot; align=&amp;quot;center&amp;quot;| clCompAppMain.c&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        case SA_AMF_HA_QUIESCED:&lt;br /&gt;
        {&lt;br /&gt;
            /*&lt;br /&gt;
             * AMF has requested application to quiesce the CSI currently&lt;br /&gt;
             * assigned the active or quiescing HA state. The application &lt;br /&gt;
             * must stop work associated with the CSI immediately.&lt;br /&gt;
             */&lt;br /&gt;
&lt;br /&gt;
            /*&lt;br /&gt;
             * ---BEGIN_APPLICATION_CODE---&lt;br /&gt;
             */&lt;br /&gt;
&lt;br /&gt;
            rc = clDhaDemoStop();&lt;br /&gt;
            if(rc != CL_OK)&lt;br /&gt;
            {&lt;br /&gt;
                clprintf(CL_LOG_SEV_CRITICAL, &amp;quot;Failed to stop dynamic HA demo.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            /*&lt;br /&gt;
             * ---END_APPLICATION_CODE---&lt;br /&gt;
             */&lt;br /&gt;
&lt;br /&gt;
            saAmfResponse(amfHandle, invocation, SA_AIS_OK);&lt;br /&gt;
            break;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* clDhaDemoStop() will start the workload in a separate thread to delete the AMF entities (SG, SI, CSI, SU, Components, etc) only if they are already created, when the HA state of dhaDemo becomes QUIESCED or QUIESCING. In this case dhaDemo will be get QUIESCED state when you lock the unlocked SG 'dhaDemoSG'&lt;br /&gt;
&lt;br /&gt;
====Create/Delete the AMF entities====&lt;br /&gt;
&lt;br /&gt;
* clDhaDemoCreate() contains the code to create various AMF entities dynamically.&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffccaa;&amp;quot; align=&amp;quot;center&amp;quot;| clCompAppMain.c&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    rc = clAmsMgmtInitialize(&amp;amp;mgmtHandle, NULL, &amp;amp;version);&lt;br /&gt;
    if(rc != CL_OK)&lt;br /&gt;
    {&lt;br /&gt;
        clprintf(CL_LOG_SEV_ERROR, &amp;quot;AmsMgmt initialize returned [%#x]&amp;quot;, rc);&lt;br /&gt;
        return NULL;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    clDhaExmpExec((&amp;quot;Running MGMT CCB initialize&amp;quot;),&lt;br /&gt;
                  (rc = clAmsMgmtCCBInitialize(mgmtHandle, &amp;amp;ccbHandle)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;MGMT CCB initialize returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out1);&lt;br /&gt;
&lt;br /&gt;
    /*                                                                                                                                                               &lt;br /&gt;
     * Create the entities only if they are not created already                                                                                                      &lt;br /&gt;
     */&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SG;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value), &amp;quot;%sSG&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
&lt;br /&gt;
    rc = clAmsMgmtEntityGetConfig(mgmtHandle,&lt;br /&gt;
                                  &amp;amp;entity,&lt;br /&gt;
                                  &amp;amp;pEntityConfig);&lt;br /&gt;
&lt;br /&gt;
    clHeapFree(pEntityConfig);&lt;br /&gt;
&lt;br /&gt;
    if(rc == CL_OK)&lt;br /&gt;
    {&lt;br /&gt;
        clprintf(CL_LOG_SEV_INFO, &amp;quot;Not creating SG[%sSG], it already exist&amp;quot;, pBaseName);&lt;br /&gt;
		goto out2;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* SG doesn't exist, create SG and other entities dynamically*/&lt;br /&gt;
&lt;br /&gt;
    /*First create the service hierarchies*/&lt;br /&gt;
&lt;br /&gt;
    clprintf(CL_LOG_SEV_NOTICE,&lt;br /&gt;
             &amp;quot;Creating 2N SG [%sSG] and other entities(si, csi, su, comp, etc)&amp;quot;,&lt;br /&gt;
             pBaseName);&lt;br /&gt;
&lt;br /&gt;
    /* Create SG*/&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SG;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value),&lt;br /&gt;
             &amp;quot;%sSG&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
&lt;br /&gt;
    clDhaExmpExec((&amp;quot;Creating SG [%s]&amp;quot;,&lt;br /&gt;
                   entity.name.value),&lt;br /&gt;
                  (rc = clAmsMgmtCCBEntityCreate(ccbHandle,&lt;br /&gt;
                                                 &amp;amp;entity)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;SG create returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out2);&lt;br /&gt;
&lt;br /&gt;
    /* Create SI*/&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SI;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value),&lt;br /&gt;
             &amp;quot;%sSI&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
    clDhaExmpExec( (&amp;quot;Create SI [%s]&amp;quot;, entity.name.value),&lt;br /&gt;
                   (rc = clAmsMgmtCCBEntityCreate(ccbHandle, &amp;amp;entity)) == CL_OK,&lt;br /&gt;
                   (&amp;quot;SI create returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                   goto out2);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    ...&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    /* CCB Commit*/&lt;br /&gt;
    clDhaExmpExec((&amp;quot;CCB Commit Create&amp;quot;),&lt;br /&gt;
                  (rc = clAmsMgmtCCBCommit(ccbHandle)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;CCB commit returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out2);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* clDhaDemoDelete() contains the code to delete the created AMF entities dynamically.&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffccaa;&amp;quot; align=&amp;quot;center&amp;quot;| clCompAppMain.c&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    rc = clAmsMgmtInitialize(&amp;amp;mgmtHandle, NULL, &amp;amp;version);&lt;br /&gt;
    if(rc != CL_OK)&lt;br /&gt;
    {&lt;br /&gt;
        clprintf(CL_LOG_SEV_ERROR, &amp;quot;AmsMgmt initialize returned [%#x]&amp;quot;, rc);&lt;br /&gt;
		return NULL;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    clDhaExmpExec((&amp;quot;Running MGMT CCB initialize&amp;quot;),&lt;br /&gt;
                  (rc = clAmsMgmtCCBInitialize(mgmtHandle, &amp;amp;ccbHandle)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;MGMT CCB initialize returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out1);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    /*                                                                                                                                                               &lt;br /&gt;
     * Delete the entities only if they exist                                                                                                                        &lt;br /&gt;
     */&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SG;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value), &amp;quot;%sSG&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
&lt;br /&gt;
    rc = clAmsMgmtEntityGetConfig(mgmtHandle,&lt;br /&gt;
                                  &amp;amp;entity,&lt;br /&gt;
                                  &amp;amp;pEntityConfig);&lt;br /&gt;
    clHeapFree(pEntityConfig);&lt;br /&gt;
    if(rc != CL_OK)&lt;br /&gt;
    {&lt;br /&gt;
        clprintf(CL_LOG_SEV_INFO, &amp;quot;Not deleting SG[%sSG],  SG config get returned [%#x]&amp;quot;, pBaseName, rc);&lt;br /&gt;
        goto out2;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* SG exist, Delete SG and other entities dynamically*/&lt;br /&gt;
&lt;br /&gt;
    clprintf(CL_LOG_SEV_NOTICE,&lt;br /&gt;
             &amp;quot;Deleting SG [%sSG] and other entities(si, csi, su, comp, etc)&amp;quot;,&lt;br /&gt;
             pBaseName);&lt;br /&gt;
&lt;br /&gt;
    /*First move entities to lock instantiated mode*/&lt;br /&gt;
    clDhaExmpExec((&amp;quot;LockI AMS entities&amp;quot;),&lt;br /&gt;
                  (rc = clAmsMgmtTestLockI(mgmtHandle, ccbHandle, pBaseName)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;Unlock AMS entities returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out2);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    /* Delete SI*/&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SI;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value),&lt;br /&gt;
             &amp;quot;%sSI&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
    clDhaExmpExec( (&amp;quot;Delete SI [%s]&amp;quot;, entity.name.value),&lt;br /&gt;
                   (rc = clAmsMgmtCCBEntityDelete(ccbHandle, &amp;amp;entity)) == CL_OK,&lt;br /&gt;
                   (&amp;quot;SI delete returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                   goto out2);&lt;br /&gt;
&lt;br /&gt;
    /* Delete SG*/&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SG;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value),&lt;br /&gt;
             &amp;quot;%sSG&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
    clDhaExmpExec((&amp;quot;Deleting SG [%s]&amp;quot;,&lt;br /&gt;
                   entity.name.value),&lt;br /&gt;
                  (rc = clAmsMgmtCCBEntityDelete(ccbHandle,&lt;br /&gt;
                                                 &amp;amp;entity)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;SG delete returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out2);&lt;br /&gt;
&lt;br /&gt;
    /* CCB Commit*/&lt;br /&gt;
    clDhaExmpExec((&amp;quot;CCB Commit Delete&amp;quot;),&lt;br /&gt;
                  (rc = clAmsMgmtCCBCommit(ccbHandle)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;CCB commit returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out2);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Usage of AMF management APIs for Dynamic HA====&lt;br /&gt;
&lt;br /&gt;
The detailed documentation of AMF management APIs can be found in &amp;quot;OpenClovis API Reference Guide&amp;quot;. Please refer &amp;quot;Availability Management Service&amp;quot; section under the High Availability.&lt;br /&gt;
&lt;br /&gt;
===How to Run dhaDemo application and What to Observe===&lt;br /&gt;
&lt;br /&gt;
We will use the SAFplus Platform Console to manipulate the administrative state of the dhaDemoSG service group.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Start the SAFplus Platform on all deployed nodes&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # cd /root/asp/&lt;br /&gt;
 # ./etc/init.d/asp start&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Start the SAFplus Platform Console&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # cd /root/asp/bin&lt;br /&gt;
 # ./asp_console&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Then put the dhaDemoSG service group into lock assignment state using the following commands.&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # cli[Test]-&amp;gt; setc master&lt;br /&gt;
 # cli[Test:SysCtrlI0]-&amp;gt; setc cpm&lt;br /&gt;
 # cli[Test:SysCtrlI0:CPM]-&amp;gt;  amsLockAssignment sg dhaDemoSG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The logs for dhaDemo application will be logged into file &amp;lt;code&amp;gt;/root/asp/var/log/app.0&amp;lt;/code&amp;gt; on node &amp;lt;b&amp;gt;WorkerI0&amp;lt;/b&amp;gt;. Viewing these application logs using the &amp;lt;code&amp;gt;tail -f&amp;lt;/code&amp;gt;, you should see the following :&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffffaa;&amp;quot; align=&amp;quot;center&amp;quot;| /root/asp/var/log/app.0&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:03:02 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00031 :   INFO) Component [dhaDemo] : PID [21785]. Initializing&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:03:02 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00032 :   INFO)    IOC Address             : 0x3&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:03:02 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00033 :   INFO)    IOC Port                : 0x80&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To create the AMF entities dynamically, unlock the dhaDemoSG service group using the following SAFplus Platform Console command.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # cli[Test:SysCtrlI0:CPM]-&amp;gt;  amsUnlock sg dhaDemoSG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
and in the  &amp;lt;code&amp;gt;/root/asp/var/log/app.0&amp;lt;/code&amp;gt; file (on node &amp;lt;b&amp;gt;WorkerI0&amp;lt;/b&amp;gt;) , we should see:&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffffaa;&amp;quot; align=&amp;quot;center&amp;quot;| /root/asp/var/log/app.0&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00036 :   INFO) Component [dhaDemo] : PID [21785]. CSI Set Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00037 :   INFO) CSI Flags : [Add One]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00038 :   INFO) CSI Name : [dhaDemoCSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00039 :   INFO) Name value pairs :&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00040 :   INFO) HA state : [Active]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00041 :   INFO) Active Descriptor :&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00042 :   INFO) Transition Descriptor : [1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00043 :   INFO) Active Component : [dhaDemo]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00044 : NOTICE) Starting dynamic HA demo.&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00045 : NOTICE) It will create 2N SG : dynamicTwoNSG&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00046 :   INFO) Running MGMT initialize&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00047 :   INFO) Running MGMT CCB initialize&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00048 : NOTICE) Creating 2N SG [dynamicTwoNSG] and other entities(si, csi, su, comp, etc)&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00049 :   INFO) Creating SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00050 :   INFO) Create SI [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00051 :   INFO) Create CSI [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00052 :   INFO) Create SU [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00053 :   INFO) Create SU [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00054 :   INFO) Create COMP [dynamicComp0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00055 :   INFO) Create COMP [dynamicComp1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00056 :   INFO) CCB Commit Create&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00057 :   INFO) Fill SG config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00058 :   INFO) SG config get [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00059 :   INFO) SG set SI [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00060 :   INFO) SG set SU [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00061 :   INFO) SG set SU [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00062 :   INFO) SG set commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00063 :   INFO) Fill SI config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00064 :   INFO) SI config get [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00065 :   INFO) SI config set [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00066 :   INFO) SI set CSI [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00067 :   INFO) SI set commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00068 :   INFO) Fill CSI config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00069 :   INFO) CSI config get [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00070 :   INFO) CSI type set [dynamicTwoNCSIType]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00071 :   INFO) CSI set nvplist&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00072 :   INFO) CSI ccb commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00073 :   INFO) Fill SU config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00074 :   INFO) SU config get [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00075 :   INFO) SU config set [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00076 :   INFO) SU config set [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00077 :   INFO) SU [dynamicTwoNSU0] add comp [dynamicComp0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00078 :   INFO) SU [dynamicTwoNSU1] add comp [dynamicComp1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00079 :   INFO) SU set commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00080 :   INFO) Fill NODE config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00081 :   INFO) NODE config get [WorkerI1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00082 :   INFO) Node set SU [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00083 :   INFO) NODE config get [WorkerI0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00084 :   INFO) Node set SU [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00085 :   INFO) Node set commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00086 :   INFO) Fill COMP config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00087 :   INFO) COMP config get [dynamicComp0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00088 :   INFO) Comp config set [dynamicComp0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00089 :   INFO) Comp config set [dynamicComp1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00090 :   INFO) Comp set commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00091 :   INFO) Unlock AMS entities&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00092 :   INFO) LockA [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00093 :   INFO) Unlock [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00094 :   INFO) LockA [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00095 :   INFO) Unlock [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00096 :   INFO) Unlock SI [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00097 :   INFO) LockA SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00098 :   INFO) Unlock SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00099 :   INFO) Running CCB finalize&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00100 :   INFO) Running MGMT finalize&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00101 : NOTICE) Successfully created 2N SG [dynamicTwoNSG] and its entities(si, csi, su, comp, etc) dynamically&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*The dynamically created components 'dynamicComp0' and 'dynamicComp1' will come up as active/standby. Which can be verified through the logs present at nodes WorkerI0 and WorkerI1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/root/asp/var/log/app.0&amp;lt;/code&amp;gt; file (on node &amp;lt;b&amp;gt;WorkerI0&amp;lt;/b&amp;gt;) , we should see the dynamically created component getting assigned ACTIVE state:&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffffaa;&amp;quot; align=&amp;quot;center&amp;quot;| /root/asp/var/log/app.0&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00031 :   INFO) Component [dynamicComp0] : PID [22187]. Initializing&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00032 :   INFO)    IOC Address             : 0x3&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00033 :   INFO)    IOC Port                : 0x81&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00036 :   INFO) Component [dynamicComp0] : PID [22187]. CSI Set Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00037 :   INFO) CSI Flags : [Add One]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00038 :   INFO) CSI Name : [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00039 :   INFO) Name value pairs :&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00040 :   INFO) Name : [model]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00041 :   INFO) Value : [twoN]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00042 :   INFO) HA state : [Active]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00043 :   INFO) Active Descriptor :&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00044 :   INFO) Transition Descriptor : [1]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00045 :   INFO) Active Component : [dynamicComp0]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/root/asp/var/log/app.0&amp;lt;/code&amp;gt; file (on node &amp;lt;b&amp;gt;WorkerI1&amp;lt;/b&amp;gt;) , we should see the dynamically created component getting assigned STANDBY state:&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffffaa;&amp;quot; align=&amp;quot;center&amp;quot;| /root/asp/var/log/app.0&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00031 :   INFO) Component [dynamicComp1] : PID [14623]. Initializing&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00032 :   INFO)    IOC Address             : 0x4&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00033 :   INFO)    IOC Port                : 0x80&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00036 :   INFO) Component [dynamicComp1] : PID [14623]. CSI Set Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00037 :   INFO) CSI Flags : [Add One]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00038 :   INFO) CSI Name : [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00039 :   INFO) Name value pairs :&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00040 :   INFO) Name : [model]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00041 :   INFO) Value : [twoN]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00042 :   INFO) HA state : [Standby]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00043 :   INFO) Standby Descriptor :&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00044 :   INFO) Standby Rank : [1]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00045 :   INFO) Active Component : [dynamicComp0]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:OpenClovis_Note.png]]Note : The dynamically created component might come up as ACTIVE on WorkerI1 and STANDBY on WorkerI0 or vice versa (depending on the order in which they are launched).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To delete the AMF entities dynamically, lock the dhaDemoSG service group using the following SAFplus Platform Console command.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # cli[Test:SysCtrlI0:CPM]-&amp;gt;  amsLockAssignment sg dhaDemoSG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
and in the  &amp;lt;code&amp;gt;/root/asp/var/log/app.0&amp;lt;/code&amp;gt; (on node WorkerI0) file, we should see:&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffffaa;&amp;quot; align=&amp;quot;center&amp;quot;| /root/asp/var/log/app.0&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00102 :   INFO) Component [dhaDemo] : PID [17193]. CSI Set Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00103 :   INFO) CSI Flags : [Target One]     &lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00104 :   INFO) CSI Name : [dhaDemoCSI]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00105 :   INFO) HA state : [Quiesced]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00106 :   INFO) Running MGMT initialize&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00109 :   INFO) Component [dhaDemo] : PID [17193]. CSI Remove Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00110 :   INFO)    CSI                     : dhaDemoCSI&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00111 :   INFO)    CSI Flags               : 0x2&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00112 :   INFO) Running MGMT CCB initialize&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00113 : NOTICE) Deleting SG [dynamicTwoNSG] and other entities(si, csi, su, comp, etc)&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00114 :   INFO) LockI AMS entities &lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00115 :   INFO) LockA [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00116 :   INFO) LockI [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00046 :   INFO) Component [dynamicComp0] : PID [17217]. CSI Set Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00047 :   INFO) CSI Flags : [Target One]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00048 :   INFO) CSI Name : [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00049 :   INFO) HA state : [Quiesced]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00052 :   INFO) Component [dynamicComp0] : PID [17217]. CSI Remove Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00053 :   INFO)    CSI                     : dynamicTwoNCSI&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00054 :   INFO)    CSI Flags               : 0x2&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:29 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00117 :   INFO) LockA [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:34:29 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00118 :   INFO) LockI [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00119 :   INFO) LockA SI [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00120 :   INFO) LockA SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00121 :   INFO) LockI SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00122 :   INFO) Delete COMP [dynamicComp0]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00123 :   INFO) Delete COMP [dynamicComp1]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00124 :   INFO) Delete SU [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00125 :   INFO) Delete SU [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00126 :   INFO) Delete CSI [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00127 :   INFO) Delete SI [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00128 :   INFO) Deleting SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00129 :   INFO) CCB Commit Delete&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00130 :   INFO) Running CCB finalize&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00131 :   INFO) Running MGMT finalize&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00132 : NOTICE) Successfully deleted dynamically created SG [dynamicTwoNSG] and other entities(si, csi, su, comp, etc)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These can be watched in a separate terminal window using &amp;lt;code&amp;gt;tail -f &amp;lt;file_name&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can continue to observe this create/delete of AMF entities dynamically by unlocking/locking the SG dhaDemoSG.&lt;br /&gt;
&lt;br /&gt;
*To unlock the dhaDemoSG using the SAFplus Platform Console (this will create the AMF entities dynamically):&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# cli[Test:SysCtrlI0:CPM]-&amp;gt; amsUnlock sg dhaDemoSG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*To lock the dhaDemoSG using the SAFplus Platform Console (this will delete the AMF entities dynamically):&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# cli[Test:SysCtrlI0:CPM]-&amp;gt; amsLockAssignment sg dhaDemoSG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*To stop the demo and exit, following CLI commands may be used:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# cli[Test:SysCtrlI0:CPM]-&amp;gt; amsLockAssignment sg dhaDemoSG&lt;br /&gt;
# cli[Test:SysCtrlI0:CPM]-&amp;gt; amsLockInstantiation sg dhaDemoSG&lt;br /&gt;
# cli[Test:SysCtrlI0:CPM]-&amp;gt; bye&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Summary===&lt;br /&gt;
&lt;br /&gt;
This Sample Application has covered basic dynamic HA functionality, with creation/deletion of AMF entities (SG, SI, CSI, SU, Component, etc) using Clovis AMF management APIs.&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Doc:latest/evalguide/dhaDemo</id>
		<title>Doc:latest/evalguide/dhaDemo</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Doc:latest/evalguide/dhaDemo"/>
				<updated>2012-11-16T21:44:32Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dynamic HA Evaluation Guide==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
&lt;br /&gt;
This sample application demonstrates dynamic HA (High Availability) functionality. The application has two components : dhaDemo and dummyComp  &lt;br /&gt;
*dhaDemo creates/deletes the AMF entities (SG, SI, CSI, SU, Component, etc) dynamically. &lt;br /&gt;
*dummyComp is a sample SAF component whose binary(executable) will be used while launching the dynamically created component.&lt;br /&gt;
&lt;br /&gt;
===What you will learn===&lt;br /&gt;
&lt;br /&gt;
*How to create a 2N model dynamically by creating/deleting various AMF entities using Clovis AMF management APIs related to Dynamic HA.&lt;br /&gt;
&lt;br /&gt;
===Building the dynamic HA model (dynamicHaDemo) and deploying runtime images===&lt;br /&gt;
&lt;br /&gt;
The Clovis dynamic HA Application is located in : &amp;lt;b&amp;gt;&amp;lt;install_dir&amp;gt;/sdk-5.0/src/examples/dynamicHaDemo&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to build the model and deploy the runtime images for following nodes : SysCtrlI0, WorkerI0, WorkerI1 &lt;br /&gt;
&lt;br /&gt;
It can be done in very similar manner to evaluation system model (eval). For more information about building and deploying a model, please refer to the following section of evalguide:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;Building the Evaluation System and Deploying Runtime Images&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Code===&lt;br /&gt;
&lt;br /&gt;
The application code can be found within the following directory &lt;br /&gt;
 &amp;lt;project-area_dir&amp;gt;/dynamicHaDemo/src/app/dhaDemo&lt;br /&gt;
&lt;br /&gt;
This sample component is implemented in a single C module (clCompAppMain.c). &lt;br /&gt;
It uses the AMF dynamic HA apis to create a 2N SG on the fly using the clAmsMgmtCCB apis.&lt;br /&gt;
&lt;br /&gt;
There is an alternate version of this C file: clCompAppMain_batch.c which uses a faster version of these apis using clAmsMgmtCCBBatch apis.&lt;br /&gt;
&lt;br /&gt;
The batch version of the dynamic HA apis are faster as the AMF entity CRUD operatons are batched/cached on the client side before they are&lt;br /&gt;
committed with clAmsMgmtCCBBatchCommit api.&lt;br /&gt;
&lt;br /&gt;
====Start/Stop the application====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;clCompAppAMFCSISet()&amp;lt;/code&amp;gt; function is called to set the component's HA state, and the following block of code assigns this requested state to the component, while verbosely detailing this process:&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffccaa;&amp;quot; align=&amp;quot;center&amp;quot;| clCompAppMain.c&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    switch ( haState )&lt;br /&gt;
    {&lt;br /&gt;
        case SA_AMF_HA_ACTIVE:&lt;br /&gt;
        {&lt;br /&gt;
            /*&lt;br /&gt;
             * AMF has requested application to take the active HA state &lt;br /&gt;
             * for the CSI.&lt;br /&gt;
             */&lt;br /&gt;
&lt;br /&gt;
            /*&lt;br /&gt;
             * ---BEGIN_APPLICATION_CODE---&lt;br /&gt;
             */&lt;br /&gt;
            clprintf(CL_LOG_SEV_NOTICE, &amp;quot;Starting dynamic HA demo.&amp;quot;);&lt;br /&gt;
            clprintf(CL_LOG_SEV_NOTICE, &amp;quot;It will create 2N SG : %sSG&amp;quot;, BASE_NAME);&lt;br /&gt;
            rc = clDhaDemoStart();&lt;br /&gt;
            if(rc != CL_OK)&lt;br /&gt;
            {&lt;br /&gt;
                clprintf(CL_LOG_SEV_CRITICAL, &amp;quot;Failed to start dynamic HA demo.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            /*&lt;br /&gt;
             * ---End_APPLICATION_CODE---&lt;br /&gt;
             */&lt;br /&gt;
&lt;br /&gt;
            saAmfResponse(amfHandle, invocation, SA_AIS_OK);&lt;br /&gt;
            break;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* clDhaDemoStart() will start the workload in a separate thread to create the AMF entities (SG, SI, CSI, SU, Components, etc) when the HA state of dhaDemo becomes ACTIVE. In this case dhaDemo will be assigned active state when you unlock the SG 'dhaDemoSG'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffccaa;&amp;quot; align=&amp;quot;center&amp;quot;| clCompAppMain.c&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        case SA_AMF_HA_QUIESCED:&lt;br /&gt;
        {&lt;br /&gt;
            /*&lt;br /&gt;
             * AMF has requested application to quiesce the CSI currently&lt;br /&gt;
             * assigned the active or quiescing HA state. The application &lt;br /&gt;
             * must stop work associated with the CSI immediately.&lt;br /&gt;
             */&lt;br /&gt;
&lt;br /&gt;
            /*&lt;br /&gt;
             * ---BEGIN_APPLICATION_CODE---&lt;br /&gt;
             */&lt;br /&gt;
&lt;br /&gt;
            rc = clDhaDemoStop();&lt;br /&gt;
            if(rc != CL_OK)&lt;br /&gt;
            {&lt;br /&gt;
                clprintf(CL_LOG_SEV_CRITICAL, &amp;quot;Failed to stop dynamic HA demo.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            /*&lt;br /&gt;
             * ---END_APPLICATION_CODE---&lt;br /&gt;
             */&lt;br /&gt;
&lt;br /&gt;
            saAmfResponse(amfHandle, invocation, SA_AIS_OK);&lt;br /&gt;
            break;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* clDhaDemoStop() will start the workload in a separate thread to delete the AMF entities (SG, SI, CSI, SU, Components, etc) only if they are already created, when the HA state of dhaDemo becomes QUIESCED or QUIESCING. In this case dhaDemo will be get QUIESCED state when you lock the unlocked SG 'dhaDemoSG'&lt;br /&gt;
&lt;br /&gt;
====Create/Delete the AMF entities====&lt;br /&gt;
&lt;br /&gt;
* clDhaDemoCreate() contains the code to create various AMF entities dynamically.&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffccaa;&amp;quot; align=&amp;quot;center&amp;quot;| clCompAppMain.c&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    rc = clAmsMgmtInitialize(&amp;amp;mgmtHandle, NULL, &amp;amp;version);&lt;br /&gt;
    if(rc != CL_OK)&lt;br /&gt;
    {&lt;br /&gt;
        clprintf(CL_LOG_SEV_ERROR, &amp;quot;AmsMgmt initialize returned [%#x]&amp;quot;, rc);&lt;br /&gt;
        return NULL;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    clDhaExmpExec((&amp;quot;Running MGMT CCB initialize&amp;quot;),&lt;br /&gt;
                  (rc = clAmsMgmtCCBInitialize(mgmtHandle, &amp;amp;ccbHandle)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;MGMT CCB initialize returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out1);&lt;br /&gt;
&lt;br /&gt;
    /*                                                                                                                                                               &lt;br /&gt;
     * Create the entities only if they are not created already                                                                                                      &lt;br /&gt;
     */&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SG;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value), &amp;quot;%sSG&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
&lt;br /&gt;
    rc = clAmsMgmtEntityGetConfig(mgmtHandle,&lt;br /&gt;
                                  &amp;amp;entity,&lt;br /&gt;
                                  &amp;amp;pEntityConfig);&lt;br /&gt;
&lt;br /&gt;
    clHeapFree(pEntityConfig);&lt;br /&gt;
&lt;br /&gt;
    if(rc == CL_OK)&lt;br /&gt;
    {&lt;br /&gt;
        clprintf(CL_LOG_SEV_INFO, &amp;quot;Not creating SG[%sSG], it already exist&amp;quot;, pBaseName);&lt;br /&gt;
		goto out2;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* SG doesn't exist, create SG and other entities dynamically*/&lt;br /&gt;
&lt;br /&gt;
    /*First create the service hierarchies*/&lt;br /&gt;
&lt;br /&gt;
    clprintf(CL_LOG_SEV_NOTICE,&lt;br /&gt;
             &amp;quot;Creating 2N SG [%sSG] and other entities(si, csi, su, comp, etc)&amp;quot;,&lt;br /&gt;
             pBaseName);&lt;br /&gt;
&lt;br /&gt;
    /* Create SG*/&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SG;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value),&lt;br /&gt;
             &amp;quot;%sSG&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
&lt;br /&gt;
    clDhaExmpExec((&amp;quot;Creating SG [%s]&amp;quot;,&lt;br /&gt;
                   entity.name.value),&lt;br /&gt;
                  (rc = clAmsMgmtCCBEntityCreate(ccbHandle,&lt;br /&gt;
                                                 &amp;amp;entity)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;SG create returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out2);&lt;br /&gt;
&lt;br /&gt;
    /* Create SI*/&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SI;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value),&lt;br /&gt;
             &amp;quot;%sSI&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
    clDhaExmpExec( (&amp;quot;Create SI [%s]&amp;quot;, entity.name.value),&lt;br /&gt;
                   (rc = clAmsMgmtCCBEntityCreate(ccbHandle, &amp;amp;entity)) == CL_OK,&lt;br /&gt;
                   (&amp;quot;SI create returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                   goto out2);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    ...&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    /* CCB Commit*/&lt;br /&gt;
    clDhaExmpExec((&amp;quot;CCB Commit Create&amp;quot;),&lt;br /&gt;
                  (rc = clAmsMgmtCCBCommit(ccbHandle)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;CCB commit returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out2);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* clDhaDemoDelete() contains the code to delete the created AMF entities dynamically.&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffccaa;&amp;quot; align=&amp;quot;center&amp;quot;| clCompAppMain.c&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    rc = clAmsMgmtInitialize(&amp;amp;mgmtHandle, NULL, &amp;amp;version);&lt;br /&gt;
    if(rc != CL_OK)&lt;br /&gt;
    {&lt;br /&gt;
        clprintf(CL_LOG_SEV_ERROR, &amp;quot;AmsMgmt initialize returned [%#x]&amp;quot;, rc);&lt;br /&gt;
		return NULL;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    clDhaExmpExec((&amp;quot;Running MGMT CCB initialize&amp;quot;),&lt;br /&gt;
                  (rc = clAmsMgmtCCBInitialize(mgmtHandle, &amp;amp;ccbHandle)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;MGMT CCB initialize returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out1);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    /*                                                                                                                                                               &lt;br /&gt;
     * Delete the entities only if they exist                                                                                                                        &lt;br /&gt;
     */&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SG;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value), &amp;quot;%sSG&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
&lt;br /&gt;
    rc = clAmsMgmtEntityGetConfig(mgmtHandle,&lt;br /&gt;
                                  &amp;amp;entity,&lt;br /&gt;
                                  &amp;amp;pEntityConfig);&lt;br /&gt;
    clHeapFree(pEntityConfig);&lt;br /&gt;
    if(rc != CL_OK)&lt;br /&gt;
    {&lt;br /&gt;
        clprintf(CL_LOG_SEV_INFO, &amp;quot;Not deleting SG[%sSG],  SG config get returned [%#x]&amp;quot;, pBaseName, rc);&lt;br /&gt;
        goto out2;&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* SG exist, Delete SG and other entities dynamically*/&lt;br /&gt;
&lt;br /&gt;
    clprintf(CL_LOG_SEV_NOTICE,&lt;br /&gt;
             &amp;quot;Deleting SG [%sSG] and other entities(si, csi, su, comp, etc)&amp;quot;,&lt;br /&gt;
             pBaseName);&lt;br /&gt;
&lt;br /&gt;
    /*First move entities to lock instantiated mode*/&lt;br /&gt;
    clDhaExmpExec((&amp;quot;LockI AMS entities&amp;quot;),&lt;br /&gt;
                  (rc = clAmsMgmtTestLockI(mgmtHandle, ccbHandle, pBaseName)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;Unlock AMS entities returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out2);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
    /* Delete SI*/&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SI;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value),&lt;br /&gt;
             &amp;quot;%sSI&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
    clDhaExmpExec( (&amp;quot;Delete SI [%s]&amp;quot;, entity.name.value),&lt;br /&gt;
                   (rc = clAmsMgmtCCBEntityDelete(ccbHandle, &amp;amp;entity)) == CL_OK,&lt;br /&gt;
                   (&amp;quot;SI delete returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                   goto out2);&lt;br /&gt;
&lt;br /&gt;
    /* Delete SG*/&lt;br /&gt;
    entity.type = CL_AMS_ENTITY_TYPE_SG;&lt;br /&gt;
    snprintf(entity.name.value, sizeof(entity.name.value),&lt;br /&gt;
             &amp;quot;%sSG&amp;quot;, pBaseName);&lt;br /&gt;
    entity.name.length = strlen(entity.name.value)+1;&lt;br /&gt;
    clDhaExmpExec((&amp;quot;Deleting SG [%s]&amp;quot;,&lt;br /&gt;
                   entity.name.value),&lt;br /&gt;
                  (rc = clAmsMgmtCCBEntityDelete(ccbHandle,&lt;br /&gt;
                                                 &amp;amp;entity)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;SG delete returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out2);&lt;br /&gt;
&lt;br /&gt;
    /* CCB Commit*/&lt;br /&gt;
    clDhaExmpExec((&amp;quot;CCB Commit Delete&amp;quot;),&lt;br /&gt;
                  (rc = clAmsMgmtCCBCommit(ccbHandle)) == CL_OK,&lt;br /&gt;
                  (&amp;quot;CCB commit returned [%#x]&amp;quot;, rc),&lt;br /&gt;
                  goto out2);&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Usage of AMF management APIs for Dynamic HA====&lt;br /&gt;
&lt;br /&gt;
The detailed documentation of AMF management APIs can be found in &amp;quot;OpenClovis API Reference Guide&amp;quot;. Please refer &amp;quot;Availability Management Service&amp;quot; section under the High Availability.&lt;br /&gt;
&lt;br /&gt;
===How to Run dhaDemo application and What to Observe===&lt;br /&gt;
&lt;br /&gt;
We will use the SAFplus Platform Console to manipulate the administrative state of the dhaDemoSG service group.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Start the SAFplus Platform on all deployed nodes&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # cd /root/asp/&lt;br /&gt;
 # ./etc/init.d/asp start&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Start the SAFplus Platform Console&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # cd /root/asp/bin&lt;br /&gt;
 # ./asp_console&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Then put the dhaDemoSG service group into lock assignment state using the following commands.&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # cli[Test]-&amp;gt; setc master&lt;br /&gt;
 # cli[Test:SysCtrlI0]-&amp;gt; setc cpm&lt;br /&gt;
 # cli[Test:SysCtrlI0:CPM]-&amp;gt;  amsLockAssignment sg dhaDemoSG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The logs for dhaDemo application will be logged into file &amp;lt;code&amp;gt;/root/asp/var/log/app.0&amp;lt;/code&amp;gt; on node &amp;lt;b&amp;gt;WorkerI0&amp;lt;/b&amp;gt;. Viewing these application logs using the &amp;lt;code&amp;gt;tail -f&amp;lt;/code&amp;gt;, you should see the following :&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffffaa;&amp;quot; align=&amp;quot;center&amp;quot;| /root/asp/var/log/app.0&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:03:02 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00031 :   INFO) Component [dhaDemo] : PID [21785]. Initializing&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:03:02 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00032 :   INFO)    IOC Address             : 0x3&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:03:02 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00033 :   INFO)    IOC Port                : 0x80&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To create the AMF entities dynamically, unlock the dhaDemoSG service group using the following SAFplus Platform Console command.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # cli[Test:SysCtrlI0:CPM]-&amp;gt;  amsUnlock sg dhaDemoSG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
and in the  &amp;lt;code&amp;gt;/root/asp/var/log/app.0&amp;lt;/code&amp;gt; file (on node &amp;lt;b&amp;gt;WorkerI0&amp;lt;/b&amp;gt;) , we should see:&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffffaa;&amp;quot; align=&amp;quot;center&amp;quot;| /root/asp/var/log/app.0&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00036 :   INFO) Component [dhaDemo] : PID [21785]. CSI Set Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00037 :   INFO) CSI Flags : [Add One]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00038 :   INFO) CSI Name : [dhaDemoCSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00039 :   INFO) Name value pairs :&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00040 :   INFO) HA state : [Active]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00041 :   INFO) Active Descriptor :&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00042 :   INFO) Transition Descriptor : [1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00043 :   INFO) Active Component : [dhaDemo]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00044 : NOTICE) Starting dynamic HA demo.&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00045 : NOTICE) It will create 2N SG : dynamicTwoNSG&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00046 :   INFO) Running MGMT initialize&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00047 :   INFO) Running MGMT CCB initialize&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00048 : NOTICE) Creating 2N SG [dynamicTwoNSG] and other entities(si, csi, su, comp, etc)&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00049 :   INFO) Creating SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00050 :   INFO) Create SI [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00051 :   INFO) Create CSI [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00052 :   INFO) Create SU [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00053 :   INFO) Create SU [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00054 :   INFO) Create COMP [dynamicComp0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00055 :   INFO) Create COMP [dynamicComp1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00056 :   INFO) CCB Commit Create&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00057 :   INFO) Fill SG config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00058 :   INFO) SG config get [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00059 :   INFO) SG set SI [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00060 :   INFO) SG set SU [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00061 :   INFO) SG set SU [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00062 :   INFO) SG set commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00063 :   INFO) Fill SI config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00064 :   INFO) SI config get [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00065 :   INFO) SI config set [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00066 :   INFO) SI set CSI [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00067 :   INFO) SI set commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00068 :   INFO) Fill CSI config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00069 :   INFO) CSI config get [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00070 :   INFO) CSI type set [dynamicTwoNCSIType]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00071 :   INFO) CSI set nvplist&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00072 :   INFO) CSI ccb commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00073 :   INFO) Fill SU config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00074 :   INFO) SU config get [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00075 :   INFO) SU config set [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00076 :   INFO) SU config set [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00077 :   INFO) SU [dynamicTwoNSU0] add comp [dynamicComp0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00078 :   INFO) SU [dynamicTwoNSU1] add comp [dynamicComp1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00079 :   INFO) SU set commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00080 :   INFO) Fill NODE config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00081 :   INFO) NODE config get [WorkerI1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00082 :   INFO) Node set SU [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00083 :   INFO) NODE config get [WorkerI0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00084 :   INFO) Node set SU [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00085 :   INFO) Node set commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00086 :   INFO) Fill COMP config&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00087 :   INFO) COMP config get [dynamicComp0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00088 :   INFO) Comp config set [dynamicComp0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00089 :   INFO) Comp config set [dynamicComp1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00090 :   INFO) Comp set commit&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00091 :   INFO) Unlock AMS entities&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00092 :   INFO) LockA [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00093 :   INFO) Unlock [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00094 :   INFO) LockA [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00095 :   INFO) Unlock [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00096 :   INFO) Unlock SI [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00097 :   INFO) LockA SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00098 :   INFO) Unlock SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00099 :   INFO) Running CCB finalize&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.DHA.DMO.00100 :   INFO) Running MGMT finalize&lt;br /&gt;
Wed Sep  3 16:07:33 2008   (WorkerI0.21785 : dhaDemo_EO.---.---.00101 : NOTICE) Successfully created 2N SG [dynamicTwoNSG] and its entities(si, csi, su, comp, etc) dynamically&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*The dynamically created components 'dynamicComp0' and 'dynamicComp1' will come up as active/standby. Which can be verified through the logs present at nodes WorkerI0 and WorkerI1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/root/asp/var/log/app.0&amp;lt;/code&amp;gt; file (on node &amp;lt;b&amp;gt;WorkerI0&amp;lt;/b&amp;gt;) , we should see the dynamically created component getting assigned ACTIVE state:&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffffaa;&amp;quot; align=&amp;quot;center&amp;quot;| /root/asp/var/log/app.0&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00031 :   INFO) Component [dynamicComp0] : PID [22187]. Initializing&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00032 :   INFO)    IOC Address             : 0x3&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00033 :   INFO)    IOC Port                : 0x81&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00036 :   INFO) Component [dynamicComp0] : PID [22187]. CSI Set Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00037 :   INFO) CSI Flags : [Add One]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00038 :   INFO) CSI Name : [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00039 :   INFO) Name value pairs :&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00040 :   INFO) Name : [model]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00041 :   INFO) Value : [twoN]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00042 :   INFO) HA state : [Active]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00043 :   INFO) Active Descriptor :&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00044 :   INFO) Transition Descriptor : [1]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI0.22187 : dummyComp_EO.---.---.00045 :   INFO) Active Component : [dynamicComp0]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/root/asp/var/log/app.0&amp;lt;/code&amp;gt; file (on node &amp;lt;b&amp;gt;WorkerI1&amp;lt;/b&amp;gt;) , we should see the dynamically created component getting assigned STANDBY state:&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffffaa;&amp;quot; align=&amp;quot;center&amp;quot;| /root/asp/var/log/app.0&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00031 :   INFO) Component [dynamicComp1] : PID [14623]. Initializing&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00032 :   INFO)    IOC Address             : 0x4&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00033 :   INFO)    IOC Port                : 0x80&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00036 :   INFO) Component [dynamicComp1] : PID [14623]. CSI Set Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00037 :   INFO) CSI Flags : [Add One]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00038 :   INFO) CSI Name : [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00039 :   INFO) Name value pairs :&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00040 :   INFO) Name : [model]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00041 :   INFO) Value : [twoN]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00042 :   INFO) HA state : [Standby]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00043 :   INFO) Standby Descriptor :&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00044 :   INFO) Standby Rank : [1]&lt;br /&gt;
Wed Sep  3 16:07:43 2008   (WorkerI1.23159 : dummyComp_EO.---.---.00045 :   INFO) Active Component : [dynamicComp0]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:OpenClovis_Note.png]]Note : The dynamically created component might come up as ACTIVE on WorkerI1 and STANDBY on WorkerI0 or vice versa (depending on the order in which they are launched).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To delete the AMF entities dynamically, lock the dhaDemoSG service group using the following SAFplus Platform Console command.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # cli[Test:SysCtrlI0:CPM]-&amp;gt;  amsLockAssignment sg dhaDemoSG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
and in the  &amp;lt;code&amp;gt;/root/asp/var/log/app.0&amp;lt;/code&amp;gt; (on node WorkerI0) file, we should see:&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding = &amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; align = &amp;quot;center&amp;quot; width=&amp;quot;680&amp;quot;&lt;br /&gt;
 ! style=&amp;quot;color:black;background-color:#ffffaa;&amp;quot; align=&amp;quot;center&amp;quot;| /root/asp/var/log/app.0&lt;br /&gt;
 |- &lt;br /&gt;
 |&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00102 :   INFO) Component [dhaDemo] : PID [17193]. CSI Set Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00103 :   INFO) CSI Flags : [Target One]     &lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00104 :   INFO) CSI Name : [dhaDemoCSI]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00105 :   INFO) HA state : [Quiesced]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00106 :   INFO) Running MGMT initialize&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00109 :   INFO) Component [dhaDemo] : PID [17193]. CSI Remove Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00110 :   INFO)    CSI                     : dhaDemoCSI&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00111 :   INFO)    CSI Flags               : 0x2&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00112 :   INFO) Running MGMT CCB initialize&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00113 : NOTICE) Deleting SG [dynamicTwoNSG] and other entities(si, csi, su, comp, etc)&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00114 :   INFO) LockI AMS entities &lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00115 :   INFO) LockA [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00116 :   INFO) LockI [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00046 :   INFO) Component [dynamicComp0] : PID [17217]. CSI Set Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00047 :   INFO) CSI Flags : [Target One]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00048 :   INFO) CSI Name : [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00049 :   INFO) HA state : [Quiesced]&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00052 :   INFO) Component [dynamicComp0] : PID [17217]. CSI Remove Received&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00053 :   INFO)    CSI                     : dynamicTwoNCSI&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:27 2008   (WorkerI0.17217 : dummyComp_EO.---.---.00054 :   INFO)    CSI Flags               : 0x2&lt;br /&gt;
&lt;br /&gt;
Wed Sep  3 16:34:29 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00117 :   INFO) LockA [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:34:29 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00118 :   INFO) LockI [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00119 :   INFO) LockA SI [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00120 :   INFO) LockA SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00121 :   INFO) LockI SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00122 :   INFO) Delete COMP [dynamicComp0]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00123 :   INFO) Delete COMP [dynamicComp1]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00124 :   INFO) Delete SU [dynamicTwoNSU0]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00125 :   INFO) Delete SU [dynamicTwoNSU1]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00126 :   INFO) Delete CSI [dynamicTwoNCSI]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00127 :   INFO) Delete SI [dynamicTwoNSI]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00128 :   INFO) Deleting SG [dynamicTwoNSG]&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00129 :   INFO) CCB Commit Delete&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00130 :   INFO) Running CCB finalize&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.DHA.DMO.00131 :   INFO) Running MGMT finalize&lt;br /&gt;
Wed Sep  3 16:34:31 2008   (WorkerI0.17193 : dhaDemo_EO.---.---.00132 : NOTICE) Successfully deleted dynamically created SG [dynamicTwoNSG] and other entities(si, csi, su, comp, etc)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These can be watched in a separate terminal window using &amp;lt;code&amp;gt;tail -f &amp;lt;file_name&amp;gt; &amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can continue to observe this create/delete of AMF entities dynamically by unlocking/locking the SG dhaDemoSG.&lt;br /&gt;
&lt;br /&gt;
*To unlock the dhaDemoSG using the SAFplus Platform Console (this will create the AMF entities dynamically):&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# cli[Test:SysCtrlI0:CPM]-&amp;gt; amsUnlock sg dhaDemoSG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*To lock the dhaDemoSG using the SAFplus Platform Console (this will delete the AMF entities dynamically):&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# cli[Test:SysCtrlI0:CPM]-&amp;gt; amsLockAssignment sg dhaDemoSG&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*To stop the demo and exit, following CLI commands may be used:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# cli[Test:SysCtrlI0:CPM]-&amp;gt; amsLockAssignment sg dhaDemoSG&lt;br /&gt;
# cli[Test:SysCtrlI0:CPM]-&amp;gt; amsLockInstantiation sg dhaDemoSG&lt;br /&gt;
# cli[Test:SysCtrlI0:CPM]-&amp;gt; bye&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Summary===&lt;br /&gt;
&lt;br /&gt;
This Sample Application has covered basic dynamic HA functionality, with creation/deletion of AMF entities (SG, SI, CSI, SU, Component, etc) using Clovis AMF management APIs.&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP</id>
		<title>Switch your model/image from TIPC to UDP</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP"/>
				<updated>2012-08-07T02:08:56Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: /* Step 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== From Model ==&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
- Using IDE open your model, upgrade your model, a xport configure file clTransport.xml will be generated in &amp;lt;your model&amp;gt;/config/clTransport.xml&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp\&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ioc:BootConfig xmlns:ioc=&amp;quot;ioc.ecore&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;config&amp;gt;&lt;br /&gt;
           &amp;lt;default&amp;gt;TIPC&amp;lt;/default&amp;gt;&lt;br /&gt;
         &amp;lt;/config&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;TIPC&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClTIPC.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
            &amp;lt;!--xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport--&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;!--heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;2000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;3&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat--&amp;gt;&lt;br /&gt;
        &amp;lt;/ioc:BootConfig&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
Edit content clTransport.xml with UDP default:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ioc:BootConfig xmlns:ioc=&amp;quot;ioc.ecore&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;multicast address=&amp;quot;226.0.1.1&amp;quot; port=&amp;quot;9595&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;3000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;3000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;5&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
        &amp;lt;/ioc:BootConfig&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDP use multicast to notification component arrival and departure.&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
Add 2 env variables into &amp;lt;model_dir&amp;gt;/src/target.env:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
export ASP_UDP_SUBNET=&amp;lt;IP Range&amp;gt;/Length&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
export ASP_UDP_LINK_NAME=&amp;lt;your interface&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
Before running ASP, should export/setenv 2 below variables:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
export ASP_UDP_SUBNET=192.168.57.0/24 &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== From Image ==&lt;br /&gt;
Create a clTransport.xml like step 2 &amp;amp; 3 above and retarball your images.&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP</id>
		<title>Switch your model/image from TIPC to UDP</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Switch_your_model/image_from_TIPC_to_UDP"/>
				<updated>2012-08-07T02:08:23Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: /* Step 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== From Model ==&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
- Using IDE open your model, upgrade your model, a xport configure file clTransport.xml will be generated in &amp;lt;your model&amp;gt;/config/clTransport.xml&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp\&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ioc:BootConfig xmlns:ioc=&amp;quot;ioc.ecore&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;config&amp;gt;&lt;br /&gt;
           &amp;lt;default&amp;gt;TIPC&amp;lt;/default&amp;gt;&lt;br /&gt;
         &amp;lt;/config&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;TIPC&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClTIPC.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
            &amp;lt;!--xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport--&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;!--heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;2000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;1000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;3&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat--&amp;gt;&lt;br /&gt;
        &amp;lt;/ioc:BootConfig&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
Edit content clTransport.xml with UDP default:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
      &amp;lt;version v0=&amp;quot;4.0.0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;ioc:BootConfig xmlns:ioc=&amp;quot;ioc.ecore&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xports&amp;gt;&lt;br /&gt;
            &amp;lt;xport&amp;gt;&lt;br /&gt;
              &amp;lt;type&amp;gt;UDP&amp;lt;/type&amp;gt;&lt;br /&gt;
              &amp;lt;plugin&amp;gt;libClUDP.so&amp;lt;/plugin&amp;gt;&lt;br /&gt;
            &amp;lt;/xport&amp;gt;&lt;br /&gt;
          &amp;lt;/xports&amp;gt;&lt;br /&gt;
          &amp;lt;multicast address=&amp;quot;226.0.1.1&amp;quot; port=&amp;quot;9595&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;heartbeat&amp;gt;&lt;br /&gt;
              &amp;lt;interval&amp;gt;3000&amp;lt;/interval&amp;gt;&lt;br /&gt;
              &amp;lt;intervalLocal&amp;gt;3000&amp;lt;/intervalLocal&amp;gt;&lt;br /&gt;
              &amp;lt;retries&amp;gt;5&amp;lt;/retries&amp;gt;&lt;br /&gt;
          &amp;lt;/heartbeat&amp;gt;&lt;br /&gt;
        &amp;lt;/ioc:BootConfig&amp;gt;&lt;br /&gt;
      &amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;openClovisAsp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDP use multicast to notification component arrival and departure.&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
Add 2 env variables into &amp;lt;model_dir&amp;gt;/src/target.env:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
export ASP_UDP_SUBNET=&amp;lt;IP Range&amp;gt;/Length&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
export ASP_UDP_LINK_NAME=&amp;lt;your interface&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
export ASP_UDP_SUBNET=192.168.57.0/24&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
Before running ASP, should export/setenv 2 below variables:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
export ASP_UDP_SUBNET=192.168.57.0/24 &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
export ASP_UDP_LINK_NAME=eth0&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== From Image ==&lt;br /&gt;
Create a clTransport.xml like step 2 &amp;amp; 3 above and retarball your images.&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Building_an_installation_package</id>
		<title>Building an installation package</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Building_an_installation_package"/>
				<updated>2012-03-14T01:20:42Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: /* Preparation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Create an Installation Package==&lt;br /&gt;
*Note: this requires access to OpenClovis private repositories so is only useful for OpenClovis Engineers &lt;br /&gt;
&lt;br /&gt;
=== Preparation ===&lt;br /&gt;
# Create a directory &amp;quot;git&amp;quot;. &amp;quot;cd&amp;quot; to it.&lt;br /&gt;
# Check out SAFplus, and IDE, projects.  Rename their subdirectories &amp;quot;SAFplus&amp;quot; and &amp;quot;IDE&amp;quot;.&lt;br /&gt;
# Detar &amp;quot;eclipse&amp;quot; 3.7.x &amp;quot;indigo&amp;quot;, and the following plugins.  You should end up with an &amp;quot;eclipse&amp;quot; directory with all plugins properly placed:&lt;br /&gt;
## cdt-master-7.0.2.zip, emf-xsd-SDK-2.7.1.zip, GEF-SDK-3.7.2.zip&lt;br /&gt;
## These plugins and eclipse are available in the 3rdparty repository, &amp;quot;idedev&amp;quot; subdirectory&lt;br /&gt;
# cd &amp;quot;IDE&amp;quot;&lt;br /&gt;
#  make EclipseDir=eclipse CDTDir=. -f release.mk&lt;br /&gt;
&lt;br /&gt;
Packages will be created in the &amp;quot;git&amp;quot; directory...&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Building_an_installation_package</id>
		<title>Building an installation package</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Building_an_installation_package"/>
				<updated>2012-03-14T01:19:35Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: /* Preparation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Create an Installation Package==&lt;br /&gt;
*Note: this requires access to OpenClovis private repositories so is only useful for OpenClovis Engineers &lt;br /&gt;
&lt;br /&gt;
=== Preparation ===&lt;br /&gt;
# Create a directory &amp;quot;git&amp;quot;. &amp;quot;cd&amp;quot; to it.&lt;br /&gt;
# Check out SAFplus, and IDE, projects.  Rename their subdirectories &amp;quot;SAFplus&amp;quot; and &amp;quot;IDE&amp;quot;.&lt;br /&gt;
# Detar &amp;quot;eclipse&amp;quot; 3.7.x &amp;quot;indigo&amp;quot;, and the following plugins.  You should end up with an &amp;quot;eclipse&amp;quot; directory with all plugins properly placed:&lt;br /&gt;
## cdt-master-7.0.2.zip, emf-xsd-SDK-2.7.1.zip, GEF-SDK-3.7.2.zip&lt;br /&gt;
## These plugins and eclipse are available in the 3rdparty repository, &amp;quot;idedev&amp;quot; subdirectory&lt;br /&gt;
# cd &amp;quot;IDE&amp;quot;&lt;br /&gt;
# make EclipseDir=eclipse CDTDir=. -f release.mk&lt;br /&gt;
&lt;br /&gt;
Packages will be created in the &amp;quot;git&amp;quot; directory...&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/High_Availability_(AMF)_Questions</id>
		<title>High Availability (AMF) Questions</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/High_Availability_(AMF)_Questions"/>
				<updated>2012-02-22T22:18:38Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: /* FAQ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== High Availability (AMF) ==&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
OpenClovis ASP provides a SA-Forum compliant High Availability solution (the AMF in SAF terminology).  This component controls the starting/stopping of applications, application redundancy configuration, and role assignment.&lt;br /&gt;
&lt;br /&gt;
===FAQ===&lt;br /&gt;
* '''How to get the IOC address for the given node?'''&lt;br /&gt;
: The relevant API is &amp;quot;clCpmIocAddressForNodeGet&amp;quot; in &amp;quot;clCpmExtApi.h&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* '''What’s the best way for an application to determine the name/slot of the currently active controller in the cluster?'''&lt;br /&gt;
: The relevant API is &amp;quot;clCpmMasterAddressGet&amp;quot;.  Example code (which also converts the node's address into its name) is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;clCpmExtApi.h&amp;gt;&lt;br /&gt;
ClRcT masterNodeGet(void)&lt;br /&gt;
{&lt;br /&gt;
    ClIocNodeAddressT node = 0;&lt;br /&gt;
    ClRcT rc = clCpmMasterAddressGet(&amp;amp;node);&lt;br /&gt;
    if(node)&lt;br /&gt;
    {&lt;br /&gt;
        ClCpmSlotInfoT slotInfo = {.slotId = node } ;&lt;br /&gt;
        rc = clCpmSlotGet(CL_CPM_SLOT_ID, &amp;amp;slotInfo);&lt;br /&gt;
        if(rc == CL_OK)&lt;br /&gt;
            clLogNotice(&amp;quot;MASTER&amp;quot;, &amp;quot;GET&amp;quot;, &amp;quot; Currently active controller node name is [%.*s]&amp;quot;,&lt;br /&gt;
                        slotInfo.nodeName.length, slotInfo.nodeName.value);&lt;br /&gt;
    }&lt;br /&gt;
    return rc;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''How does component recovery and escalation work ?'''&lt;br /&gt;
&lt;br /&gt;
If your recovery is component restart and your component is marked as restartable, and it restarts sgconfig.compRestartCountMax within sgconfig.compRestartDuration, then it escalates to SU restart. If the SU restart happens sgconfig.surestartcountmax within sgconfig.surestartduration, then it escalates to SU failover. If SU is not marked as restartable, then it escalates to SU failover. If the SU failover happens nodeconfig.sufailovercountmax within nodeconfig.sufailoverduration, then it escalates to node failover.  If the nodeconfig.autorepair is set to TRUE (default), the node is rebooted on node recovery escalations. Also if a component cleanup action fails which typically happens when the configured component cleanup script fails when run on abnormal process exits/crashes, the recovery is escalated to node failover if the compconfig.nodeRebootCleanupFail is set to TRUE (default). The node reboot behavior on escalation/recovery can be controlled by exporting the following environment variables in your MODEL/target.env location thats automatically copied to etc/asp.conf while building the target images with make images.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 export ASP_NODE_REBOOT_DISABLE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  The above flag would disable reboot of nodes. If the user wants to restart the &lt;br /&gt;
  middleware or ASP on node recovery, then he could:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
 export ASP_NODE_RESTART=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''What is the purpose of each timeout, what happen after the timeout expires?'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
** instantiateTimeout&lt;br /&gt;
&lt;br /&gt;
The component has to respond to AMF instantiation request with saAmfResponse within this time. Otherwise on timeout, amf would kill it and try to relaunch it compConfig.numMaxInstantiate times after which it would try to launch it  compConfig.numMaxInstantiate times after compConfig.instantiationDelay. If they fail or timeout, the component is marked INSTANTIATION-FAILED.  Recovery from INSTANTIATION-FAILED is intended to happen by operator intervention through an &amp;quot;amfRepaired&amp;quot; operation, accessible via API or debug CLI. &lt;br /&gt;
 &lt;br /&gt;
** terminateTimeout&lt;br /&gt;
&lt;br /&gt;
If the component doesn't respond to the appterminate request from AMF within the terminate timeout, it would be marked termination-failed and component cleanup would be issued. (abrupt termination or SIGKILL sent with configured compCleanupScript invocation)&lt;br /&gt;
&lt;br /&gt;
** cleanupTimeout&lt;br /&gt;
&lt;br /&gt;
If component cleanup times out which usually happens when the configured component cleanup script takes more than cleanupTimeout to return during component cleanup trigger and compConfig.nodeRebootCleanupFail is set to TRUE, then node is reset/rebooted (based on env flags in etc/asp.conf. Default is reboot). Otherwise if its false, then SU is failed over on cleanup error.&lt;br /&gt;
 &lt;br /&gt;
** amStartTimeout/amStopTimeout&lt;br /&gt;
&lt;br /&gt;
Nothing happens on monitoring these timeouts as its not present and processes can use amf healthcheck with recommended recovery.&lt;br /&gt;
 &lt;br /&gt;
** quiescingCompleteTimeout&lt;br /&gt;
&lt;br /&gt;
When the component doesn't respond with saAmfQuiescingComplete within the quiescingcompletetimeout for a component CSI QUIESCING set request, then its configured recovery takes effect.&lt;br /&gt;
 &lt;br /&gt;
** csiSetTimeout&lt;br /&gt;
&lt;br /&gt;
Same as above. If the process doesn't respond with saAmfResponse for a csi set request (ACTIVE/STANDBY or QUIESCED), then component recommended recovery takes place.&lt;br /&gt;
&lt;br /&gt;
** csiRemoveTimeout&lt;br /&gt;
&lt;br /&gt;
Same. If the process doesn't respond with saAmfResponse to the amf csiRemove request, then recovery is triggered.&lt;br /&gt;
 &lt;br /&gt;
** proxiedCompInstantiateTimeout&lt;br /&gt;
&lt;br /&gt;
This is only true for SAF-proxy-proxied components. If the SA-AWARE proxy doesn't respond with saAmfResponse to the proxiedCompInstantiate request or proxied-non-preinstantiable doesn't respond to the proxied csiset request (BOTH requests sent to the PROXY component) with saAmfResponse within the proxied instantiate timeout, then recovery is triggered for the proxied.&lt;br /&gt;
 &lt;br /&gt;
** proxiedCompCleanupTimeout&lt;br /&gt;
&lt;br /&gt;
Again only true for proxy-proxied. If the proxy component doesn't respond to the proxied cleanup callback with saAmfResponse, then a cleanup error for the proxied is processed which is the same as cleanup error for cleanup timeout mentioned above. Either nodeReset if nodeRebootCleanupFail is configured for the component or recovery to SU failover (proxied compcleanup is triggered when proxied component is failed by proxy or fails healthcheck from proxy and proxy returns failure with saAmfResponse or times out the healthcheck for its proxied component which proxy is managing).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''How to do a graceful switchover?'''&lt;br /&gt;
: A 'graceful' switchover is one where the running applications have a chance to finish ongoing work before the &amp;quot;active&amp;quot; designation is moved to another instance of the applications.&lt;br /&gt;
: Graceful switchover must be implemented in your application by handling the SAF &amp;quot;SA_AMF_HA_QUIESCING&amp;quot; flag in the work assignment callback.  This callback must initiate the clean up process.  When you application is done, it should call &amp;quot;saAmfCSIQuiescingComplete(amfHandle, invocation, SA_AIS_OK);&amp;quot; to tell the AMF that it has finished.&lt;br /&gt;
: To trigger a graceful switchover, you can call clAmsMgmtEntityShutdown, or clCpmNodeRestart from any application, or from the ASP debug CLI (within CPM context -- setc master; setc cpm) you can initiate a graceful shutdown by doing  &amp;quot;amslockassignment &amp;lt;entity type&amp;gt; &amp;lt;entity name&amp;gt;&amp;quot;.  Then run &amp;quot;amsunlock &amp;lt;entity type&amp;gt; &amp;lt;entity name&amp;gt;&amp;quot; to bring the entity back into service (as standby).  For example, to effect switchover of the node named &amp;quot;controller1&amp;quot; use &amp;quot;amslockassignment node controller1&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/High_Availability_(AMF)_Questions</id>
		<title>High Availability (AMF) Questions</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/High_Availability_(AMF)_Questions"/>
				<updated>2011-06-16T17:33:25Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: /* FAQ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== High Availability (AMF) ==&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
OpenClovis ASP provides a SA-Forum compliant High Availability solution (the AMF in SAF terminology).  This component controls the starting/stopping of applications, application redundancy configuration, and role assignment.&lt;br /&gt;
&lt;br /&gt;
===FAQ===&lt;br /&gt;
&lt;br /&gt;
* '''What’s the best way for an application to determine the name/slot of the currently active controller in the cluster?'''&lt;br /&gt;
: The relevant API is &amp;quot;clCpmMasterAddressGet&amp;quot;.  Example code (which also converts the node's address into its name) is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;clCpmExtApi.h&amp;gt;&lt;br /&gt;
ClRcT masterNodeGet(void)&lt;br /&gt;
{&lt;br /&gt;
    ClIocNodeAddressT node = 0;&lt;br /&gt;
    ClRcT rc = clCpmMasterAddressGet(&amp;amp;node);&lt;br /&gt;
    if(node)&lt;br /&gt;
    {&lt;br /&gt;
        ClCpmSlotInfoT slotInfo = {.slotId = node } ;&lt;br /&gt;
        rc = clCpmSlotGet(CL_CPM_SLOT_ID, &amp;amp;slotInfo);&lt;br /&gt;
        if(rc == CL_OK)&lt;br /&gt;
            clLogNotice(&amp;quot;MASTER&amp;quot;, &amp;quot;GET&amp;quot;, &amp;quot; Currently active controller node name is [%.*s]&amp;quot;,&lt;br /&gt;
                        slotInfo.nodeName.length, slotInfo.nodeName.value);&lt;br /&gt;
    }&lt;br /&gt;
    return rc;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''How does component recovery and escalation work ?'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 If your recovery is component restart and your component is marked as restartable, &lt;br /&gt;
 and it restarts sgconfig.compRestartCountMax within sgconfig.compRestartDuration, &lt;br /&gt;
 then it escalates to SU restart. If the SU restart happens sgconfig.surestartcountmax &lt;br /&gt;
 within sgconfig.surestartduration, then it escalates to SU failover. If SU is not marked &lt;br /&gt;
 as restartable, then it escalates to SU failover. If the SU failover happens nodeconfig.sufailovercountmax &lt;br /&gt;
 within nodeconfig.sufailoverduration, then it escalates to node failover.&lt;br /&gt;
 If the nodeconfig.autorepair is set to TRUE (default), the node is rebooted on &lt;br /&gt;
 node recovery escalations. Also if a component cleanup action fails which typically happens&lt;br /&gt;
 when the configured component cleanup script fails when run on abnormal process exits/crashes,&lt;br /&gt;
 the recovery is escalated to node failover if the compconfig.nodeRebootCleanupFail is set&lt;br /&gt;
 to TRUE (default). &lt;br /&gt;
 The node reboot behavior on escalation/recovery can be controlled by exporting the following environment &lt;br /&gt;
 variables in your MODEL/target.env location thats automatically copied to etc/asp.conf while building the target images with make images.&lt;br /&gt;
&lt;br /&gt;
 export CL_ASP_NODE_REBOOT_DISABLE=1&lt;br /&gt;
&lt;br /&gt;
  The above flag would disable reboot of nodes. If the user wants to restart the &lt;br /&gt;
  middleware or ASP on node recovery, then he could:&lt;br /&gt;
 &lt;br /&gt;
 export CL_ASP_NODE_RESTART=1&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/High_Availability_(AMF)_Questions</id>
		<title>High Availability (AMF) Questions</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/High_Availability_(AMF)_Questions"/>
				<updated>2011-06-16T17:28:57Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: /* FAQ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== High Availability (AMF) ==&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
OpenClovis ASP provides a SA-Forum compliant High Availability solution (the AMF in SAF terminology).  This component controls the starting/stopping of applications, application redundancy configuration, and role assignment.&lt;br /&gt;
&lt;br /&gt;
===FAQ===&lt;br /&gt;
&lt;br /&gt;
* '''What’s the best way for an application to determine the name/slot of the currently active controller in the cluster?'''&lt;br /&gt;
: The relevant API is &amp;quot;clCpmMasterAddressGet&amp;quot;.  Example code (which also converts the node's address into its name) is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;clCpmExtApi.h&amp;gt;&lt;br /&gt;
ClRcT masterNodeGet(void)&lt;br /&gt;
{&lt;br /&gt;
    ClIocNodeAddressT node = 0;&lt;br /&gt;
    ClRcT rc = clCpmMasterAddressGet(&amp;amp;node);&lt;br /&gt;
    if(node)&lt;br /&gt;
    {&lt;br /&gt;
        ClCpmSlotInfoT slotInfo = {.slotId = node } ;&lt;br /&gt;
        rc = clCpmSlotGet(CL_CPM_SLOT_ID, &amp;amp;slotInfo);&lt;br /&gt;
        if(rc == CL_OK)&lt;br /&gt;
            clLogNotice(&amp;quot;MASTER&amp;quot;, &amp;quot;GET&amp;quot;, &amp;quot; Currently active controller node name is [%.*s]&amp;quot;,&lt;br /&gt;
                        slotInfo.nodeName.length, slotInfo.nodeName.value);&lt;br /&gt;
    }&lt;br /&gt;
    return rc;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''How does component recovery and escalation work ?'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 If your recovery is component restart and your component is marked as restartable, &lt;br /&gt;
 and it restarts sgconfig.compRestartCountMax within sgconfig.compRestartDuration, &lt;br /&gt;
 then it escalates to SU restart. If the SU restart happens sgconfig.surestartcountmax &lt;br /&gt;
 within sgconfig.surestartduration, then it escalates to SU failover. If SU is not marked &lt;br /&gt;
 as restartable, then it escalates to SU failover. If the SU failover happens nodeconfig.sufailovercountmax &lt;br /&gt;
 within nodeconfig.sufailoverduration, then it escalates to node failover.&lt;br /&gt;
 If the nodeconfig.autorepair is set to TRUE (default), the node is rebooted on &lt;br /&gt;
 node recovery escalations. This behavior can be controlled by exporting the following environment &lt;br /&gt;
 variables in your MODEL/target.env location thats automatically copied to etc/asp.conf while building the target images with make images.&lt;br /&gt;
&lt;br /&gt;
 export CL_ASP_NODE_REBOOT_DISABLE=1&lt;br /&gt;
&lt;br /&gt;
  The above flag would disable reboot of nodes. If the user wants to restart the &lt;br /&gt;
  middleware or ASP on node recovery, then he could:&lt;br /&gt;
 &lt;br /&gt;
 export CL_ASP_NODE_RESTART=1&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/High_Availability_(AMF)_Questions</id>
		<title>High Availability (AMF) Questions</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/High_Availability_(AMF)_Questions"/>
				<updated>2011-06-16T17:25:26Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: /* FAQ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== High Availability (AMF) ==&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
OpenClovis ASP provides a SA-Forum compliant High Availability solution (the AMF in SAF terminology).  This component controls the starting/stopping of applications, application redundancy configuration, and role assignment.&lt;br /&gt;
&lt;br /&gt;
===FAQ===&lt;br /&gt;
&lt;br /&gt;
* '''What’s the best way for an application to determine the name/slot of the currently active controller in the cluster?'''&lt;br /&gt;
: The relevant API is &amp;quot;clCpmMasterAddressGet&amp;quot;.  Example code (which also converts the node's address into its name) is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;clCpmExtApi.h&amp;gt;&lt;br /&gt;
ClRcT masterNodeGet(void)&lt;br /&gt;
{&lt;br /&gt;
    ClIocNodeAddressT node = 0;&lt;br /&gt;
    ClRcT rc = clCpmMasterAddressGet(&amp;amp;node);&lt;br /&gt;
    if(node)&lt;br /&gt;
    {&lt;br /&gt;
        ClCpmSlotInfoT slotInfo = {.slotId = node } ;&lt;br /&gt;
        rc = clCpmSlotGet(CL_CPM_SLOT_ID, &amp;amp;slotInfo);&lt;br /&gt;
        if(rc == CL_OK)&lt;br /&gt;
            clLogNotice(&amp;quot;MASTER&amp;quot;, &amp;quot;GET&amp;quot;, &amp;quot; Currently active controller node name is [%.*s]&amp;quot;,&lt;br /&gt;
                        slotInfo.nodeName.length, slotInfo.nodeName.value);&lt;br /&gt;
    }&lt;br /&gt;
    return rc;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''How does component recovery and escalation work ?'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
: If your recovery is component restart and your component is marked as restartable, and it restarts sgconfig.compRestartCountMax within sgconfig.compRestartDuration, then it escalates to SU restart. If the SU restart happens sgconfig.surestartcountmax within sgconfig.surestartduration, then it escalates to SU failover. If SU is not marked as restartable, then it escalates to SU failover. If the SU failover happens nodeconfig.sufailovercountmax within nodeconfig.sufailoverduration, then it escalates to node failover.&lt;br /&gt;
If the nodeconfig.autorepair is set to TRUE (default), the node is rebooted on node recovery escalations. This behavior can be controlled by exporting the following environment variables in your MODEL/target.env location thats automatically copied to etc/asp.conf while building the target images with make images.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 '''export CL_ASP_NODE_REBOOT_DISABLE=1'''&lt;br /&gt;
 &amp;lt;br&amp;gt;&lt;br /&gt;
  The above flag would disable reboot of nodes. If the user wants to restart the middleware or ASP on node recovery, then he could:&lt;br /&gt;
 '''export CL_ASP_NODE_RESTART=1'''&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Doc:Sdk_4.1/awdguide/apiexamples</id>
		<title>Doc:Sdk 4.1/awdguide/apiexamples</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Doc:Sdk_4.1/awdguide/apiexamples"/>
				<updated>2009-07-29T00:40:58Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: /* API Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==API Examples==&lt;br /&gt;
API documentation is included in this documentation package.  Additionally, there are several examples located in the &amp;quot;bin&amp;quot; directory of the distribution.  These examples provide a basic overview of the APIs and how to use them and also show some simple client/server implementations.&lt;br /&gt;
&lt;br /&gt;
===Basic API Use Example: apiexample.py===&lt;br /&gt;
&lt;br /&gt;
This is intended to be an interactive example (i.e. cut-and-paste the lines into a Python shell running under SAFplus Platform).  It presents an overview of the highest layer of APIs and shows how cluster information can be retrieved, software can be installed, and an upgrade started.&lt;br /&gt;
&lt;br /&gt;
It can be run in any SAFplus-connected python shell.  To get to an SAFplus-connected Python shell, either use the shell embedded in the SAFplus Platform web server (browse to /shell), or run one from the command line.  To run from the command line (recommended because you get a full-featured standard python shell) do the following:&lt;br /&gt;
&lt;br /&gt;
Set up paths to get ARD libraries:&lt;br /&gt;
 $ export PYTHONPATH={ardDir}/lib:{ardDir}/bin&lt;br /&gt;
 $ export PATH={ardDir}/bin:$PATH&lt;br /&gt;
&lt;br /&gt;
Run Python. Make SURE to specify ARD's embedded Python, and not your distribution's installed version!&lt;br /&gt;
 $ {ASP_Dir}/bin/asp_run {ardDir}/bin/python2.5&lt;br /&gt;
&lt;br /&gt;
Now at the Python prompt, run this line FIRST to hook into the SAFplus Platform AMF:&lt;br /&gt;
 &amp;gt;&amp;gt; import amfpy; amfpy.initializeAmf()&lt;br /&gt;
&lt;br /&gt;
At this point you can use all ARD Python services, as shown in the following script:&lt;br /&gt;
&lt;br /&gt;
====apiexample.py====&lt;br /&gt;
&lt;br /&gt;
 # Standard Python modules&lt;br /&gt;
 import os&lt;br /&gt;
 import time&lt;br /&gt;
&lt;br /&gt;
 # ARD Python API example code, including deployment and upgrade:&lt;br /&gt;
 import upgrade; import clusterinfo; import aspApp; import aspAmf; import appdeploy&lt;br /&gt;
&lt;br /&gt;
 # Hook into the various services&lt;br /&gt;
 ci = clusterinfo.ci     # The clusterinfo.ci objects reflect the entire state of the cluster&lt;br /&gt;
 amf = aspAmf.Session()  # The aspAmf.Session class lets you modify the cluster state&lt;br /&gt;
&lt;br /&gt;
 # Example of getting the node names&lt;br /&gt;
 print [x.name for x in ci.nodeList]&lt;br /&gt;
&lt;br /&gt;
 # Get the name of the node in slot 1&lt;br /&gt;
 print ci.nodes[1].name&lt;br /&gt;
&lt;br /&gt;
 # Example of getting the sg started/stopped status&lt;br /&gt;
 print &amp;quot;Running Service Groups:&amp;quot;&lt;br /&gt;
 for x in clusterinfo.ci.sgList:&lt;br /&gt;
   if x.isRunning():&lt;br /&gt;
     print x.name&lt;br /&gt;
&lt;br /&gt;
 # Example of getting SU status and of traversing the entity hierarchy&lt;br /&gt;
 print &amp;quot;Active Service Units:&amp;quot;&lt;br /&gt;
 for x in clusterinfo.ci.suList:&lt;br /&gt;
   if x.isActive():&lt;br /&gt;
     print &amp;quot;%s is active for service group %s and is running on node %s (slot: %d)&amp;quot; % (x.name,x.sg.name,x.node.name,x.node.slot)&lt;br /&gt;
&lt;br /&gt;
 # Example of stopping and restarting an entity&lt;br /&gt;
 su = ci.suList[0]&lt;br /&gt;
 print &amp;quot;Stopping %s&amp;quot; % su.name&lt;br /&gt;
 amf.Shutdown(su)&lt;br /&gt;
 # Now we must reload the clusterinfo to reflect changes.&lt;br /&gt;
 ci.load()&lt;br /&gt;
 su = ci.entities[su.name]  # and reload our temporary.  Its best to access your entities by name in case the list order changes&lt;br /&gt;
 if su.isRunning():&lt;br /&gt;
   print &amp;quot;SU %s is still running&amp;quot; % su.name&lt;br /&gt;
 else:&lt;br /&gt;
   print &amp;quot;SU %s is stopped&amp;quot; % su.name&lt;br /&gt;
 amf.Startup(su)&lt;br /&gt;
 ci.load()&lt;br /&gt;
 su = ci.entities[su.name]  # its best to access your entities by name in case the list order changes&lt;br /&gt;
 if su.isRunning():&lt;br /&gt;
   print &amp;quot;SU %s is running&amp;quot; % su.name&lt;br /&gt;
 else:&lt;br /&gt;
   print &amp;quot;SU %s is still stopped&amp;quot; % su.name&lt;br /&gt;
&lt;br /&gt;
 # Initialize the Application bundle DB &amp;amp; pass the bundle repository directory.  Note that you should only create 1 of these per bundle repository directory  or you will have 2 entities managing the same data.&lt;br /&gt;
 appDb = aspApp.AppDb(os.getenv(&amp;quot;ASP_DIR&amp;quot;,&amp;quot;/tmp&amp;quot;) + &amp;quot;/apps&amp;quot;)&lt;br /&gt;
 ci.setAppDb(appDb)  # Hook them up (so clusterinfo knows about application versions)&lt;br /&gt;
 myNode = &amp;quot;ctrlI0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 # Set additional data that SAFplus Platform may not know into the node&lt;br /&gt;
 # This info is necessary to deploy software&lt;br /&gt;
 # (it also can be entered via the GUI, or via etc/clustercfg.xml file)&lt;br /&gt;
 # You need to change these values to correctly reflect your setup&lt;br /&gt;
 if ci.entities[myNode].localUser == 'unknown':&lt;br /&gt;
   ci.entities[myNode].setIntraclusterAccess(&amp;quot;192.168.66.130&amp;quot;,&amp;quot;root&amp;quot;,&amp;quot;clovis&amp;quot;,&amp;quot;/root/ocmsdemo7&amp;quot;)&lt;br /&gt;
 # The above example sets 1 node.  For the application deployment example&lt;br /&gt;
 # below to work, you must set all of the nodes to the correct values.&lt;br /&gt;
&lt;br /&gt;
 # Add 2 bundle files into the system.  Of course you must modify the path to&lt;br /&gt;
 # point to valid bundle files.&lt;br /&gt;
 appDb.NewAppFile(&amp;quot;/code/vipapp1.4.0.0.tgz&amp;quot;)&lt;br /&gt;
 appDb.NewAppFile(&amp;quot;/code/vipapp1.4.0.1.tgz&amp;quot;)&lt;br /&gt;
 # Note that if you want AppDb to automatically find them again, &lt;br /&gt;
 # you must copy them into the repository (the directory you specified&lt;br /&gt;
 # when creating &amp;quot;appDb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
 # Show all bundles and versions&lt;br /&gt;
 print [(x.name,x.version) for x in appDb.AppList()]&lt;br /&gt;
&lt;br /&gt;
 # Find all &amp;quot;live&amp;quot; nodes&lt;br /&gt;
 # Of course, you can't deploy to nodes that aren't powered up!&lt;br /&gt;
 liveNodes = filter(lambda x: x.isRunning(),ci.nodeList)&lt;br /&gt;
 print [x.name for x in liveNodes]&lt;br /&gt;
&lt;br /&gt;
 # Get an application&lt;br /&gt;
 appFile = appDb.apps['virtualIp'].version['1.4.0.0']&lt;br /&gt;
 print &amp;quot;Name: &amp;quot;, appFile.name, &amp;quot;Located At: &amp;quot;, appFile.dir, &amp;quot;Version: &amp;quot;, appFile.version  &lt;br /&gt;
&lt;br /&gt;
Deploy the application:&lt;br /&gt;
&lt;br /&gt;
 # Tweak the configuration for just this deployment&lt;br /&gt;
 # If I didn't copy the configuration, I would be modifying it in RAM&lt;br /&gt;
 # which would affect other deployments I do within this Python session.&lt;br /&gt;
 import copy&lt;br /&gt;
 newCfg = copy.deepcopy(appFile.cfg)&lt;br /&gt;
 # For example, set failback parameter to True:&lt;br /&gt;
 newCfg.virtualIp.modifiers.failBack = True&lt;br /&gt;
&lt;br /&gt;
 # Really Deploy&lt;br /&gt;
 import appdeploy&lt;br /&gt;
 (sgList,(errors,notes)) = appdeploy.deploy(appFile.dir,newCfg,liveNodes,abortIfCantAccess=True,copy=True,deploy=True)&lt;br /&gt;
 # Did you get a pexpect exception?  You probably forgot to specify the node &lt;br /&gt;
 # intracluster access data as shown above.  Or you may have specified&lt;br /&gt;
 # incorrect information.&lt;br /&gt;
 myNewSg  = sgList[0]&lt;br /&gt;
 mySgName = myNewSg.name &lt;br /&gt;
 print &amp;quot;Deployed application and created SG %s&amp;quot; % mySgName&lt;br /&gt;
 # Reload the AMF information model&lt;br /&gt;
 ci.load()&lt;br /&gt;
&lt;br /&gt;
 # Reaccess via ci global to get refreshed data.&lt;br /&gt;
 mySg = ci.entities[mySgName]&lt;br /&gt;
 # Let's start it up&lt;br /&gt;
 amf.Startup(mySg)&lt;br /&gt;
 # Give it time to come up&lt;br /&gt;
 # I reaccess through ci each time to get refreshed data.&lt;br /&gt;
 while not ci.entities[mySgName].isRunning():&lt;br /&gt;
   time.sleep(5)&lt;br /&gt;
   ci.refresh()&lt;br /&gt;
 print &amp;quot;It is running&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Let's do an upgrade!&lt;br /&gt;
&lt;br /&gt;
 # Start the upgrade manager...&lt;br /&gt;
 umgr = upgrade.UpgradeMgr()&lt;br /&gt;
 umgr.add(mySg)  # Add my Service Group to it.&lt;br /&gt;
 upSg = umgr.entities[mySgName]  # Get my sg's upgrade entity &lt;br /&gt;
 upSg.upMethod = upgrade.RollingUpgrade&lt;br /&gt;
 print mySg.appVer.version&lt;br /&gt;
&lt;br /&gt;
 # Start the upgrade...&lt;br /&gt;
 upSg.Upgrade(appDb.apps['virtualIp'].version['1.4.0.1'])&lt;br /&gt;
 ci.load() # Reload the database.&lt;br /&gt;
 mySg = ci.entities[mySg.name]  # Get the new SG object&lt;br /&gt;
 print mySg.appVer.version&lt;br /&gt;
&lt;br /&gt;
===XML client/server example===&lt;br /&gt;
&lt;br /&gt;
This example is located in the &amp;quot;bin&amp;quot; directory and consists of 2 files &amp;quot;xmlclientexample.py&amp;quot; and &amp;quot;xmlserverexample.py&amp;quot;.  It implements a simple XML-RPC client server application that demonstrates how the ARD can interface with 3rd party off-box element management systems.  Please look at these files to see how it works.&lt;br /&gt;
&lt;br /&gt;
===HTTP client/server example===&lt;br /&gt;
&lt;br /&gt;
This example is located in the &amp;quot;bin&amp;quot; directory and consists of 2 files &amp;quot;httpclientexample.py&amp;quot; and &amp;quot;httpserverexample.py&amp;quot;.  It implements a simple http server application that demonstrates how the ARD can interface with 3rd party off-box element management systems.  The intention behind this example is to show a client-server application communicating via http not a human browseable web site (the main ARD GUI application demonstrates how a web-based EMS can be constructed).&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	<entry>
		<id>https://help.openclovis.com/index.php/Doc:Sdk_4.1/awdguide/apiexamples</id>
		<title>Doc:Sdk 4.1/awdguide/apiexamples</title>
		<link rel="alternate" type="text/html" href="https://help.openclovis.com/index.php/Doc:Sdk_4.1/awdguide/apiexamples"/>
				<updated>2009-07-29T00:40:26Z</updated>
		
		<summary type="html">&lt;p&gt;Karthick: /* API Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==API Examples==&lt;br /&gt;
&lt;br /&gt;
API documentation is included in this documentation package.  Additionally, there are several examples located in the &amp;quot;bin&amp;quot; directory of the distribution.  These examples provide a basic overview of the APIs and how to use them and also show some simple client/server implementations.&lt;br /&gt;
&lt;br /&gt;
===Basic API Use Example: apiexample.py===&lt;br /&gt;
&lt;br /&gt;
This is intended to be an interactive example (i.e. cut-and-paste the lines into a Python shell running under SAFplus Platform).  It presents an overview of the highest layer of APIs and shows how cluster information can be retrieved, software can be installed, and an upgrade started.&lt;br /&gt;
&lt;br /&gt;
It can be run in any SAFplus-connected python shell.  To get to an SAFplus-connected Python shell, either use the shell embedded in the SAFplus Platform web server (browse to /shell), or run one from the command line.  To run from the command line (recommended because you get a full-featured standard python shell) do the following:&lt;br /&gt;
&lt;br /&gt;
Set up paths to get ARD libraries:&lt;br /&gt;
 $ export PYTHONPATH={ardDir}/lib:{ardDir}/bin&lt;br /&gt;
 $ export PATH={ardDir}/bin:$PATH&lt;br /&gt;
&lt;br /&gt;
Run Python. Make SURE to specify ARD's embedded Python, and not your distribution's installed version!&lt;br /&gt;
 $ {ASP_Dir}/bin/asp_run {ardDir}/bin/python2.5&lt;br /&gt;
&lt;br /&gt;
Now at the Python prompt, run this line FIRST to hook into the SAFplus Platform AMF:&lt;br /&gt;
 &amp;gt;&amp;gt; import amfpy; amfpy.initializeAmf()&lt;br /&gt;
&lt;br /&gt;
At this point you can use all ARD Python services, as shown in the following script:&lt;br /&gt;
&lt;br /&gt;
====apiexample.py====&lt;br /&gt;
&lt;br /&gt;
 # Standard Python modules&lt;br /&gt;
 import os&lt;br /&gt;
 import time&lt;br /&gt;
&lt;br /&gt;
 # ARD Python API example code, including deployment and upgrade:&lt;br /&gt;
 import upgrade; import clusterinfo; import aspApp; import aspAmf; import appdeploy&lt;br /&gt;
&lt;br /&gt;
 # Hook into the various services&lt;br /&gt;
 ci = clusterinfo.ci     # The clusterinfo.ci objects reflect the entire state of the cluster&lt;br /&gt;
 amf = aspAmf.Session()  # The aspAmf.Session class lets you modify the cluster state&lt;br /&gt;
&lt;br /&gt;
 # Example of getting the node names&lt;br /&gt;
 print [x.name for x in ci.nodeList]&lt;br /&gt;
&lt;br /&gt;
 # Get the name of the node in slot 1&lt;br /&gt;
 print ci.nodes[1].name&lt;br /&gt;
&lt;br /&gt;
 # Example of getting the sg started/stopped status&lt;br /&gt;
 print &amp;quot;Running Service Groups:&amp;quot;&lt;br /&gt;
 for x in clusterinfo.ci.sgList:&lt;br /&gt;
   if x.isRunning():&lt;br /&gt;
     print x.name&lt;br /&gt;
&lt;br /&gt;
 # Example of getting SU status and of traversing the entity hierarchy&lt;br /&gt;
 print &amp;quot;Active Service Units:&amp;quot;&lt;br /&gt;
 for x in clusterinfo.ci.suList:&lt;br /&gt;
   if x.isActive():&lt;br /&gt;
     print &amp;quot;%s is active for service group %s and is running on node %s (slot: %d)&amp;quot; % (x.name,x.sg.name,x.node.name,x.node.slot)&lt;br /&gt;
&lt;br /&gt;
 # Example of stopping and restarting an entity&lt;br /&gt;
 su = ci.suList[0]&lt;br /&gt;
 print &amp;quot;Stopping %s&amp;quot; % su.name&lt;br /&gt;
 amf.Shutdown(su)&lt;br /&gt;
 # Now we must reload the clusterinfo to reflect changes.&lt;br /&gt;
 ci.load()&lt;br /&gt;
 su = ci.entities[su.name]  # and reload our temporary.  Its best to access your entities by name in case the list order changes&lt;br /&gt;
 if su.isRunning():&lt;br /&gt;
   print &amp;quot;SU %s is still running&amp;quot; % su.name&lt;br /&gt;
 else:&lt;br /&gt;
   print &amp;quot;SU %s is stopped&amp;quot; % su.name&lt;br /&gt;
 amf.Startup(su)&lt;br /&gt;
 ci.load()&lt;br /&gt;
 su = ci.entities[su.name]  # its best to access your entities by name in case the list order changes&lt;br /&gt;
 if su.isRunning():&lt;br /&gt;
   print &amp;quot;SU %s is running&amp;quot; % su.name&lt;br /&gt;
 else:&lt;br /&gt;
   print &amp;quot;SU %s is still stopped&amp;quot; % su.name&lt;br /&gt;
&lt;br /&gt;
 # Initialize the Application bundle DB &amp;amp; pass the bundle repository directory.  Note that you should only create 1 of these per bundle repository directory  or you will have 2 entities managing the same data.&lt;br /&gt;
 appDb = aspApp.AppDb(os.getenv(&amp;quot;ASP_DIR&amp;quot;,&amp;quot;/tmp&amp;quot;) + &amp;quot;/apps&amp;quot;)&lt;br /&gt;
 ci.setAppDb(appDb)  # Hook them up (so clusterinfo knows about application versions)&lt;br /&gt;
 myNode = &amp;quot;ctrlI0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 # Set additional data that SAFplus Platform may not know into the node&lt;br /&gt;
 # This info is necessary to deploy software&lt;br /&gt;
 # (it also can be entered via the GUI, or via etc/clustercfg.xml file)&lt;br /&gt;
 # You need to change these values to correctly reflect your setup&lt;br /&gt;
 if ci.entities[myNode].localUser == 'unknown':&lt;br /&gt;
   ci.entities[myNode].setIntraclusterAccess(&amp;quot;192.168.66.130&amp;quot;,&amp;quot;root&amp;quot;,&amp;quot;clovis&amp;quot;,&amp;quot;/root/ocmsdemo7&amp;quot;)&lt;br /&gt;
 # The above example sets 1 node.  For the application deployment example&lt;br /&gt;
 # below to work, you must set all of the nodes to the correct values.&lt;br /&gt;
&lt;br /&gt;
 # Add 2 bundle files into the system.  Of course you must modify the path to&lt;br /&gt;
 # point to valid bundle files.&lt;br /&gt;
 appDb.NewAppFile(&amp;quot;/code/vipapp1.4.0.0.tgz&amp;quot;)&lt;br /&gt;
 appDb.NewAppFile(&amp;quot;/code/vipapp1.4.0.1.tgz&amp;quot;)&lt;br /&gt;
 # Note that if you want AppDb to automatically find them again, &lt;br /&gt;
 # you must copy them into the repository (the directory you specified&lt;br /&gt;
 # when creating &amp;quot;appDb&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
 # Show all bundles and versions&lt;br /&gt;
 print [(x.name,x.version) for x in appDb.AppList()]&lt;br /&gt;
&lt;br /&gt;
 # Find all &amp;quot;live&amp;quot; nodes&lt;br /&gt;
 # Of course, you can't deploy to nodes that aren't powered up!&lt;br /&gt;
 liveNodes = filter(lambda x: x.isRunning(),ci.nodeList)&lt;br /&gt;
 print [x.name for x in liveNodes]&lt;br /&gt;
&lt;br /&gt;
 # Get an application&lt;br /&gt;
 appFile = appDb.apps['virtualIp'].version['1.4.0.0']&lt;br /&gt;
 print &amp;quot;Name: &amp;quot;, appFile.name, &amp;quot;Located At: &amp;quot;, appFile.dir, &amp;quot;Version: &amp;quot;, appFile.version  &lt;br /&gt;
&lt;br /&gt;
Deploy the application:&lt;br /&gt;
&lt;br /&gt;
 # Tweak the configuration for just this deployment&lt;br /&gt;
 # If I didn't copy the configuration, I would be modifying it in RAM&lt;br /&gt;
 # which would affect other deployments I do within this Python session.&lt;br /&gt;
 import copy&lt;br /&gt;
 newCfg = copy.deepcopy(appFile.cfg)&lt;br /&gt;
 # For example, set failback parameter to True:&lt;br /&gt;
 newCfg.virtualIp.modifiers.failBack = True&lt;br /&gt;
&lt;br /&gt;
 # Really Deploy&lt;br /&gt;
 import appdeploy&lt;br /&gt;
 (sgList,(errors,notes)) = appdeploy.deploy(appFile.dir,newCfg,liveNodes,abortIfCantAccess=True,copy=True,deploy=True)&lt;br /&gt;
 # Did you get a pexpect exception?  You probably forgot to specify the node &lt;br /&gt;
 # intracluster access data as shown above.  Or you may have specified&lt;br /&gt;
 # incorrect information.&lt;br /&gt;
 myNewSg  = sgList[0]&lt;br /&gt;
 mySgName = myNewSg.name &lt;br /&gt;
 print &amp;quot;Deployed application and created SG %s&amp;quot; % mySgName&lt;br /&gt;
 # Reload the AMF information model&lt;br /&gt;
 ci.load()&lt;br /&gt;
&lt;br /&gt;
 # Reaccess via ci global to get refreshed data.&lt;br /&gt;
 mySg = ci.entities[mySgName]&lt;br /&gt;
 # Let's start it up&lt;br /&gt;
 amf.Startup(mySg)&lt;br /&gt;
 # Give it time to come up&lt;br /&gt;
 # I reaccess through ci each time to get refreshed data.&lt;br /&gt;
 while not ci.entities[mySgName].isRunning():&lt;br /&gt;
   time.sleep(5)&lt;br /&gt;
   ci.refresh()&lt;br /&gt;
 print &amp;quot;It is running&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Let's do an upgrade!&lt;br /&gt;
&lt;br /&gt;
 # Start the upgrade manager...&lt;br /&gt;
 umgr = upgrade.UpgradeMgr()&lt;br /&gt;
 umgr.add(mySg)  # Add my Service Group to it.&lt;br /&gt;
 upSg = umgr.entities[mySgName]  # Get my sg's upgrade entity &lt;br /&gt;
 upSg.upMethod = upgrade.RollingUpgrade&lt;br /&gt;
 print mySg.appVer.version&lt;br /&gt;
&lt;br /&gt;
 # Start the upgrade...&lt;br /&gt;
 upSg.Upgrade(appDb.apps['virtualIp'].version['1.4.0.1'])&lt;br /&gt;
 ci.load() # Reload the database.&lt;br /&gt;
 mySg = ci.entities[mySg.name]  # Get the new SG object&lt;br /&gt;
 print mySg.appVer.version&lt;br /&gt;
&lt;br /&gt;
===XML client/server example===&lt;br /&gt;
&lt;br /&gt;
This example is located in the &amp;quot;bin&amp;quot; directory and consists of 2 files &amp;quot;xmlclientexample.py&amp;quot; and &amp;quot;xmlserverexample.py&amp;quot;.  It implements a simple XML-RPC client server application that demonstrates how the ARD can interface with 3rd party off-box element management systems.  Please look at these files to see how it works.&lt;br /&gt;
&lt;br /&gt;
===HTTP client/server example===&lt;br /&gt;
&lt;br /&gt;
This example is located in the &amp;quot;bin&amp;quot; directory and consists of 2 files &amp;quot;httpclientexample.py&amp;quot; and &amp;quot;httpserverexample.py&amp;quot;.  It implements a simple http server application that demonstrates how the ARD can interface with 3rd party off-box element management systems.  The intention behind this example is to show a client-server application communicating via http not a human browseable web site (the main ARD GUI application demonstrates how a web-based EMS can be constructed).&lt;/div&gt;</summary>
		<author><name>Karthick</name></author>	</entry>

	</feed>