summaryrefslogtreecommitdiff
path: root/docs/programmer_reference/apprec_config.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/programmer_reference/apprec_config.html')
-rw-r--r--docs/programmer_reference/apprec_config.html260
1 files changed, 155 insertions, 105 deletions
diff --git a/docs/programmer_reference/apprec_config.html b/docs/programmer_reference/apprec_config.html
index 444c484a..cfac265c 100644
--- a/docs/programmer_reference/apprec_config.html
+++ b/docs/programmer_reference/apprec_config.html
@@ -14,7 +14,7 @@
<body>
<div xmlns="" class="navheader">
<div class="libver">
- <p>Library Version 11.2.5.3</p>
+ <p>Library Version 12.1.6.1</p>
</div>
<table width="100%" summary="Navigation header">
<tr>
@@ -22,9 +22,8 @@
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="apprec_auto.html">Prev</a> </td>
- <th width="60%" align="center">Chapter 14. 
- Application Specific Logging and Recovery
- </th>
+ <th width="60%" align="center">Chapter 14.  Application Specific Logging and
+ Recovery </th>
<td width="20%" align="right"> <a accesskey="n" href="program.html">Next</a></td>
</tr>
</table>
@@ -38,115 +37,167 @@
</div>
</div>
</div>
- <p>The application should include a dispatch function that dispatches to
-appropriate printing and/or recovery functions based on the log record
-type and the operation code. The dispatch function should take the same
-arguments as the recovery function, and should call the appropriate
-recovery and/or printing functions based on the log record type and the
-operation code. For example, the ex_apprec dispatch function is as
-follows:</p>
+ <p>
+ The application should include a dispatch function that
+ dispatches to appropriate printing and/or recovery functions
+ based on the log record type and the operation code. The
+ dispatch function should take the same arguments as the
+ recovery function, and should call the appropriate recovery
+ and/or printing functions based on the log record type and the
+ operation code. For example, the ex_apprec dispatch function
+ is as follows:
+ </p>
<pre class="programlisting">int
apprec_dispatch(dbenv, dbt, lsn, op)
- DB_ENV *dbenv;
- DBT *dbt;
- DB_LSN *lsn;
- db_recops op;
+ DB_ENV *dbenv;
+ DBT *dbt;
+ DB_LSN *lsn;
+ db_recops op;
{
- u_int32_t rectype;
- /* Pull the record type out of the log record. */
- memcpy(&amp;rectype, dbt-&gt;data, sizeof(rectype));
- switch (rectype) {
- case DB_ex_apprec_mkdir:
- return (ex_apprec_mkdir_recover(dbenv, dbt, lsn, op));
- default:
- /*
- * We've hit an unexpected, allegedly user-defined record
- * type.
- */
- dbenv-&gt;errx(dbenv, "Unexpected log record type encountered");
- return (EINVAL);
- }
+ u_int32_t rectype;
+ /* Pull the record type out of the log record. */
+ memcpy(&amp;rectype, dbt-&gt;data, sizeof(rectype));
+ switch (rectype) {
+ case DB_ex_apprec_mkdir:
+ return (ex_apprec_mkdir_recover(dbenv, dbt, lsn, op));
+ default:
+ /*
+ * We've hit an unexpected, allegedly user-defined record
+ * type.
+ */
+ dbenv-&gt;errx(dbenv, "Unexpected log record type encountered");
+ return (EINVAL);
+ }
}</pre>
- <p>Applications use this dispatch function and the automatically generated
-functions as follows:</p>
+ <p>
+ Applications use this dispatch function and the
+ automatically generated functions as follows:
+ </p>
<div class="orderedlist">
<ol type="1">
- <li>When the application starts, call the <a href="../api_reference/C/envset_app_dispatch.html" class="olink">DB_ENV-&gt;set_app_dispatch()</a>
-with your dispatch function.</li>
- <li>Issue a <a href="../api_reference/C/txnbegin.html" class="olink">DB_ENV-&gt;txn_begin()</a> call before any operations you want to be
-transaction-protected.</li>
- <li>Before accessing any data, issue the appropriate lock call to lock the
-data (either for reading or writing).</li>
- <li>Before modifying any data that is transaction-protected, issue a call
-to the appropriate log function.</li>
- <li>Call <a href="../api_reference/C/txncommit.html" class="olink">DB_TXN-&gt;commit()</a>
-to cancel all of the modifications.</li>
+ <li>
+ When the application starts, call the
+ <a href="../api_reference/C/envset_app_dispatch.html" class="olink">DB_ENV-&gt;set_app_dispatch()</a> with your dispatch
+ function.
+ </li>
+ <li>
+ Issue a <a href="../api_reference/C/txnbegin.html" class="olink">DB_ENV-&gt;txn_begin()</a> call before any operations you
+ want to be transaction-protected.
+ </li>
+ <li>
+ Before accessing any data, issue the appropriate
+ lock call to lock the data (either for reading or
+ writing).
+ </li>
+ <li>
+ Before modifying any data that is
+ transaction-protected, issue a call to the appropriate log
+ function.
+ </li>
+ <li>
+ Call <a href="../api_reference/C/txncommit.html" class="olink">DB_TXN-&gt;commit()</a> to cancel all of the
+ modifications.
+ </li>
</ol>
</div>
- <p>The recovery functions are called in the three following cases:</p>
+ <p>
+ The recovery functions are called in the three following
+ cases:
+ </p>
<div class="orderedlist">
<ol type="1">
- <li>During recovery after application or system failure, with op set to
-<a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_FORWARD_ROLL" class="olink">DB_TXN_FORWARD_ROLL</a> or <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_BACKWARD_ROLL" class="olink">DB_TXN_BACKWARD_ROLL</a>.</li>
- <li>During transaction abort, with op set to <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_ABORT" class="olink">DB_TXN_ABORT</a>.</li>
- <li>On a replicated client to apply updates from the master, with op set to
-<a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_APPLY" class="olink">DB_TXN_APPLY</a>.</li>
+ <li>
+ During recovery after application or system failure,
+ with op set to <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_FORWARD_ROLL" class="olink">DB_TXN_FORWARD_ROLL</a> or
+ <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_BACKWARD_ROLL" class="olink">DB_TXN_BACKWARD_ROLL</a>.
+ </li>
+ <li>
+ During transaction abort, with op set to
+ <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_ABORT" class="olink">DB_TXN_ABORT</a>.
+ </li>
+ <li>
+ On a replicated client to apply updates from the
+ master, with op set to <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_APPLY" class="olink">DB_TXN_APPLY</a>.
+ </li>
</ol>
</div>
- <p>For each log record type you declare, you must write the appropriate
-function to undo and redo the modifications. The shell of these
-functions will be generated for you automatically, but you must fill in
-the details.</p>
- <p>Your code must be able to detect whether the described modifications
-have been applied to the data. The function will be called with the
-"op" parameter set to <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_ABORT" class="olink">DB_TXN_ABORT</a> when a transaction that wrote
-the log record aborts, with <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_FORWARD_ROLL" class="olink">DB_TXN_FORWARD_ROLL</a> and
-<a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_BACKWARD_ROLL" class="olink">DB_TXN_BACKWARD_ROLL</a> during recovery, and with <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_APPLY" class="olink">DB_TXN_APPLY</a>
-on a replicated client.</p>
- <p>The actions for <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_ABORT" class="olink">DB_TXN_ABORT</a> and <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_BACKWARD_ROLL" class="olink">DB_TXN_BACKWARD_ROLL</a>
-should generally be the same, and the actions for
-<a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_FORWARD_ROLL" class="olink">DB_TXN_FORWARD_ROLL</a> and <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_APPLY" class="olink">DB_TXN_APPLY</a> should generally
-be the same. However, if the application is using Berkeley DB replication
-and another thread of control may be performing read operations while
-log records are applied on a replication client, the recovery function
-should perform appropriate locking during <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_APPLY" class="olink">DB_TXN_APPLY</a>
-operations. In this case, the recovery function may encounter deadlocks
-when issuing locking calls. The application should run with the
-deadlock detector, and the recovery function should simply return
-<a class="link" href="program_errorret.html#program_errorret.DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> if a deadlock is detected and a locking
-operation fails with that error.</p>
- <p>The <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_PRINT" class="olink">DB_TXN_PRINT</a> operation should print the log record,
-typically using the auto-generated print function; it is not used in
-the Berkeley DB library, but may be useful for debugging, as in the
-<a href="../api_reference/C/db_printlog.html" class="olink">db_printlog</a> utility. Applications may safely ignore this
-operation code, they may handle printing from the recovery function, or
-they may dispatch directly to the auto-generated print function.</p>
- <p>One common way to determine whether operations need to be undone or
-redone is the use of log sequence numbers (LSNs). For example, each
-access method database page contains the LSN of the most recent log
-record that describes a modification to the page. When the access
-method changes a page, it writes a log record describing the change and
-including the LSN that was on the page before the change. This LSN is
-referred to as the previous LSN. The recovery functions read the page
-described by a log record, and compare the LSN on the page to the LSN
-they were passed.</p>
- <p>If the page LSN is less than the passed LSN and the operation is an
-undo, no action is necessary (because the modifications have not been
-written to the page). If the page LSN is the same as the previous LSN
-and the operation is a redo, the actions described are reapplied to the
-page. If the page LSN is equal to the passed LSN and the operation is
-an undo, the actions are removed from the page; if the page LSN is
-greater than the passed LSN and the operation is a redo, no further
-action is necessary. If the action is a redo and the LSN on the page
-is less than the previous LSN in the log record, it is an error because
-it could happen only if some previous log record was not processed.</p>
- <p>Examples of other recovery functions can be found in the Berkeley DB library
-recovery functions (found in files named XXX_rec.c) and in the
-application-specific recovery example (specifically, ex_apprec_rec.c).</p>
- <p>Finally, applications need to ensure that any data modifications they
-have made, that were part of a committed transaction, must be written
-to stable storage before calling the <a href="../api_reference/C/txncheckpoint.html" class="olink">DB_ENV-&gt;txn_checkpoint()</a> method. This is
-to allow the periodic removal of database environment log files.</p>
+ <p>
+ For each log record type you declare, you must write the
+ appropriate function to undo and redo the modifications. The
+ shell of these functions will be generated for you
+ automatically, but you must fill in the details.
+ </p>
+ <p>
+ Your code must be able to detect whether the described
+ modifications have been applied to the data. The function will
+ be called with the "op" parameter set to <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_ABORT" class="olink">DB_TXN_ABORT</a> when a
+ transaction that wrote the log record aborts, with
+ <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_FORWARD_ROLL" class="olink">DB_TXN_FORWARD_ROLL</a> and <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_BACKWARD_ROLL" class="olink">DB_TXN_BACKWARD_ROLL</a> during
+ recovery, and with <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_APPLY" class="olink">DB_TXN_APPLY</a> on a replicated
+ client.
+ </p>
+ <p>
+ The actions for <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_ABORT" class="olink">DB_TXN_ABORT</a> and <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_BACKWARD_ROLL" class="olink">DB_TXN_BACKWARD_ROLL</a>
+ should generally be the same, and the actions for
+ <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_FORWARD_ROLL" class="olink">DB_TXN_FORWARD_ROLL</a> and <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_APPLY" class="olink">DB_TXN_APPLY</a> should generally be
+ the same. However, if the application is using Berkeley DB
+ replication and another thread of control may be performing
+ read operations while log records are applied on a replication
+ client, the recovery function should perform appropriate
+ locking during <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_APPLY" class="olink">DB_TXN_APPLY</a> operations. In this case, the
+ recovery function may encounter deadlocks when issuing locking
+ calls. The application should run with the deadlock detector,
+ and the recovery function should simply return <a class="link" href="program_errorret.html#program_errorret.DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a>
+ if a deadlock is detected and a locking operation fails with that error.
+ </p>
+ <p>
+ The <a href="../api_reference/C/envset_app_dispatch.html#set_app_dispatch_DB_TXN_PRINT" class="olink">DB_TXN_PRINT</a> operation should print the log record,
+ typically using the auto-generated print function; it is not
+ used in the Berkeley DB library, but may be useful for
+ debugging, as in the <a href="../api_reference/C/db_printlog.html" class="olink">db_printlog</a> utility. Applications may safely
+ ignore this operation code, they may handle printing from the
+ recovery function, or they may dispatch directly to the
+ auto-generated print function.
+ </p>
+ <p>
+ One common way to determine whether operations need to be
+ undone or redone is the use of log sequence numbers (LSNs).
+ For example, each access method database page contains the LSN
+ of the most recent log record that describes a modification to
+ the page. When the access method changes a page, it writes a
+ log record describing the change and including the LSN that
+ was on the page before the change. This LSN is referred to as
+ the previous LSN. The recovery functions read the page
+ described by a log record, and compare the LSN on the page to
+ the LSN they were passed.
+ </p>
+ <p>
+ If the page LSN is less than the passed LSN and the
+ operation is an undo, no action is necessary (because the
+ modifications have not been written to the page). If the page
+ LSN is the same as the previous LSN and the operation is a
+ redo, the actions described are reapplied to the page. If the
+ page LSN is equal to the passed LSN and the operation is an
+ undo, the actions are removed from the page; if the page LSN
+ is greater than the passed LSN and the operation is a redo, no
+ further action is necessary. If the action is a redo and the
+ LSN on the page is less than the previous LSN in the log
+ record, it is an error because it could happen only if some
+ previous log record was not processed.
+ </p>
+ <p>
+ Examples of other recovery functions can be found in the
+ Berkeley DB library recovery functions (found in files named
+ XXX_rec.c) and in the application-specific recovery example
+ (specifically, ex_apprec_rec.c).
+ </p>
+ <p>
+ Finally, applications need to ensure that any data
+ modifications they have made, that were part of a committed
+ transaction, must be written to stable storage before calling
+ the <a href="../api_reference/C/txncheckpoint.html" class="olink">DB_ENV-&gt;txn_checkpoint()</a> method. This is to allow the periodic
+ removal of database environment log files.
+ </p>
</div>
<div class="navfooter">
<hr />
@@ -159,13 +210,12 @@ to allow the periodic removal of database environment log files.</p>
<td width="40%" align="right"> <a accesskey="n" href="program.html">Next</a></td>
</tr>
<tr>
- <td width="40%" align="left" valign="top">Automatically generated functions </td>
+ <td width="40%" align="left" valign="top">Automatically generated
+ functions </td>
<td width="20%" align="center">
<a accesskey="h" href="index.html">Home</a>
</td>
- <td width="40%" align="right" valign="top"> Chapter 15. 
- Programmer Notes
- </td>
+ <td width="40%" align="right" valign="top"> Chapter 15.  Programmer Notes </td>
</tr>
</table>
</div>