package com.zendesk.maxwell.replication; import java.io.Serializable; import java.sql.Connection; import java.sql.SQLException; public class Position implements Serializable { // LastHeartbeat is the most recent heartbeat seen prior to this position. // For a HeartbeatRow, it is the exact (new) heartbeat value for this position. private final long lastHeartbeatRead; private final BinlogPosition binlogPosition; public Position(BinlogPosition binlogPosition, long lastHeartbeatRead) { this.binlogPosition = binlogPosition; this.lastHeartbeatRead = lastHeartbeatRead; } public Position withBinlogPosition(BinlogPosition position) { return new Position(position, getLastHeartbeatRead()); } public Position withHeartbeat(long lastHeartbeatRead) { return new Position(getBinlogPosition(), lastHeartbeatRead); } public static Position capture(Connection c, boolean gtidMode) throws SQLException { return new Position(BinlogPosition.capture(c, gtidMode), 0L); } public long getLastHeartbeatRead() { return lastHeartbeatRead; } public BinlogPosition getBinlogPosition() { return binlogPosition; } @Override public String toString() { return "Position[" + binlogPosition + ", lastHeartbeat=" + lastHeartbeatRead + "]"; } @Override public boolean equals(Object o) { if ( !(o instanceof Position) ) { return false; } Position other = (Position) o; return lastHeartbeatRead == other.lastHeartbeatRead && binlogPosition.equals(other.binlogPosition); } @Override public int hashCode() { return binlogPosition.hashCode(); } public boolean newerThan(Position other) { if ( other == null ) return true; return this.getBinlogPosition().newerThan(other.getBinlogPosition()); } }