package com.alimama.mdrill.editlog.write;
import java.io.IOException;
import java.io.Closeable;
import com.alimama.mdrill.editlog.read.FSEditLogOp;
public abstract class EditLogOutputStream implements Closeable {
private long numSync; // number of sync(s) to disk
private long totalTimeSync; // total time to sync
public EditLogOutputStream() throws IOException {
numSync = totalTimeSync = 0;
}
abstract public void write(FSEditLogOp op) throws IOException;
abstract public void writeRaw(byte[] bytes, int offset, int length)
throws IOException;
abstract public void create() throws IOException;
@Override
abstract public void close() throws IOException;
abstract public void abort() throws IOException;
abstract public void setReadyToFlush() throws IOException;
abstract public void flushAndSync(boolean durable) throws IOException;
public void flush() throws IOException {
flush(true);
}
public void flush(boolean durable) throws IOException {
numSync++;
long start =System.currentTimeMillis();
flushAndSync(durable);
long end = System.currentTimeMillis();
totalTimeSync += (end - start);
}
public long getTotalSyncTime() {
return totalTimeSync;
}
public long getNumSync() {
return numSync;
}
}