/*-
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2002, 2015 Oracle and/or its affiliates. All rights reserved.
*
* $Id$
*/
package com.sleepycat.db;
import com.sleepycat.db.internal.DbConstants;
/**
The recovery operation being performed when {@link com.sleepycat.db.LogRecordHandler#handleLogRecord LogRecordHandler.handleLogRecord} is called.
*/
public final class RecoveryOperation {
/**
The log is being read backward to determine which transactions have
been committed and to abort those operations that were not; undo the
operation described by the log record.
*/
public static final RecoveryOperation BACKWARD_ROLL =
new RecoveryOperation("BACKWARD_ROLL", DbConstants.DB_TXN_BACKWARD_ROLL);
/**
The log is being played forward; redo the operation described by the log
record.
<p>
The FORWARD_ROLL and APPLY operations frequently imply the same actions,
redoing changes that appear in the log record, although if a recovery
function is to be used on a replication client where reads may be taking
place concurrently with the processing of incoming messages, APPLY
operations should also perform appropriate locking.
*/
public static final RecoveryOperation FORWARD_ROLL =
new RecoveryOperation("FORWARD_ROLL", DbConstants.DB_TXN_FORWARD_ROLL);
/**
The log is being read backward during a transaction abort; undo the
operation described by the log record.
*/
public static final RecoveryOperation ABORT =
new RecoveryOperation("ABORT", DbConstants.DB_TXN_ABORT);
/**
The log is being applied on a replica site; redo the operation
described by the log record.
<p>
The FORWARD_ROLL and APPLY operations frequently imply the same actions,
redoing changes that appear in the log record, although if a recovery
function is to be used on a replication client where reads may be taking
place concurrently with the processing of incoming messages, APPLY
operations should also perform appropriate locking.
*/
public static final RecoveryOperation APPLY =
new RecoveryOperation("APPLY", DbConstants.DB_TXN_APPLY);
/**
The log is being printed for debugging purposes; print the contents of
this log record in the desired format.
*/
public static final RecoveryOperation PRINT =
new RecoveryOperation("PRINT", DbConstants.DB_TXN_PRINT);
private String operationName;
private int flag;
private RecoveryOperation(String operationName, int flag) {
this.operationName = operationName;
this.flag = flag;
}
/** {@inheritDoc} */
public String toString() {
return "RecoveryOperation." + operationName;
}
/* This is public only so it can be called from internal/DbEnv.java. */
/**
Internal: this is public only so it can be called from an internal
package.
*
@param flag
the internal flag value to be wrapped in a RecoveryException object
*/
public static RecoveryOperation fromFlag(int flag) {
switch (flag) {
case DbConstants.DB_TXN_BACKWARD_ROLL:
return BACKWARD_ROLL;
case DbConstants.DB_TXN_FORWARD_ROLL:
return FORWARD_ROLL;
case DbConstants.DB_TXN_ABORT:
return ABORT;
case DbConstants.DB_TXN_APPLY:
return APPLY;
case DbConstants.DB_TXN_PRINT:
return PRINT;
default:
throw new IllegalArgumentException(
"Unknown recover operation: " + flag);
}
}
}