blob: e91de62fdf71dbc0757a5d18d7ccad371019b000 [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.rep.impl.node.cbvlsn;
import java.io.Serializable;
import com.sleepycat.je.utilint.VLSN;
/**
* This class is not used if the GlobalCBVLSN is defunct -- see
* {@link GlobalCBVLSN}. Instances of this class are created in order to
* initialize the RepNodeImpl.barrierState field or pass parameters, but these
* instances are not actually used when the GlobalCBVLSN is defunct.
*
* Encapsulates the last known syncup state associated with a node.
*/
public class CleanerBarrierState implements Serializable {
private static final long serialVersionUID = 1L;
/*
* The latest sync position of this node in the replication stream.
* This position is approximate and is updated on some regular basis.
* It is conservative in that the node is likely to have a newer sync
* point. So it represents a lower bound for its sync point.
*/
private final VLSN lastLocalCBVLSN;
/*
* The time that the sync point was last recorded. Note that clocks
* should be reasonably synchronized.
*/
private final long barrierTime;
public CleanerBarrierState(VLSN lastLocalCBVLSN, long barrierTime) {
super();
this.lastLocalCBVLSN = lastLocalCBVLSN;
this.barrierTime = barrierTime;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result +
(lastLocalCBVLSN == null ? 0 : lastLocalCBVLSN.hashCode());
result = prime * result +
(int) (barrierTime ^ (barrierTime >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
CleanerBarrierState other = (CleanerBarrierState) obj;
if (lastLocalCBVLSN == null) {
if (other.lastLocalCBVLSN != null) {
return false;
}
} else if (!lastLocalCBVLSN.equals(other.lastLocalCBVLSN)) {
return false;
}
if (barrierTime != other.barrierTime) {
return false;
}
return true;
}
public VLSN getLastCBVLSN() {
return lastLocalCBVLSN;
}
public long getBarrierTime() {
return barrierTime;
}
@Override
public String toString() {
return String.format("LocalCBVLSN:%,d at:%tc",
lastLocalCBVLSN.getSequence(), barrierTime);
}
}