mirror of
https://github.com/berkeleydb/je.git
synced 2024-11-15 01:46:24 +00:00
319 lines
17 KiB
HTML
319 lines
17 KiB
HTML
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|||
|
<head>
|
|||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
|||
|
<title>HA Exceptions</title>
|
|||
|
<link rel="stylesheet" href="gettingStarted.css" type="text/css" />
|
|||
|
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
|
|||
|
<link rel="start" href="index.html" title="Getting Started with Berkeley DB, Java Edition High Availability Applications" />
|
|||
|
<link rel="up" href="progoverview.html" title="Chapter 2. Replication API First Steps" />
|
|||
|
<link rel="prev" href="progoverview.html" title="Chapter 2. Replication API First Steps" />
|
|||
|
<link rel="next" href="repenvironmentopen.html" title="Opening a Replicated Environment" />
|
|||
|
</head>
|
|||
|
<body>
|
|||
|
<div xmlns="" class="navheader">
|
|||
|
<div class="libver">
|
|||
|
<p>Library Version 12.2.7.5</p>
|
|||
|
</div>
|
|||
|
<table width="100%" summary="Navigation header">
|
|||
|
<tr>
|
|||
|
<th colspan="3" align="center">HA Exceptions</th>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td width="20%" align="left"><a accesskey="p" href="progoverview.html">Prev</a> </td>
|
|||
|
<th width="60%" align="center">Chapter 2. Replication API First Steps</th>
|
|||
|
<td width="20%" align="right"> <a accesskey="n" href="repenvironmentopen.html">Next</a></td>
|
|||
|
</tr>
|
|||
|
</table>
|
|||
|
<hr />
|
|||
|
</div>
|
|||
|
<div class="sect1" lang="en" xml:lang="en">
|
|||
|
<div class="titlepage">
|
|||
|
<div>
|
|||
|
<div>
|
|||
|
<h2 class="title" style="clear: both"><a id="exceptions"></a>HA Exceptions</h2>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="toc">
|
|||
|
<dl>
|
|||
|
<dt>
|
|||
|
<span class="sect2">
|
|||
|
<a href="exceptions.html#master-exceptions">Master-Specific HA Exceptions</a>
|
|||
|
</span>
|
|||
|
</dt>
|
|||
|
<dt>
|
|||
|
<span class="sect2">
|
|||
|
<a href="exceptions.html#replica-exceptions">Replica-Specific HA Exceptions</a>
|
|||
|
</span>
|
|||
|
</dt>
|
|||
|
<dt>
|
|||
|
<span class="sect2">
|
|||
|
<a href="exceptions.html#handleexception">Replicated Environment Handle-Specific Exceptions</a>
|
|||
|
</span>
|
|||
|
</dt>
|
|||
|
</dl>
|
|||
|
</div>
|
|||
|
<p>
|
|||
|
JE HA requires you to manage more error situations that you
|
|||
|
would have to if you were writing a non-replicated application.
|
|||
|
These error situations translate to additional exceptions that
|
|||
|
you must contend with in your code. Before continuing with our
|
|||
|
description of how to write a replicated application, it is
|
|||
|
useful to review the HA-specific exceptions that your
|
|||
|
application must manage.
|
|||
|
</p>
|
|||
|
<div class="sect2" lang="en" xml:lang="en">
|
|||
|
<div class="titlepage">
|
|||
|
<div>
|
|||
|
<div>
|
|||
|
<h3 class="title"><a id="master-exceptions"></a>Master-Specific HA Exceptions</h3>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<p>
|
|||
|
There are two exceptions that you can see on a Master node,
|
|||
|
and which you will not see anywhere else. They are:
|
|||
|
</p>
|
|||
|
<div class="itemizedlist">
|
|||
|
<ul type="disc">
|
|||
|
<li>
|
|||
|
<p>
|
|||
|
<a class="ulink" href="../java/com/sleepycat/je/rep/InsufficientReplicasException.html" target="_top">InsufficientReplicasException</a>
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
This exception can be raised on a transaction begin or commit. It means that the
|
|||
|
Master cannot successfully commit a transaction, or begin one, because it is not in contact
|
|||
|
with enough Electable Replicas. The number of Electable Replicas required to successfully commit
|
|||
|
the transaction is a function of the durability policy that
|
|||
|
you have set for the transaction. See
|
|||
|
<a class="xref" href="txn-management.html#durability" title="Managing Durability">Managing Durability</a>
|
|||
|
for more information.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
If raised on a transaction commit operation, this
|
|||
|
exception means that the transaction has not been
|
|||
|
committed. Instead, it has been marked as invalid.
|
|||
|
In response to this exception, your application
|
|||
|
must at a minimum abort the transaction. It is up
|
|||
|
to you whether you want to retry the transaction at
|
|||
|
some later time when more Replicas are in contact
|
|||
|
with the Master.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
If raised on a transaction begin operation, this
|
|||
|
exception means that the transaction has not begun.
|
|||
|
If the application intended to initiate a read-only
|
|||
|
transaction on a Master, it can avoid this
|
|||
|
exception by ensuring that the transaction is
|
|||
|
configured to not require any acknowledgments. For
|
|||
|
information on configuring acknowledgments, see
|
|||
|
<a class="xref" href="txn-management.html#managingacks" title="Managing Acknowledgements">Managing Acknowledgements</a>.
|
|||
|
</p>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<p>
|
|||
|
<a class="ulink" href="../java/com/sleepycat/je/rep/InsufficientAcksException.html" target="_top">InsufficientAcksException</a>
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
This exception can be raised on a transaction commit. It means that the
|
|||
|
Master has successfully committed the transaction locally, but it has not
|
|||
|
received enough acknowledgements from its Electable Replicas in the timeframe
|
|||
|
allocated for acknowledgements to be received.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
The application should respond to this exception in such a way as to alert
|
|||
|
the administrator that there might be a problem with the health of the
|
|||
|
network or the nodes participating in the replication group.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
For information on how to manage acknowledgement policies, see
|
|||
|
<a class="xref" href="txn-management.html#managingacks" title="Managing Acknowledgements">Managing Acknowledgements</a>.
|
|||
|
</p>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="sect2" lang="en" xml:lang="en">
|
|||
|
<div class="titlepage">
|
|||
|
<div>
|
|||
|
<div>
|
|||
|
<h3 class="title"><a id="replica-exceptions"></a>Replica-Specific HA Exceptions</h3>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<p>
|
|||
|
The exceptions that you can see on a Replica, and nowhere else, are:
|
|||
|
</p>
|
|||
|
<div class="itemizedlist">
|
|||
|
<ul type="disc">
|
|||
|
<li>
|
|||
|
<p>
|
|||
|
<a class="ulink" href="../java/com/sleepycat/je/rep/ReplicaConsistencyException.html" target="_top">ReplicaConsistencyException</a>
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
Indicates that the Replica was unable to meet the defined consistency
|
|||
|
requirements in the allocated period of time.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
If this exception is encountered frequently, it indicates that the
|
|||
|
consistency policy requirements are too strict and cannot be met routinely
|
|||
|
given the load being placed on the system and the hardware resources that
|
|||
|
are available to service the load. The exception may also indicate that
|
|||
|
there is a network related issue that is preventing the Replica from
|
|||
|
communicating with the Master and keeping up with the replication stream.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
In response to this exception, your application can either attempt to retry
|
|||
|
the transaction, or you can relax your application's consistency
|
|||
|
requirements until the transaction can successfully complete.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
For information on managing consistency policies, see
|
|||
|
<a class="xref" href="consistency.html" title="Managing Consistency">Managing Consistency</a>.
|
|||
|
</p>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<p>
|
|||
|
<a class="ulink" href="../java/com/sleepycat/je/rep/ReplicaWriteException.html" target="_top">ReplicaWriteException</a>
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
An attempt was made to perform a write operation on a Replica. The exception
|
|||
|
typically indicates an error in the application logic. In some extremely
|
|||
|
rare cases it could be the result of a transition of the node from Master to
|
|||
|
Replica, while a transaction was in progress.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
The application must abort the current transaction and redirect all
|
|||
|
subsequent update operations to the Master. For
|
|||
|
example code that performs this action, see
|
|||
|
<a class="xref" href="runtransaction.html" title="Example Run Transaction Class">Example Run Transaction Class</a>.
|
|||
|
</p>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<p>
|
|||
|
<a class="ulink" href="../java/com/sleepycat/je/rep/LockPreemptedException.html" target="_top">LockPreemptedException</a>
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
A read lock currently held by a Replica has been preempted by an HA write
|
|||
|
operation. The Replica should abort and retry the read operation in response
|
|||
|
to this exception.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
Note that your application should attempt to catch the
|
|||
|
<a class="ulink" href="../java/com/sleepycat/je/LockConflictException.html" target="_top">LockConflictException</a> base class rather than this class because all of the
|
|||
|
locking exceptions are managed in the same way (abort and retry the
|
|||
|
transaction).
|
|||
|
</p>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<p>
|
|||
|
<a class="ulink" href="../java/com/sleepycat/je/rep/DatabasePreemptedException.html" target="_top">DatabasePreemptedException</a>
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
The database handle on a Replica was forcibly closed due to the replay of an
|
|||
|
<a class="ulink" href="../java/com/sleepycat/je/Environment.html#truncateDatabase(com.sleepycate.je.Transaction,java.lang.String,boolean)" target="_top">Environment.truncateDatabase()</a>, <a class="ulink" href="../java/com/sleepycat/je/Environment.html#removeDatabase(com.sleepycate.je.Transaction,java.lang.String)" target="_top">Environment.removeDatabase()</a> or
|
|||
|
<a class="ulink" href="../java/com/sleepycat/je/Environment.html#renameDatabase(com.sleepycate.je.Transaction,java.lang.String,java.lang.String)" target="_top">Environment.renameDatabase()</a> operation in the
|
|||
|
replication stream.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
When this exception occurs, the application must close any open Cursors and
|
|||
|
abort any open Transactions that are using the database, and then close the
|
|||
|
Database handle. If the application wishes, it may reopen the database if it
|
|||
|
still exists.
|
|||
|
</p>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<p>
|
|||
|
<a class="ulink" href="../java/com/sleepycat/je/rep/RollbackException.html" target="_top">RollbackException</a>
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
A new master has been selected, this Replica's log is ahead of the current
|
|||
|
Master, but the Replica was unable to rollback without a
|
|||
|
recovery. As a consequence, one or more of the most recently committed
|
|||
|
transactions may need to be rolled back, before the Replica can synchronize
|
|||
|
its state with that of the current Master. This
|
|||
|
exception can happen if the electable Replica with the most
|
|||
|
recent log files was unable to participate in the
|
|||
|
election of the Master, perhaps because the node
|
|||
|
had been shut down.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
For details on how to handle this exception, see
|
|||
|
<a class="xref" href="txnrollback.html" title="Managing Transaction Rollbacks">Managing Transaction Rollbacks</a>.
|
|||
|
</p>
|
|||
|
</li>
|
|||
|
<li>
|
|||
|
<p>
|
|||
|
<a class="ulink" href="../java/com/sleepycat/je/rep/InsufficientLogException.html" target="_top">InsufficientLogException</a>
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
Indicates that the log files constituting the Environment are insufficient
|
|||
|
and cannot be used as the basis for continuing with the replication stream
|
|||
|
provided by the current master.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
This exception generally means that the node has been down for a long enough
|
|||
|
time that it can not be brought up-to-date by the Master. For information on
|
|||
|
how to respond to this condition, see
|
|||
|
<a class="xref" href="logfile-restore.html" title="Restoring Log Files">Restoring Log Files</a>.
|
|||
|
</p>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="sect2" lang="en" xml:lang="en">
|
|||
|
<div class="titlepage">
|
|||
|
<div>
|
|||
|
<div>
|
|||
|
<h3 class="title"><a id="handleexception"></a>Replicated Environment Handle-Specific Exceptions</h3>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<p>
|
|||
|
In addition to Master- and Replica-specific exceptions, it is possible for a
|
|||
|
<a class="ulink" href="../java/com/sleepycat/je/rep/ReplicatedEnvironment.html" target="_top">ReplicatedEnvironment</a> handle to throw an <a class="ulink" href="../java/com/sleepycat/je/rep/UnknownMasterException.html" target="_top">UnknownMasterException</a>. This exception
|
|||
|
indicates that the operation being tried requires communication with a Master, but
|
|||
|
the Master is not available.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
This exception typically indicates that there is a problem with your physical
|
|||
|
infrastructure. It might mean that an insufficient number of electable nodes are available to
|
|||
|
elect a Master, or that the current node is unable to communicate with other nodes
|
|||
|
due to, for example, network problems.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
In response to this exception, your application can try any number of corrective
|
|||
|
actions, from immediately retrying the operation, to logging the problem and then
|
|||
|
abandoning the operation, to waiting some predetermined period of time before
|
|||
|
attempting the operation again. Your application can also
|
|||
|
use the <a class="ulink" href="../java/com/sleepycat/je/rep/monitor/Monitor.html" target="_top">Monitor</a> or the <a class="ulink" href="../java/com/sleepycat/je/rep/StateChangeListener.html" target="_top">StateChangeListener</a> to be
|
|||
|
notified when a Master becomes available. For more
|
|||
|
information see <a class="xref" href="monitors.html" title="Chapter 5. Writing Monitor Nodes">Writing Monitor Nodes</a>
|
|||
|
or <a class="xref" href="replicawrites.html#using-statechangelistener" title="Using the StateChangeListener">Using the StateChangeListener</a>.
|
|||
|
</p>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="navfooter">
|
|||
|
<hr />
|
|||
|
<table width="100%" summary="Navigation footer">
|
|||
|
<tr>
|
|||
|
<td width="40%" align="left"><a accesskey="p" href="progoverview.html">Prev</a> </td>
|
|||
|
<td width="20%" align="center">
|
|||
|
<a accesskey="u" href="progoverview.html">Up</a>
|
|||
|
</td>
|
|||
|
<td width="40%" align="right"> <a accesskey="n" href="repenvironmentopen.html">Next</a></td>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td width="40%" align="left" valign="top">Chapter 2. Replication API First Steps </td>
|
|||
|
<td width="20%" align="center">
|
|||
|
<a accesskey="h" href="index.html">Home</a>
|
|||
|
</td>
|
|||
|
<td width="40%" align="right" valign="top"> Opening a Replicated Environment</td>
|
|||
|
</tr>
|
|||
|
</table>
|
|||
|
</div>
|
|||
|
</body>
|
|||
|
</html>
|