blob: ee9d34febdb722c3ac1c56acda50081a00d8d242 [file] [log] [blame]
/*-
* Copyright (C) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
*
* This file was distributed by Oracle as part of a version of Oracle Berkeley
* DB Java Edition made available at:
*
* http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
*
* Please see the LICENSE file included in the top-level directory of the
* appropriate version of Oracle Berkeley DB Java Edition for a copy of the
* license and additional information.
*/
package com.sleepycat.je.log;
import com.sleepycat.je.dbi.DatabaseId;
import com.sleepycat.je.dbi.ReplicatedDatabaseConfig;
import com.sleepycat.je.log.entry.DbOperationType;
import com.sleepycat.je.log.entry.NameLNLogEntry;
import com.sleepycat.je.utilint.VLSN;
/**
* This subclass of ReplicationContext adds information specific to database
* operations to the replication context passed from operation-aware code down
* the the logging layer. It's a way to transport enough information though the
* NameLNLogEntry to logically replicate database operations.
*/
public class DbOpReplicationContext extends ReplicationContext {
/*
* Convenience static instance used when you know this database operation
* will not be replicated, either because it's executing on a
* non-replicated node or it's a local operation for a local database.
*/
public static DbOpReplicationContext NO_REPLICATE =
new DbOpReplicationContext(false, // inReplicationStream
DbOperationType.NONE);
final private DbOperationType opType;
private ReplicatedDatabaseConfig createConfig = null;
private DatabaseId truncateOldDbId = null;
/**
* Create a replication context for logging a database operation NameLN on
* the master.
*/
public DbOpReplicationContext(boolean inReplicationStream,
DbOperationType opType) {
super(inReplicationStream);
this.opType = opType;
}
/**
* Create a repContext for executing a databaseOperation on the client.
*/
public DbOpReplicationContext(VLSN vlsn,
NameLNLogEntry nameLNEntry) {
/*
* Initialize the context with the VLSN that was shipped with the
* replicated log entry.
*/
super(vlsn);
opType = nameLNEntry.getOperationType();
if (DbOperationType.isWriteConfigType(opType)) {
createConfig = nameLNEntry.getReplicatedCreateConfig();
} else if (opType == DbOperationType.TRUNCATE) {
truncateOldDbId = nameLNEntry.getTruncateOldDbId();
}
}
@Override
public DbOperationType getDbOperationType() {
return opType;
}
public void setCreateConfig(ReplicatedDatabaseConfig createConfig) {
assert(DbOperationType.isWriteConfigType(opType));
this.createConfig = createConfig;
}
public ReplicatedDatabaseConfig getCreateConfig() {
assert(DbOperationType.isWriteConfigType(opType));
return createConfig;
}
public void setTruncateOldDbId(DatabaseId truncateOldDbId) {
assert(opType == DbOperationType.TRUNCATE);
this.truncateOldDbId = truncateOldDbId;
}
public DatabaseId getTruncateOldDbId() {
assert(opType == DbOperationType.TRUNCATE);
return truncateOldDbId;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(super.toString());
sb.append("opType=").append(opType);
sb.append("truncDbId=").append(truncateOldDbId);
return sb.toString();
}
}