package lsr.paxos.storage;
import java.io.IOException;
import java.util.Collection;
import lsr.paxos.storage.ConsensusInstance.LogEntryState;
public class SynchronousLog extends Log {
private final DiscWriter writer;
public SynchronousLog(DiscWriter writer) throws IOException {
this.writer = writer;
Collection<ConsensusInstance> instances = writer.load();
for (ConsensusInstance instance : instances) {
while (nextId < instance.getId()) {
this.instances.put(nextId, createInstance());
nextId++;
}
nextId++;
ConsensusInstance i = new SynchronousConsensusInstace(instance, this.writer);
this.instances.put(instance.getId(), i);
}
}
protected ConsensusInstance createInstance() {
return new SynchronousConsensusInstace(nextId, writer);
}
protected ConsensusInstance createInstance(int view, byte[] value) {
writer.changeInstanceValue(nextId, view, value);
return new SynchronousConsensusInstace(nextId, LogEntryState.KNOWN, view, value, writer);
}
/*
* TODO: TZ suggested implementing truncateBelow and clearUndecidedBelow for
* cutting disk logs. This can be done either as mentioned, or at writing
* down a snapshot.
*/
}