ibm-information-center/dist/eclipse/plugins/i5OS.ic.apis_5.4.0.1/clrgexit.htm

4060 lines
136 KiB
HTML
Raw Permalink Normal View History

2024-04-02 14:02:31 +00:00
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Copyright" content="Copyright (c) 2006 by IBM Corporation">
<title>Cluster Resource Group Exit Program</title>
<!-- Begin Header Records ========================================== -->
<!-- All rights reserved. Licensed Materials Property of IBM -->
<!-- US Government Users Restricted Rights -->
<!-- Use, duplication or disclosure restricted by -->
<!-- GSA ADP Schedule Contract with IBM Corp. -->
<!-- Change History: -->
<!-- YYMMDD USERID Change description -->
<!-- CLUST4A SCRIPT A converted by B2H R4.1 (346) (CMS) by NLJONES at -->
<!-- RCHVMX on 25 Feb 1999 at 09:42:31 -->
<!-- End Header Records -->
<!-- -->
<!-- -->
<!-- -->
<!-- Begin Developer Note ========================================== -->
<!-- NOTE: If you are adding, changing, or removing ANY requirements -->
<!-- for this API chance are good that the GUI code need to change -->
<!-- also. The Cluster GUI code is built on top of this API and it -->
<!-- does a certain amount of explicit and implicit validation -->
<!-- checking of user data prior to the API call being made. Please -->
<!-- have the Cluster GUI developer check the -->
<!--/as400/v5r4m0.guix/cur/cmvc/java.pgm/ugcl.guix/com/ibm/as400/opnav/ugcl/ClGuiActionsManager.java/ClGuiActionsManager.java -->
<!-- part to determine if any Cluster GUI code changes are needed. -->
<!-- End Developer Note -->
<link rel="stylesheet" type="text/css" href="../rzahg/ic.css">
</head>
<body>
<!--Java sync-link -->
<script type="text/javascript" language="Javascript" src=1"../rzahg/synch.js">
</script>
<a name="Top_Of_Page"></a>
<h2>Cluster Resource Group Exit Program</h2>
<div class="box" style="width: 70%;">
<br>
&nbsp;&nbsp;Required Parameter Group:<br>
<!-- iddvc RMBR -->
<br>
<table width="100%">
<tr>
<td align="center" valign="top" width="10%">1</td>
<td align="left" valign="top" width="50%">Success indicator</td>
<td align="left" valign="top" width="20%">Output</td>
<td align="left" valign="top" width="20%">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">2</td>
<td align="left" valign="top">Action code</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">3</td>
<td align="left" valign="top">Exit program data</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(256)</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="left" valign="top">Information given to user</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(*)</td>
</tr>
<tr>
<td align="center" valign="top">5</td>
<td align="left" valign="top">Format name</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(8)</td>
</tr>
</table>
<br>
&nbsp;&nbsp;Include: QSYSINC/QCSTCRG3<br>
<!-- iddvc RMBR -->
<br>
</div>
<p>For each cluster resource group that has an exit program specified, the exit
program is called when various <a href="clust1.htm">Cluster Resource Services
APIs</a> are used or when various cluster events occur. The exit program is
called on each active node in the cluster resource group's recovery domain and
is passed an <strong>Action Code</strong> that tells the exit program what
function to perform.</p>
<p>An active node in the cluster resource group's recovery domain means that
cluster resource services and the job for the particular cluster resource group
are running on the node.</p>
<p>The exit program is required for data, application <img src="delta.gif" alt="Start of change">and peer <img src="deltaend.gif" alt="End of change">cluster resource groups
and is responsible for providing and managing the environment necessary for the
resource's resilience.</p>
<p>The exit program is optional for device cluster resource groups because the
system manages resilient devices. An exit program may be specified for a device
cluster resource group if a user has additional functions to perform during
various APIs or cluster events.</p>
<p>The exit program is called from a separate job which is started with the
user profile specified on the <a href="clrgcrtcrg.htm">Create Cluster Resource
Group</a> (QcstCreateClusterResourceGroup) API. For most action codes, Cluster
Resource Services waits for the exit program to finish before continuing. A
time out is not used. If the exit program goes into a long wait such as waiting
for a response to a message sent to an operator, no other work will be started
for the affected cluster resource group. In the case of a long wait during
failover processing for a node failure, all Cluster Resource Services jobs are
affected and no other cluster work will be started. Care should be exercised in
the exit program when the possibility of a long wait exists.</p>
<p>In general if the exit program is unsuccessful or ends abnormally, the exit
program will be called a second time with an action code of Undo. This allows
any unfinished activity to be backed out and the original state of the cluster
resource group and the resilient resource to be restored. There are some
exceptions to this general statement about Undo. Some APIs continue even if the
exit program is not successful and do not make a second call with an Undo
action code. Also, an application cluster resource group exit program is not
called with Undo if it fails while processing the Start action code for a
Switchover or Failover.</p>
<p>More information on action codes, functions an exit program should perform,
and what causes an exit program to be called is presented after the exit
program parameters are described.</p>
<p>The exit program is restricted to the Cluster Resource Services APIs or
commands it can use. Only the following are allowed:</p>
<ul>
<li><a href="cldistinfo.htm">Distribute Information</a>
(QcstDistributeInformation) API</li>
<li><a href="clcntlstci.htm">List Cluster Information</a> (QcstListClusterInfo)
API</li>
<li><a href="clrglstcrgi.htm">List Cluster Resource Group Information</a>
(QcstListClusterResourceGroupIn) API</li>
<li><a href="clrglstcrg.htm">List Cluster Resource Groups</a>
(QcstListClusterResourceGroups) API</li>
<li><a href="clcntlstddi.htm">List Device Domain Information</a>
(QcstListDeviceDomainInfo) API</li>
<li><a href="clcntrtvci.htm">Retrieve Cluster Information</a>
(QcstRetrieveClusterInfo) API</li>
<li><a href="clcntrtcrs.htm">Retrieve Cluster Resource Services Information</a>
(QcstRetrieveCRSInfo) API</li>
<li><a href="../cl/dspcluinf.htm">DSPCLUINF</a> Command</li>
<li><a href="../cl/dspcrginf.htm">DSPCRGINF</a> Command</li>
</ul>
<p>Also, the exit program must follow these guidelines to run properly in the
job Cluster Resource Services starts for it and to handle error conditions
correctly.</p>
<ul>
<li>The exit program cannot be in an <strong>independent</strong> auxiliary
storage pool.</li>
<li>It must run in a named activation group or the caller's activation group
(*CALLER), when the cluster resource group exit program is an ILE program.</li>
<li>It must have a cancel handler to deal with situations where the job is
cancelled. In particular, an application cluster resource group exit program
will have its job cancelled as part of the <a href="clrginitso.htm">Initiate
Switchover</a> (QcstInitiateSwitchOver) API.</li>
<li>It should have an exception handler to deal with unexpected exceptions and
perform as much cleanup as possible at that point while it can still
interrogate program state information.</li>
<li>It may use threads but the job description in the user profile for the job
must specify that threads are allowed.</li>
<li> <img src="delta.gif" alt="Start of change">The user profile that the cluster
resource group exit program runs under must not have an IASP associated with the user
profile job description. <img src="deltaend.gif" alt="End of change"></li>
</ul>
<p><strong>Note:</strong> See <a href="clust1a3.htm">Cluster Resource Services
Job Structure</a> for additional information about jobs used to call exit
programs.</p>
<p><img src="delta.gif" alt="Start of change"><a href="../rzaig/rzaigplanmiddlewarebps.htm">
High Availability Business Partners (HABPs)</a>
<img src="deltaend.gif" alt="End of change">
provide software products that
replicate data to other nodes in a cluster by using data cluster resource
groups. Application cluster resource groups may have dependencies on these data
cluster resource groups. An application cluster
resource group exit program can be used to coordinate activities with data cluster
resource group exit programs that are provided by an HABP.</p>
<p>Sample source code that can be used as the basis for writing an exit program
is shipped in the QUSRTOOL library. See the TCSTAPPEXT and TCSTDTAARA members
in the QATTSYSC file for an example written in ILE C.</p>
<br>
<!-- Please NOTE: DO NOT DELETE THIS SECTION if this API has no authorities and locks. -->
<!-- Instead, use the commented out coding below to indicate NONE. -->
<h3>Authorities and Locks</h3>
<!-- Use this if there are no authorities and locks. -->
<p>None.</p>
<br>
<h3>Required Parameter Group</h3>
<dl>
<dt><strong>Success indicator</strong></dt>
<dd>OUTPUT; BINARY(4)
<p>Indicates to Cluster Resource Services the results of the cluster resource
group exit program. The exit program must set this parameter before it ends. If
the job running the exit program is cancelled before the exit program ends, the
exit program cancel handler should set this parameter. Possible values of this
parameter</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">Successful.</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">Unsuccessful, do not attempt restart.</td>
</tr>
<tr>
<td align="left" valign="top"><em>2</em></td>
<td align="left" valign="top">Unsuccessful, attempt restart (applies only to an
application cluster resource group).</td>
</tr>
</table>
<p>Some APIs ignore this field. In other words, regardless of what value is set
by the exit program these functions continue to completion and do not backout
partial results or call the exit program a second time with an Undo action
code. Likewise, the exit program should make every attempt to complete
successfully for these APIs. This field is ignored by the following:</p>
<ul>
<li><a href="clcntchgcne.htm">Change Cluster Node Entry</a>
(QcstChangeClusterNodeEntry) API</li>
<li><a href="../cl/chgclunode.htm">Change Cluster Node Entry</a> (CHGCLUNODE)
Command</li>
<li><a href="clcntdltc.htm">Delete Cluster</a> (QcstDeleteCluster) API</li>
<li><a href="../cl/dltclu.htm">Delete Cluster</a> (DLTCLU) Command</li>
<li><a href="clrgdltcrg.htm">Delete Cluster Resource Group</a>
(QcstDeleteClusterResourceGroup) API for the Delete action code</li>
<li><a href="clrgdltcrg.htm">Delete Cluster Resource Group From Cluster
command</a> for the Delete action code</li>
<li><a href="../cl/dltcrg.htm">Delete Cluster Resource Group</a> (DLTCRG)
command.</li>
<li><a href="clcntendcn.htm">End Cluster Node</a> (QcstEndClusterNode) API</li>
<li><a href="clcntrmvcne.htm">Remove Cluster Node Entry</a>
(QcstRemoveClusterNodeEntry) API</li>
<li><a href="../cl/endclunod.htm">End Cluster Node</a> (ENDCLUNOD) command</li>
<li><a href="../cl/rmvclunode.htm">Remove Cluster Node Entry</a> (RMVCLUNODE)
command</li>
<li>Failover Cancelled action code</li>
</ul>
<p>An informational, alert message, CPIBB10, will be sent if the exit program
returns anything other than Successful, has an unhandled exception, or the job
running the exit program is cancelled.-</p>
<p>See <a href="#HDRPGMEND">When the Exit Program Ends</a> for additional
information on the Success indicator.</p>
</dd>
<dt><strong>Action code</strong></dt>
<dd>INPUT; BINARY(4)
<p>Identifies the cluster API or event that is being processed and, therefore,
the action the exit program should perform. The action codes listed below apply
to all cluster resource group types unless otherwise specified.
See also action code dependent data field in the <a href="#HDRGGGDDE">Field Descriptions </a> below. This further defines the action code.</p>
<p>Possible action codes:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top" nowrap><em>1 - Initialize</em></td>
<td align="left" valign="top">A cluster resource group object is being
created.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>2 - Start</em></td>
<td align="left" valign="top">Establish resilience for a cluster resource
group. In addition, start the application for an application cluster resource
group.
<p>The exit program job for an application cluster resource group remains
active on the primary node. Thus when a <a href="clust3a1TOC.htm">cluster
resource group API</a> is called while an application is running, a second job
will be submitted on the primary node to run the exit program to handle the API
action code.</p>
<p><img src="delta.gif" alt="Start of change">For a peer cluster resource
group all peer nodes will be started and the exit program will be called.<img src="deltaend.gif" alt="End of change">
</p>
</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>3 - Restart</em></td>
<td align="left" valign="top">Restarts an application. Applies <strong>
only</strong> to an application cluster resource group which has been
configured to allow restart.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>4 - End</em></td>
<td align="left" valign="top">Disable resilience of a cluster resource group on
all nodes in the recovery domain.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>5 - Verification phase</em></td>
<td align="left" valign="top">Provides a chance for the cluster resource group
exit program to verify it really wants to perform the requested function before
actual doing the specified function. This is similar to a pre-exit
program.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>7 - Delete</em></td>
<td align="left" valign="top">The cluster resource group object is being
deleted.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>8 - Rejoin</em></td>
<td align="left" valign="top">An inactive node is being activated or
communication with a partitioned node is re-established. If cluster resource
services is not running on any node in the cluster, the first node which is
started will cause the exit program to be called with an action code of Rejoin.
In this case, there will be no other active nodes in the cluster.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>9 - Failover</em></td>
<td align="left" valign="top">A node failure has occurred.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>10 - Switchover</em></td>
<td align="left" valign="top">Either the <a href="clrginitso.htm">Initiate
Switchover (QcstInitiateSwitchOver) API</a> or the <a href=
"../cl/chgcrgpri.htm">Change Cluster Resource Group Primary (CHGCRGPRI)
command</a> is being processed. The role of primary is being assigned to the
node that has the current role of first backup. <img src="delta.gif" alt="Start of change">Does not apply to peer cluster resource groups.<img src="deltaend.gif" alt="End of change"></td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>11 - Add Node</em></td>
<td align="left" valign="top">A node is being added to the recovery
domain.<img src="delta.gif" alt="Start of change">If the cluster resource group is
active and a peer node is being added to a peer cluster resource group, the node will
be an active access point.<img src="deltaend.gif" alt="End of change"></td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>12 - Remove Node</em></td>
<td align="left" valign="top">A node is being removed from the recovery domain.
When an active node is being removed with either the <a href="clcntrmvcne.htm">Remove
Cluster Node Entry (QcstRemoveClusterNodeEntry) API</a> or the <a href=
"../cl/rmvclunode.htm">Remove Cluster Node Entry (RMVCLUNODE) command</a>, only the node being
removed sees this action code. Other nodes in the recovery domain will see the Failover
action code.
When an inactive node is being removed with either the <a href="clcntrmvcne.htm">Remove
Cluster Node Entry (QcstRemoveClusterNodeEntry) API</a> or the <a href=
"../cl/rmvclunode.htm">Remove Cluster Node Entry (RMVCLUNODE) command</a>, all nodes see this action code.
</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>13 - Change</em></td>
<td align="left" valign="top">The nodes listed in the recovery domain have
changed their role.<img src="delta.gif" alt="Start of change">For a peer cluster
resource group all the recovery domain nodes are provided even if only some of them
have their role changed.<img src="deltaend.gif" alt="End of change"></td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>14 - Delete Command</em></td>
<td align="left" valign="top">The cluster resource group is being deleted on
the local node only.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>15 - Undo</em></td>
<td align="left" valign="top">Backout the prior request. The prior request is
in the <strong>Prior Action Code</strong> field.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>16 - End Node</em></td>
<td align="left" valign="top">A cluster node is ending. Only the node being
ended will see this action code. Other nodes in the recovery domain will see
the Failover action code.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>17 - Add Device Entry</em></td>
<td align="left" valign="top">A device is being added to a device cluster
resource group. Applies <strong>only</strong> to a device cluster resource
group.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>18 - Remove Device Entry</em></td>
<td align="left" valign="top">A device is being removed from a device cluster
resource group. Applies <strong>only</strong> to a device cluster resource
group.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>19 - Change Device Entry</em></td>
<td align="left" valign="top">Information about a device in a device cluster
resource group is being changed. Applies <strong>only</strong> to a device
cluster resource group.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>20 - Change Node Status</em></td>
<td align="left" valign="top">The status of a node is being changed from
partitioned to failed.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>21 - Failover Cancelled</em></td>
<td align="left" valign="top">A node failure occurred, but the failover was
cancelled through the use of the failover message queue.</td>
</tr>
</table>
<br>
</dd>
<dt><strong>Exit program data</strong></dt>
<dd>INPUT; CHAR(256)
<p>Because this parameter is passed between nodes in the cluster, it can
contain anything <strong>except</strong> pointers. For example, it can be used
to provide state information. The owner of the cluster resource group knows the
layout of the information contained in this parameter.</p>
<p>This data comes into existence when the cluster resource group object is
created with the <a href="clrgcrtcrg.htm">Create Cluster Resource Group
(QcstCreateClusterResourceGroup) API</a> or the <a href="../cl/crtcrg.htm">
Create Cluster Resource Group (CRTCRG) command</a>. Change this data in the
following ways:</p>
<ul>
<li><a href="clrgchgcrg.htm">Change Cluster Resource Group API</a> or <a href=
"../cl/chgcrg.htm">Change Cluster Resource Group (CHGCRG) command</a></li>
<li><a href="clrgendcrg.htm">End Cluster Resource Group API</a> or <a href=
"../cl/endcrg.htm">End Cluster Resource Group (ENDCRG) command</a></li>
<li><a href="clrgstcrg.htm">Start Cluster Resource Group API</a> or <a href=
"../cl/strcrg.htm">Start Cluster Resource Group (STRCRG) command</a> </li>
<li><a href="clrginitso.htm">Initiate Switchover API</a> or <a href=
"../cl/chgcrgpri.htm">Change Cluster Resource Group Primary (CHGCRGPRI)
command</a></li>
</ul>
<p>See the description of each API in <a href="clust3a1TOC.htm">Cluster
Resource Group APIs</a>.</p>
</dd>
<dt><strong>Information given to user</strong></dt>
<dd>INPUT; CHAR(*)
<p>Detailed information for this exit program call. See the <a href=
"#HDREXTFMT">EXTP0100 Format</a> or <a href="#HDREXTFMT2">EXTP0200 Format</a> for more information.</p>
</dd>
<dt><strong>Format name</strong></dt>
<dd>INPUT; CHAR(8)
<p>The format of the information provided in the Information Given To User
parameter. If the exit program
is called with a second action code such as Undo, the format contains the same
data as was passed the original action code. The format name supported is:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>EXTP0100</em></td>
<td align="left" valign="top">This format is used for actions. <img src="delta.gif" alt="Start of change">This value is allowed
for primary-backup model cluster resource group and peer model cluster
resource group.<img src="deltaend.gif" alt="End of change"></td>
</tr>
<tr>
<td align="left" valign="top"><em>EXTP0200</em></td>
<td align="left" valign="top">Same as EXTP0100, with additional information on
site name and data port IP addresses on each node in the recovery domain.
<img src="delta.gif" alt="Start of change">This value is allowed
for primary-backup model cluster resource group.<img src="deltaend.gif" alt="End of change">
</td>
</tr>
</table>
</dd>
</dl>
<br>
<h3><a name="HDREXTFMT">EXTP0100 Format</a></h3>
<p>This format <img src="delta.gif" alt="Start of change">contains information
for the cluster event<img src="deltaend.gif" alt="End of change">.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Length of information given to
user</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Cluster name</td>
</tr>
<tr>
<td align="center" valign="top">14</td>
<td align="center" valign="top">E</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Cluster resource group name</td>
</tr>
<tr>
<td align="center" valign="top">24</td>
<td align="center" valign="top">18</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Cluster resource group type</td>
</tr>
<tr>
<td align="center" valign="top">28</td>
<td align="center" valign="top">1C</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Cluster resource group status</td>
</tr>
<tr>
<td align="center" valign="top">32</td>
<td align="center" valign="top">20</td>
<td align="left" valign="top">CHAR(16)</td>
<td align="left" valign="top">Request handle</td>
</tr>
<tr>
<td align="center" valign="top">48</td>
<td align="center" valign="top">30</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Node role type</td>
</tr>
<tr>
<td align="center" valign="top">52</td>
<td align="center" valign="top">34</td>
<td align="left" valign="top">CHAR(8)</td>
<td align="left" valign="top">Current node id</td>
</tr>
<tr>
<td align="center" valign="top">60</td>
<td align="center" valign="top">3C</td>
<td align="left" valign="top">CHAR(8)</td>
<td align="left" valign="top">Changing node ID</td>
</tr>
<tr>
<td align="center" valign="top">68</td>
<td align="center" valign="top">44</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Changing node role</td>
</tr>
<tr>
<td align="center" valign="top">72</td>
<td align="center" valign="top">48</td>
<td align="left" valign="top">CHAR(16)</td>
<td align="left" valign="top">Takeover IP address</td>
</tr>
<tr>
<td align="center" valign="top">88</td>
<td align="center" valign="top">58</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Job name</td>
</tr>
<tr>
<td align="center" valign="top">98</td>
<td align="center" valign="top">62</td>
<td align="left" valign="top">CHAR(2)</td>
<td align="left" valign="top">Reserved</td>
</tr>
<tr>
<td align="center" valign="top">100</td>
<td align="center" valign="top">64</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Prior action code</td>
</tr>
<tr>
<td align="center" valign="top">104</td>
<td align="center" valign="top">68</td>
<td align="left" valign="top">BINARY(8)</td>
<td align="left" valign="top">Cluster resource group changes</td>
</tr>
<tr>
<td align="center" valign="top">112</td>
<td align="center" valign="top">70</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Offset to recovery domain array</td>
</tr>
<tr>
<td align="center" valign="top">116</td>
<td align="center" valign="top">74</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Number of nodes in the recovery domain</td>
</tr>
<tr>
<td align="center" valign="top">120</td>
<td align="center" valign="top">78</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Original cluster resource group status</td>
</tr>
<tr>
<td align="center" valign="top">124</td>
<td align="center" valign="top">7C</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Action code dependent data</td>
</tr>
<tr>
<td align="center" valign="top">128</td>
<td align="center" valign="top">80</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Offset to prior recovery domain array</td>
</tr>
<tr>
<td align="center" valign="top">132</td>
<td align="center" valign="top">84</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Number of nodes in the prior recovery domain
array</td>
</tr>
<tr>
<td align="center" valign="top">136</td>
<td align="center" valign="top">88</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Offset to configuration object array</td>
</tr>
<tr>
<td align="center" valign="top">140</td>
<td align="center" valign="top">8C</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Number of entries in configuration object
array</td>
</tr>
<tr>
<td align="center" valign="top">144</td>
<td align="center" valign="top">90</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Length of configuration object array entry</td>
</tr>
<tr>
<td align="center" valign="top">148</td>
<td align="center" valign="top">94</td>
<td align="left" valign="top">BINARY(8)</td>
<td align="left" valign="top">Cluster resource group attributes</td>
</tr>
<tr>
<td align="center" valign="top">156</td>
<td align="center" valign="top">9C</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Distribute information user queue name</td>
</tr>
<tr>
<td align="center" valign="top">166</td>
<td align="center" valign="top">A6</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Distribute information user queue library
name</td>
</tr>
<tr>
<td align="center" valign="top">176</td>
<td align="center" valign="top">B0</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Failover wait time</td>
</tr>
<tr>
<td align="center" valign="top">180</td>
<td align="center" valign="top">B4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Failover default action</td>
</tr>
<tr>
<td align="center" valign="top">184</td>
<td align="center" valign="top">B8</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Failover message queue name</td>
</tr>
<tr>
<td align="center" valign="top">194</td>
<td align="center" valign="top">C2</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Failover message queue library name</td>
</tr>
<tr>
<td align="center" valign="top">204</td>
<td align="center" valign="top">CC</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Cluster version</td>
</tr>
<tr>
<td align="center" valign="top">208</td>
<td align="center" valign="top">D0</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Cluster version modification level</td>
</tr>
<tr>
<td align="center" valign="top">212</td>
<td align="center" valign="top">D4</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Requesting user profile</td>
</tr>
<tr>
<td align="center" valign="top"><img src="delta.gif" alt="Start of change">222</td>
<td align="center" valign="top">DE</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Reserved<img src="deltaend.gif" alt="End of change"></td>
</tr>
<tr>
<td align="center" valign="top"><img src="delta.gif" alt="Start of change"><img src="delta.gif" alt="Start of change"> 222</td>
<td align="center" valign="top">DF</td>
<td align="left" valign="top">CHAR(1)</td>
<td align="left" valign="top">Allow active takeover IP
address<img src="deltaend.gif" alt="End of change"><img src="deltaend.gif" alt="End of change"></td>
</tr>
<tr>
<td align="center" valign="top"><img src="delta.gif" alt="Start of change">224</td>
<td align="center" valign="top">E0</td>
<td align="left" valign="top">CHAR(20)</td>
<td align="left" valign="top">Application id<img src="deltaend.gif" alt="End of change"></td>
</tr>
<tr>
<td align="center" valign="top"><img src="delta.gif" alt="Start of change">244</td>
<td align="center" valign="top">F4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Length of recovery domain array entry<img src="deltaend.gif" alt="End of change"></td>
</tr>
<tr>
<td align="center" valign="top"><img src="delta.gif" alt="Start of change">248</td>
<td align="center" valign="top">F8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Length of prior recovery domain array entry<img src="deltaend.gif" alt="End of change"></td>
</tr>
<tr>
<td align="center" valign="top"><img src="delta.gif" alt="Start of change">252</td>
<td align="center" valign="top">FC</td>
<td align="left" valign="top">CHAR(8)</td>
<td align="left" valign="top">Leader node id<img src="deltaend.gif" alt="End of change"></td>
</tr>
<tr>
<td align="center" valign="top">*</td>
<td align="center" valign="top">*</td>
<td align="left" valign="top">Array(*) of CHAR(*)</td>
<td align="left" valign="top">Recovery domain array</td>
</tr>
<tr>
<td align="left" valign="top" rowspan="3" colspan="2">These fields repeat, in
the order listed, for each node in the recovery domain.</td>
<td align="left" valign="top">CHAR(8)</td>
<td align="left" valign="top">Node ID</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Node role</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Membership status</td>
</tr>
<tr>
<td align="center" valign="top">*</td>
<td align="center" valign="top">*</td>
<td align="left" valign="top">Array(*) of CHAR(*)</td>
<td align="left" valign="top">Prior recovery domain array</td>
</tr>
<tr>
<td align="left" valign="top" rowspan="3" colspan="2">These fields repeat, in
the order listed, for each node in the recovery domain.</td>
<td align="left" valign="top">CHAR(8)</td>
<td align="left" valign="top">Node ID</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Node role</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Membership status</td>
</tr>
<tr>
<td align="center" valign="top">*</td>
<td align="center" valign="top">*</td>
<td align="left" valign="top">Array(*) of CHAR(44)</td>
<td align="left" valign="top">Configuration object array</td>
</tr>
<tr>
<td align="left" valign="top" rowspan="7" colspan="2">These fields repeat, in
the order listed, for each entry in the configuration object array.</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Configuration object name</td>
</tr>
<tr>
<td align="left" valign="top">CHAR(2)</td>
<td align="left" valign="top">Reserved</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Configuration object type</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Device type</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Configuration object online</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Device subtype</td>
</tr>
<tr>
<td align="left" valign="top">CHAR(16)</td>
<td align="left" valign="top">Server takeover IP address</td>
</tr>
</table>
<p></p>
<h3><a name="HDREXTFMT2">EXTP0200 Format</a></h3>
<p>This format <img src="delta.gif" alt="Start of change">contains information for
the cluster event with additional information on
site name and data port IP addresses on each node in the recovery domain. <img src="deltaend.gif" alt="End of change"></p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Length of information given to
user</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Cluster name</td>
</tr>
<tr>
<td align="center" valign="top">14</td>
<td align="center" valign="top">E</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Cluster resource group name</td>
</tr>
<tr>
<td align="center" valign="top">24</td>
<td align="center" valign="top">18</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Cluster resource group type</td>
</tr>
<tr>
<td align="center" valign="top">28</td>
<td align="center" valign="top">1C</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Cluster resource group status</td>
</tr>
<tr>
<td align="center" valign="top">32</td>
<td align="center" valign="top">20</td>
<td align="left" valign="top">CHAR(16)</td>
<td align="left" valign="top">Request handle</td>
</tr>
<tr>
<td align="center" valign="top">48</td>
<td align="center" valign="top">30</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Node role type</td>
</tr>
<tr>
<td align="center" valign="top">52</td>
<td align="center" valign="top">34</td>
<td align="left" valign="top">CHAR(8)</td>
<td align="left" valign="top">Current node id</td>
</tr>
<tr>
<td align="center" valign="top">60</td>
<td align="center" valign="top">3C</td>
<td align="left" valign="top">CHAR(8)</td>
<td align="left" valign="top">Changing node ID</td>
</tr>
<tr>
<td align="center" valign="top">68</td>
<td align="center" valign="top">44</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Changing node role</td>
</tr>
<tr>
<td align="center" valign="top">72</td>
<td align="center" valign="top">48</td>
<td align="left" valign="top">CHAR(16)</td>
<td align="left" valign="top">Takeover IP address</td>
</tr>
<tr>
<td align="center" valign="top">88</td>
<td align="center" valign="top">58</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Job name</td>
</tr>
<tr>
<td align="center" valign="top">98</td>
<td align="center" valign="top">62</td>
<td align="left" valign="top">CHAR(2)</td>
<td align="left" valign="top">Reserved</td>
</tr>
<tr>
<td align="center" valign="top">100</td>
<td align="center" valign="top">64</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Prior action code</td>
</tr>
<tr>
<td align="center" valign="top">104</td>
<td align="center" valign="top">68</td>
<td align="left" valign="top">BINARY(8)</td>
<td align="left" valign="top">Cluster resource group changes</td>
</tr>
<tr>
<td align="center" valign="top">112</td>
<td align="center" valign="top">70</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Offset to recovery domain array</td>
</tr>
<tr>
<td align="center" valign="top">116</td>
<td align="center" valign="top">74</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Number of nodes in the recovery domain</td>
</tr>
<tr>
<td align="center" valign="top">120</td>
<td align="center" valign="top">78</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Length of recovery domain array entry</td>
</tr>
<tr>
<td align="center" valign="top">124</td>
<td align="center" valign="top">7C</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Original cluster resource group status</td>
</tr>
<tr>
<td align="center" valign="top">128</td>
<td align="center" valign="top">80</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Action code dependent data</td>
</tr>
<tr>
<td align="center" valign="top">132</td>
<td align="center" valign="top">84</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Offset to prior recovery domain array</td>
</tr>
<tr>
<td align="center" valign="top">136</td>
<td align="center" valign="top">88</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Number of nodes in the prior recovery domain
array</td>
</tr>
<tr>
<td align="center" valign="top">140</td>
<td align="center" valign="top">8C</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Length of prior recovery domain array entry</td>
</tr>
<tr>
<td align="center" valign="top">144</td>
<td align="center" valign="top">90</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Offset to configuration object array</td>
</tr>
<tr>
<td align="center" valign="top">148</td>
<td align="center" valign="top">94</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Number of entries in configuration object
array</td>
</tr>
<tr>
<td align="center" valign="top">152</td>
<td align="center" valign="top">98</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Length of configuration object array entry</td>
</tr>
<tr>
<td align="center" valign="top">156</td>
<td align="center" valign="top">9C</td>
<td align="left" valign="top">BINARY(8)</td>
<td align="left" valign="top">Cluster resource group attributes</td>
</tr>
<tr>
<td align="center" valign="top">164</td>
<td align="center" valign="top">A4</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Distribute information user queue name</td>
</tr>
<tr>
<td align="center" valign="top">174</td>
<td align="center" valign="top">AE</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Distribute information user queue library
name</td>
</tr>
<tr>
<td align="center" valign="top">184</td>
<td align="center" valign="top">B8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Failover wait time</td>
</tr>
<tr>
<td align="center" valign="top">188</td>
<td align="center" valign="top">BC</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Failover default action</td>
</tr>
<tr>
<td align="center" valign="top">192</td>
<td align="center" valign="top">C0</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Failover message queue name</td>
</tr>
<tr>
<td align="center" valign="top">202</td>
<td align="center" valign="top">CA</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Failover message queue library name</td>
</tr>
<tr>
<td align="center" valign="top">212</td>
<td align="center" valign="top">D4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Cluster version</td>
</tr>
<tr>
<td align="center" valign="top">216</td>
<td align="center" valign="top">D8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Cluster version modification level</td>
</tr>
<tr>
<td align="center" valign="top">220</td>
<td align="center" valign="top">DC</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Requesting user profile</td>
</tr>
<tr>
<td align="center" valign="top">230</td>
<td align="center" valign="top">E6</td>
<td align="left" valign="top">CHAR</td>
<td align="left" valign="top">Reserved</td>
</tr>
<tr>
<td align="center" valign="top">231</td>
<td align="center" valign="top">E7</td>
<td align="left" valign="top">CHAR</td>
<td align="left" valign="top">Reserved</td>
</tr>
<tr>
<td align="center" valign="top">*</td>
<td align="center" valign="top">*</td>
<td align="left" valign="top">Array(*) of CHAR(*)</td>
<td align="left" valign="top">Recovery domain array</td>
</tr>
<tr>
<td align="left" valign="top" rowspan="8" colspan="2">These fields repeat, in
the order listed, for each node in the recovery domain.</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Length of entry in the recovery domain</td>
</tr>
<td align="left" valign="top">CHAR(8)</td>
<td align="left" valign="top">Node ID</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Node role</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Membership status</td>
</tr>
<tr>
<td align="left" valign="top">CHAR(8)</td>
<td align="left" valign="top">Site name</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Offset to data port IP address array</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Number of data port IP addresses</td>
</tr>
<tr>
<td align="left" valign="top">Array(*) of CHAR(16)</td>
<td align="left" valign="top">Data port IP address</td>
</tr>
<tr>
<td align="center" valign="top">*</td>
<td align="center" valign="top">*</td>
<td align="left" valign="top">Array(*) of CHAR(*)</td>
<td align="left" valign="top">Prior recovery domain array</td>
</tr>
<tr>
<td align="left" valign="top" rowspan="8" colspan="2">These fields repeat, in
the order listed, for each node in the recovery domain.</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Length of entry in the recovery domain</td>
</tr>
<tr>
<td align="left" valign="top">CHAR(8)</td>
<td align="left" valign="top">Node ID</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Node role</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Membership status</td>
</tr>
<tr>
<td align="left" valign="top">CHAR(8)</td>
<td align="left" valign="top">Site name</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Offset to data port IP address array</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Number of data port IP addresses</td>
</tr>
<tr>
<td align="left" valign="top">Array(*) of CHAR(16)</td>
<td align="left" valign="top">Data port IP address</td>
</tr>
<tr>
<td align="center" valign="top">*</td>
<td align="center" valign="top">*</td>
<td align="left" valign="top">Array(*) of CHAR(44)</td>
<td align="left" valign="top">Configuration object array</td>
</tr>
<tr>
<td align="left" valign="top" rowspan="7" colspan="2">These fields repeat, in
the order listed, for each entry in the configuration object array.</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Configuration object name</td>
</tr>
<tr>
<td align="left" valign="top">CHAR(2)</td>
<td align="left" valign="top">Reserved</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Configuration object type</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Device type</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Configuration object online</td>
</tr>
<tr>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Device subtype</td>
</tr>
<tr>
<td align="left" valign="top">CHAR(16)</td>
<td align="left" valign="top">Server takeover IP address</td>
</tr>
</table>
<br>
<br>
<h3><a name="HDRGGGDDE">Field Descriptions</a></h3>
<p><strong>Action code dependent data.</strong> For some action codes,
additional information is provided to describe the action code. This field is
used during:</p>
<ul compact>
<li>Delete action code</li>
<li>End action code</li>
<li>Failover action code</li>
<li>Failover Cancelled action code</li>
<li>Rejoin action code</li>
<li>Remove Node action code</li>
<li>Start action code</li>
<li>Undo action code</li>
<li>Verification Phase action code</li>
</ul>
<p>The possible values are:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top" nowrap><em>0 - No information</em></td>
<td align="left" valign="top">No additional information.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>1 - Merge</em></td>
<td align="left" valign="top">Provided with the Rejoin action code to indicate
cluster partitions are merging.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>2 - Join</em></td>
<td align="left" valign="top">Provided with the Rejoin action code to indicate
a node which was Inactive is joining the cluster.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>3 - Partition failure</em></td>
<td align="left" valign="top">Provided with the Failover or End action code to
indicate the cluster has become partitioned. When provided with Failover, this
is a primary partition. When provided with End, this is a secondary
partition.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>4 - Node failure</em></td>
<td align="left" valign="top">Provided with the Failover or Failover Cancelled
action code to indicate Cluster Resource Services has failed for the entire
node. This may mean the node failed such as with a power failure or that all of
Cluster Resource Services has failed such as when the QSYSWRK subsystem is
cancelled but the node is still running.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>5 - Member failure</em></td>
<td align="left" valign="top">Provided with the Failover, Failover Cancelled,
and End Node action codes to indicate a failure affecting only this cluster
resource group has been detected. While other cluster resource groups may be
affected also, Cluster Resource Services is unable to determine that. An
example of a member failure is when a single cluster resource group job is
cancelled.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>6 - End node</em></td>
<td align="left" valign="top">Provided with the Failover or Failover Cancelled
action code to indicate an active node in the cluster has been ended by either
the <a href="clcntendcn.htm">End Cluster Node (QcstEndClusterNode) API</a> or
the <a href="../cl/endclunod.htm">End Cluster Node (ENDCLUNOD)
command</a>.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>7 - Remove node</em></td>
<td align="left" valign="top">Provided with the Failover action code to
indicate an active node in the cluster has been removed by either the <a href=
"clcntrmvcne.htm">Remove Cluster Node Entry (QcstRemoveClusterNodeEntry)
API</a> or the <a href="../cl/rmvclunode.htm">Remove Cluster Node Entry
(RMVCLUNODE) command</a>.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>8 - Application failure</em></td>
<td align="left" valign="top">Provided with the Failover or Failover Cancelled
action code to indicate the application failed on the primary node and could
not be restarted there. The failure may have been due to an exception in the
application program, an Unsuccessful attempt restart success indicator but the
restart count has been reached, or an Unsuccessful do not attempt restart
success indicator.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>9 - Resource end</em></td>
<td align="left" valign="top">Provided with the End action code to indicate a
resource has ended. This occurs when an application ends normally for an active
application cluster resource group or when an active device cluster resource
group has a hardware failure of an auxiliary storage pool that prevents
failover. Normal ending of an application occurs when the success indicator is
set to Successful and the job has not been cancelled or had an unhandled
exception.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>10 - Delete cluster</em></td>
<td align="left" valign="top">Provided with the Delete action code to indicate
the cluster is being deleted with either the <a href="clcntdltc.htm">Delete
Cluster (QcstDeleteCluster) API</a> or the <a href="../cl/dltclu.htm">Delete
Cluster (DLTCLU) command</a>.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>11 - Remove recovery domain
node</em></td>
<td align="left" valign="top">Provided with the Remove Node action code to
indicate the node is being removed with either the <a href="clrgrmvnrd.htm">
Remove Node From Recovery Domain (QcstRemoveNodeFromRcvyDomain) API</a> or the
<a href="../cl/rmvcrgnode.htm">Remove Cluster Resource Group Node Entry
(RMVCRGNODE) command.</a></td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em>12 - Delete cluster resource
group</em></td>
<td align="left" valign="top">Provided with the Verification phase action code
to indicate the cluster resource group is being deleted with the Delete Cluster
Resource Group API or commands. The Delete Cluster Resource Group API and
Delete Cluster Resource Group from Cluster command can now be rejected if any
recovery domain node fails the verification phase(5) action code and will not
be called with an Undo action code.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em> 13 - Failover</em></td>
<td align="left" valign="top">Provided with the Verification phase action
code. This indicates the cluster resource group is being failed
over to a backup node.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em> 14 - Switchover</em></td>
<td align="left" valign="top">Provided with the Verification phase
action code. This indicates the cluster resource group is being failed
over to a backup node. </td>
</tr>
<tr>
<td align="left" valign="top" nowrap><em> 15 - Remove passive node</em></td>
<td align="left" valign="top">Provided with the Remove Node and the Delete
action code. This indicates a node that is not active is being removed from the cluster
and it needs to be removed from the recovery domain.
The delete action code is used if the node being removed is the only node in the recovery
domain or there are no other nodes in the recovery domain available to assume primary role
(i.e. only replicates left), the cluster resource group is being deleted from the cluster.
</td>
</tr>
</table>
<p><img src="delta.gif" alt="Start of change"><strong>Allow active takeover
IP address.</strong>
Allows a takeover IP address to already be active when it
is assigned to an application cluster resource group. This field is only
valid when configure takeover IP address field is 0x01. Possible values
are:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">The takeover IP address must not already
be active when starting the cluster resource group. </td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">The takeover IP address is allowed to be
active prior to starting the cluster resource group but only on the
primary node.</td>
</tr>
</table><img src="deltaend.gif" alt="End of change"></p>
<p><img src="delta.gif" alt="Start of change"><strong>Application id.</strong> This
is an application identifier for the Peer CRG type. It identifies the application
supplying the peer cluster. Recommend format is 'vendor-id.name' where vendor-id is an
identifier for the vendor creating the cluster resource group (i.e.QIBM.ExamplePeer). This
indicates it is supplied by IBM for the ExamplePeer application.
It is not recommended to use QIBM for vendor id name unless
the cluster resource group is supplied by IBM.
This field only applies
to peer cluster resource groups.
<img src="deltaend.gif" alt="End of change"></p>
<p><strong>Changing node ID.</strong> The node in the recovery domain being
assigned a new role or status. This field is hexadecimal zeroes if it doesn't
apply.</p>
<p>A special value of *LIST is specified for this parameter when more than one
node is changed. The special value is left-justified. When *LIST is specified,
entries in the recovery domain array and the prior recovery domain array can be
compared to determine which nodes have had changes to the node role or
membership status.</p>
<p>This field is used during:</p>
<ul>
<li>Add Node action code</li>
<li>Change Node Status action code</li>
<li>Change action code</li>
<li>End Node action code</li>
<li>Failover Cancelled action code</li>
<li>Switchover action code</li>
<li>Remove Node action code</li>
<li>Failover or Failover Cancelled action code</li>
<li>Rejoin action code</li>
</ul>
<p><strong>Changing node role.</strong> The role the node is being assigned.
This field is used by the same situations that the Changing node ID field is
used. The values are:</p>
<table cellpadding="5">
<!-- cols="10 90" -->
<tr>
<td align="left" valign="top">0</td>
<td align="left" valign="top">Primary node. Only one node can have this
value.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap>&gt;=1</td>
<td align="left" valign="top">Backup node. The backup order is designated by
increasing value. The values need not be consecutive. No two backup nodes can
have the same value. At the completion of the API, Cluster Resource Services
will sequence the backups using consecutive numbers starting with 1.</td>
</tr>
<tr>
<td align="left" valign="top">-1</td>
<td align="left" valign="top">Replicate node. All replicates have this
value.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap>-2</td>
<td align="left" valign="top">Changing node role not used by the action code
being processed.</td>
</tr>
<tr>
<td align="left" valign="top" nowrap>-3</td>
<td align="left" valign="top">*LIST. When *LIST is specified, entries the
recovery domain array and the prior recovery domain array can be compared to
determine which nodes have had changes to the node role or membership
status.</td>
</tr>
<tr>
<td align="left" valign="top"><img src="delta.gif" alt="Start of change"><br>-4</td>
<td align="left" valign="top">Peer node. All peer nodes have this
value.<img src="deltaend.gif" alt="End of change"></td>
</tr>
</table>
<p><strong>Cluster name.</strong> The name of the cluster containing the
cluster resource group.</p>
<p><strong>Cluster resource group attributes.</strong> A bit mask that
identifies various cluster resource group attributes. The 64 bits in this field
are numbered 0 thru 63 starting with the rightmost bit. If a bit is set to '1',
it indicates the cluster resource group has that attribute. The meaning of each
of the bits are:</p>
<p>This field applies only to application cluster resource groups.</p>
<table cellpadding="5">
<!-- cols="10 90" -->
<tr>
<td align="left" valign="top">0</td>
<td align="left" valign="top">The takeover IP address is configured by the
user</td>
</tr>
<tr>
<td align="left" valign="top" nowrap>1-63</td>
<td align="left" valign="top">Reserved. These will be set to '0'.</td>
</tr>
</table>
<p><strong>Cluster resource group changes.</strong> A bit mask that identifies
the fields in the cluster resource group that are being changed by the Change
Cluster Resource Group API. Set to hexadecimal zeroes for all other exit
program calls. The 64 bits in this field are numbered 0 thru 63 starting with
the rightmost bit. If a bit is set to '1', it indicates that the action
represented by the bit is occurring. Even though multiple bits may be set to
indicate several things are being changed, the exit program is called only when
the recovery domain is changed. For more information, see the <a href=
"clrgchgcrg.htm">Change Cluster Resource Group (QcstChangeClusterResourceGroup)
API</a> or <a href="../cl/chgcrg.htm">Change Cluster Resource Group (CHGCRG)
command</a>. This field is used by the Change and Undo action codes. The
meaning of each of the bits is:</p>
<table cellpadding="5">
<!-- cols="10 90" -->
<tr>
<td align="left" valign="top">0</td>
<td align="left" valign="top">Recovery domain is changing</td>
</tr>
<tr>
<td align="left" valign="top">1</td>
<td align="left" valign="top">Takeover IP address is changing</td>
</tr>
<tr>
<td align="left" valign="top">2-63</td>
<td align="left" valign="top">Reserved. These will be set to '0'.</td>
</tr>
</table>
<p><strong>Cluster resource group name.</strong> The cluster resource group
that is being processed by Cluster Resource Services.</p>
<p><strong>Cluster resource group status.</strong> Status of the cluster
resource group at the time the exit program is called. Possible values
include:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top">10 - Active</td>
<td align="left" valign="top">For Rejoin action code.</td>
</tr>
<tr>
<td align="left" valign="top">20 - Inactive</td>
<td align="left" valign="top">For action codes of Rejoin or Delete
Command.</td>
</tr>
<tr>
<td align="left" valign="top">30 - Indoubt</td>
<td align="left" valign="top">For Rejoin action code.</td>
</tr>
<tr>
<td align="left" valign="top">40 - Restored</td>
<td align="left" valign="top">For Rejoin action code.</td>
</tr>
<tr>
<td align="left" valign="top">500 and greater - Pending</td>
<td align="left" valign="top">Pending values set by various APIs.</td>
</tr>
</table>
<p>Additional information for cluster resource group status can be found in <a
href="clust3a1TOC.htm">Cluster Resource Group APIs</a>.</p>
<p><strong>Cluster resource group type.</strong> The type of cluster resource
group:</p>
<table cellpadding="5">
<!-- cols="10 90" -->
<tr>
<td align="left" valign="top">1</td>
<td align="left" valign="top">Data resilience</td>
</tr>
<tr>
<td align="left" valign="top">2</td>
<td align="left" valign="top">Application resilience</td>
</tr>
<tr>
<td align="left" valign="top">3</td>
<td align="left" valign="top">Device resilience</td>
</tr>
<tr>
<td align="left" valign="top"><img src="delta.gif" alt="Start of change">4</td>
<td align="left" valign="top">Peer resilience<img src="deltaend.gif" alt="End of change"></td>
</tr>
</table>
<p><strong>Cluster version.</strong> The exit program is being called to
process the action code at this cluster version. This value determines the
cluster's ability to use new functions supported by the cluster. It is set when
the cluster is created and can be changed by the <a href="clcntchgcv.htm">
Adjust Cluster Version (QcstAdjustClusterVersion) API</a> or <a href=
"../cl/chgcluver.htm">Change Cluster Version (CHGCLUVER) command</a>. Note:
When the Adjust Cluster Version API is executed, there is a small window of
time where the cluster and cluster resource group job may be operating at
different cluster versions.</p>
<p><strong>Cluster version modification level.</strong> The exit program is
being called to process the action code at this modification level The
modification level further identifies the version at which the nodes in the
cluster can communicate. It is updated when code changes that impact the
version are applied to the system. Note: When the Adjust Cluster Version API is
executed, there is a small window of time where the cluster and cluster
resource group job may be operating at different cluster version modification
levels.</p>
<p><strong>Configuration object array.</strong> This array identifies the
resilient devices that can be switched from one node to another. This array is
present only for a device cluster resource group.</p>
<p><strong>Configuration object name.</strong> The name of the auxiliary
storage pool device description object which can be switched between the nodes
in the recovery domain. An auxiliary storage pool device description can be
specified in only one cluster resource group.</p>
<p><strong>Configuration object online.</strong> Vary the configuration object
on or leave the configuration object varied off when a device is switched from
one node to another or when it is failed over to a backup node. Possible values
are:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top">0</td>
<td align="left" valign="top">Do not vary the configuration object on and do
not start the server takeover IP address.</td>
</tr>
<tr>
<td align="left" valign="top">1</td>
<td align="left" valign="top">Vary the configuration object on and start the
server takeover IP address.</td>
</tr>
<tr>
<td align="left" valign="top">2</td>
<td align="left" valign="top">Perform the same action for a seondary auxiliary
storage pool as is specified in the primary.</td>
</tr>
</table>
<p><strong>Configuration object type.</strong> This specifies the type of
configuration object specified with configuration object name. Possible values
are:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top">1</td>
<td align="left" valign="top">Device description</td>
</tr>
</table>
<p><strong>Current node ID.</strong> Identifies the node running the exit
program.</p>
<p><strong>Data port IP
address.</strong> The IP address associated with the recovery domain node. This
is a dotted decimal format field and is a null-terminated string. </p>
<p><strong>Device subtype.</strong> A device's subtype. This information is
only as current as the last time the cluster resource group object could be
updated. If configuration changes have been made on the node which owns the
hardware and those changes have not yet been distributed to all nodes in the
cluster, this information may be inaccurate. The data cannot be distributed if
the configuration was changed on a node which does not have cluster resource
services running. Possible values are:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top">-1</td>
<td align="left" valign="top">The subtype cannot be determined because hardware
configuration is not complete.</td>
</tr>
<tr>
<td align="left" valign="top">0</td>
<td align="left" valign="top">This device type does not have a subtype.</td>
</tr>
<tr>
<td align="left" valign="top">1</td>
<td align="left" valign="top">UDFS independent auxiliary storage pool.</td>
</tr>
<tr>
<td align="left" valign="top">2</td>
<td align="left" valign="top">Secondary independent auxiliary storage
pool.</td>
</tr>
<tr>
<td align="left" valign="top">3</td>
<td align="left" valign="top">Primary independent auxiliary storage pool.</td>
</tr>
</table>
<p><strong>Device type.</strong> This specifies the type of device. Possible
values are:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top">1</td>
<td align="left" valign="top">Auxiliary storage pool</td>
</tr>
</table>
<p><strong>Distribute information user queue library name.</strong> The name of
the library that contains the user queue to receive the distributed
information. This field will be set to hexadecimal zeros if no distribute
information user queue name was specified when the cluster resource group was
created.</p>
<p><strong>Distribute information user queue name.</strong> The name of the
user queue to receive distributed information from the Distribute Information
API. This field will be set to hexadecimal zeros if no distribute information
user queue name was specified when the cluster resource group was created.</p>
<p><strong>Failover default action.</strong> Should a response to the failover
message queue not be received in the failover wait time limit, then this field
tells clustering what it should do pertaining to the failover request. This
field applies to all <img src="delta.gif" alt="Start of change">primary-backup
model<img src="deltaend.gif" alt="End of change"> cluster resource groups.
</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top">0</td>
<td align="left" valign="top">Proceed with failover.</td>
</tr>
<tr>
<td align="left" valign="top">1</td>
<td align="left" valign="top">Do NOT attempt failover.</td>
</tr>
</table>
<p><strong>Failover message queue library name.</strong> The name of the
library that contains the user queue to receive failover messages. This field
will be set to hexadecimal zeros if no failover response user queue name was
specified. This field applies to all
<img src="delta.gif" alt="Start of change">primary-backup
model<img src="deltaend.gif" alt="End of change"> cluster resource groups.</p>
<p><strong>Failover message queue name.</strong> The name of the message queue
to receive messages dealing with failover. This field will be set to
hexadecimal zeros if no failover response user queue name was specified. This
field applies to all <img src="delta.gif" alt="Start of change">primary-backup
model<img src="deltaend.gif" alt="End of change"> cluster resource groups.</p>
<p><strong>Failover wait time.</strong> Number of minutes to wait for a reply
to the failover message that was enqueued on the failover message queue. This
field applies to all <img src="delta.gif" alt="Start of change">primary-backup
model<img src="deltaend.gif" alt="End of change"> cluster resource groups.</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top">-1</td>
<td align="left" valign="top">Wait forever until a response is given to the
failover inquiry message.</td>
</tr>
<tr>
<td align="left" valign="top">0</td>
<td align="left" valign="top">Failover proceeds without user intervention. Acts
the same as V5R1M0 and prior.</td>
</tr>
<tr>
<td align="left" valign="top">&gt;=1</td>
<td align="left" valign="top">Number of minutes to wait for a response to the
failover inquiry message. If no response is received in the specified number of
minutes, the failover default action field will be looked at to decide how to
proceed.</td>
</tr>
</table>
<p><strong>Job name.</strong> Name of the job associated with an application
cluster resource group exit program. This field is used only by application
cluster resource groups.</p>
<p><img src="delta.gif" alt="Start of change"><strong>Leader node id.</strong> This field
identifies the name of a recovery domain node that is actively participating in the current
protocol for the given cluster resource group. A value of hexadecimal zero means the
exit program cannot use this field. This field only applies to a peer cluster resource group.
<p>The leader node id is available for these action codes:</p>
<ul>
<li>Start</li>
<li>End</li>
<li>Remove Node (only if removing a node from the recovery domain)</li>
<li>Change</li>
<li>Delete (only if deleting the cluster resource group)</li>
</ul>
<img src="deltaend.gif" alt="End of change"></p>
<p><strong>Length of configuration object array entry.</strong> This specifies
the length of an entry in the configuration object array. This field applies
only to device cluster resource groups.</p>
<p><strong>Length of entry in the recovery domain.</strong> The length of an entry in the recovery domain array. This field is used if each entry may have a different length.</p>
<p><strong>Length of prior
recovery domain array entry.</strong> The length of an entry in the prior
recovery domain array. <img src="delta.gif" alt="Start of change">For
EXTP0100 format this length should be used to navigate to the next prior recovery
domain array entry.<img src="deltaend.gif" alt="End of change"></p>
<p><strong>Length of recovery domain array entry.</strong> The length of an
entry in the recovery domain array. <img src="delta.gif" alt="Start of change">For
EXTP0100 format this length should be used to navigate to the next recovery
domain array entry.<img src="deltaend.gif" alt="End of change"></p>
<p><strong>Length of information given to user.</strong> The length of the data
passed in the format.</p>
<p><strong>Membership status.</strong> The cluster resource group membership
status for the current role of a node:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top">0</td>
<td align="left" valign="top">Active. Cluster Resource Services for this
cluster resource group is active on the node.</td>
</tr>
<tr>
<td align="left" valign="top">1</td>
<td align="left" valign="top">Inactive. Cluster Resource Services for this
cluster resource group is not active on the node. The node may have failed, the
node may have been ended, the QSYSWRK subsystem on that node which runs the
Cluster Resource Services jobs may have been ended, or the cluster resource
services job on that node may not be running.</td>
</tr>
<tr>
<td align="left" valign="top">2</td>
<td align="left" valign="top">Partition. The node has become partitioned and
Cluster Resource Services cannot determine whether the node is active or
inactive.</td>
</tr>
<tr>
<td align="left" valign="top">3</td>
<td align="left" valign="top">Ineligible. Cluster Resource Services for this
cluster resource group is active on the node but not eligible to become the
cluster resource group primary node.</td>
</tr>
</table>
<p><strong>Node ID.</strong> A unique string of characters that identifies a
node in the recovery domain.</p>
<p><strong>Node role.</strong> The role a node is to be assigned at the
successful completion of the action code being processed.
<img src="delta.gif" alt="Start of change">For primary-backup model
cluster resource groups node can have one
of three roles: primary, backup, or replicate. For peer model cluster
resource groups a node can have one
of two roles: peer or replicate. Any number of nodes can be designated
as the peer or replicate.<img src="deltaend.gif" alt="End of change"></p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top">0</td>
<td align="left" valign="top">Primary node. Only one node can have this
value. <img src="delta.gif" alt="Start of change">The primary node
can become the active access point for the cluster
resource.<img src="deltaend.gif" alt="End of change"></td>
</tr>
<tr>
<td align="left" valign="top">&gt;=1</td>
<td align="left" valign="top">Backup node. The backup order is designated by
increasing value. The values need not be consecutive. No two backup nodes can
have the same value. At the completion of the API, Cluster Resource Services
will sequence the backups using consecutive numbers starting with 1.
<img src="delta.gif" alt="Start of change">Backup
nodes are available to be become active access points for the cluster resource
after the primary node.<img src="deltaend.gif" alt="End of change"></td>
</tr>
<tr>
<td align="left" valign="top">-1</td>
<td align="left" valign="top">Replicate node. All replicates have this
value. <img src="delta.gif" alt="Start of change">Replicate nodes are not
ordered and cannot become an access point
unless the role is changed to a value appropriate for the cluster
resource group type.</td>
</tr>
<tr>
<td align="left" valign="top">-4</td>
<td align="left" valign="top">Peer node. All peer nodes have this
value. Peer nodes are not ordered and
can all become active access points at the same time when the cluster resource
group is started.<img src="deltaend.gif" alt="End of change"></td>
</tr>
</table>
<p><strong>Node role type.</strong> Indicates which of the two node roles is
being processed:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top">1</td>
<td align="left" valign="top">Current</td>
</tr>
<tr>
<td align="left" valign="top">2</td>
<td align="left" valign="top">Preferred</td>
</tr>
</table>
<p><strong>Number of entries in configuration object array.</strong> The number
of resilient device entries in the Configuration Object Entry array. This field
has a value of 0 for a data or application cluster resource group. This field
applies only to device cluster resource groups.</p>
<p><strong>Number of data port
IP addresses.</strong> The number of data port IP addresses associated with the
recovery domain node. This field has a value of 0 for a data or application
cluster resource group. This field applies only to device cluster resource
groups. </p>
<p><strong>Number of nodes in the prior recovery domain.</strong> The number of
nodes in the prior recovery domain. This is the number of elements there are in
the Prior Recovery Domain Array. This will be 0 if the Prior Recovery Domain
Array is not included. This field is used during:</p>
<ul compact>
<li>Add Node action code</li>
<li>Change action code</li>
<li>Change Node Status action code</li>
<li>Failover action code</li>
<li>Failover Cancelled action code</li>
<li>Rejoin action code</li>
<li>Remove Node action code</li>
<li>Restart action code</li>
<li>Start action code</li>
<li>Switchover action code</li>
<li>Undo action code</li>
</ul>
<p><strong>Number of nodes in the recovery domain array.</strong> The number of
nodes in the recovery domain. This is the number of elements in the recovery
domain array.</p>
<p><strong>Offset to configuration object array.</strong> The byte offset from
the beginning of the format to the list of resilient devices. This field has a
value of 0 for a
<img src="delta.gif" alt="Start of change"> non-device
<img src="deltaend.gif" alt="End of change">
cluster resource group. This field applies
only to device cluster resource groups.</p>
<p><strong>Offset to data port
IP address array.</strong> The byte offset from the beginning of the format to
the list of data port IP addresses for a recovery domain node. This field has a
value of 0 for a
<img src="delta.gif" alt="Start of change"> non-device
<img src="deltaend.gif" alt="End of change">
cluster resource group. This field applies
only to device cluster resource groups.</p>
<p><strong>Offset to prior recovery domain array.</strong> The byte offset from
the beginning of the format to the array of nodes in the prior recovery domain.
This will be 0 if the prior recovery domain array is not included. This field
is used during:</p>
<ul compact>
<li>Add Node action code</li>
<li>Change action code</li>
<li>Change Node Status action code</li>
<li>Failover action code</li>
<li>Failover Cancelled action code</li>
<li>Rejoin action code</li>
<li>Remove Node action code</li>
<li>Restart action code</li>
<li>Start action code</li>
<li>Switchover action code</li>
<li>Undo action code</li>
</ul>
<p><strong>Offset to recovery domain array.</strong> The byte offset from the
beginning of the format to the array of nodes in the recovery domain.</p>
<p><strong>Original cluster resource group status.</strong> The original status
of the cluster resource group before it was changed to some pending status
while an API is running. For example when the exit program is called for the <a
href="clrgstcrg.htm">Start Cluster Resource Group
(QcstStartClusterResourceGroup) API</a>, the Cluster resource group status
field will contain 550 (Start CRG Pending) while this field will contain 20
(Inactive) or 30 (Indoubt). Possible values include:</p>
<table cellpadding="5">
<!-- cols="10 90" -->
<tr>
<td align="left" valign="top">10</td>
<td align="left" valign="top">Active</td>
</tr>
<tr>
<td align="left" valign="top">20</td>
<td align="left" valign="top">Inactive</td>
</tr>
<tr>
<td align="left" valign="top">30</td>
<td align="left" valign="top">Indoubt</td>
</tr>
<tr>
<td align="left" valign="top">40</td>
<td align="left" valign="top">Restored</td>
</tr>
</table>
<p>Additional information for cluster resource group status can be found in <a
href="clust3a1TOC.htm">Cluster Resource Group APIs</a>.</p>
<p><strong>Preferred node role.</strong> The preferred role a node is
assigned. <img src="delta.gif" alt="Start of change">See <strong>Node role
</strong> for a more detailed description of the node role. <img src="deltaend.gif" alt="End of change"></p>
<table cellpadding="5">
<!-- cols="10 90" -->
<tr>
<td align="left" valign="top">0</td>
<td align="left" valign="top">Primary node. Only one node can have this
value.</td>
</tr>
<tr>
<td align="left" valign="top">&gt;=1</td>
<td align="left" valign="top">Backup node. The backup order is designated by
increasing value. The values need not be consecutive. No two backup nodes can
have the same value. At the completion of the API, Cluster Resource Services
will sequence the backups using consecutive numbers starting with 1.</td>
</tr>
<tr>
<td align="left" valign="top">-1</td>
<td align="left" valign="top">Replicate node. All replicates have this
value.<img src="delta.gif" alt="Start of change"></td>
</tr>
<tr>
<td align="left" valign="top">-4</td>
<td align="left" valign="top">Peer node. All peers have this
value. Only valid in a peer cluster resource group.<img src="deltaend.gif" alt="End of change"></td>
</tr>
</table>
<p><strong>Prior action code.</strong> When a cluster resource group exit
program is called with an action code of Undo (15), the action code for the
unsuccessful operation is placed in this field. Otherwise, this will be hex
zeroes.</p>
<p><strong>Prior recovery domain array.</strong> The prior recovery domain
array contains the view of the recovery domain before changes were made as a
result of the API being used or a cluster event occurring.</p>
<p>For example if a switchover is done, the prior recovery domain array will
have the view with the old primary and backup order. The recovery domain array
will have the view with the new primary and backup order.</p>
<p>If an event such as a node failure occurs, the prior recovery domain array
will have the old membership status for the failing node such as Active while
the recovery domain array will have the new status such as Inactive.</p>
<p>In most cases, the prior recovery domain is a view of the current recovery
domain. If the <a href="clrgchgcrg.htm">Change Cluster Resource Group
(QcstChangeClusterResourceGroup) API</a> is being used to change the preferred
recovery domain, the prior recovery domain will have a view of the preferred
recovery domain.</p>
<p>The prior recovery domain array is available for these action codes:</p>
<ul>
<li>Add Node</li>
<li>Change</li>
<li>Change Cluster Node Status</li>
<li>End Node</li>
<li>Failover</li>
<li>Failover Cancelled</li>
<li>Rejoin</li>
<li>Remove Node</li>
<li>Start (Only if inactive backup nodes were reordered in the recovery domain.
See <a href="clrgstcrg.htm">Start Cluster Resource Group</a> for more
information.)</li>
<li>Switchover</li>
</ul>
<p><strong>Recovery domain array.</strong> The nodes that are the recovery
domain for the cluster resource group. This view of the recovery domain will
contain any changes made to the node's membership status or the node's role by
the API or cluster event which caused the exit program to be called.</p>
<p><strong>Request handle.</strong> Uniquely identifies the API request. It is
used to associate responses on the user queue specified in the Results
Information parameter. This field will have a null value when the exit program
is called with an action code of Failover (9).</p>
<p><strong>Requesting user profile.</strong> This is the user profile that
initiated the API request.</p>
<p><strong>Reserved.</strong> This field is reserved and is set to hexadecimal
zeroes.</p>
<p><strong>Server takeover IP address.</strong> This is a takeover IP address
for servers associated with the relational database. This is a dotted decimal
field and is a null-terminated string.<img src="delta.gif" alt="Start of change">
This field only applies to device cluster resource groups.<img src="deltaend.gif" alt="End of change"></p>
<p><strong>Site name.</strong>
The name of the site associated with the recovery domain node. <img src="delta.gif" alt="Start of change">
This field only applies to device cluster resource groups.<img src="deltaend.gif" alt="End of change"> </p>
<p><strong>Takeover IP address.</strong> This is the floating IP address that
is associated with an application. This is a dotted decimal field and is a
null-terminated string. This field is used only by application cluster resource
groups.</p>
<br>
<h3><a name="HDRIPADDR">Application Takeover IP Address Management</a></h3>
<p>The takeover IP address is the IP address used to control how clients access
the application as the point of access for the application moves from one node
to another during Switchover or failover. The takeover IP address is started
only on one node at a time. That node is the primary node in the cluster
resource group's recovery domain. The takeover IP address can be configured by
Cluster Resource Services or it can be configured by the user. This attribute
is specified on the Create Cluster Resource Group API and is passed to the exit
program in the cluster resource group attributes field.</p>
<p>The following table shows which cluster APIs and events configure and manage
the takeover IP address. This occurs only for application cluster resource
groups. Additional information on the takeover IP address can be found in <a
href="clust3a1TOC.htm">Cluster Resource Group APIs</a><br>
</p>
<p><strong><a name="TBLXREF">Table 1. Takeover IP Address
Management</a></strong></p>
<table border="1" width="100%" cellpadding="5">
<!-- cols="15 50 35" -->
<tr>
<th align="left" valign="top">API or cluster event</th>
<th align="left" valign="top">Cluster Resource Services does
Configuration</th>
<th align="left" valign="top">User does Configuration</th>
</tr>
<tr>
<td align="left" valign="top"><strong>Add Node to Recovery Domain
API<br>
<br>
Add Cluster Resource Group Node Entry Command</strong></td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services ensures the IP address does not exist on the node
being added.</li>
<li>Cluster Resource Services adds the IP address to the node being added.</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>If the cluster resource group is active and the node being added is a
backup node, Cluster Resource Services ensures the IP address is not active on
the node being added.</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>cancel job</strong>
<p>The exit program job running as a result of handling the Start action code
is cancelled by some operator action.</p>
</td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services ends the IP address after the exit program's
cancel handler ends.</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services ends the IP address after the exit program's
cancel handler ends.</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Change Cluster Node Entry API<br>
<br>
Change Cluster Node Entry Command</strong></td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services does not do anything with the IP address.</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services does not do anything with the IP address.</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Change Cluster Recovery API<br>
<br>
Change Cluster Recovery Command</strong></td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services does not do anything with the IP address.</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services does not do anything with the IP address.</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Change Cluster Resource Group API<br>
<br>
Change Cluster Resource Group Command</strong></td>
<td align="left" valign="top">
<ul>
<li>When the takeover IP address is being changed, Cluster Resource Services
removes the old IP address on all nodes in a cluster resource group's recovery
domain and adds the new IP address.</li>
<li>If the cluster resource group is active and the role of a replicate node is
being changed to a backup node, Cluster Resource Services ensures the takeover
IP address exists and is not active.</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>If the cluster resource group is active and the role of a replicate node is
being changed to a backup node, Cluster Resource Services ensures the takeover
IP address exists and is not active.</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Create Cluster Resource Group API<br>
<br>
Create Cluster Resource Group Command</strong></td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services ensures the IP address does not exist on any node
in the recovery domain.</li>
<li>Cluster Resource Services adds the IP address to every node in the recovery
domain.</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services does not do anything with the IP address.</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Delete Cluster API<br>
<br>
Delete Cluster Command</strong></td>
<td align="left" valign="top">
<ul>
<li>The IP address is ended on the primary node if the cluster resource group
is active.</li>
<li>Cluster Resource Services removes the IP address on all nodes in a cluster
resource group's recovery domain.</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>The IP address is ended on the primary node if the cluster resource group
is active.</li>
<li>Cluster Resource Services does not do anything else with the IP
address.</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Delete Cluster Resource Group API<br>
<br>
Delete Cluster Resource Group Cluster Command</strong></td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services removes the IP address on all nodes in a cluster
resource group's recovery domain.</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services does not do anything with the IP address.</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Delete Cluster Resource Group CL
command</strong></td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services removes the IP address on all nodes in a cluster
resource group's recovery domain.</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services does not do anything with the IP address.</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>End Cluster Node API<br>
<br>
End Cluster Node Command</strong></td>
<td align="left" valign="top">
<ul>
<li>If the cluster resource group is active and the node being ended is the
primary node, Cluster Resource Services ends the IP address on the primary node
after calling the exit program with the End Node action code. See the failover
event for how other nodes in the recovery domain are handled.</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>If the cluster resource group is active and the node being ended is the
primary node, Cluster Resource Services ends the IP address on the primary node
after calling the exit program with the End Node action code. See the failover
event for how other nodes in the recovery domain are handled.</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>End Cluster Resource Group API<br>
<br>
End Cluster Resource Group Command<br>
</strong></td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services ends the IP address on the primary node after
calling the exit program with the End action code.</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services ends the IP address on the primary node after
calling the exit program with the End action code.</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Failover event</strong></td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services starts the IP address on the new primary node
before calling the exit program with the Start action code.</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services starts the IP address on the new primary node
before calling the exit program with the Start action code.</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Initiate Switchover API<br>
<br>
Change Cluster Resource Group Primary Command<br>
</strong></td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services ends the IP address on the current primary node
before calling the exit program with the Switchover action code.</li>
<li>Cluster Resource Services starts the IP address on the new primary node
before calling the exit program with the Start action code.</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services ends the IP address on the current primary node
before calling the exit program with the Switchover action code.</li>
<li>Cluster Resource Services starts the IP address on the new primary node
before calling the exit program with the Start action code.</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Node joining event</strong></td>
<td align="left" valign="top">
<ul>
<li>If the cluster resource group is active and the node joining is a backup
node, Cluster Resource Services ensures the IP address is not active on the
joining node.</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>If the cluster resource group is active and the node joining is a backup
node, Cluster Resource Services ensures the IP address is not active on the
joining node.</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Partition merge event</strong></td>
<td align="left" valign="top">
<ul>
<li>If the cluster resource group is active and the node(s) merging with the
primary partition is a backup node, Cluster Resource Services ensures the IP
address is not active on the merging node(s).</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>If the cluster resource group is active and the node(s) merging with the
primary partition is a backup node, Cluster Resource Services ensures the IP
address is not active on the merging node(s).</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Remove Cluster Node Entry API<br>
<br>
Remove Cluster Node Entry Command</strong></td>
<td align="left" valign="top">
<ul>
<li>If the cluster resource group is active and the node being removed is the
primary node, Cluster Resource Services ends the IP address on the primary node
after calling the exit program with the Remove Node action code. See the
failover event for how other nodes in the recovery domain are handled.</li>
<li>Cluster Resource Services removes the IP address on the node being
removed.</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>If the cluster resource group is active and the node being removed is the
primary node, Cluster Resource Services ends the IP address on the primary node
after calling the exit program with the Remove Node action code. See the
failover event for how other nodes in the recovery domain are handled.</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Remove Node from Recovery Domain API<br>
<br>
Remove Cluster Resource Group Node Entry Command</strong></td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services removes the IP address on the node being
removed.</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services does not do anything with the IP address.</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Start Cluster Resource Group API<br>
<br>
Start Cluster Resource Group Command<br>
</strong></td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services ensures the IP address exists on the primary node
and all backup nodes.</li>
<li>Cluster Resource Services ensures the IP address is not active on any
node
<img src="delta.gif" alt="Start of change"> unless the allow active takeover
IP address field is set to 1.
<img src="deltaend.gif" alt="End of change">
</li>
<li>Cluster Resource Services starts the IP address on the primary node before
calling the exit program with the Start action code.</li>
</ul>
</td>
<td align="left" valign="top">
<ul>
<li>Cluster Resource Services ensures the IP address exists on the primary node
and all backup nodes.</li>
<li>Cluster Resource Services ensures the IP address is not active on any node
in the recovery domain.</li>
<li>Cluster Resource Services starts the IP address on the primary node before
calling the exit program with the Start action code.</li>
</ul>
</td>
</tr>
</table>
<br>
<br>
<h3><a name="HDRPGMEND">When the Exit Program Ends</a></h3>
<p>When an exit program is called with an action code, control can return to
its caller because it set the success indicator and returned, had an unhandled
exception, or the exit program job was cancelled.</p>
<h3><a name="HDRPGMEND1">Setting the Success Indicator and Returning</a></h3>
<p>The returned value of the success indicator is used by the operating system
in different ways depending upon the action code. For most action codes,
anything other than <strong>Successful</strong> will result in the exit program
being called again with an action code of Undo to backout the actions
previously performed. There are two exceptions to this.</p>
<p>One, if an application exit program was called with an action code of Start,
setting the success indicator to <strong>Unsuccessful, attempt restart</strong>
will result in the exit program being called with Restart. Being called with an
action code of Restart will occur as long as the restart count has not been
reached. When the restart count is reached, failover occurs and the application
is started on the first active backup node.</p>
<p>The exit program is not called with Restart if either an <strong>
Unsuccessful, do not attempt restart</strong> indicator is returned, the exit
program sets the success indicator to <strong>Successful</strong> and returns,
or the cluster resource group is ended with the <a href="clrgendcrg.htm">End
Cluster Resource Group (QcstEndClusterResourceGroup) API</a>.</p>
<p>Two, some action codes always proceed regardless of the exit program success
indicator and the exit program is not called again with an action code of Undo.
These are:</p>
<ul>
<li>Change Cluster Node Entry</li>
<li>Delete</li>
<li>Delete Command</li>
<li>End Cluster Node</li>
<li>Remove Node (only when removing a node from the cluster)
</li>
<li>Undo</li>
</ul>
<p>If the exit program returns an unsuccessful indicator from Undo,
the cluster resource group's status is set to
Indoubt.</p>
<br>
<h3><a name="HDRPGMEND2">An Exception Occurs</a></h3>
<p>An unhandled exception is treated the same way as an unsuccessful indicator.
The exit program will be called again with either Restart or Undo except for
the same action codes listed above where it is not called again with Undo.</p>
<p>If the exit program does not handle an exception while processing Undo, the
cluster resource group's status is set to Indoubt.</p>
<br>
<h3><a name="HDRPGMEND3">Job is Cancelled</a></h3>
<p>If the exit program job is cancelled and the exit program was performing the
function of any action code other than Undo, Start, or Restart, it is treated
as an unsuccessful indicator. The exit program is called with an Undo action
code except for those action codes listed above where it is not called again
with Undo.</p>
<p>If the exit program was cancelled while performing the function of Undo, the
cluster resource group's status is set to Indoubt.</p>
<p>If the exit program was cancelled while performing the function of Start or
Restart, the cluster resource group is ended; failover does not occur. It is
the responsibility of the exit program cancel handler to also end any other
jobs or subsystems it may have started.</p>
<p>An exit program job always has an associated cluster resource group job. It
is the associated cluster resource group job that submits the exit program job.
If the cluster resource group job is cancelled while an exit program is
running, the exit program job is also cancelled. If the cluster resource group
job is cancelled, the exit program is called with the End Node action code on
the node where the job was cancelled.</p>
<br>
<h3><a name="HDRRESTART">Restarting an Application Cluster Resource Group Exit
Program</a></h3>
<p>Cluster Resource Services uses a restart count to control how often an
active application will be restarted on the primary node before a failover
occurs. The restart count is specified on the <a href="clrgcrtcrg.htm">Create
Cluster Resource Group (QcstCreateClusterResourceGroup)</a> or <a href=
"clrgchgcrg.htm">Change Cluster Resource
Group(QcstChangeClusterResourceGroup)</a> APIs for application cluster resource
groups. If the specified value is 0, the failed application will not be
restarted on the primary node but failed over to the first backup. If the
specified value is greater than 0, Cluster Resource Services will call the exit
program with an action code of Restart after having initially called the exit
program with an action code of Start. It will continue to do this for each
failure, until the restart count has been reached. The exit program will be
called with an action code of Restart if it returns from handling the Start
action code in one of these ways:</p>
<ul>
<li>The exit program returns with the success indicator set to 2 (Unsuccessful,
attempt restart).</li>
<li>The exit program does not handle an exception.</li>
</ul>
<p>Once the restart count has been reached, Failover will be attempted in order
to start the application on the first active backup node. The restart count is
reset only when the exit program is called with a Start action code. This
occurs with the <a href="clrgstcrg.htm">Start Cluster Resource Group
(QcstStartClusterResourceGroup)</a> or <a href="clrginitso.htm">Initiate
Switchover (QcstInitiateSwitchOver) API</a> or the failover event.</p>
<br>
<h3><a name="HDRMULT1">Multiple Action Codes</a></h3>
<p>In most situations, cluster APIs or events result in the exit program being
called with a single action code. When the exit program completes successfully,
the exit program is not called again for that API or cluster event. There are
several situations where successful completion results in the exit program
being called twice. This occurs for active application cluster resource groups
for the Initiate Switchover API and the failover cluster event. In both cases,
the exit program is called on the new primary first with either the Switchover
or Failover action code. During this time, the exit program should do any
preparation work necessary to start the application but should not yet start
the application. When the exit program returns with a successful indicator, it
will be called a second time with the Start action code to start the
application.</p>
<p>Another situation occurs when a cluster resource group is deleted using
either the Delete Cluster Resource Group API or Delete Cluster Resource Group
From Cluster command. The exit program will be called first with Verification
Phase action code and then with the Delete action code. If the verification
phase returns with a unsuccessful indicator, the exit program will not be
called a second time and the cluster resource group will not be deleted.</p>
<h3><a name="HDRFO">Causes of the Failover Event</a></h3>
<p>It is natural to think of the failover event being caused by the most
obvious problem: a node fails. The node failure could be due to a hardware
problem such as the loss of a processor or an environmental problem such as the
loss of electrical power.</p>
<p>There are a wide variety of other things that can cause a failover event
when it occurs on a node that is in a cluster resource group's recovery domain.
For more information about failover events,
see <a href="../rzaig/rzaigicclust.htm">Clusters</a> in the
System Management topic.</p>
<ul>
<li><a href="clust1.htm">Cluster Resource Services APIs</a> or Commands
<ul>
<li>End Cluster Node API</li>
<li>End Cluster Node Command</li>
<li>Remove Cluster Node Entry API when Cluster Resource Services is active on
the node</li>
<li>Remove Cluster Node Entry Command</li>
</ul>
</li>
<li>iSeries operator actions when Cluster Resource Services is active
<ul compact>
<li>Pushing the IPL button on the front panel</li>
<li>Powering down the system (PWRDWNSYS)</li>
<li>Ending all subsystems (ENDSBS)</li>
<li>Ending the QSYSWRK subsystem (ENDSBS)</li>
<li>Change Cluster Recovery command</li>
<li>Ending the system (ENDSYS)</li>
<li>Ending TCP (ENDTCP)</li>
<li>Cancelling the QCSTCTL, QCSTCRGM, or a specific CRG job</li>
<li>Ending a TCP/IP interface used by clustering for communication with other
nodes</li>
</ul>
</li>
<li>Failures
<ul>
<li>System hardware failure causing a machine check</li>
<li>System software failure causing a machine check</li>
<li>Communication line, router, and IOP failures for a communication line used
by clustering for communication with other nodes</li>
<li>Environmental problems causing the system to fail (electrical power loss,
hardware destruction by storms, earth quake, and so on)</li>
<li>An application exit program returns from handing the Start or Restart
action code with the Success indicator set to <strong>Unsuccessful, attempt
restart</strong> and the restart limit has been reached</li>
<li>An application exit program returns from handing the Start or Restart
action code with the Success indicator set to <strong>Unsuccessful, do not
attempt restart</strong></li>
<li>An application exit program does not handle an exception while processing
the Start or Restart action code and the restart limit has been reached</li>
</ul>
</li>
</ul>
<p>The failover event always calls the exit program so that the exit program is
aware a member left the cluster. The exit program is called regardless of the
state of the cluster resource group: active, inactive, or indoubt. Also, the
exit program is called regardless of which member left the cluster: primary,
backup, replicate <img src="delta.gif" alt="Start of change"> or peer<img src="deltaend.gif" alt="End of change">. The exit program must look at both the state of the
cluster resource group and the role of the node that left in order to perform
the correct action.</p>
<p>Cluster resource groups should failover in a particular order when a node
failure occurs. That order is device cluster resource groups first, application
resource groups, and then data cluster resource groups.
<img src="delta.gif" alt="Start of change">Peer cluster resource groups
failover in parallel with the other
cluster resource group types.<img src="deltaend.gif" alt="End of change"></p>
<br>
<h3><a name="HDRPART">Partition Processing</a></h3>
<p>A cluster enters a partition state when a failure occurs that cannot
conclusively be identified as a node failure. Cluster Resource Services detects
that communication with another node or nodes has been lost but cannot
determine why. A classic example is the failure of a communication line between
the systems.</p>
<p>The exit program is called when a cluster partitions. The membership status
for each partitioned node in the recovery domain will be set to Partition.
However, this is different for each cluster partition. For example, suppose we
have a 2 node cluster with nodes A and B, both nodes are in a cluster resource
group's recovery domain, and the cluster partitions. When the exit program on A
is called, the recovery domain will indicate that A is active and B is
partitioned. When the exit program on B is called, the recovery domain will
indicate that B is active and A is partitioned.</p>
<p><img src="delta.gif" alt="Start of change">For primary-backup model cluster
resource groups:<img src="deltaend.gif" alt="End of change"></p>
<ul>
<li>The action code
seen by the exit program on each node depends upon whether
the node is in the primary or secondary partition. The primary partition
contains the cluster resource group's primary node. The secondary partition
does not.</li>
<li>All nodes in the primary partition of the cluster resource group's recovery
domain will be passed an action code of Failover. All nodes in the secondary
partition are passed an action code of End. Action code dependent data of
Partition failure is passed in each case. These action codes are used whether
the cluster resource group is active or inactive.
</ul>
<p><img src="delta.gif" alt="Start of change">For peer model cluster
resource groups:</p>
<ul>
<li>All recovery domain nodes will be passed an action
code of Failover. The access points that are active will remain active in
all partitions.</li>
<li>All configuration changes are not allowed when the recovery
domain spans a network partition.<img src="deltaend.gif" alt="End of change"></li>
</ul>
<br>
<h3><a name="HDRUNDO">Handling the Undo Action Code</a></h3>
<p>When Cluster Resource Services processes an API or cluster event and an exit
program is called, a failure either in the exit program or in Cluster Resource
Services after the exit program ends results in an attempt to recover the prior
state of the cluster resource group and its resilient resources.</p>
<p>Actions performed by Cluster Resource Services which changed the cluster
resource group are backed out. The exit program is called with an action code
of Undo so that actions it took can also be backed out.</p>
<p>If the exit program had nothing to do for an action code, its work to handle
the Undo is trivial. Merely set the success indicator to Successful and
return.</p>
<p>If the exit program has a failure and can back out its actions as part of
handling the original action code, it may also have little or nothing to do
when called with the Undo action code. Doing this back out as part of the
original action code processing may be driven from the procedure which detected
the problem, or from an exception handler, or from a cancel handler.</p>
<p>When the exit program handles the original action code successfully but
Cluster Resource Services subsequently detects an error that requires the API
or cluster event to be backed out, the Undo processing by the exit program
becomes more involved. While the exit program is passed the action code it
worked on before being called with Undo, there may be other information the
exit program will have to obtain in order to successfully perform the back out.
Any required back out information will have to be kept where a new job can be
access it.</p>
<p>The format data passed to the exit program for Undo is exactly the same as
was passed for the original action code except for the prior action code
field.</p>
<p>A cluster resource group's status is returned to its original value if both
the exit program and Cluster Resource Services handle the Undo action code
successfully. If Cluster Resource Services is unable to back out changes or the
exit program sets the success indicator to anything other than Successful, the
status of the cluster resource group is set to Indoubt. When this occurs,
someone such as an operator or programmer may have to be involved to determine
what errors caused the problem.</p>
<br>
<h3><a name="HDREPREAS">Reasons an Exit Program Is Called</a></h3>
<p>The table below shows the reasons an exit program is called and maps the
reason to the <strong>Action Code</strong> parameter on the cluster resource
group exit program. The third and fourth columns of the table give suggestions
for the types of things a data or application cluster resource group exit
program might do for an action code.</p>
<p>The following <a href="clust3a1TOC.htm">cluster resource group manager
APIs</a> or commands do not cause the exit program to be called:</p>
<ul>
<li>Change Cluster Resource Group API if the recovery domain is not
changed</li>
<li>Change Cluster Resource Group Command</li>
<li>Distribute Information API</li>
<li>List Cluster Resource Group Information API</li>
<li>List Cluster Resource Groups API</li>
<li>Display Cluster Resource Group Command</li>
</ul>
<p>For a device cluster resource group, neither the replication provider nor
the application provider need to supply an exit program. An exit program is
optional. An exit program is required only if customer specific activities are
required for resilient devices. Some examples of why a customer may wish to
provide an exit program might include:</p>
<ul>
<li>When a cluster resource group is created or a node is added to the recovery
domain, the exit program could perform configuration functions for devices not
supported by the device cluster resource group.</li>
<li>When a cluster resource group is started, the exit program could vary on
devices not supported by the device cluster resource group.</li>
<li>When a switchover or failover is done, the exit program could vary off
devices on the current primary node for devices not supported by the device
cluster resource group and vary them on for the new primary node.</li>
<li>When a cluster resource group is deleted or a node is removed from the
recovery domain, the exit program could delete configuration information
previously created.</li>
<li>Besides managing device configuration or varying devices on or off, the
exit program could perform other functions that might be useful in
synchronizing events between actions on a device and operator notification or
application dependencies.</li>
</ul>
<br>
<p><strong><a name="TBLWHYEP">Table 2. Reasons an Exit Program Is
Called</a></strong></p>
<table border="1" width="100%" cellpadding="5">
<!-- cols="30 15 30 35" -->
<tr>
<th align="left" valign="top">Reason an Exit Program Is Called</th>
<th align="left" valign="top">Action Code Parameter Passed to Exit
Program</th>
<th align="left" valign="top"><strong>Supplied by Replication
Provider<br>
Exit Program Actions - Data<img src="delta.gif" alt="Start of change">/Peer
<img src="deltaend.gif" alt="End of change"> Resilience</strong></th>
<th align="left" valign="top"><strong>Supplied by Application
Provider<br>
Exit Program Actions - Application Resilience</strong></th>
</tr>
<tr>
<td align="left" valign="top"><strong>Create Cluster Resource Group
API or Create Cluster Resource Group Command</strong>
<br>This interface creates a cluster resource group object, which identifies a
recovery domain.
</td>
<td align="left" valign="top">1 (Initialize)</td>
<td align="left" valign="top">Put data on all nodes in the recovery
domain. Prime all nodes in the recovery domain.</td>
<td align="left" valign="top">Put applications on all nodes in the
recovery domain. Prime all nodes in the recovery domain.</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Start Cluster Resource Group API or Start
Cluster Resource Group Command
</strong>
<br>This interface establishes resilience for a cluster resource group.
</td>
<td align="left" valign="top">2 (Start)</td>
<td align="left" valign="top">
<ul>
<li>Start journaling.</li>
<li>Start replication.</li>
</ul>
<p><img src="delta.gif" alt="Start of change">
If a Peer CRG is active, all peer nodes are actively replicating.
<img src="deltaend.gif" alt="End of change"></p>
<br></td>
<td align="left" valign="top">
<ul>
<li>Start server jobs.</li>
<li>Keep track of server jobs started. This will be needed when server jobs are
restarted or the End Cluster Resource Group API is called.</li>
</ul>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Application cluster resource group exit
program ends abnormally or unexpectedly.</strong></td>
<td align="left" valign="top">3 (Restart)</td>
<td align="left" valign="top">Not called.</td>
<td align="left" valign="top">
<ul>
<li>Restart server jobs if necessary.</li>
</ul>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>End Cluster Resource Group API or End
Cluster Resource Group Command </strong>
<br>This interface will disable resilience for a cluster resource group
object.
<p><strong>Application ends</strong></p>
<p>The Success indicator is sent to Successful and the application ends</p>
</td>
<td align="left" valign="top">4 (End)</td>
<td align="left" valign="top">
<ul>
<li>Stop replication.</li>
<li>End journaling.</li>
</ul>
<br>
</td>
<td align="left" valign="top">
<ul>
<li>End server jobs.</li>
<li>End application resilience.</li>
</ul>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Delete Cluster Resource Group API or
Delete Cluster Resource Group from Cluster Command </strong><br>
</td>
<td align="left" valign="top">5 (Verification Phase)</td>
<td align="left" valign="top">Verify that the operation is ok to do.<br>
</td>
<td align="left" valign="top">Verify that the operation is ok to do.<br>
</td>
</tr>
<tr>
<td align="left" valign="top">&nbsp;</td>
<td align="left" valign="top">6 (Reserved)</td>
<td align="left" valign="top">&nbsp;</td>
<td align="left" valign="top">&nbsp;</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Delete Cluster Resource Group API or
Delete Cluster Resource Group From Cluster Command</strong>
<p>This interface deletes a cluster resource group object from all nodes in the
recovery domain.</p>
<p><strong>Delete Cluster API or Delete Cluster Command</strong> (if Cluster
Resource Services is active)</p>
<p>This interface deletes all cluster resource groups from all nodes.
<br><strong>Remove Cluster Node Entry API or Remove Cluster Node Entry Command</strong>
(if Cluster Resource Services is active and node being remove is not active in the cluster.)</p>
<p>This interface deletes a cluster resource group object from all nodes in the
recovery domain.</p>
</td>
<td align="left" valign="top">7 (Delete)</td>
<td align="left" valign="top">7 (Delete)</td>
<td align="left" valign="top">7 (Delete)</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Start Cluster Node API or Start Cluster
Node Group Command</strong>
<br>This interface is used to start Cluster Resource Services on one or more
nodes in the cluster.
<br><strong>Partition merge event</strong>
<br>When a communication problem which caused a cluster to partition has been
corrected, cluster partitions will merge back together.
</td>
<td align="left" valign="top">8 (Rejoin)</td>
<td align="left" valign="top">
<ul>
<li>Resynchronize data</li>
<li>Start replication if the cluster resource group status is active (10). <img src="delta.gif" alt="Start of change">For peer this should be done for all
peer nodes.<img src="deltaend.gif" alt="End of change">
</ul>
<br>
</td>
<td align="left" valign="top">Start application if the cluster resource group
status is Active (10)</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Node failure or resource failure
event</strong>
<br><strong>End Cluster Node API or End Cluster Node Command</strong>
<p>The recovery domain node(s) which are not being ended see this action code.
The node being ended sees the End Node action code.
<br><strong>Remove Cluster Node Entry API or Remove Cluster Node Entry
Command</strong></p>
<p>An active recovery domain node is being removed from the cluster.</p>
</td>
<td align="left" valign="top">9 (Failover)</td>
<td align="left" valign="top"><img src="delta.gif" alt="Start of change">For Data:
<img src="deltaend.gif" alt="End of change">
<ul>
<li>Get data objects to highest level of currency.</li>
<li>Redirect remote journal receivers.</li>
</ul>
<p><img src="delta.gif" alt="Start of change">
For peer, this is just notification only.<img src="deltaend.gif" alt="End of change"></p>
<br>
</td>
<td align="left" valign="top">
<ul>
<li>Make sure exit program data contains all key information for application
restart. This can be accomplished by the Change Cluster Resource Group API or
Change Cluster Resource Group Command.</li>
<li>Use exit program data to restart application at last known point. Exit
program data must contain enough key information for most effective
restart.</li>
<li>Restart server jobs after data is current. Actually occurs when the Cluster
Resource Services calls the cluster resource group exit program with an action
code of 2 (Start) on the new primary only.</li>
</ul>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Initiate Switchover API or Change Cluster
Resource Group Primary Command
</strong>
<br>This API changes the current role of a node in the recovery domain of a
cluster resource group by switching the access point from the primary node to
the first backup.
</td>
<td align="left" valign="top">10 (Switchover)</td>
<td align="left" valign="top"><img src="delta.gif" alt="Start of change">For Data only:<img src="deltaend.gif" alt="End of change">
<ul>
<li>Stop replication on primary and journaling.</li>
<li>Continue replication on other active nodes in the recovery domain. This is
a combination of 4 (End) and 9 (Failover).</li>
</ul>
<p><img src="delta.gif" alt="Start of change">Not valid for peer.
<img src="deltaend.gif" alt="End of change"></p>
<br>
</td>
<td align="left" valign="top">
<ul>
<li>Make sure exit program data contains all key information for application
restart before the Initiate Switchover API is called.</li>
<li>10 (Switchover - Pre-exit program)
<ul>
<li>Stop server jobs.</li>
</ul>
</li>
<li>2 (Start - Post-exit program)
<ul>
<li>Use exit program data to restart application at last known point. Exit
program data must contain enough key information for most effective
restart.</li>
<li>Restart server jobs after data is current.</li>
</ul>
</li>
</ul>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Add Node to Recovery Domain API or Add
Cluster Resource Group Node Entry Command</strong>
<br>This interface will add a node ID to the recovery domain of a cluster
resource group.
</td>
<td align="left" valign="top">11 (Add Node)</td>
<td align="left" valign="top">Exit program actions performed on the node being
added:
<ul>
<li>If cluster resource group is Active, do 1 (Initialize) and 2 (Start)
actions.<img src="delta.gif" alt="Start of change">A peer node will be
an active access point.<img src="deltaend.gif" alt="End of change">
</li>
<li>If cluster resource group is Inactive, do 1 (Initialize) action.</li>
</ul>
</td>
<td align="left" valign="top">Perform 1 (Initialize) on the node being
added.</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Remove Node from Recovery Domain API or
Remove Cluster Resource Group Node Entry Command</strong>
<br>This interface will remove a node from the recovery domain of a cluster
resource group.
<br><strong>Remove Cluster Node Entry API or Remove Cluster Node Entry
Command</strong> (will be seen on the node being removed if Cluster Resource
Services is active on the node being removed)
<br><strong>Remove Cluster Node Entry API or Remove Cluster Node Entry
Command</strong> (will be seen on active cluster nodes if Cluster Resource
Services is inactive on the node being removed and the API is run on an active
node)
</td>
<td align="left" valign="top">12 (Remove Node)</td>
<td align="left" valign="top">Exit program actions on the node being removed:
<ul>
<li>If the cluster resource group is Active and the node being
removed is active in the cluster do 4 (End) and 7 (Delete).
<img src="delta.gif" alt="Start of change">For peer this should be done on
all active peer nodes.
<img src="deltaend.gif" alt="End of change">If the node being remove is not
active in the cluster, this is just notification
that the node is being removed from the recovery domain.
</li>
<li>If cluster resource group is Inactive
and the node being removed is active in the cluster
, do 7 (Delete) action. If the node being remove is not active in the cluster,
this is just notification that the node is being removed from the recovery domain.
</li>
</ul>
</td>
<td align="left" valign="top">Exit program actions on the node being removed:
<ul>
<li>If the cluster resource group is Active
and the node being removed is active in the cluster, do 4 (End) and 7 (Delete).
If the node being remove is not active in the cluster, this is just notification
that the node is being removed from the recovery domain.
</li>
<li>If cluster resource group is Inactive
and the node being removed is active in the cluster, do 7 (Delete) action.
If the node being remove is not active in the cluster, this is just notification
that the node is being removed from the recovery domain.
</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Change Cluster Resource Group API or
Change Cluster Resource Group Command</strong>
<br>This interface changes some of the attributes of a cluster resource group.
Only if the recovery domain is changed will the cluster resource group exit
program be called.
</td>
<td align="left" valign="top">13 (Change)</td>
<td align="left" valign="top">
<ul>
<li>Redirect replication if necessary.</li>
<li>Redirect journaling if necessary.</li>
</ul>
<p><img src="delta.gif" alt="Start of change">For peer if the cluster resource
group is Active (10) and the node is being changed from replicate to peer perform a
2 (Start) on the new peer node. If the node is being changed from peer to replicate
perform an 4 (End) on the new replicate node. <img src="deltaend.gif" alt="End of change"></p>
<br>
</td>
<td align="left" valign="top">&nbsp;</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Delete Cluster Resource Group CL
command</strong>
<br>This command deletes a cluster resource group object from the node running
the command. This is not a distributed request.
<br><strong>Delete Cluster API or Delete Cluster Command</strong> (if Cluster
Resource Services is inactive)
<br><strong>Remove Cluster Node Entry API or Remove Cluster Node Entry
Command</strong> (if Cluster Resource Services is inactive on the node being
removed and the API is run on that node)
</td>
<td align="left" valign="top">14 (Delete Command)</td>
<td align="left" valign="top">&nbsp;</td>
<td align="left" valign="top">&nbsp;</td>
</tr>
<tr>
<td align="left" valign="top">&nbsp;</td>
<td align="left" valign="top">15(Undo)</td>
<td align="left" valign="top">Rollback operations from previous request.</td>
<td align="left" valign="top">Rollback operations from previous request.</td>
</tr>
<tr>
<td align="left" valign="top"><strong>End Cluster Node API or End Cluster Node
Command</strong> is used to end Cluster Resource Services on a node in the
recovery domain.
<p><strong>Job cancelled</strong></p>
<p>A Cluster Resource Services job is cancelled.</p>
</td>
<td align="left" valign="top">16(End Node)</td>
<td align="left" valign="top">On the node being ended:
<ul>
<li>Do End (4) and Change (13) if the cluster resource group status is Active
(10).</li>
<li>Do Change (13) if the cluster resource group status is Inactive(20) or
Indoubt (30).</li>
</ul>
<p><img src="delta.gif" alt="Start of change">For data cluster resource group
<img src="deltaend.gif" alt="End of change">if the node assigned the primary role is ended,
exit program actions on the
first backup:</p>
<ul>
<li>If the cluster resource group status is Active (10) do Failover (9).</li>
<li>If the cluster resource group status is Inactive (20) or Indoubt (30) do
Change (13).</li>
</ul>
</td>
<td align="left" valign="top">On the node being ended:
<ul>
<li>Do End (4) and Change (13) if the cluster resource group status is Active
(10).</li>
<li>Do Change (13) if the cluster resource group status is Inactive (20) or
Indoubt (30).</li>
</ul>
<p>If the node assigned the primary role is ended, exit program actions on the
first backup:</p>
<ul>
<li>If the cluster resource group status is Active (10) do Failover (9).</li>
<li>If the cluster resource group status is Inactive (20) or Indoubt (30) do
Change (13).</li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Add Cluster Resource Group Device Entry
API or Add Cluster Resource Group Device Entry Command</strong>
<br>A resilient device entry is added to a cluster resource group
</td>
<td align="left" valign="top">17(Add Device Entry)</td>
<td align="left" valign="top">Does not apply to a data <img src="delta.gif" alt="Start of change">or peer<img src="deltaend.gif" alt="End of change">cluster resource group.</td>
<td align="left" valign="top">Does not apply to an application cluster resource
group</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Remove Cluster Resource Group Device
Entry API or Remove Cluster Resource Group Device Entry Command</strong>
<br>A resilient device entry is removed from a cluster resource group
</td>
<td align="left" valign="top">18(Remove Device Entry)</td>
<td align="left" valign="top">Does not apply to a data<img src="delta.gif" alt="Start of change">or peer<img src="deltaend.gif" alt="End of change"> cluster resource
group</td>
<td align="left" valign="top">Does not apply to an application cluster resource
group</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Change Cluster Resource Group Device
Entry API or Change Cluster Resource Group Device Entry Command</strong>
<br>Information for a resilient device entry is being changed
</td>
<td align="left" valign="top">19(Change Device Entry)</td>
<td align="left" valign="top">Does not apply to a data<img src="delta.gif" alt="Start of change">or peer<img src="deltaend.gif" alt="End of change"> cluster resource
group</td>
<td align="left" valign="top">Does not apply to an application cluster resource
group</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Change Cluster Node Entry API or Change
Cluster Node Entry Command</strong>
<br>The status of a node is being changed.
</td>
<td align="left" valign="top">20(Change Node Status)</td>
<td align="left" valign="top"><img src="delta.gif" alt="Start of change">For data cluster resource group <img src="deltaend.gif" alt="End of change">if the primary had failed and its status is being
changed, start the cluster resource group.</td>
<td align="left" valign="top">If the primary had failed and its status is being
changed, start the cluster resource group.</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Primary node failure or resource failure
event</strong>
<br>Failover is cancelled by failover message queue
<br><strong>End Cluster Node API or End Cluster Node Command</strong>
<br>Primary node is ended and failover cancelled by failover message queue.
<br>The recovery domain node(s) which are not being ended see this action code.
The node being ended sees the End Node action code.
</td>
<td align="left" valign="top">21 (Failover Cancelled)</td>
<td align="left" valign="top"><img src="delta.gif" alt="Start of change">Not applicable to peer cluster resource group.<img src="deltaend.gif" alt="End of change">
<ul>
<li>Stop replication.</li>
<li>End journaling.</li>
</ul>
<br>
</td>
<td align="left" valign="top">
<ul>
<li>End server jobs.</li>
<li>End application resilience.</li>
</ul>
<br>
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>Primary node failure </strong>
<br>Failover is cancelled by failover message queue
<br><strong>End Cluster Node API or End Cluster Node Command</strong>
<br>Primary node is ended and failover cancelled by failover message queue.
<br>The recovery domain node(s) which are not being ended see this action code.
The node being ended sees the End Node action code.
</td>
<td align="left" valign="top">
<br>
</td>
</tr>
</table>
<br>
<br>
<h3><a name="HDRACXREF">Action Code Cross Reference</a></h3>
<p>Some action codes are used by more than one API or cluster event. The
following table is a cross reference between an action code and which API or
cluster event uses it. The action code dependent data value is listed in
parenthesis after each API and cluster event. Those with no specified dependent
data value have a value of No Information (0).<br>
</p>
<p><strong><a name="TBLXREF1">Table 3. API and Cluster Event to Action Code
Cross Reference</a></strong></p>
<table border width="80%" cellpadding="5">
<!-- cols="15 50 35" -->
<tr>
<th align="left" valign="top" rowspan="1">Action Code</th>
<th align="left" valign="top" rowspan="1">API, Command, or Cluster Event that
Uses the Action Code</th>
<th align="left" valign="top" rowspan="1">Cluster Resource Group Type the
Action Code Applies to</th>
</tr>
<tr>
<td align="left" valign="top" width="35%"><strong>1 - Initialize</strong></td>
<td align="left" valign="top" width="55%">
<ul compact>
<li>Create Cluster Resource Group API</li>
<li>Create Cluster Resource Group Command</li>
</ul>
</td>
<td align="left" valign="top" width="10%">All cluster resource group types</td>
</tr>
<tr>
<td align="left" valign="top"><strong>2 - Start</strong></td>
<td align="left" valign="top">
<ul compact>
<li>Start Cluster Resource Group API</li>
<li>Start Cluster Resource Group Command</li>
<li>The second action code on the new primary for Initiate Switchover API for an active application cluster resource group</li>
<li>The second action code on the new primary for Failover event for an active
application cluster resource group</li>
</ul>
</td>
<td align="left" valign="top">All cluster resource group types</td>
</tr>
<tr>
<td align="left" valign="top"><strong>3 - Restart</strong></td>
<td align="left" valign="top">Exit program failure when processing the Start
action code</td>
<td align="left" valign="top">Application cluster resource group</td>
</tr>
<tr>
<td align="left" valign="top"><strong>4 - End</strong></td>
<td align="left" valign="top">
<ul>
<li>End Cluster Resource Group API (0 - No information)</li>
<li>End Cluster Resource Group Command</li>
<li><img src="delta.gif" alt="Start of change">For primary-backup model cluster resource groups only.<img src="deltaend.gif" alt="End of change">Cluster partition event for the nodes in the secondary partition for both
active and inactive cluster resource groups (3 - Partition failure)</li>
<li>When an application cluster resource group exit program ends with a Success
return code while processing the Start or Restart action codes (9 - Resource
end)</li>
</ul>
</td>
<td align="left" valign="top">All cluster resource group types</td>
</tr>
<tr>
<td align="left" valign="top"><strong>5 - Verification Phase</strong></td>
<td align="left" valign="top">
<ul>
<li>Delete Cluster Resource Group from Cluster Command</li>
<li>Delete Cluster Resource Group API</li>
</ul>
</td>
<td align="left" valign="top">All cluster resource group types</td>
</tr>
<tr>
<td align="left" valign="top"><strong>7 - Delete</strong></td>
<td align="left" valign="top">
<ul compact>
<li>Delete Cluster Resource Group API (0 - No information)</li>
<li>Delete Cluster API (10 - Delete cluster)</li>
<li>Delete Cluster Resource Group From Cluster Command</li>
<li>Delete Cluster Command</li>
<li>
<img src="delta.gif" alt="Start of change">For primary-backup model cluster resource groups only.<img src="deltaend.gif" alt="End of change">Remove Cluster Node Entry API or Remove Cluster Node Entry Command ( 15 - Remove passive node ) When a node being removed from the cluster is not active and the node is the only recovery domain node or it is the primary and there are no backups defined.
</ul>
</td>
<td align="left" valign="top">All cluster resource group types</td>
</tr>
<tr>
<td align="left" valign="top"><strong>8 - Rejoin</strong></td>
<td align="left" valign="top">
<ul compact>
<li>Cluster partitions are merging (1 - Merge)</li>
<li>A node that was ended or failed is started (2 - Join)</li>
</ul>
</td>
<td align="left" valign="top">All cluster resource group types</td>
</tr>
<tr>
<td align="left" valign="top"><strong>9 - Failover</strong></td>
<td align="left" valign="top">See <a href="#HDRFO">Causes of the Failover
Event</a> for a list of things that cause the failover event (4 - Node failure,
5 - Member failure, 6 - End node, 7 - Remove node, 8 - Application
failover)</td>
<td align="left" valign="top">All cluster resource group types</td>
</tr>
<tr>
<td align="left" valign="top"><strong>10 - Switchover</strong></td>
<td align="left" valign="top">
<ul compact>
<li>Initiate Switchover API</li>
<li>Change Cluster Resource Group Primary Command</li>
</ul>
</td>
<td align="left" valign="top">All cluster resource group types <img src="delta.gif" alt="Start of change">except peer<img src="deltaend.gif" alt="End of change">
</td>
</tr>
<tr>
<td align="left" valign="top"><strong>11 - Add Node</strong></td>
<td align="left" valign="top">
<ul compact>
<li>Add Node to Recovery Domain API</li>
<li>Add Cluster Resource Group Node Entry Command</li>
</ul>
</td>
<td align="left" valign="top">All cluster resource group types</td>
</tr>
<tr>
<td align="left" valign="top"><strong>12 - Remove Node</strong></td>
<td align="left" valign="top">
<ul compact>
<li>Remove Cluster Node Entry API or Remove Cluster Node Entry Command<br>
All nodes see this action code if the node being removed is inactive. The
action code dependent data will be 15 - Remove passive node.
If removed node is active, the node being removed sees this action code while
the other nodes see the Failover action code (7 - QcstRemoveNode).
</li>
<li>Remove Node From Recovery Domain API Remove Cluster ReSource Group Node
Entry Entry Command (11 - Remove recovery domain node)</li>
</ul>
</td>
<td align="left" valign="top">All cluster resource group types</td>
</tr>
<tr>
<td align="left" valign="top"><strong>13 - Change</strong></td>
<td align="left" valign="top">
<ul compact>
<li>Change Cluster Resource Group API</li>
<li>Change Cluster Resource Group Command</li>
</ul>
</td>
<td align="left" valign="top">All cluster resource group types</td>
</tr>
<tr>
<td align="left" valign="top"><strong>14 - Delete Command</strong></td>
<td align="left" valign="top">
<ul compact>
<li>Delete Cluster Resource Group command</li>
<li>Delete Cluster API (when Cluster Resource Services is inactive)</li>
<li>Remove Cluster Node Entry API used on a node where Cluster Resource
Services is not running</li>
</ul>
</td>
<td align="left" valign="top">All cluster resource group types</td>
</tr>
<tr>
<td align="left" valign="top"><strong>15 - Undo</strong></td>
<td align="left" valign="top">An Undo action code is used whenever the exit
program is ended due to an unhandled exception or returns with a non successful
return code except for these action codes which never call the exit program a
second time with Undo:
<ul>
<li>7 - Delete</li>
<li>12 - Remove Node (if the node being removed from the cluster)</li>
<li>14 - Delete Command</li>
<li>15 - Undo</li>
<li>16 - End Node</li>
<li>20 - Change Cluster Node Entry</li>
<li> 22 - Cancel </li>
</ul>
</td>
<td align="left" valign="top">All cluster resource group types. </td>
</tr>
<tr>
<td align="left" valign="top"><strong>16 - End Node</strong></td>
<td align="left" valign="top">
<ul compact>
<li>End Cluster Node API (0 - No information)</li>
<li>End Cluster Node Command</li>
<li>A cluster resource group job is cancelled on a node (5 - Member
failure)</li>
</ul>
</td>
<td align="left" valign="top">All cluster resource group types</td>
</tr>
<tr>
<td align="left" valign="top"><strong>17 - Add Device Entry</strong></td>
<td align="left" valign="top">
<ul compact>
<li>Add Cluster Resource Group Device Entry API</li>
<li>Add Cluster Resource Group Device Entry Command</li>
</ul>
</td>
<td align="left" valign="top">Device cluster resource group</td>
</tr>
<tr>
<td align="left" valign="top"><strong>18 - Remove Device Entry</strong></td>
<td align="left" valign="top">
<ul compact>
<li>Remove Cluster Resource Group Device Entry API</li>
<li>Remove Cluster Resource Group Device Entry Command</li>
</ul>
</td>
<td align="left" valign="top">Device cluster resource group</td>
</tr>
<tr>
<td align="left" valign="top"><strong>19 - Change Device Entry</strong></td>
<td align="left" valign="top">
<ul compact>
<li>Change Cluster Resource Group Device Entry API</li>
<li>Change Cluster Resource Group Device Entry Command</li>
</ul>
</td>
<td align="left" valign="top">Device cluster resource group</td>
</tr>
<tr>
<td align="left" valign="top"><strong>20 - Change Node Status</strong></td>
<td align="left" valign="top">
<ul compact>
<li>Change Cluster Node Entry API</li>
<li>Change Cluster Node Entry Command when used to change the status of a
cluster node to Failed.</li>
</ul>
</td>
<td align="left" valign="top">All cluster resource group types</td>
</tr>
<tr>
<td align="left" valign="top"><strong>21 - Failover Cancelled</strong></td>
<td align="left" valign="top">The primary node failed and the failover was
cancelled through the use of the failover message queue. See <a href="#HDRFO">
Causes of the Failover Event</a> for a list of things that cause the failover
event (4 - Node failure, 5 - Member failure, 6 - End node, 7 - Remove node, 8 -
Application failover)</td>
<td align="left" valign="top">All cluster resource group types <img src="delta.gif" alt="Start of change">
except peer<img src="deltaend.gif" alt="End of change"></td>
</tr>
<tr>
<td align="left" valign="top"><strong>22 - Cancel</strong></td>
<td align="left" valign="top"><img src="delta.gif" alt="Start of change">N/A
<img src="deltaend.gif" alt="End of change"></td>
<td align="left" valign="top"><img src="delta.gif" alt="Start of change">N/A
<img src="deltaend.gif" alt="End of change"></td>
</tr>
</table>
<br>
<hr>
Exit program introduced: V4R4
<hr>
<center>
<table cellpadding="2" cellspacing="2">
<tr align="center">
<td valign="middle" align="center"><a href="#Top_Of_Page">Top</a> | <a href=
"clust1.htm">Cluster APIs</a> | <a href="aplist.htm">APIs by category</a></td>
</tr>
</table>
</center>
</body>
</html>