package com.alimama.mdrill.editlog.read;
import java.io.Closeable;
import java.io.IOException;
public abstract class EditLogInputStream implements Closeable {
private FSEditLogOp cachedOp = null;
public String getCurrentStreamName() {
return getName();
}
public abstract String getName();
public abstract long getFirstTxId();
public abstract long getLastTxId();
@Override
public abstract void close() throws IOException;
public FSEditLogOp readOp() throws IOException {
FSEditLogOp ret;
if (cachedOp != null) {
ret = cachedOp;
cachedOp = null;
return ret;
}
return nextOp();
}
public void resync() {
if (cachedOp != null) {
return;
}
cachedOp = nextValidOp();
}
protected abstract FSEditLogOp nextOp() throws IOException;
public FSEditLogOp nextValidOp() {
try {
return nextOp();
} catch (Throwable e) {
return null;
}
}
public boolean skipUntil(long txid) throws IOException {
while (true) {
FSEditLogOp op = readOp();
if (op == null) {
return false;
}
if (op.getTransactionId() >= txid) {
cachedOp = op;
return true;
}
}
}
public abstract int getVersion() throws IOException;
public abstract long length() throws IOException;
public abstract boolean isInProgress();
public abstract void setMaxOpSize(int maxOpSize);
}