package lsr.paxos.storage; import java.io.IOException; import lsr.common.CrashModel; import lsr.common.ProcessDescriptor; import lsr.paxos.Snapshot; /** * Implementation of <code>Storage</code> interface. This implementation is * using <code>DiscWriter</code> to save view number and last snapshot to disc. * It is also using synchronous version of log - <code>SynchronousLog</code>. * * @see SynchronousLog * @see DiscWriter */ public class SynchronousStorage extends InMemoryStorage { private final DiscWriter writer; /** * Initializes new instance of <code>SynchronousStorage</code> class. * * @param writer - the disc writer * @throws IOException if I/O error occurs */ public SynchronousStorage(DiscWriter writer) throws IOException { assert CrashModel.FullSS.equals(ProcessDescriptor.processDescriptor.crashModel); view = writer.loadViewNumber(); this.writer = writer; // synchronous log reads the previous log files log = new SynchronousLog(writer); Snapshot snapshot = this.writer.getSnapshot(); if (snapshot != null) { super.setLastSnapshot(snapshot); } } public void setView(int view) { writer.changeViewNumber(view); super.setView(view); } public void setLastSnapshot(Snapshot snapshot) { writer.newSnapshot(snapshot); super.setLastSnapshot(snapshot); } }