/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2009 Oracle. All rights reserved.
*
*/
using System;
using System.Collections.Generic;
using System.Text;
using BerkeleyDB.Internal;
namespace BerkeleyDB {
///
/// The AckPolicy class specifies how master and client sites will handle
/// acknowledgment of replication messages which are necessary for
/// "permanent" records. The current implementation requires all sites in a
/// replication group configure the same acknowledgement policy.
///
public class AckPolicy {
private int _value;
internal int Policy {
get { return _value; }
private set { _value = value; }
}
private AckPolicy(int policyValue) {
Policy = policyValue;
}
internal static AckPolicy fromInt(int value) {
switch (value) {
case 0:
return null;
case DbConstants.DB_REPMGR_ACKS_ALL:
return ALL;
case DbConstants.DB_REPMGR_ACKS_ALL_PEERS:
return ALL_PEERS;
case DbConstants.DB_REPMGR_ACKS_NONE:
return NONE;
case DbConstants.DB_REPMGR_ACKS_ONE:
return ONE;
case DbConstants.DB_REPMGR_ACKS_ONE_PEER:
return ONE_PEER;
case DbConstants.DB_REPMGR_ACKS_QUORUM:
return QUORUM;
default:
throw new ArgumentException("Unknown AckPolicy value.");
}
}
///
/// The master should wait until all replication clients have
/// acknowledged each permanent replication message.
///
public static AckPolicy ALL =
new AckPolicy(DbConstants.DB_REPMGR_ACKS_ALL);
///
/// The master should wait until all electable peers have acknowledged
/// each permanent replication message (where "electable peer" means a
/// client capable of being subsequently elected master of the
/// replication group).
///
public static AckPolicy ALL_PEERS =
new AckPolicy(DbConstants.DB_REPMGR_ACKS_ALL_PEERS);
///
/// The master should not wait for any client replication message
/// acknowledgments.
///
public static AckPolicy NONE =
new AckPolicy(DbConstants.DB_REPMGR_ACKS_NONE);
///
/// The master should wait until at least one client site has
/// acknowledged each permanent replication message.
///
public static AckPolicy ONE =
new AckPolicy(DbConstants.DB_REPMGR_ACKS_ONE);
///
/// The master should wait until at least one electable peer has
/// acknowledged each permanent replication message (where "electable
/// peer" means a client capable of being subsequently elected master of
/// the replication group).
///
public static AckPolicy ONE_PEER =
new AckPolicy(DbConstants.DB_REPMGR_ACKS_ONE_PEER);
///
/// The master should wait until it has received acknowledgements from
/// the minimum number of electable peers sufficient to ensure that the
/// effect of the permanent record remains durable if an election is
/// held (where "electable peer" means a client capable of being
/// subsequently elected master of the replication group). This is the
/// default acknowledgement policy.
///
public static AckPolicy QUORUM =
new AckPolicy(DbConstants.DB_REPMGR_ACKS_QUORUM);
}
}