package edu.berkeley.lipstick.backend; import edu.berkeley.lipstick.config.Config; import edu.berkeley.lipstick.localstore.ILocalStore; import edu.berkeley.lipstick.storage.IStorage; import edu.berkeley.lipstick.util.*; import edu.berkeley.lipstick.util.serializer.IDWSerializer; import java.io.BufferedWriter; import java.io.FileWriter; import java.util.HashSet; import java.util.Set; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.atomic.AtomicLong; public class PrintingPutOnlyExplicitBackend implements IExplicitBackend { AtomicLong localSequenceNo; String myPid; final int maxNumECDSreads; IDWSerializer DWserializer; FileWriter writer; BufferedWriter bw; public PrintingPutOnlyExplicitBackend(IStorage storage) throws Exception { localSequenceNo = new AtomicLong(0); writer = new FileWriter("/tmp/sizes.out"); bw = new BufferedWriter(writer); DWserializer = Config.getDWSerializer(); maxNumECDSreads = Config.getBackendMaxSyncECDSReads(); myPid = Config.getProcessID(); } public void open() throws Exception { } public void close() throws Exception { bw.close(); } public DataWrapper get(String key) throws Exception { return null; } public final DataWrapper put_at_start(String key, Object value) throws Exception { return put_after(key, value, new HashSet<DataWrapper>()); } public final DataWrapper put_after(String key, Object value, DataWrapper after) throws Exception { Set<DataWrapper> toPass = new HashSet<DataWrapper>(); if(after != null) { toPass.add(after); } return put_after(key, value, toPass); } public final DataWrapper put_after(String key, Object value, Set<DataWrapper> after) throws Exception { long timestamp = System.currentTimeMillis(); KeyDependencySet thisKDS = new KeyDependencySet(after); WriteClock thisWriteClock = new WriteClock(); for(DataWrapper dep : after) { if(dep.getKey().matches(key)) { thisWriteClock.mergeClock(dep.getDependency(key).getClock()); } } thisWriteClock.setValue(Config.getProcessID(), localSequenceNo.getAndIncrement()); thisKDS.putDependency(key, new KeyDependency(thisWriteClock)); DataWrapper toWrite = new DataWrapper(key, value, thisKDS, timestamp); bw.write(String.format("%d %d\n", DWserializer.toByteArray(toWrite).length, thisKDS.getDependencies().size())); return toWrite; } }