ibm-information-center/dist/eclipse/plugins/i5OS.ic.rzakj_5.4.0.1/rzakjnowaitoutcome.htm

137 lines
9.8 KiB
HTML
Raw Normal View History

2024-04-02 14:02:31 +00:00
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en-us" xml:lang="en-us">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="security" content="public" />
<meta name="Robots" content="index,follow" />
<meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' />
<meta name="DC.Type" content="concept" />
<meta name="DC.Title" content="Commitment definition for two-phase commit: Not wait for outcome" />
<meta name="abstract" content="When a communication or system failure occurs during a commit operation so that resynchronization is required, the default is to wait until the resynchronization is finished before the commit operation completes." />
<meta name="description" content="When a communication or system failure occurs during a commit operation so that resynchronization is required, the default is to wait until the resynchronization is finished before the commit operation completes." />
<meta name="DC.Relation" scheme="URI" content="rzakjcommitdefs_tp.htm" />
<meta name="DC.Relation" scheme="URI" content="../apis/QTNCHGCO.htm" />
<meta name="DC.Relation" scheme="URI" content="rzakjstates.htm" />
<meta name="DC.Relation" scheme="URI" content="rzakjcommiterror.htm" />
<meta name="copyright" content="(C) Copyright IBM Corporation 2004, 2006" />
<meta name="DC.Rights.Owner" content="(C) Copyright IBM Corporation 2004, 2006" />
<meta name="DC.Format" content="XHTML" />
<meta name="DC.Identifier" content="rzakjnowaitoutcome" />
<meta name="DC.Language" content="en-us" />
<!-- 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. -->
<link rel="stylesheet" type="text/css" href="./ibmdita.css" />
<link rel="stylesheet" type="text/css" href="./ic.css" />
<title>Commitment definition for two-phase commit: Not wait for outcome</title>
</head>
<body id="rzakjnowaitoutcome"><a name="rzakjnowaitoutcome"><!-- --></a>
<!-- Java sync-link --><script language="Javascript" src="../rzahg/synch.js" type="text/javascript"></script>
<h1 class="topictitle1">Commitment definition for two-phase commit: Not wait for outcome</h1>
<div><p>When a communication or system failure occurs during a commit operation
so that resynchronization is required, the default is to wait until the resynchronization
is finished before the commit operation completes.</p>
<div class="note"><span class="notetitle">Note:</span> The Not wait for outcome option does not apply if you are using a DRDA<sup>®</sup> distributed
unit of work over TCP/IP connection. DRDA distributed unit of work over TCP/IP
connections never waits for outcome.</div>
<p>Consider changing this behavior if the following conditions are true:</p>
<ul><li>The applications that participate are independent of each other.</li>
<li>Your program logic does not need the results of previous transactions
to ensure that your database files remain synchronized.</li>
</ul>
<p>After you start commitment control, you can use the Change Commitment Options
(QTNCHGCO) API to specify that the commitment definition does not wait for
the outcome of resynchronization. If you specify N (No) for the <samp class="codeph">Wait
for outcome</samp> option, the system uses a database server job (QDBSRVnn)
to handle resynchronization asynchronously.</p>
<div class="note"><span class="notetitle">Note:</span> These database server jobs are started during the IPL process. If you
change the options for commitment control, this has no effect on the number
of jobs that the system starts.</div>
<p>This topic only refers to two values for the resolved <samp class="codeph">Wait for
outcome</samp> option, Y (Yes) and N (No). There are actually two more values
that you can specify, L (Yes or Inherit from Initiator) and U (No or Inherit
from Initiator). When you use these values, the actual value used during each
commit operation is resolved to Yes or No by the system. The QTNCHGCO (Change
Commitment Options) API topic has more details about these values.</p>
<div class="note"><span class="notetitle">Note:</span> The initiator's value can only be inherited by an agent if both the
initiator and the agent support presumed abort.</div>
<p>The <samp class="codeph">wait for outcome</samp> (WFO) option does not affect normal,
error-free commit processing. If an error occurs, the WFO option determines
whether the application waits for resynchronization or not, with the following
conditions:</p>
<ul><li>If the resolved WFO option is Y (Yes), the application waits for the result
of the resynchronization. </li>
<li>If the resolved WFO option is N (No) and a communication failure occurs
during the prepare wave or rollback of a location that supports presumed abort
protocols, no resynchronization is performed and the commitment definition
is rolled back.</li>
<li>If the commitment definition is in doubt (transaction state is prepared
or Last Agent Pending), the application will wait for the result of the resynchronization
regardless of the resolved WFO value.</li>
<li>If the resolved WFO option is N and neither one of conditions two or three
is true, the system attempts to resynchronize once. If it is not successful,
the system signals STATUS message CPF83E6 to the application to indicate that
resynchronization is in progress. <p>Because CPF83E6 is a STATUS message,
it only has an effect if the application is monitoring for it. Normally, your
application can treat this message as an informational message. The systems
that are participating in the transaction attempt to resynchronize the transaction
until the failure is repaired. These subsequent resynchronization attempts
are performed in the database server jobs. If a subsequent resynchronization
attempt that is performed in a database server job fails, the message CPI83D0
is sent to QSYSOPR.</p>
</li>
</ul>
<div class="section"><h4 class="sectiontitle">Wait for outcome value: Yes</h4><p>In the following figure,
the commitment definition for the initiator (I) uses the default value of
Y (Yes) for the <samp class="codeph">Wait for outcome</samp> option. When communications
between TM-I and TM-A is lost, both application A and application I wait until
the transaction is resynchronized.</p>
<br /><img src="rzakj517.gif" alt="Flow of wait for outcome-Yes" /><br /></div>
<div class="section"><h4 class="sectiontitle">Wait for outcome value: No</h4><p>In the following figure,
the commitment definition for the initiator has the resolved WFO set to N
(No). TM-A meets condition 3 in the preceding list, while TM-I meets condition
4. Control is returned to application I after one attempt to resynchronize
with TM-A. A database server job attempts to resynchronize. Application I
never receives the return indicator when the commit request has completed
successfully. Control is not returned to the agent application (A) until after
communications is reestablished. This depends on the timing of the failure.
In this case, the communications failure occurs before the commit message
is received from the initiator, leaving TM-A in doubt as to whether to commit
or rollback. When the transaction manager is in doubt, it retains control
until the resynchronization is completed, regardless of the resolved WFO value
at that system.</p>
<p>If you want the applications at all systems to continue
before resynchronization completes, you must either change the resolved WFO
option to N (No) on all systems, or set the initiator to N and the rest of
the systems to U (No or Inherit from Initiator). But remember that the resolved
WFO option is ignored when the transaction manager is in doubt as to whether
to commit or rollback, and always waits until resynchronization completes
before returning control.</p>
<br /><img src="rzakj513.gif" alt="Flow of wait for outcome-No" /><br /><p>When a connection is made to a remote relational
database, and no protected conversations have already been started, the system
implicitly changes the <samp class="codeph">Wait for outcome</samp> value to N. The reason
for this is that the performance of commit operations is improved when the <samp class="codeph">Wait
for outcome</samp> value is N and the remote system supports presumed abort.
This implicit change of the <samp class="codeph">Wait for outcome</samp> value is only
performed for DRDA and
DDM applications. APPC applications use the default <samp class="codeph">Wait for outcome</samp> value
of Y unless they call the QTNCHGCO API to change it.</p>
</div>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="rzakjcommitdefs_tp.htm" title="After you start commitment control, you can use the Change Commitment Options (QTNCHGCO) API to change the commitment options for your transaction.">Commitment definitions for two-phase commitment control</a></div>
</div>
<div class="relconcepts"><strong>Related concepts</strong><br />
<div><a href="rzakjstates.htm" title="A commitment definition is established at each location that is part of the transaction program network. For each commitment definition, the system keeps track of the state of its current transaction and previous transaction.">States of the transaction for two-phase commitment control</a></div>
<div><a href="rzakjcommiterror.htm" title="When you use commitment control, it is important to understand which conditions cause errors and which do not.">Commitment control errors</a></div>
</div>
<div class="relref"><strong>Related reference</strong><br />
<div><a href="../apis/QTNCHGCO.htm">Change Commitment Options (QTNCHGCO) API</a></div>
</div>
</div>
</body>
</html>