cloud=_cloud;
}
+ public void rebuild() {
+ Slot[] newslots=cloud.getSlots(sequencenumber+1);
+ validateandupdate(newslots, true);
+ }
+
public void update() {
Slot[] newslots=cloud.getSlots(sequencenumber+1);
}
- private void validateandupdate(Slot[] newslots, boolean isput) {
+ private void validateandupdate(Slot[] newslots, boolean acceptupdatestolocal) {
//The cloud communication layer has checked slot HMACs already
//before decoding
if (newslots.length==0)
initExpectedSize();
for(Slot slot: newslots) {
updateExpectedSize();
- processSlot(indexer, slot, isput);
+ processSlot(indexer, slot, acceptupdatestolocal);
}
//If there is a gap, check to see if the server sent us everything
lastTableStatus = entry;
}
- private void updateLastMessage(long machineid, long seqnum, Liveness liveness, boolean isput) {
+ private void updateLastMessage(long machineid, long seqnum, Liveness liveness, boolean acceptupdatestolocal) {
Pair<Long, Liveness> lastmsgentry = lastmessagetable.put(machineid, new Pair<Long, Liveness>(seqnum, liveness));
if (lastmsgentry == null)
return;
}
if (machineid == localmachineid) {
- if (lastmsgseqnum != seqnum && !isput)
+ if (lastmsgseqnum != seqnum && !acceptupdatestolocal)
throw new Error("Server Error: Mismatch on local machine sequence number");
} else {
if (lastmsgseqnum > seqnum)
}
}
- private void processSlot(SlotIndexer indexer, Slot slot, boolean isput) {
- updateLastMessage(slot.getMachineID(), slot.getSequenceNumber(), slot, isput);
+ private void processSlot(SlotIndexer indexer, Slot slot, boolean acceptupdatestolocal) {
+ updateLastMessage(slot.getMachineID(), slot.getSequenceNumber(), slot, acceptupdatestolocal);
for(Entry entry : slot.getEntries()) {
switch(entry.getType()) {