X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=benchmarks%2Fother%2FPhoneInterface%2FControl%2Fapp%2Fsrc%2Fmain%2Fjava%2Fiotcloud%2FTable.java;h=4007923d57eb4643da7dde97a2be15b7ae36c729;hb=0338faeb59c2bea0d1f2165ce8064beec5c9b775;hp=b9c346104662474aa8f9098acc83750641039bf8;hpb=4c116198a80b62ddc11720ef80daa99850facaee;p=iot2.git diff --git a/benchmarks/other/PhoneInterface/Control/app/src/main/java/iotcloud/Table.java b/benchmarks/other/PhoneInterface/Control/app/src/main/java/iotcloud/Table.java index b9c3461..4007923 100644 --- a/benchmarks/other/PhoneInterface/Control/app/src/main/java/iotcloud/Table.java +++ b/benchmarks/other/PhoneInterface/Control/app/src/main/java/iotcloud/Table.java @@ -45,6 +45,8 @@ final public class Table { private long oldestLiveSlotSequenceNumver = 0; // Smallest sequence number of the slot with a live entry private long localMachineId = 0; // Machine ID of this client device private long sequenceNumber = 0; // Largest sequence number a client has received + private long localSequenceNumber = 0; + // private int smallestTableStatusSeen = -1; // Smallest Table Status that was seen in the latest slots sent from the server // private int largestTableStatusSeen = -1; // Largest Table Status that was seen in the latest slots sent from the server private long localTransactionSequenceNumber = 0; // Local sequence number counter for transactions @@ -167,14 +169,34 @@ final public class Table { int livec = 0; int deadc = 0; + + int casdasd = 0; + + int liveslo = 0; + for (long i = o; i < (n + 1); i++) { Slot s = buffer.getSlot(i); + + if (s.isLive()) { + liveslo++; + } + Vector entries = s.getEntries(); for (Entry e : entries) { if (e.isLive()) { int type = e.getType(); + + + if (type == 6) { + RejectedMessage rej = (RejectedMessage)e; + casdasd++; + + System.out.println(rej.getMachineID()); + } + + types[type] = types[type] + 1; num++; livec++; @@ -188,6 +210,8 @@ final public class Table { System.out.println(i + " " + types[i]); } System.out.println("Live count: " + livec); + System.out.println("Live Slot count: " + liveslo); + System.out.println("Dead count: " + deadc); System.out.println("Old: " + o); System.out.println("New: " + n); @@ -221,7 +245,8 @@ final public class Table { cloud.initSecurity(); // Create the first insertion into the block chain which is the table status - Slot s = new Slot(this, 1, localMachineId); + Slot s = new Slot(this, 1, localMachineId, localSequenceNumber); + localSequenceNumber++; TableStatus status = new TableStatus(s, numberOfSlots); s.addEntry(status); Slot[] array = cloud.putSlot(s, numberOfSlots); @@ -245,6 +270,9 @@ final public class Table { // Just pull the latest slots from the server Slot[] newslots = cloud.getSlots(sequenceNumber + 1); validateAndUpdate(newslots, true); + sendToServer(null); + updateLiveTransactionsAndStatus(); + } // public String toString() { @@ -382,6 +410,7 @@ final public class Table { } NewKey newKey = new NewKey(null, keyName, machineId); + if (sendToServer(newKey)) { // If successfully inserted return true; @@ -497,6 +526,10 @@ final public class Table { bufferResizeThreshold = resizeLower - 1 + random.nextInt(numberOfSlots - resizeLower); } + public long getLocalSequenceNumber() { + return localSequenceNumber; + } + boolean lastInsertedNewKey = false; @@ -690,9 +723,11 @@ final public class Table { } + try { // While we have stuff that needs inserting into the block chain while ((pendingTransactionQueue.size() > 0) || (pendingSendArbitrationRounds.size() > 0) || (newKey != null)) { + fromRetry = false; if (hadPartialSendToServer) { @@ -707,7 +742,8 @@ final public class Table { } // Create the slot - Slot slot = new Slot(this, sequenceNumber + 1, localMachineId, buffer.getSlot(sequenceNumber).getHMAC()); + Slot slot = new Slot(this, sequenceNumber + 1, localMachineId, buffer.getSlot(sequenceNumber).getHMAC(), localSequenceNumber); + localSequenceNumber++; // Try to fill the slot with data ThreeTuple fillSlotsReturn = fillSlot(slot, false, newKey); @@ -887,7 +923,7 @@ final public class Table { // Get the size of the send data //int sendDataSize = Integer.BYTES + Long.BYTES; - int sendDataSize = (Integer.SIZE + Long.SIZE)/8; + int sendDataSize = Integer.SIZE/8 + Long.SIZE/8; Long lastArbitrationDataLocalSequenceNumber = (long) - 1; if (lastArbitrationDataLocalSequenceNumberSeenFromArbitrator.get(machineId) != null) { @@ -902,7 +938,8 @@ final public class Table { bbEncode.putInt(0); // Send by local - byte[] returnData = cloud.sendLocalData(sendData, localCommunicationInformation.getFirst(), localCommunicationInformation.getSecond()); + byte[] returnData = cloud.sendLocalData(sendData, localSequenceNumber, localCommunicationInformation.getFirst(), localCommunicationInformation.getSecond()); + localSequenceNumber++; if (returnData == null) { // Could not contact server @@ -941,7 +978,7 @@ final public class Table { // Get the size of the send data //int sendDataSize = Integer.BYTES + Long.BYTES; - int sendDataSize = (Integer.SIZE + Long.SIZE)/8; + int sendDataSize = Integer.SIZE/8 + Long.SIZE/8; for (TransactionPart part : transaction.getParts().values()) { sendDataSize += part.getSize(); } @@ -964,7 +1001,8 @@ final public class Table { // Send by local - byte[] returnData = cloud.sendLocalData(sendData, localCommunicationInformation.getFirst(), localCommunicationInformation.getSecond()); + byte[] returnData = cloud.sendLocalData(sendData, localSequenceNumber, localCommunicationInformation.getFirst(), localCommunicationInformation.getSecond()); + localSequenceNumber++; if (returnData == null) { // Could not contact server @@ -1119,6 +1157,8 @@ final public class Table { entry.encode(bbEncode); } + + localSequenceNumber++; return returnData; } @@ -1189,9 +1229,12 @@ final public class Table { * Returns false if a resize was needed */ private ThreeTuple fillSlot(Slot slot, boolean resize, NewKey newKeyEntry) { + + int newSize = 0; if (liveSlotCount > bufferResizeThreshold) { resize = true; //Resize is forced + } if (resize) { @@ -1220,6 +1263,7 @@ final public class Table { if (newKeyEntry != null) { newKeyEntry.setSlot(slot); if (slot.hasSpace(newKeyEntry)) { + slot.addEntry(newKeyEntry); inserted = true; } @@ -1448,6 +1492,7 @@ final public class Table { // Process each slots data for (Slot slot : newSlots) { processSlot(indexer, slot, acceptUpdatesToLocal, machineSet); + updateExpectedSize(); } @@ -1521,20 +1566,30 @@ final public class Table { } private void initExpectedSize(long firstSequenceNumber, long numberOfSlots) { - + // if (didFindTableStatus) { + // return; + // } long prevslots = firstSequenceNumber; + + if (didFindTableStatus) { -// expectedsize = (prevslots < ((long) numberOfSlots)) ? (int) prevslots : expectedsize; + // expectedsize = (prevslots < ((long) numberOfSlots)) ? (int) prevslots : expectedsize; + // System.out.println("Here2: " + expectedsize + " " + numberOfSlots + " " + prevslots); + } else { expectedsize = (prevslots < ((long) numberOfSlots)) ? (int) prevslots : numberOfSlots; + // System.out.println("Here: " + expectedsize); } - didFindTableStatus = true; + // System.out.println(numberOfSlots); + + didFindTableStatus = true; currMaxSize = numberOfSlots; } private void updateExpectedSize() { expectedsize++; + if (expectedsize > currMaxSize) { expectedsize = currMaxSize; } @@ -1572,6 +1627,7 @@ final public class Table { // Change the number of local slots to the new size numberOfSlots = (int)currMaxSize; + // Recalculate the resize threshold since the size of the local buffer has changed setResizeThreshold(); } @@ -1695,11 +1751,11 @@ final public class Table { // Create the abort Abort newAbort = new Abort(null, - transaction.getClientLocalSequenceNumber(), - transaction.getSequenceNumber(), - transaction.getMachineId(), - transaction.getArbitrator(), - localArbitrationSequenceNumber); + transaction.getClientLocalSequenceNumber(), + transaction.getSequenceNumber(), + transaction.getMachineId(), + transaction.getArbitrator(), + localArbitrationSequenceNumber); localArbitrationSequenceNumber++; generatedAborts.add(newAbort); @@ -1832,11 +1888,11 @@ final public class Table { // Create the abort Abort newAbort = new Abort(null, - transaction.getClientLocalSequenceNumber(), - -1, - transaction.getMachineId(), - transaction.getArbitrator(), - localArbitrationSequenceNumber); + transaction.getClientLocalSequenceNumber(), + -1, + transaction.getMachineId(), + transaction.getArbitrator(), + localArbitrationSequenceNumber); localArbitrationSequenceNumber++; addAbortSet.add(newAbort); @@ -2289,36 +2345,36 @@ final public class Table { for (Entry entry : slot.getEntries()) { switch (entry.getType()) { - case Entry.TypeCommitPart: - processEntry((CommitPart)entry); - break; + case Entry.TypeCommitPart: + processEntry((CommitPart)entry); + break; - case Entry.TypeAbort: - processEntry((Abort)entry); - break; + case Entry.TypeAbort: + processEntry((Abort)entry); + break; - case Entry.TypeTransactionPart: - processEntry((TransactionPart)entry); - break; + case Entry.TypeTransactionPart: + processEntry((TransactionPart)entry); + break; - case Entry.TypeNewKey: - processEntry((NewKey)entry); - break; + case Entry.TypeNewKey: + processEntry((NewKey)entry); + break; - case Entry.TypeLastMessage: - processEntry((LastMessage)entry, machineSet); - break; + case Entry.TypeLastMessage: + processEntry((LastMessage)entry, machineSet); + break; - case Entry.TypeRejectedMessage: - processEntry((RejectedMessage)entry, indexer); - break; + case Entry.TypeRejectedMessage: + processEntry((RejectedMessage)entry, indexer); + break; - case Entry.TypeTableStatus: - processEntry((TableStatus)entry, slot.getSequenceNumber()); - break; + case Entry.TypeTableStatus: + processEntry((TableStatus)entry, slot.getSequenceNumber()); + break; - default: - throw new Error("Unrecognized type: " + entry.getType()); + default: + throw new Error("Unrecognized type: " + entry.getType()); } } } @@ -2690,7 +2746,7 @@ final public class Table { Slot currSlot = newSlots[i]; Slot prevSlot = indexer.getSlot(currSlot.getSequenceNumber() - 1); if (prevSlot != null && - !Arrays.equals(prevSlot.getHMAC(), currSlot.getPrevHMAC())) + !Arrays.equals(prevSlot.getHMAC(), currSlot.getPrevHMAC())) throw new Error("Server Error: Invalid HMAC Chain" + currSlot + " " + prevSlot); } }