summaryrefslogtreecommitdiff
path: root/docs/programmer_reference/rep_replicate.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/programmer_reference/rep_replicate.html')
-rw-r--r--docs/programmer_reference/rep_replicate.html538
1 files changed, 297 insertions, 241 deletions
diff --git a/docs/programmer_reference/rep_replicate.html b/docs/programmer_reference/rep_replicate.html
index 4068e278..dd848b85 100644
--- a/docs/programmer_reference/rep_replicate.html
+++ b/docs/programmer_reference/rep_replicate.html
@@ -3,28 +3,27 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <title>Running Replication using the db_replicate Utility</title>
+ <title>Running replication using the db_replicate utility</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="Berkeley DB Programmer's Reference Guide" />
<link rel="up" href="rep.html" title="Chapter 12.  Berkeley DB Replication" />
<link rel="prev" href="rep_mgrmulti.html" title="Running Replication Manager in multiple processes" />
- <link rel="next" href="rep_mgr_ack.html" title="Choosing a Replication Manager Ack Policy" />
+ <link rel="next" href="rep_mgr_ack.html" title="Choosing a Replication Manager acknowledgement policy" />
</head>
<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>
- <th colspan="3" align="center">Running Replication using the db_replicate Utility</th>
+ <th colspan="3" align="center">Running replication using the
+ db_replicate utility</th>
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="rep_mgrmulti.html">Prev</a> </td>
- <th width="60%" align="center">Chapter 12. 
- Berkeley DB Replication
- </th>
+ <th width="60%" align="center">Chapter 12.  Berkeley DB Replication </th>
<td width="20%" align="right"> <a accesskey="n" href="rep_mgr_ack.html">Next</a></td>
</tr>
</table>
@@ -34,7 +33,8 @@
<div class="titlepage">
<div>
<div>
- <h2 class="title" style="clear: both"><a id="rep_replicate"></a>Running Replication using the db_replicate Utility</h2>
+ <h2 class="title" style="clear: both"><a id="rep_replicate"></a>Running replication using the
+ db_replicate utility</h2>
</div>
</div>
</div>
@@ -42,125 +42,159 @@
<dl>
<dt>
<span class="sect2">
- <a href="rep_replicate.html#idp2251336">One Replication Process and Multiple Subordinate Processes</a>
+ <a href="rep_replicate.html#idp1926936">One replication process and multiple subordinate processes</a>
</span>
</dt>
<dt>
<span class="sect2">
- <a href="rep_replicate.html#idp2268704">Common Use Case</a>
+ <a href="rep_replicate.html#idp1906152">Common use case</a>
</span>
</dt>
<dt>
<span class="sect2">
- <a href="rep_replicate.html#idp2278848">Avoiding Rollback</a>
+ <a href="rep_replicate.html#idp1939624">Avoiding rollback</a>
</span>
</dt>
<dt>
<span class="sect2">
- <a href="rep_replicate.html#idp2283896">When to Consider an Integrated HA Application</a>
+ <a href="rep_replicate.html#idp1937856">When to consider an integrated replication application</a>
</span>
</dt>
</dl>
</div>
- <p>Replication Manager supports shared access to a database
-environment from multiple processes. Berkeley DB provides a
-replication-aware utility, db_replicate, that enables you to upgrade an existing Transactional Data Store
-application, as discussed in the <a class="xref" href="transapp.html#transapp_intro" title="Transactional Data Store introduction">Transactional Data Store introduction</a> section,
-to an HA application with
-minor modifications. While the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility simplifies the use
-of replication with a TDS application, you
-must still understand replication and its impact on the application.
-</p>
+ <p>
+ Replication Manager supports shared access to a database
+ environment from multiple processes. Berkeley DB provides a
+ replication-aware utility, db_replicate, that enables you to
+ upgrade an existing Transactional Data Store application, as
+ discussed in the <a class="xref" href="transapp.html#transapp_intro" title="Transactional Data Store introduction">Transactional Data Store introduction</a> section, to a replication
+ application with minor modifications. While the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility
+ simplifies the use of replication with a Transactional Data
+ Store application, you must still understand replication and
+ its impact on the application.
+ </p>
<div class="sect2" lang="en" xml:lang="en">
<div class="titlepage">
<div>
<div>
- <h3 class="title"><a id="idp2251336"></a>One Replication Process and Multiple Subordinate Processes</h3>
+ <h3 class="title"><a id="idp1926936"></a>One replication process and multiple subordinate processes</h3>
</div>
</div>
</div>
- <p>Based on the terminology introduced in the <a class="xref" href="rep_mgrmulti.html" title="Running Replication Manager in multiple processes">Running Replication Manager in multiple processes</a> section,
-application processes are "subordinate processes" and the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility
-is the "primary replication process".</p>
<p>
-You must consider the following items when
-planning to use the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility in combination with
-a TDS application.
-</p>
+ Based on the terminology introduced in the <a class="xref" href="rep_mgrmulti.html" title="Running Replication Manager in multiple processes">Running Replication Manager in
+ multiple processes</a>
+ section, application processes are subordinate processes
+ and the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility is the replication process.
+ </p>
+ <p>
+ You must consider the following items when planning to
+ use the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility in combination with a Transactional
+ Data Store application.
+ </p>
<div class="itemizedlist">
<ul type="disc">
- <li>Memory regions
- <p>
- The <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility requires shared memory access among
- separate processes, and therefore cannot be used with <a href="../api_reference/C/envopen.html#envopen_DB_PRIVATE" class="olink">DB_PRIVATE</a>.
- </p></li>
- <li>Multi-process implications
- <p>
- You must understand and accept all of the TDS implications
- of multi-process use as specified in <a class="xref" href="transapp_app.html" title="Architecting Transactional Data Store applications">Architecting Transactional Data Store applications</a>. Special attention should be
- paid to the coordination needed for unrelated processes to
- start up correctly.
- </p></li>
- <li>Replication configuration
- <p>
- Several configuration settings are required for replication.
- You must set the <a href="../api_reference/C/envopen.html#envopen_DB_INIT_REP" class="olink">DB_INIT_REP</a>
- and <a href="../api_reference/C/dbopen.html#open_DB_THREAD" class="olink">DB_THREAD</a> flags for the <a href="../api_reference/C/envopen.html" class="olink">DB_ENV-&gt;open()</a> method.
- Another required configuration item is the local address. You identify
- this by creating a <a href="../api_reference/C/db_site.html" class="olink">DB_SITE</a> handle and then setting the
- <code class="literal">DB_LOCAL_SITE</code> parameter using the
- <a href="../api_reference/C/dbsite_set_config.html" class="olink">DB_SITE-&gt;set_config()</a> method. You also tell sites how to contact other
- sites by creating <a href="../api_reference/C/db_site.html" class="olink">DB_SITE</a> handles for those sites.
- Most replication configuration options start with reasonable
- defaults, but applications have to customize
- at least some of them. You can set all replication related configuration options
- either programmatically or in the <a href="../api_reference/C/configuration_reference.html" class="olink">DB_CONFIG</a> file.
- </p></li>
- <li> Starting the application and replication
- <p>
- The <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility assumes that an
- environment exists and that the application has run recovery,
- if necessary, and created and configured the environment.
- The startup flow of a typical TDS application may not be the
- best flow for a replication application and you
- must understand the issues involved.
- For instance, if an application starts, runs recovery,
- and performs update operations before starting the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility,
- then if that site becomes a client when replication starts,
- those update operations will be rolled back.
- </p></li>
- <li> Handling events
- <p>
- Almost all of the replication-specific events are handled
- by the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility process, and therefore the application
- process does not see them. If the application needs to know
- the information from those replication-specific events, such as
- role changes, the application must call the <a href="../api_reference/C/repstat.html" class="olink">rep_stat()</a> method method.
- The one replication-specific event the application can now
- receive is the <a href="../api_reference/C/envevent_notify.html#event_notify_DB_EVENT_REP_PERM_FAILED" class="olink">DB_EVENT_REP_PERM_FAILED</a> event.
- See <a class="xref" href="rep_mgr_ack.html" title="Choosing a Replication Manager Ack Policy">Choosing a Replication Manager Ack Policy</a>
- for additional information about this event.
- </p></li>
- <li> Handling errors
- <p>
- There are some error return values that relate only to replication.
- Specifically, the <code class="literal">DB_REP_HANDLE_DEAD</code> error should now be handled
- by the application. Also, if master leases are in use, then the
- application also needs to consider the <code class="literal">DB_REP_LEASE_EXPIRED</code> error.
- </p></li>
- <li> Flexibility tradeoff
- <p>
- You are giving up flexibility
- for the ease of use of the utility.
- Application complexity or requirements may eventually
- dictate integrating HA calls into the application
- over using the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility. </p></li>
- <li> Read-only client application
- <p>
- The application requires additional changes to manage
- the read-only status when the application takes on the role of
- a client.
- </p></li>
+ <li>
+ Memory regions
+ <p>
+ The <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility
+ requires shared memory access among separate
+ processes, and therefore cannot be used with
+ <a href="../api_reference/C/envopen.html#envopen_DB_PRIVATE" class="olink">DB_PRIVATE</a>.
+ </p></li>
+ <li>
+ Multi-process implications
+ <p>
+ You must
+ understand and accept all of the Transactional
+ Data Store implications of multi-process use as
+ specified in <a class="xref" href="transapp_app.html" title="Architecting Transactional Data Store applications">Architecting Transactional Data
+ Store applications</a>. Special
+ attention should be paid to the coordination
+ needed for unrelated processes to start up
+ correctly.
+ </p></li>
+ <li>
+ Replication configuration
+ <p>
+ Several
+ configuration settings are required for
+ replication. You must set the <a href="../api_reference/C/envopen.html#envopen_DB_INIT_REP" class="olink">DB_INIT_REP</a> and
+ <a href="../api_reference/C/dbopen.html#open_DB_THREAD" class="olink">DB_THREAD</a> flags for the <a href="../api_reference/C/envopen.html" class="olink">DB_ENV-&gt;open()</a> method.
+ Another required configuration item is the local
+ address. You identify this by creating a <a href="../api_reference/C/db_site.html" class="olink">DB_SITE</a>
+ handle and then setting the
+ <code class="literal">DB_LOCAL_SITE</code> parameter
+ using the <a href="../api_reference/C/dbsite_set_config.html" class="olink">DB_SITE-&gt;set_config()</a> method. You also
+ tell sites how to contact other sites by creating
+ <a href="../api_reference/C/db_site.html" class="olink">DB_SITE</a> handles for those sites. Most replication
+ configuration options start with reasonable
+ defaults, but applications have to customize at
+ least some of them. You can set all replication
+ related configuration options either
+ programmatically or in the <a href="../api_reference/C/configuration_reference.html" class="olink">DB_CONFIG</a> file.
+ </p></li>
+ <li>
+ Starting the application and replication
+ <p>
+ The <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility assumes that an environment
+ exists and that the application has run recovery,
+ if necessary, and created and configured the
+ environment. The startup flow of a typical
+ Transactional Data Store application may not be
+ the best flow for a replication application and
+ you must understand the issues involved. For
+ instance, if an application starts, runs recovery,
+ and performs update operations before starting the
+ <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility, then if that site becomes a client
+ when replication starts, those update operations
+ will be rolled back.
+ </p></li>
+ <li>
+ Handling events
+ <p>
+ Almost all of the
+ replication-specific events are handled by the
+ <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility process, and therefore the
+ application process does not see them. If the
+ application needs to know the information from
+ those replication-specific events, such as role
+ changes, the application must call the <a href="../api_reference/C/repstat.html" class="olink">rep_stat()</a> method
+ method. The one replication-specific event the
+ application can now receive is the
+ <a href="../api_reference/C/envevent_notify.html#event_notify_DB_EVENT_REP_PERM_FAILED" class="olink">DB_EVENT_REP_PERM_FAILED</a> event. See <a class="xref" href="rep_mgr_ack.html" title="Choosing a Replication Manager acknowledgement policy">Choosing a Replication Manager acknowledgement policy</a> for additional
+ information about this event.
+ </p></li>
+ <li>
+ Handling errors
+ <p>
+ There are some error
+ return values that relate only to replication.
+ Specifically, the
+ <code class="literal">DB_REP_HANDLE_DEAD</code> error
+ should now be handled by the application. Also, if
+ master leases are in use, then the application
+ also needs to consider the
+ <code class="literal">DB_REP_LEASE_EXPIRED</code> error.
+ </p></li>
+ <li>
+ Flexibility tradeoff
+ <p>
+ You are giving up
+ flexibility for the ease of use of the utility.
+ Application complexity or requirements may
+ eventually dictate integrating replication calls
+ into the application instead of using the
+ <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility.
+ </p></li>
+ <li>
+ Read-only client application
+ <p>
+ The
+ application requires additional changes to manage
+ the read-only status when the application takes on
+ the role of a client.
+ </p></li>
</ul>
</div>
</div>
@@ -168,197 +202,218 @@ a TDS application.
<div class="titlepage">
<div>
<div>
- <h3 class="title"><a id="idp2268704"></a>Common Use Case</h3>
+ <h3 class="title"><a id="idp1906152"></a>Common use case</h3>
</div>
</div>
</div>
<p>
-This section lists the steps needed to get replication running for
-a common use case of the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility.
-The use case presented is an existing TDS application that
-already has its environment and databases created and is up and running.
-At some point, HA is considered because failover protection
-or balancing the read load may now be desired.
-</p>
+ This section lists the steps needed to get replication
+ running for a common use case of the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility. The
+ use case presented is an existing Transactional Data Store
+ application that already has its environment and databases
+ created and is up and running. At some point, replication
+ is considered because failover protection or balancing the
+ read load may now be desired.
+ </p>
<div class="orderedlist">
<ol type="1">
<li>
- <p>
- To understand the issues involved in a replication/HA application, see
- the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility section in the <span class="emphasis"><em>API Reference Guide</em></span>, the <a href="../api_reference/C/rep.html" class="olink">Replication Chapter</a> in the <span class="emphasis"><em>
- Programmer's Reference Guide</em></span>, and the source code of the ex_rep_mgr
- example program.
- </p>
+ <p>
+ To understand the issues involved in a
+ replication application, see the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility
+ section in the <span class="emphasis"><em>API Reference
+ Guide</em></span>, the <a href="../api_reference/C/rep.html" class="olink">Replication Chapter</a> in the
+ <span class="emphasis"><em> Programmer's Reference
+ Guide</em></span>, and the source code of the
+ ex_rep_mgr example program.
+ </p>
</li>
<li>
- <p>
- Make a local hot backup of the current
- application environment to a new location to use as a testing area.
- </p>
+ <p>
+ Make a local hot backup of the current
+ application environment to a new location to use
+ as a testing area.
+ </p>
</li>
<li>
- <p>
- Add the <a href="../api_reference/C/envopen.html#envopen_DB_INIT_REP" class="olink">DB_INIT_REP</a> and <a href="../api_reference/C/dbopen.html#open_DB_THREAD" class="olink">DB_THREAD</a> flags (if not already
- being used) to the application or the <a href="../api_reference/C/configuration_reference.html" class="olink">DB_CONFIG</a> file.
- </p>
+ <p>
+ Add the <a href="../api_reference/C/envopen.html#envopen_DB_INIT_REP" class="olink">DB_INIT_REP</a> and <a href="../api_reference/C/dbopen.html#open_DB_THREAD" class="olink">DB_THREAD</a> flags (if
+ not already being used) to the application or the
+ <a href="../api_reference/C/configuration_reference.html" class="olink">DB_CONFIG</a> file.
+ </p>
</li>
<li>
<p>
- Modify the <a href="../api_reference/C/configuration_reference.html" class="olink">DB_CONFIG</a> file to add the necessary replication
- configuration values. At a minimum, the local
- host and port information must be added using
- the <a href="../api_reference/C/repmgr_site_parameter.html" class="olink">repmgr_site</a> method parameter.
- As more sites are added to the group, remote host and port
- information can optionally also be added by adding
- more <a href="../api_reference/C/repmgr_site_parameter.html" class="olink">repmgr_site</a> method parameters to the <a href="../api_reference/C/configuration_reference.html" class="olink">DB_CONFIG</a> file file.
- </p>
+ Modify the <a href="../api_reference/C/configuration_reference.html" class="olink">DB_CONFIG</a> file to add the necessary
+ replication configuration values. At a minimum,
+ the local host and port information must be added
+ using the <a href="../api_reference/C/repmgr_site_parameter.html" class="olink">repmgr_site</a> method parameter. As
+ more sites are added to the group, remote host and
+ port information can optionally also be added by
+ adding more <a href="../api_reference/C/repmgr_site_parameter.html" class="olink">repmgr_site</a> method parameters to
+ the <a href="../api_reference/C/configuration_reference.html" class="olink">DB_CONFIG</a> file.
+ </p>
</li>
<li>
- <p>
- Rebuild the application and restart
- it in the current testing directory.
- </p>
+ <p>
+ Rebuild the application and restart it in the
+ current testing directory.
+ </p>
</li>
<li>
<p>
- Start the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility on the master site with the -M option and
- any other options needed such as -h for the home directory.
- At this point you have a lone master site running in an
- environment with no other replicated sites in the group.
- </p>
+ Start the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility on the master site
+ with the -M option and any other options needed
+ such as -h for the home directory. At this point
+ you have a lone master site running in an
+ environment with no other replicated sites in the
+ group.
+ </p>
</li>
<li>
- <p>
- Optionally, prepare to start a client site by performing a
- manual hot backup of the running master environment to
- initialize a client target directory. While replication
- can make its own copy, the hot backup will expedite the
- synchronization process. Also, if the application assumes
- the existence of a database and the client site is started
- without data, the application may have errors or incorrectly
- attempt to create the database.
- </p>
+ <p>
+ Optionally, prepare to start a client site by
+ performing a manual hot backup of the running
+ master environment to initialize a client target
+ directory. While replication can make its own
+ copy, the hot backup will expedite the
+ synchronization process. Also, if the application
+ assumes the existence of a database and the client
+ site is started without data, the application may
+ have errors or incorrectly attempt to create the
+ database.
+ </p>
</li>
<li>
<p>
- Copy the application to the client target.
- </p>
+ Copy the application to the client target.
+ </p>
</li>
<li>
- <p>
- Modify the client environment's <a href="../api_reference/C/configuration_reference.html" class="olink">DB_CONFIG</a> file to set the client's local host and port values and to add
- remote site information for the master site and any
- other replication configuration choices necessary.
- </p>
+ <p>
+ Modify the client environment's <a href="../api_reference/C/configuration_reference.html" class="olink">DB_CONFIG</a> file to
+ set the client's local host and port values and to
+ add remote site information for the master site
+ and any other replication configuration choices
+ necessary.
+ </p>
</li>
<li>
- <p>
- Start the application on the client. The client application
- should not update data at this point, as explained previously.
- </p>
+ <p>
+ Start the application on the client. The client
+ application should not update data at this point,
+ as explained previously.
+ </p>
</li>
<li>
- <p>
- Start the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility specifying the
- client environment's home directory using the -h option. Omit the -M
- option in this case, because the utility defaults to
- starting in the client role.
- </p>
+ <p>
+ Start the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility specifying the client
+ environment's home directory using the -h option.
+ Omit the -M option in this case, because the
+ utility defaults to starting in the client role.
+ </p>
</li>
</ol>
</div>
- <p>
-Once the initial replication group is established, do not use the -M option with
-the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility.
-After the initial start, <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility assumes the use of
-elections. If a site crashes, it should rejoin the group as
-a client so that it can synchronize with the rest of the group.
-</p>
+ <p>
+ Once the initial replication group is established, do
+ not use the -M option with the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility. After the
+ initial start, the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility assumes the use of
+ elections. If a site crashes, it should rejoin the group
+ as a client so that it can synchronize with the rest of
+ the group.
+ </p>
</div>
<div class="sect2" lang="en" xml:lang="en">
<div class="titlepage">
<div>
<div>
- <h3 class="title"><a id="idp2278848"></a>Avoiding Rollback</h3>
+ <h3 class="title"><a id="idp1939624"></a>Avoiding rollback</h3>
</div>
</div>
</div>
+ <p>
+ Depending on how an application is structured,
+ transactional rollback can occur. If this is possible,
+ then you must make application changes or be prepared for
+ successful transactions to disappear. Consider a common
+ program flow where the application first creates and opens
+ the environment with recovery. Then, immediately after
+ that, the application opens up the databases it expects to
+ use. Often an application will use the <a href="../api_reference/C/dbopen.html#open_DB_CREATE" class="olink">DB_CREATE</a> flag so
+ that if the database does not exist it is created,
+ otherwise the existing one is used automatically. Then the
+ application begins servicing transactions to write and
+ read data.
+ </p>
<p>
-Depending on how an application is structured, transactional rollback
-can occur. If this is possible, then you must make application
-changes or be prepared for successful transactions to disappear.
-Consider a common program flow where the application first creates
-and opens the environment with recovery. Then, immediately after
-that, the application opens up the databases it expects to use.
-Often an application will use the <a href="../api_reference/C/dbopen.html#open_DB_CREATE" class="olink">DB_CREATE</a> flag so that if the
-database does not exist it is created, otherwise the existing one is
-used automatically. Then the application begins servicing transactions
-to write and read data.
-</p>
+ When replication is introduced, particularly via the
+ <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility, the possibility of rollback exists unless
+ the application takes steps to prevent it. In the
+ situation described above, if all of the above steps occur
+ before the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility process starts, and the site is
+ started as a client, then all the operations will be
+ rolled back when the site finds the master. The client
+ site will synchronize with the log and operations on the
+ master site, so any operations that occurred in the client
+ application before it knew it was a client will be
+ discarded.
+ </p>
<p>
-When replication is introduced, particularly via the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility, the
-possibility of rollback exists unless the application takes steps
-to prevent it. In the situation described above, if all of the
-above steps occur before the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility process starts, and
-the site is started as a client, then all the operations will be
-rolled back when the site finds the master. The client site will
-synchronize with the log and operations on the master site, so
-any operations that occurred in the client application before it
-knew it was a client will be discarded.
-</p>
- <p>
-One way to reduce the possibility of rollback is to modify the
-application so that it only performs update operations (including
-creation of a database) if it is the master site. If the application
-refrains from updating until it is the master, then it will not perform
-operations when it is in the undefined state before replication
-has been started.
-The event indicating a site is master will be delivered to the
-<a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility process, so the application process must look
-for that information via the <a href="../api_reference/C/repstat.html" class="olink">rep_stat()</a> method.
-A site that is expecting to perform updates may need to poll
-via the <a href="../api_reference/C/repstat.html" class="olink">rep_stat()</a> method to see the state change from an undefined
-role to either the master or client role. Similarly, since a
-client site cannot create a database, it may need to poll for
-the database's existence while the client synchronizes with the master
-until the database is created at the client site.
-</p>
+ One way to reduce the possibility of rollback is to
+ modify the application so that it only performs update
+ operations (including creation of a database) if it is the
+ master site. If the application refrains from updating
+ until it is the master, then it will not perform
+ operations when it is in the undefined state before
+ replication has been started. The event indicating a site
+ is master will be delivered to the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility process,
+ so the application process must look for that information
+ via the <a href="../api_reference/C/repstat.html" class="olink">rep_stat()</a> method. A site that is expecting to perform
+ updates may need to poll via the <a href="../api_reference/C/repstat.html" class="olink">rep_stat()</a> method to see the
+ state change from an undefined role to either the master
+ or client role. Similarly, since a client site cannot
+ create a database, it may need to poll for the database's
+ existence while the client synchronizes with the master
+ until the database is created at the client site.
+ </p>
</div>
<div class="sect2" lang="en" xml:lang="en">
<div class="titlepage">
<div>
<div>
- <h3 class="title"><a id="idp2283896"></a>When to Consider an Integrated HA Application</h3>
+ <h3 class="title"><a id="idp1937856"></a>When to consider an integrated replication application</h3>
</div>
</div>
</div>
+ <p>
+ The <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility provides the means to achieve a
+ replicated application quickly. However, the trade-off for
+ this rapid implementation is that the full flexibility of
+ replication is not available. Some applications may
+ eventually need to consider integrating directly with
+ replication rather than using the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility if
+ greater flexibility is desired.
+ </p>
<p>
-The <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility provides the means to achieve
-a replicated application quickly. However,
-the trade-off for this rapid implementation is that the full
-flexibility of replication is not available. Some applications
-may eventually need to consider integrating directly with
-replication rather than using the <a href="../api_reference/C/db_replicate.html" class="olink">db_replicate</a> utility if greater flexibility is desired.
-</p>
- <p>
-One likely reason for considering integration would be the
-convenience of receiving all replication-related events in
-the application process and gaining direct knowledge of such
-things as role changes.
-Using the event callback is cleaner and easier than
-polling for state changes via the <a href="../api_reference/C/repstat.html" class="olink">rep_stat()</a> method.
-</p>
+ One likely reason for considering integration would be
+ the convenience of receiving all replication-related
+ events in the application process and gaining direct
+ knowledge of such things as role changes. Using the event
+ callback is cleaner and easier than polling for state
+ changes via the <a href="../api_reference/C/repstat.html" class="olink">rep_stat()</a> method.
+ </p>
<p>
-A second likely reason for integrating replication directly
-into the application is the multi-process aspect of the
-utility program. The developer may find it easier to insert
-the start of replication directly into the code once the
-environment is created, recovered, or opened, and avoid
-the scenario where the application is running in the
-undefined state. Also it may simply be easier to start
-the application once than to coordinate different processes
-and their startup order in the system.
-</p>
+ A second likely reason for integrating replication
+ directly into the application is the multi-process aspect
+ of the utility program. The developer may find it easier
+ to insert the start of replication directly into the code
+ once the environment is created, recovered, or opened, and
+ avoid the scenario where the application is running in the
+ undefined state. Also it may simply be easier to start the
+ application once than to coordinate different processes
+ and their startup order in the system.
+ </p>
</div>
</div>
<div class="navfooter">
@@ -372,11 +427,12 @@ and their startup order in the system.
<td width="40%" align="right"> <a accesskey="n" href="rep_mgr_ack.html">Next</a></td>
</tr>
<tr>
- <td width="40%" align="left" valign="top">Running Replication Manager in multiple processes </td>
+ <td width="40%" align="left" valign="top">Running Replication Manager in
+ multiple processes </td>
<td width="20%" align="center">
<a accesskey="h" href="index.html">Home</a>
</td>
- <td width="40%" align="right" valign="top"> Choosing a Replication Manager Ack Policy</td>
+ <td width="40%" align="right" valign="top"> Choosing a Replication Manager acknowledgement policy</td>
</tr>
</table>
</div>