private TableStatus lastTableStatus;
static final int FREE_SLOTS = 10; //number of slots that should be kept free
static final int SKIP_THRESHOLD = 10;
- private long liveslotcount = 0;
+ private long liveslotcount = 0;
private int chance;
static final double RESIZE_MULTIPLE = 1.2;
static final double RESIZE_THRESHOLD = 0.75;
private Random random = new Random();
private long lastUncommittedTransaction = 0;
+ private int smallestTableStatusSeen = -1;
+ private int largestTableStatusSeen = -1;
+
private PendingTransaction pendingTransBuild = null; // Pending Transaction used in building
private Queue<PendingTransaction> pendingTransQueue = null; // Queue of pending transactions
private Map<Long, Commit> commitMap = null; // List of all the most recent live commits
private Map<Long, Abort> abortMap = null; // Set of the live aborts
- private Map<IoTString, Commit> committedMapByKey = null; // Table of committed KV
- private Map<IoTString, KeyValue> commitedTable = null; // Table of committed KV
+ private Map<IoTString, Commit> committedMapByKey = null; // Table of committed KV
+ private Map<IoTString, KeyValue> commitedTable = null; // Table of committed KV
private Map<IoTString, KeyValue> speculativeTable = null; // Table of speculative KV
private Map<Long, Transaction> uncommittedTransactionsMap = null;
private Map<IoTString, Long> arbitratorTable = null; // Table of arbitrators
lastAbortSeenSeqNumMap = new HashMap<Long, Long>();
}
- public void rebuild() {
+ public void rebuild() throws ServerException {
Slot[] newslots = cloud.getSlots(sequencenumber + 1);
validateandupdate(newslots, true);
}
- // TODO: delete method
+ // // TODO: delete method
// public void printSlots() {
// long o = buffer.getOldestSeqNum();
// long n = buffer.getNewestSeqNum();
}
}
+ public IoTString getCommittedAtomic(IoTString key) {
+ KeyValue kv = commitedTable.get(key);
+
+ if (arbitratorTable.get(key) == null) {
+ throw new Error("Key not Found.");
+ }
+
+ // Make sure new key value pair matches the current arbitrator
+ if (!pendingTransBuild.checkArbitrator(arbitratorTable.get(key))) {
+ // TODO: Maybe not throw en error
+ throw new Error("Not all Key Values Match Arbitrator.");
+ }
+
+ if (kv != null) {
+ pendingTransBuild.addKVGuard(new KeyValue(key, kv.getValue()));
+ return kv.getValue();
+ } else {
+ pendingTransBuild.addKVGuard(new KeyValue(key, null));
+ return null;
+ }
+ }
+
+ public IoTString getSpeculativeAtomic(IoTString key) {
+
+ if (arbitratorTable.get(key) == null) {
+ throw new Error("Key not Found.");
+ }
+
+ // Make sure new key value pair matches the current arbitrator
+ if (!pendingTransBuild.checkArbitrator(arbitratorTable.get(key))) {
+ // TODO: Maybe not throw en error
+ throw new Error("Not all Key Values Match Arbitrator.");
+ }
+
+ KeyValue kv = speculativeTable.get(key);
+ if (kv == null) {
+ kv = commitedTable.get(key);
+ }
+
+ if (kv != null) {
+ pendingTransBuild.addKVGuard(new KeyValue(key, kv.getValue()));
+ return kv.getValue();
+ } else {
+ pendingTransBuild.addKVGuard(new KeyValue(key, null));
+ return null;
+ }
+ }
+
public Long getArbitrator(IoTString key) {
return arbitratorTable.get(key);
}
- public void initTable() {
+ public void initTable() throws ServerException {
cloud.setSalt();//Set the salt
Slot s = new Slot(this, 1, localmachineid);
TableStatus status = new TableStatus(s, numslots);
pendingTransBuild = new PendingTransaction();
}
- public void commitTransaction() {
+ public void commitTransaction() throws ServerException {
if (pendingTransBuild.getKVUpdates().size() == 0) {
// If no updates are made then there is no point inserting into the chain
// Add the pending transaction to the queue
pendingTransQueue.add(pendingTransBuild);
+ // Delete since already inserted
+ pendingTransBuild = new PendingTransaction();
+
while (!pendingTransQueue.isEmpty()) {
if (tryput( pendingTransQueue.peek(), false)) {
pendingTransQueue.poll();
// Make sure new key value pair matches the current arbitrator
if (!pendingTransBuild.checkArbitrator(arbitratorTable.get(key))) {
// TODO: Maybe not throw en error
- throw new Error("Not all Key Values Match.");
+ throw new Error("Not all Key Values Match Arbitrator.");
}
KeyValue kv = new KeyValue(key, value);
pendingTransBuild.addKV(kv);
}
- public void addGuard(Guard guard) {
- pendingTransBuild.addGuard(guard);
- }
-
- public void update() {
+ public void update() throws ServerException {
Slot[] newslots = cloud.getSlots(sequencenumber + 1);
validateandupdate(newslots, false);
- if (uncommittedTransactionsMap.keySet().size() > 0) {
- boolean doEnd = false;
- boolean needResize = false;
- while (!doEnd && (uncommittedTransactionsMap.keySet().size() > 0)) {
- boolean resize = needResize;
- needResize = false;
+ if (!pendingTransQueue.isEmpty()) {
+ // We have a pending transaction so do full insertion
- Slot s = new Slot(this, sequencenumber + 1, localmachineid, buffer.getSlot(sequencenumber).getHMAC());
- int newsize = 0;
- if (liveslotcount > resizethreshold) {
- resize = true; //Resize is forced
+ while (!pendingTransQueue.isEmpty()) {
+ if (tryput( pendingTransQueue.peek(), false)) {
+ pendingTransQueue.poll();
}
+ }
+ } else {
+ // We dont have a pending transaction so do minimal effort
+ if (uncommittedTransactionsMap.keySet().size() > 0) {
+
+ boolean doEnd = false;
+ boolean needResize = false;
+ while (!doEnd && (uncommittedTransactionsMap.keySet().size() > 0)) {
+ boolean resize = needResize;
+ needResize = false;
+
+ Slot s = new Slot(this, sequencenumber + 1, localmachineid, buffer.getSlot(sequencenumber).getHMAC());
+ int newsize = 0;
+ if (liveslotcount > resizethreshold) {
+ resize = true; //Resize is forced
+ }
- if (resize) {
- newsize = (int) (numslots * RESIZE_MULTIPLE);
- TableStatus status = new TableStatus(s, newsize);
- s.addEntry(status);
- }
+ if (resize) {
+ newsize = (int) (numslots * RESIZE_MULTIPLE);
+ TableStatus status = new TableStatus(s, newsize);
+ s.addEntry(status);
+ }
- doRejectedMessages(s);
+ doRejectedMessages(s);
- ThreeTuple<Boolean, Boolean, Long> retTup = doMandatoryResuce(s, resize);
+ ThreeTuple<Boolean, Boolean, Long> retTup = doMandatoryResuce(s, resize);
- // Resize was needed so redo call
- if (retTup.getFirst()) {
- needResize = true;
- continue;
- }
+ // Resize was needed so redo call
+ if (retTup.getFirst()) {
+ needResize = true;
+ continue;
+ }
- // Extract working variables
- boolean seenliveslot = retTup.getSecond();
- long seqn = retTup.getThird();
+ // Extract working variables
+ boolean seenliveslot = retTup.getSecond();
+ long seqn = retTup.getThird();
- // Did need to arbitrate
- doEnd = !doArbitration(s);
+ // Did need to arbitrate
+ doEnd = !doArbitration(s);
- doOptionalRescue(s, seenliveslot, seqn, resize);
+ doOptionalRescue(s, seenliveslot, seqn, resize);
- int max = 0;
- if (resize) {
- max = newsize;
- }
+ int max = 0;
+ if (resize) {
+ max = newsize;
+ }
- Slot[] array = cloud.putSlot(s, max);
- if (array == null) {
- array = new Slot[] {s};
- rejectedmessagelist.clear();
- } else {
- if (array.length == 0)
- throw new Error("Server Error: Did not send any slots");
- rejectedmessagelist.add(s.getSequenceNumber());
- doEnd = false;
- }
+ Slot[] array = cloud.putSlot(s, max);
+ if (array == null) {
+ array = new Slot[] {s};
+ rejectedmessagelist.clear();
+ } else {
+ if (array.length == 0)
+ throw new Error("Server Error: Did not send any slots");
+ rejectedmessagelist.add(s.getSequenceNumber());
+ doEnd = false;
+ }
- /* update data structure */
- validateandupdate(array, true);
+ /* update data structure */
+ validateandupdate(array, true);
+ }
}
}
}
- public boolean createNewKey(IoTString keyName, long machineId) {
+ public boolean createNewKey(IoTString keyName, long machineId) throws ServerException {
while (true) {
if (arbitratorTable.get(keyName) != null) {
resizethreshold = resize_lower - 1 + random.nextInt(numslots - resize_lower);
}
- private boolean tryput(PendingTransaction pendingTrans, boolean resize) {
+ private boolean tryput(PendingTransaction pendingTrans, boolean resize) throws ServerException {
Slot s = new Slot(this, sequencenumber + 1, localmachineid, buffer.getSlot(sequencenumber).getHMAC());
int newsize = 0;
boolean seenliveslot = retTup.getSecond();
long seqn = retTup.getThird();
-
doArbitration(s);
Transaction trans = new Transaction(s,
localmachineid,
pendingTrans.getArbitrator(),
pendingTrans.getKVUpdates(),
- pendingTrans.getGuard());
+ pendingTrans.getKVGuard());
boolean insertedTrans = false;
if (s.hasSpace(trans)) {
s.addEntry(trans);
return doSendSlotsAndInsert(s, insertedTrans, resize, newsize);
}
- private boolean tryput(IoTString keyName, long arbMachineid, boolean resize) {
+ private boolean tryput(IoTString keyName, long arbMachineid, boolean resize) throws ServerException {
Slot s = new Slot(this, sequencenumber + 1, localmachineid, buffer.getSlot(sequencenumber).getHMAC());
int newsize = 0;
if (liveslotcount > resizethreshold) {
boolean seenliveslot = retTup.getSecond();
long seqn = retTup.getThird();
-
doArbitration(s);
NewKey newKey = new NewKey(s, keyName, arbMachineid);
private boolean doArbitration(Slot s) {
// Arbitrate
- Map speculativeTableTmp = new HashMap<IoTString, KeyValue>(commitedTable);
-
+ Map<IoTString, KeyValue> speculativeTableTmp = new HashMap<IoTString, KeyValue>();
List<Long> transSeqNums = new ArrayList<Long>(uncommittedTransactionsMap.keySet());
// Sort from oldest to newest
Collections.sort(transSeqNums);
-
boolean didNeedArbitration = false;
for (Long transNum : transSeqNums) {
Transaction ut = uncommittedTransactionsMap.get(transNum);
- KeyValue keyVal = (KeyValue)(ut.getkeyValueUpdateSet().toArray())[0];
// Check if this machine arbitrates for this transaction
- if (arbitratorTable.get( keyVal.getKey() ) != localmachineid ) {
+ if (ut.getArbitrator() != localmachineid ) {
continue;
}
Entry newEntry = null;
- try {
- if ( ut.getGuard().evaluate(speculativeTableTmp.values())) {
- // Guard evaluated as true
+ if (ut.evaluateGuard(commitedTable, speculativeTableTmp)) {
+ // Guard evaluated as true
- // update the local tmp current key set
- for (KeyValue kv : ut.getkeyValueUpdateSet()) {
- speculativeTableTmp.put(kv.getKey(), kv);
- }
+ // update the local tmp current key set
+ for (KeyValue kv : ut.getkeyValueUpdateSet()) {
+ speculativeTableTmp.put(kv.getKey(), kv);
+ }
- // create the commit
- newEntry = new Commit(s, ut.getSequenceNumber(), ut.getArbitrator(), ut.getkeyValueUpdateSet());
- } else {
- // Guard was false
+ // create the commit
+ newEntry = new Commit(s, ut.getSequenceNumber(), ut.getArbitrator(), ut.getkeyValueUpdateSet());
+ } else {
+ // Guard was false
- // create the abort
- newEntry = new Abort(s, ut.getSequenceNumber(), ut.getMachineID(), ut.getArbitrator());
- }
- } catch (Exception e) {
- e.printStackTrace();
+ // create the abort
+ newEntry = new Abort(s, ut.getSequenceNumber(), ut.getMachineID(), ut.getArbitrator());
}
if ((newEntry != null) && s.hasSpace(newEntry)) {
}
}
- private boolean doSendSlotsAndInsert(Slot s, boolean inserted, boolean resize, int newsize) {
+ private boolean doSendSlotsAndInsert(Slot s, boolean inserted, boolean resize, int newsize) throws ServerException {
int max = 0;
if (resize)
max = newsize;
before decoding */
if (newslots.length == 0) return;
+ // Reset the table status declared sizes
+ smallestTableStatusSeen = -1;
+ largestTableStatusSeen = -1;
+
long firstseqnum = newslots[0].getSequenceNumber();
if (firstseqnum <= sequencenumber) {
throw new Error("Server Error: Sent older slots!");
HashSet<Long> machineSet = new HashSet<Long>(lastmessagetable.keySet()); //
- initExpectedSize(firstseqnum);
+ // initExpectedSize(firstseqnum);
for (Slot slot : newslots) {
processSlot(indexer, slot, acceptupdatestolocal, machineSet);
- updateExpectedSize();
+ // updateExpectedSize();
}
-
- boolean hasGap = false;
/* If there is a gap, check to see if the server sent us everything. */
if (firstseqnum != (sequencenumber + 1)) {
}
}
+
commitNewMaxSize();
/* Commit new to slots. */
private void createSpeculativeTable() {
if (uncommittedTransactionsMap.keySet().size() == 0) {
- speculativeTable = commitedTable; // Ok that they are the same object
+ // speculativeTable = commitedTable; // Ok that they are the same object
return;
}
- Map speculativeTableTmp = null;
+ Map<IoTString, KeyValue> speculativeTableTmp = new HashMap<IoTString, KeyValue>();
List<Long> utSeqNums = new ArrayList<Long>(uncommittedTransactionsMap.keySet());
// Sort from oldest to newest commit
Collections.sort(utSeqNums);
if (utSeqNums.get(0) > (lastUncommittedTransaction)) {
- speculativeTableTmp = new HashMap<IoTString, KeyValue>(commitedTable);
+
+ speculativeTable.clear();
+ lastUncommittedTransaction = -1;
for (Long key : utSeqNums) {
Transaction trans = uncommittedTransactionsMap.get(key);
lastUncommittedTransaction = key;
- try {
- if (trans.getGuard().evaluate(speculativeTableTmp.values())) {
- for (KeyValue kv : trans.getkeyValueUpdateSet()) {
- speculativeTableTmp.put(kv.getKey(), kv);
- }
+ if (trans.evaluateGuard(commitedTable, speculativeTableTmp)) {
+ for (KeyValue kv : trans.getkeyValueUpdateSet()) {
+ speculativeTableTmp.put(kv.getKey(), kv);
}
-
- } catch (Exception e) {
- e.printStackTrace();
}
+
}
} else {
- speculativeTableTmp = new HashMap<IoTString, KeyValue>(speculativeTable);
-
for (Long key : utSeqNums) {
if (key <= lastUncommittedTransaction) {
Transaction trans = uncommittedTransactionsMap.get(key);
- try {
- if (trans.getGuard().evaluate(speculativeTableTmp.values())) {
- for (KeyValue kv : trans.getkeyValueUpdateSet()) {
- speculativeTableTmp.put(kv.getKey(), kv);
- }
+ if (trans.evaluateGuard(speculativeTable, speculativeTableTmp)) {
+ for (KeyValue kv : trans.getkeyValueUpdateSet()) {
+ speculativeTableTmp.put(kv.getKey(), kv);
}
-
- } catch (Exception e) {
- e.printStackTrace();
}
}
}
- speculativeTable = speculativeTableTmp;
+ for (IoTString key : speculativeTableTmp.keySet()) {
+ speculativeTable.put(key, speculativeTableTmp.get(key));
+ }
+
+ // speculativeTable = speculativeTableTmp;
}
private int expectedsize, currmaxsize;
private void checkNumSlots(int numslots) {
- if (numslots != expectedsize) {
- throw new Error("Server Error: Server did not send all slots. Expected: " + expectedsize + " Received:" + numslots);
+
+
+ // We only have 1 size so we must have this many slots
+ if (largestTableStatusSeen == smallestTableStatusSeen) {
+ if (numslots != smallestTableStatusSeen) {
+ throw new Error("Server Error: Server did not send all slots. Expected: " + smallestTableStatusSeen + " Received:" + numslots);
+ }
+ } else {
+ // We have more than 1
+ if (numslots < smallestTableStatusSeen) {
+ throw new Error("Server Error: Server did not send all slots. Expected at least: " + smallestTableStatusSeen + " Received:" + numslots);
+ }
}
+
+ // if (numslots != expectedsize) {
+ // throw new Error("Server Error: Server did not send all slots. Expected: " + expectedsize + " Received:" + numslots);
+ // }
}
private void initExpectedSize(long firstsequencenumber) {
private void updateExpectedSize() {
expectedsize++;
if (expectedsize > currmaxsize) {
+ System.out.println("Maxing Out: " + expectedsize + " " + currmaxsize);
expectedsize = currmaxsize;
}
}
}
private void commitNewMaxSize() {
+
+ if (largestTableStatusSeen == -1) {
+ currmaxsize = numslots;
+ } else {
+ currmaxsize = largestTableStatusSeen;
+ }
+
if (numslots != currmaxsize) {
buffer.resize(currmaxsize);
}
}
private void processEntry(Transaction entry) {
- Transaction prevTrans = uncommittedTransactionsMap.put(entry.getSequenceNumber(), entry);
+
+ long arb = entry.getArbitrator();
+ Long comLast = lastCommitSeenSeqNumMap.get(arb);
+ Long abLast = lastAbortSeenSeqNumMap.get(arb);
+
+ Transaction prevTrans = null;
+
+ if ((comLast != null) && (comLast >= entry.getSequenceNumber())) {
+ prevTrans = uncommittedTransactionsMap.remove(entry.getSequenceNumber());
+ } else if ((abLast != null) && (abLast >= entry.getSequenceNumber())) {
+ prevTrans = uncommittedTransactionsMap.remove(entry.getSequenceNumber());
+ } else {
+ prevTrans = uncommittedTransactionsMap.put(entry.getSequenceNumber(), entry);
+ }
// Duplicate so delete old copy
if (prevTrans != null) {
entry.setDead();
}
- lastAbortSeenSeqNumMap.put(entry.getTransArbitrator(), entry.getTransSequenceNumber());
+ if ((lastAbortSeenSeqNumMap.get(entry.getTransArbitrator()) != null) && (entry.getTransSequenceNumber() > lastAbortSeenSeqNumMap.get(entry.getTransArbitrator()))) {
+ lastAbortSeenSeqNumMap.put(entry.getTransArbitrator(), entry.getTransSequenceNumber());
+ }
}
private void processEntry(Commit entry, Slot s) {
private void processEntry(TableStatus entry) {
int newnumslots = entry.getMaxSlots();
- updateCurrMaxSize(newnumslots);
+ // updateCurrMaxSize(newnumslots);
if (lastTableStatus != null)
lastTableStatus.setDead();
lastTableStatus = entry;
+
+ if ((smallestTableStatusSeen == -1) || (newnumslots < smallestTableStatusSeen)) {
+ smallestTableStatusSeen = newnumslots;
+ }
+
+ if ((largestTableStatusSeen == -1) || (newnumslots > largestTableStatusSeen)) {
+ largestTableStatusSeen = newnumslots;
+ }
+
+ // System.out.println("Table Stat: " + newnumslots + " large: " + largestTableStatusSeen + " small: " + smallestTableStatusSeen);
}
private void addWatchList(long machineid, RejectedMessage entry) {
public static final int NUMBER_OF_TESTS = 1000;
- public static void main(String[] args) {
+ public static void main(String[] args) throws ServerException {
if (args[0].equals("2")) {
test2();
} else if (args[0].equals("3")) {
test6();
} else if (args[0].equals("7")) {
test7();
- } else if (args[0].equals("8")) {
- test8();
- } else if (args[0].equals("9")) {
- test9();
}
+ // else if (args[0].equals("8")) {
+ // test8();
+ // } else if (args[0].equals("9")) {
+ // test9();
+ // }
}
- static void test9() {
-
- // Setup the 2 clients
- Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
- t1.initTable();
- Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
- t2.update();
-
-
- // Make the Keys
- System.out.println("Setting up keys");
- for (int i = 0; i < NUMBER_OF_TESTS; i++) {
- String a = "a" + i;
- String b = "b" + i;
- String c = "c" + i;
- String d = "d" + i;
- IoTString ia = new IoTString(a);
- IoTString ib = new IoTString(b);
- IoTString ic = new IoTString(c);
- IoTString id = new IoTString(d);
- t1.createNewKey(ia, 321);
- t1.createNewKey(ib, 351);
- t2.createNewKey(ic, 321);
- t2.createNewKey(id, 351);
- }
-
- for (int i = 0; i < NUMBER_OF_TESTS; i++) {
- String a = "a" + i;
- String b = "b" + i;
- String c = "c" + i;
- String d = "d" + i;
- IoTString ia = new IoTString(a);
- IoTString ib = new IoTString(b);
- IoTString ic = new IoTString(c);
- IoTString id = new IoTString(d);
- t1.createNewKey(ia, 1000);
- t1.createNewKey(ib, 1000);
- t2.createNewKey(ic, 1000);
- t2.createNewKey(id, 1000);
- }
-
- System.out.println("Updating Clients...");
- t1.update();
- t2.update();
- t1.update();
- t2.update();
-
- boolean foundError = false;
-
- System.out.println("Checking Key-Values...");
- for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-
- String keyA = "a" + i;
- String keyB = "b" + i;
- String keyC = "c" + i;
- String keyD = "d" + i;
-
- IoTString iKeyA = new IoTString(keyA);
- IoTString iKeyB = new IoTString(keyB);
- IoTString iKeyC = new IoTString(keyC);
- IoTString iKeyD = new IoTString(keyD);
-
-
- Long testValA1 = t1.getArbitrator(iKeyA);
- Long testValB1 = t1.getArbitrator(iKeyB);
- Long testValC1 = t1.getArbitrator(iKeyC);
- Long testValD1 = t1.getArbitrator(iKeyD);
-
- Long testValA2 = t2.getArbitrator(iKeyA);
- Long testValB2 = t2.getArbitrator(iKeyB);
- Long testValC2 = t2.getArbitrator(iKeyC);
- Long testValD2 = t2.getArbitrator(iKeyD);
-
- if ((testValA1 == null) || (testValA1 != 321)) {
- System.out.println("Key-Value t1 incorrect: " + keyA + " " + testValA1);
- foundError = true;
- }
-
- if ((testValB1 == null) || (testValB1 != 351)) {
- System.out.println("Key-Value t1 incorrect: " + keyB + " " + testValB1);
- foundError = true;
- }
-
- if ((testValC1 == null) || (testValC1 != 321)) {
- System.out.println("Key-Value t1 incorrect: " + keyC + " " + testValC1);
- foundError = true;
- }
-
- if ((testValD1 == null) || (testValD1 != 351)) {
- System.out.println("Key-Value t1 incorrect: " + keyD + " " + testValD1);
- foundError = true;
- }
-
- if ((testValA2 == null) || (testValA2 != 321)) {
- System.out.println("Key-Value t2 incorrect: " + keyA + " " + testValA2);
- foundError = true;
- }
-
- if ((testValB2 == null) || (testValB2 != 351)) {
- System.out.println("Key-Value t2 incorrect: " + keyB + " " + testValB2);
- foundError = true;
- }
-
- if ((testValC2 == null) || (testValC2 != 321)) {
- System.out.println("Key-Value t2 incorrect: " + keyC + " " + testValC2);
- foundError = true;
- }
-
- if ((testValD2 == null) || (testValD2 != 351)) {
- System.out.println("Key-Value t2 incorrect: " + keyD + " " + testValD2);
- foundError = true;
- }
- }
-
- if (foundError) {
- System.out.println("Found Errors...");
- } else {
- System.out.println("No Errors Found...");
- }
- }
-
- static void test8() {
+ // static void test9() throws ServerException {
+ // // Setup the 2 clients
+ // Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
+ // t1.initTable();
+ // Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
+ // t2.update();
+
+
+ // // Make the Keys
+ // System.out.println("Setting up keys");
+ // for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+ // String a = "a" + i;
+ // String b = "b" + i;
+ // String c = "c" + i;
+ // String d = "d" + i;
+ // IoTString ia = new IoTString(a);
+ // IoTString ib = new IoTString(b);
+ // IoTString ic = new IoTString(c);
+ // IoTString id = new IoTString(d);
+ // t1.createNewKey(ia, 321);
+ // t1.createNewKey(ib, 351);
+ // t2.createNewKey(ic, 321);
+ // t2.createNewKey(id, 351);
+ // }
+
+ // for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+ // String a = "a" + i;
+ // String b = "b" + i;
+ // String c = "c" + i;
+ // String d = "d" + i;
+ // IoTString ia = new IoTString(a);
+ // IoTString ib = new IoTString(b);
+ // IoTString ic = new IoTString(c);
+ // IoTString id = new IoTString(d);
+ // t1.createNewKey(ia, 1000);
+ // t1.createNewKey(ib, 1000);
+ // t2.createNewKey(ic, 1000);
+ // t2.createNewKey(id, 1000);
+ // }
+
+ // System.out.println("Updating Clients...");
+ // t1.update();
+ // t2.update();
+ // t1.update();
+ // t2.update();
+
+ // boolean foundError = false;
+
+ // System.out.println("Checking Key-Values...");
+ // for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+
+ // String keyA = "a" + i;
+ // String keyB = "b" + i;
+ // String keyC = "c" + i;
+ // String keyD = "d" + i;
+
+ // IoTString iKeyA = new IoTString(keyA);
+ // IoTString iKeyB = new IoTString(keyB);
+ // IoTString iKeyC = new IoTString(keyC);
+ // IoTString iKeyD = new IoTString(keyD);
+
+
+ // Long testValA1 = t1.getArbitrator(iKeyA);
+ // Long testValB1 = t1.getArbitrator(iKeyB);
+ // Long testValC1 = t1.getArbitrator(iKeyC);
+ // Long testValD1 = t1.getArbitrator(iKeyD);
+
+ // Long testValA2 = t2.getArbitrator(iKeyA);
+ // Long testValB2 = t2.getArbitrator(iKeyB);
+ // Long testValC2 = t2.getArbitrator(iKeyC);
+ // Long testValD2 = t2.getArbitrator(iKeyD);
+
+ // if ((testValA1 == null) || (testValA1 != 321)) {
+ // System.out.println("Key-Value t1 incorrect: " + keyA + " " + testValA1);
+ // foundError = true;
+ // }
+
+ // if ((testValB1 == null) || (testValB1 != 351)) {
+ // System.out.println("Key-Value t1 incorrect: " + keyB + " " + testValB1);
+ // foundError = true;
+ // }
+
+ // if ((testValC1 == null) || (testValC1 != 321)) {
+ // System.out.println("Key-Value t1 incorrect: " + keyC + " " + testValC1);
+ // foundError = true;
+ // }
+
+ // if ((testValD1 == null) || (testValD1 != 351)) {
+ // System.out.println("Key-Value t1 incorrect: " + keyD + " " + testValD1);
+ // foundError = true;
+ // }
+
+ // if ((testValA2 == null) || (testValA2 != 321)) {
+ // System.out.println("Key-Value t2 incorrect: " + keyA + " " + testValA2);
+ // foundError = true;
+ // }
+
+ // if ((testValB2 == null) || (testValB2 != 351)) {
+ // System.out.println("Key-Value t2 incorrect: " + keyB + " " + testValB2);
+ // foundError = true;
+ // }
+
+ // if ((testValC2 == null) || (testValC2 != 321)) {
+ // System.out.println("Key-Value t2 incorrect: " + keyC + " " + testValC2);
+ // foundError = true;
+ // }
+
+ // if ((testValD2 == null) || (testValD2 != 351)) {
+ // System.out.println("Key-Value t2 incorrect: " + keyD + " " + testValD2);
+ // foundError = true;
+ // }
+ // }
+
+ // if (foundError) {
+ // System.out.println("Found Errors...");
+ // } else {
+ // System.out.println("No Errors Found...");
+ // }
+ // }
+
+ // static void test8() throws ServerException {
+
+ // boolean foundError = false;
+
+ // // Setup the 2 clients
+ // Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
+ // t1.initTable();
+ // Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
+ // t2.update();
+
+ // // t1.rebuild();
+ // // t2.rebuild();
+
+ // // Make the Keys
+ // System.out.println("Setting up keys");
+ // for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+ // String a = "a" + i;
+ // String b = "b" + i;
+ // String c = "c" + i;
+ // String d = "d" + i;
+ // IoTString ia = new IoTString(a);
+ // IoTString ib = new IoTString(b);
+ // IoTString ic = new IoTString(c);
+ // IoTString id = new IoTString(d);
+ // t1.createNewKey(ia, 321);
+ // t1.createNewKey(ib, 351);
+ // t2.createNewKey(ic, 321);
+ // t2.createNewKey(id, 351);
+ // }
+
+
+ // // Do Updates for the keys
+ // System.out.println("Setting Key-Values...");
+
+
+ // String keyA0 = "a0";
+ // String keyB0 = "b0";
+ // String keyC0 = "c0";
+ // String keyD0 = "d0";
+ // String valueA0 = "a0";
+ // String valueB0 = "b0";
+ // String valueC0 = "c0";
+ // String valueD0 = "d0";
+
+ // IoTString iKeyA0 = new IoTString(keyA0);
+ // IoTString iKeyB0 = new IoTString(keyB0);
+ // IoTString iKeyC0 = new IoTString(keyC0);
+ // IoTString iKeyD0 = new IoTString(keyD0);
+ // IoTString iValueA0 = new IoTString(valueA0);
+ // IoTString iValueB0 = new IoTString(valueB0);
+ // IoTString iValueC0 = new IoTString(valueC0);
+ // IoTString iValueD0 = new IoTString(valueD0);
+
+ // t1.startTransaction();
+ // t1.addKV( iKeyA0, iValueA0);
+ // t1.commitTransaction();
+
+ // t1.startTransaction();
+ // t1.addKV(iKeyB0, iValueB0);
+ // t1.commitTransaction();
+
+ // t2.startTransaction();
+ // t2.addKV(iKeyC0, iValueC0);
+ // t2.commitTransaction();
+
+ // t2.startTransaction();
+ // t2.addKV(iKeyD0, iValueD0);
+ // t2.commitTransaction();
+
+ // for (int i = 1; i < NUMBER_OF_TESTS; i++) {
+ // String keyB = "b" + i;
+ // String valueB = "b" + i;
+ // IoTString iKeyB = new IoTString(keyB);
+ // IoTString iValueB = new IoTString(valueB);
+
+ // String keyBOld = "b" + (i - 1);
+ // String valueBOld = "b" + (i - 1);
+ // IoTString iKeyBOld = new IoTString(keyBOld);
+ // IoTString iValueBOld = new IoTString(valueBOld);
+
+
+ // t1.startTransaction();
+ // t1.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyBOld, iValueBOld, Guard.Equal))));
+ // t1.addKV(iKeyB, iValueB);
+ // t1.commitTransaction();
+ // }
+
+ // System.out.println("Checking Key-Values...");
+ // for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+
+ // String keyB = "b" + i;
+ // String valueB = "b" + i;
+
+ // IoTString iKeyB = new IoTString(keyB);
+ // IoTString iValueB = new IoTString(valueB);
+
+ // IoTString testValB1 = t1.getSpeculative(iKeyB);
+
+ // if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
+ // System.out.println("Key-Value t1 incorrect: " + keyB);
+ // foundError = true;
+
+ // }
+ // }
+
+
+ // System.out.println("Updating Clients...");
+ // t1.update();
+ // t2.update();
+ // t1.update();
+ // t2.update();
+
+ // System.out.println("Checking Key-Values...");
+ // for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+
+ // String keyA = "a" + i;
+ // String keyB = "b" + i;
+ // String keyC = "c" + i;
+ // String keyD = "d" + i;
+ // String valueA = "a" + i;
+ // String valueB = "b" + i;
+ // String valueC = "c" + i;
+ // String valueD = "d" + i;
+
+ // IoTString iKeyA = new IoTString(keyA);
+ // IoTString iKeyB = new IoTString(keyB);
+ // IoTString iKeyC = new IoTString(keyC);
+ // IoTString iKeyD = new IoTString(keyD);
+ // IoTString iValueA = new IoTString(valueA);
+ // IoTString iValueB = new IoTString(valueB);
+ // IoTString iValueC = new IoTString(valueC);
+ // IoTString iValueD = new IoTString(valueD);
+
+
+ // IoTString testValA1 = t1.getCommitted(iKeyA);
+ // IoTString testValB1 = t1.getCommitted(iKeyB);
+ // IoTString testValC1 = t1.getCommitted(iKeyC);
+ // IoTString testValD1 = t1.getCommitted(iKeyD);
+
+ // IoTString testValA2 = t2.getCommitted(iKeyA);
+ // IoTString testValB2 = t2.getCommitted(iKeyB);
+ // IoTString testValC2 = t2.getCommitted(iKeyC);
+ // IoTString testValD2 = t2.getCommitted(iKeyD);
+
+
+ // if (i == 0) {
+ // if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
+ // System.out.println("Key-Value t1 incorrect: " + keyA);
+ // foundError = true;
+ // }
+
+ // if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
+ // System.out.println("Key-Value t1 incorrect: " + keyB);
+ // foundError = true;
+ // }
+
+ // if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
+ // System.out.println("Key-Value t1 incorrect: " + keyC);
+ // foundError = true;
+ // }
+
+ // if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
+ // System.out.println("Key-Value t1 incorrect: " + keyD);
+ // foundError = true;
+ // }
+
+
+ // if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
+ // System.out.println("Key-Value t2 incorrect: " + keyA + " " + testValA2);
+ // foundError = true;
+ // }
+
+ // if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
+ // System.out.println("Key-Value t2 incorrect: " + keyB + " " + testValB2);
+ // foundError = true;
+ // }
+
+ // if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
+ // System.out.println("Key-Value t2 incorrect: " + keyC + " " + testValC2);
+ // foundError = true;
+ // }
+
+ // if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
+ // System.out.println("Key-Value t2 incorrect: " + keyD + " " + testValD2);
+ // foundError = true;
+ // }
+ // } else {
+ // if (testValA1 != null) {
+ // System.out.println("Key-Value t1 incorrect: " + keyA);
+ // foundError = true;
+ // }
+
+ // if (testValB1 != null) {
+ // System.out.println("Key-Value t1 incorrect: " + keyB);
+ // foundError = true;
+ // }
+
+ // if (testValC1 != null) {
+ // System.out.println("Key-Value t1 incorrect: " + keyC);
+ // foundError = true;
+ // }
+
+ // if (testValD1 != null) {
+ // System.out.println("Key-Value t1 incorrect: " + keyD);
+ // foundError = true;
+ // }
+
+ // if (testValA2 != null) {
+ // System.out.println("Key-Value t2 incorrect: " + keyA + " " + testValA2);
+ // foundError = true;
+ // }
+
+ // if (testValB2 != null) {
+ // System.out.println("Key-Value t2 incorrect: " + keyB + " " + testValB2);
+ // foundError = true;
+ // }
+
+ // if (testValC2 != null) {
+ // System.out.println("Key-Value t2 incorrect: " + keyC + " " + testValC2);
+ // foundError = true;
+ // }
+
+ // if (testValD2 != null) {
+ // System.out.println("Key-Value t2 incorrect: " + keyD + " " + testValD2);
+ // foundError = true;
+ // }
+ // }
+ // }
+
+ // if (foundError) {
+ // System.out.println("Found Errors...");
+ // } else {
+ // System.out.println("No Errors Found...");
+ // }
+ // }
+
+ // static void test7() throws ServerException {
+
+ // long startTime = 0;
+ // long endTime = 0;
+
+ // // Setup the 2 clients
+ // Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
+ // t1.initTable();
+ // Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
+ // t2.update();
+
+ // // t1.rebuild();
+ // // t2.rebuild();
+
+ // // Make the Keys
+ // System.out.println("Setting up keys");
+ // startTime = System.currentTimeMillis();
+ // for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+ // String a = "a" + i;
+ // String b = "b" + i;
+ // String c = "c" + i;
+ // String d = "d" + i;
+ // IoTString ia = new IoTString(a);
+ // IoTString ib = new IoTString(b);
+ // IoTString ic = new IoTString(c);
+ // IoTString id = new IoTString(d);
+ // t1.createNewKey(ia, 321);
+ // t1.createNewKey(ib, 351);
+ // t2.createNewKey(ic, 321);
+ // t2.createNewKey(id, 351);
+ // }
+ // endTime = System.currentTimeMillis();
+
+ // System.out.println("Time Taken: " + (double) ((endTime - startTime) / 1000.0) );
+ // System.out.println("Time Taken Per Key: " + (double) (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4)) );
+ // System.out.println();
+
+
+ // // Do Updates for the keys
+ // System.out.println("Setting Key-Values...");
+ // startTime = System.currentTimeMillis();
+
+
+
+ // String keyA0 = "a0";
+ // String keyB0 = "b0";
+ // String keyC0 = "c0";
+ // String keyD0 = "d0";
+ // String valueA0 = "a0";
+ // String valueB0 = "b0";
+ // String valueC0 = "c0";
+ // String valueD0 = "d0";
+
+ // IoTString iKeyA0 = new IoTString(keyA0);
+ // IoTString iKeyB0 = new IoTString(keyB0);
+ // IoTString iKeyC0 = new IoTString(keyC0);
+ // IoTString iKeyD0 = new IoTString(keyD0);
+ // IoTString iValueA0 = new IoTString(valueA0);
+ // IoTString iValueB0 = new IoTString(valueB0);
+ // IoTString iValueC0 = new IoTString(valueC0);
+ // IoTString iValueD0 = new IoTString(valueD0);
+
+ // t1.startTransaction();
+ // t1.addKV( iKeyA0, iValueA0);
+ // t1.commitTransaction();
+
+ // t1.startTransaction();
+ // t1.addKV(iKeyB0, iValueB0);
+ // t1.commitTransaction();
+
+ // t2.startTransaction();
+ // t2.addKV(iKeyC0, iValueC0);
+ // t2.commitTransaction();
+
+ // t2.startTransaction();
+ // t2.addKV(iKeyD0, iValueD0);
+ // t2.commitTransaction();
+
+ // for (int i = 1; i < NUMBER_OF_TESTS; i++) {
+ // String keyB = "b" + i;
+ // String valueB = "b" + i;
+ // IoTString iKeyB = new IoTString(keyB);
+ // IoTString iValueB = new IoTString(valueB);
+
+ // String keyBOld = "b" + (i - 1);
+ // String valueBOld = "b" + (i - 2);
+ // IoTString iKeyBOld = new IoTString(keyBOld);
+ // IoTString iValueBOld = new IoTString(valueBOld);
+
+
+ // t1.startTransaction();
+ // t1.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyBOld, iValueBOld, Guard.Equal))));
+ // t1.addKV(iKeyB, iValueB);
+ // t1.commitTransaction();
+ // }
+
+ // for (int i = 1; i < NUMBER_OF_TESTS; i++) {
+ // String keyC = "c" + i;
+ // String valueC = "c" + i;
+ // IoTString iKeyC = new IoTString(keyC);
+ // IoTString iValueC = new IoTString(valueC);
+
+ // String keyCOld = "c" + (i - 1);
+ // String valueCOld = "c" + (i - 2);
+ // IoTString iKeyCOld = new IoTString(keyCOld);
+ // IoTString iValueCOld = new IoTString(valueCOld);
+
+
+ // t2.startTransaction();
+ // t2.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyCOld, iValueCOld, Guard.Equal))));
+ // t2.addKV(iKeyC, iValueC);
+ // t2.commitTransaction();
+ // }
+
+ // for (int i = 1; i < NUMBER_OF_TESTS; i++) {
+ // String keyA = "a" + i;
+ // String keyD = "d" + i;
+ // String valueA = "a" + i;
+ // String valueD = "d" + i;
+
+ // IoTString iKeyA = new IoTString(keyA);
+ // IoTString iKeyD = new IoTString(keyD);
+ // IoTString iValueA = new IoTString(valueA);
+ // IoTString iValueD = new IoTString(valueD);
+
+
+ // String keyAOld = "a" + (i - 1);
+ // String keyDOld = "d" + (i - 1);
+ // String valueAOld = "a" + (i - 2);
+ // String valueDOld = "d" + (i - 2);
+ // IoTString iKeyAOld = new IoTString(keyAOld);
+ // IoTString iKeyDOld = new IoTString(keyDOld);
+ // IoTString iValueAOld = new IoTString(valueAOld);
+ // IoTString iValueDOld = new IoTString(valueDOld);
+
+
+ // t1.startTransaction();
+ // t1.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyAOld, iValueAOld, Guard.Equal))));
+ // t1.addKV(iKeyA, iValueA);
+ // t1.commitTransaction();
+
+ // t2.startTransaction();
+ // t2.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyDOld, iValueDOld, Guard.Equal))));
+ // t2.addKV(iKeyD, iValueD);
+ // t2.commitTransaction();
+ // }
+
+ // endTime = System.currentTimeMillis();
+
+ // System.out.println("Time Taken: " + (double) ((endTime - startTime) / 1000.0) );
+ // System.out.println("Time Taken Per Update: " + (double) (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4)) );
+ // System.out.println();
+
+
+ // System.out.println("Updating Clients...");
+ // t1.update();
+ // t2.update();
+ // t1.update();
+ // t2.update();
+
+ // boolean foundError = false;
+
+ // System.out.println("Checking Key-Values...");
+ // for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+
+ // String keyA = "a" + i;
+ // String keyB = "b" + i;
+ // String keyC = "c" + i;
+ // String keyD = "d" + i;
+ // String valueA = "a" + i;
+ // String valueB = "b" + i;
+ // String valueC = "c" + i;
+ // String valueD = "d" + i;
+
+ // IoTString iKeyA = new IoTString(keyA);
+ // IoTString iKeyB = new IoTString(keyB);
+ // IoTString iKeyC = new IoTString(keyC);
+ // IoTString iKeyD = new IoTString(keyD);
+ // IoTString iValueA = new IoTString(valueA);
+ // IoTString iValueB = new IoTString(valueB);
+ // IoTString iValueC = new IoTString(valueC);
+ // IoTString iValueD = new IoTString(valueD);
+
+
+ // IoTString testValA1 = t1.getCommitted(iKeyA);
+ // IoTString testValB1 = t1.getCommitted(iKeyB);
+ // IoTString testValC1 = t1.getCommitted(iKeyC);
+ // IoTString testValD1 = t1.getCommitted(iKeyD);
+
+ // IoTString testValA2 = t2.getCommitted(iKeyA);
+ // IoTString testValB2 = t2.getCommitted(iKeyB);
+ // IoTString testValC2 = t2.getCommitted(iKeyC);
+ // IoTString testValD2 = t2.getCommitted(iKeyD);
+
+
+ // if (i == 0) {
+ // if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
+ // System.out.println("Key-Value t1 incorrect: " + keyA);
+ // foundError = true;
+ // }
+
+ // if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
+ // System.out.println("Key-Value t1 incorrect: " + keyB);
+ // foundError = true;
+ // }
+
+ // if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
+ // System.out.println("Key-Value t1 incorrect: " + keyC);
+ // foundError = true;
+ // }
+
+ // if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
+ // System.out.println("Key-Value t1 incorrect: " + keyD);
+ // foundError = true;
+ // }
+
+
+ // if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
+ // System.out.println("Key-Value t2 incorrect: " + keyA + " " + testValA2);
+ // foundError = true;
+ // }
+
+ // if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
+ // System.out.println("Key-Value t2 incorrect: " + keyB + " " + testValB2);
+ // foundError = true;
+ // }
+
+ // if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
+ // System.out.println("Key-Value t2 incorrect: " + keyC + " " + testValC2);
+ // foundError = true;
+ // }
+
+ // if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
+ // System.out.println("Key-Value t2 incorrect: " + keyD + " " + testValD2);
+ // foundError = true;
+ // }
+ // } else {
+ // if (testValA1 != null) {
+ // System.out.println("Key-Value t1 incorrect: " + keyA);
+ // foundError = true;
+ // }
+
+ // if (testValB1 != null) {
+ // System.out.println("Key-Value t1 incorrect: " + keyB);
+ // foundError = true;
+ // }
+
+ // if (testValC1 != null) {
+ // System.out.println("Key-Value t1 incorrect: " + keyC);
+ // foundError = true;
+ // }
+
+ // if (testValD1 != null) {
+ // System.out.println("Key-Value t1 incorrect: " + keyD);
+ // foundError = true;
+ // }
+
+ // if (testValA2 != null) {
+ // System.out.println("Key-Value t2 incorrect: " + keyA + " " + testValA2);
+ // foundError = true;
+ // }
+
+ // if (testValB2 != null) {
+ // System.out.println("Key-Value t2 incorrect: " + keyB + " " + testValB2);
+ // foundError = true;
+ // }
+
+ // if (testValC2 != null) {
+ // System.out.println("Key-Value t2 incorrect: " + keyC + " " + testValC2);
+ // foundError = true;
+ // }
+
+ // if (testValD2 != null) {
+ // System.out.println("Key-Value t2 incorrect: " + keyD + " " + testValD2);
+ // foundError = true;
+ // }
+ // }
+ // }
+
+ // if (foundError) {
+ // System.out.println("Found Errors...");
+ // } else {
+ // System.out.println("No Errors Found...");
+ // }
+ // }
+
+ static void test7() throws ServerException {
+ long startTime = 0;
+ long endTime = 0;
boolean foundError = false;
// Setup the 2 clients
Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
t2.update();
- // t1.rebuild();
- // t2.rebuild();
-
+ startTime = System.currentTimeMillis();
// Make the Keys
System.out.println("Setting up keys");
- for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+ for (int i = 0; i < 4; i++) {
String a = "a" + i;
String b = "b" + i;
String c = "c" + i;
t2.createNewKey(ic, 321);
t2.createNewKey(id, 351);
}
-
+ endTime = System.currentTimeMillis();
+ System.out.println("Time Taken: " + (double) ((endTime - startTime) / 1000.0) );
+ System.out.println("Time Taken Per Key: " + (double) (((endTime - startTime) / 1000.0) / (4)) );
+ System.out.println();
// Do Updates for the keys
System.out.println("Setting Key-Values...");
+ startTime = System.currentTimeMillis();
+ System.out.println("Setting b...");
+ for (int t = 0; t < NUMBER_OF_TESTS; t++) {
+ for (int i = 0; i < 4; i++) {
+ String keyB = "b" + i;
+ String valueB = "b" + (i + t);
- String keyA0 = "a0";
- String keyB0 = "b0";
- String keyC0 = "c0";
- String keyD0 = "d0";
- String valueA0 = "a0";
- String valueB0 = "b0";
- String valueC0 = "c0";
- String valueD0 = "d0";
-
- IoTString iKeyA0 = new IoTString(keyA0);
- IoTString iKeyB0 = new IoTString(keyB0);
- IoTString iKeyC0 = new IoTString(keyC0);
- IoTString iKeyD0 = new IoTString(keyD0);
- IoTString iValueA0 = new IoTString(valueA0);
- IoTString iValueB0 = new IoTString(valueB0);
- IoTString iValueC0 = new IoTString(valueC0);
- IoTString iValueD0 = new IoTString(valueD0);
-
- t1.startTransaction();
- t1.addKV( iKeyA0, iValueA0);
- t1.commitTransaction();
-
- t1.startTransaction();
- t1.addKV(iKeyB0, iValueB0);
- t1.commitTransaction();
-
- t2.startTransaction();
- t2.addKV(iKeyC0, iValueC0);
- t2.commitTransaction();
-
- t2.startTransaction();
- t2.addKV(iKeyD0, iValueD0);
- t2.commitTransaction();
-
- for (int i = 1; i < NUMBER_OF_TESTS; i++) {
- String keyB = "b" + i;
- String valueB = "b" + i;
- IoTString iKeyB = new IoTString(keyB);
- IoTString iValueB = new IoTString(valueB);
+ IoTString iKeyB = new IoTString(keyB);
+ IoTString iValueB = new IoTString(valueB);
- String keyBOld = "b" + (i - 1);
- String valueBOld = "b" + (i - 1);
- IoTString iKeyBOld = new IoTString(keyBOld);
- IoTString iValueBOld = new IoTString(valueBOld);
+ t1.startTransaction();
+ t1.getSpeculativeAtomic(iKeyB);
+ t1.addKV(iKeyB, iValueB);
+ t1.commitTransaction();
+ }
+ }
+ endTime = System.currentTimeMillis();
+ System.out.println("Time Taken: " + (double) ((endTime - startTime) / 1000.0) );
+ System.out.println("Time Taken Per Key: " + (double) (((endTime - startTime) / 1000.0) / (4 * NUMBER_OF_TESTS)) );
+ System.out.println();
- t1.startTransaction();
- t1.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyBOld, iValueBOld, Guard.Equal))));
- t1.addKV(iKeyB, iValueB);
- t1.commitTransaction();
- }
- System.out.println("Checking Key-Values...");
- for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+ System.out.println("Checking b");
+ for (int i = 0; i < 4; i++) {
String keyB = "b" + i;
- String valueB = "b" + i;
-
+ String valueB = "b" + (i + NUMBER_OF_TESTS - 1);
IoTString iKeyB = new IoTString(keyB);
IoTString iValueB = new IoTString(valueB);
IoTString testValB1 = t1.getSpeculative(iKeyB);
+ IoTString testValB2 = t2.getSpeculative(iKeyB);
if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
- System.out.println("Key-Value t1 incorrect: " + keyB);
+ System.out.println("Key-Value t1 incorrect: " + keyB + " " + testValB1);
foundError = true;
-
}
- }
-
-
- System.out.println("Updating Clients...");
- t1.update();
- t2.update();
- t1.update();
- t2.update();
- System.out.println("Checking Key-Values...");
- for (int i = 0; i < NUMBER_OF_TESTS; i++) {
-
- String keyA = "a" + i;
- String keyB = "b" + i;
- String keyC = "c" + i;
- String keyD = "d" + i;
- String valueA = "a" + i;
- String valueB = "b" + i;
- String valueC = "c" + i;
- String valueD = "d" + i;
-
- IoTString iKeyA = new IoTString(keyA);
- IoTString iKeyB = new IoTString(keyB);
- IoTString iKeyC = new IoTString(keyC);
- IoTString iKeyD = new IoTString(keyD);
- IoTString iValueA = new IoTString(valueA);
- IoTString iValueB = new IoTString(valueB);
- IoTString iValueC = new IoTString(valueC);
- IoTString iValueD = new IoTString(valueD);
-
-
- IoTString testValA1 = t1.getCommitted(iKeyA);
- IoTString testValB1 = t1.getCommitted(iKeyB);
- IoTString testValC1 = t1.getCommitted(iKeyC);
- IoTString testValD1 = t1.getCommitted(iKeyD);
-
- IoTString testValA2 = t2.getCommitted(iKeyA);
- IoTString testValB2 = t2.getCommitted(iKeyB);
- IoTString testValC2 = t2.getCommitted(iKeyC);
- IoTString testValD2 = t2.getCommitted(iKeyD);
-
-
- if (i == 0) {
- if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
- System.out.println("Key-Value t1 incorrect: " + keyA);
- foundError = true;
- }
-
- if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
- System.out.println("Key-Value t1 incorrect: " + keyB);
- foundError = true;
- }
-
- if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
- System.out.println("Key-Value t1 incorrect: " + keyC);
- foundError = true;
- }
-
- if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
- System.out.println("Key-Value t1 incorrect: " + keyD);
- foundError = true;
- }
-
-
- if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
- System.out.println("Key-Value t2 incorrect: " + keyA + " " + testValA2);
- foundError = true;
- }
-
- if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
- System.out.println("Key-Value t2 incorrect: " + keyB + " " + testValB2);
- foundError = true;
- }
-
- if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
- System.out.println("Key-Value t2 incorrect: " + keyC + " " + testValC2);
- foundError = true;
- }
-
- if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
- System.out.println("Key-Value t2 incorrect: " + keyD + " " + testValD2);
- foundError = true;
- }
- } else {
- if (testValA1 != null) {
- System.out.println("Key-Value t1 incorrect: " + keyA);
- foundError = true;
- }
-
- if (testValB1 != null) {
- System.out.println("Key-Value t1 incorrect: " + keyB);
- foundError = true;
- }
-
- if (testValC1 != null) {
- System.out.println("Key-Value t1 incorrect: " + keyC);
- foundError = true;
- }
-
- if (testValD1 != null) {
- System.out.println("Key-Value t1 incorrect: " + keyD);
- foundError = true;
- }
-
- if (testValA2 != null) {
- System.out.println("Key-Value t2 incorrect: " + keyA + " " + testValA2);
- foundError = true;
- }
-
- if (testValB2 != null) {
- System.out.println("Key-Value t2 incorrect: " + keyB + " " + testValB2);
- foundError = true;
- }
-
- if (testValC2 != null) {
- System.out.println("Key-Value t2 incorrect: " + keyC + " " + testValC2);
- foundError = true;
- }
-
- if (testValD2 != null) {
- System.out.println("Key-Value t2 incorrect: " + keyD + " " + testValD2);
- foundError = true;
- }
+ if ((testValB2 != null)) {
+ System.out.println("Key-Value t2 incorrect: " + keyB + " " + testValB2);
+ foundError = true;
}
}
- if (foundError) {
- System.out.println("Found Errors...");
- } else {
- System.out.println("No Errors Found...");
- }
- }
-
- static void test7() {
-
- long startTime = 0;
- long endTime = 0;
-
- // Setup the 2 clients
- Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
- t1.initTable();
- Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
- t2.update();
-
- // t1.rebuild();
- // t2.rebuild();
-
- // Make the Keys
- System.out.println("Setting up keys");
- startTime = System.currentTimeMillis();
- for (int i = 0; i < NUMBER_OF_TESTS; i++) {
- String a = "a" + i;
- String b = "b" + i;
- String c = "c" + i;
- String d = "d" + i;
- IoTString ia = new IoTString(a);
- IoTString ib = new IoTString(b);
- IoTString ic = new IoTString(c);
- IoTString id = new IoTString(d);
- t1.createNewKey(ia, 321);
- t1.createNewKey(ib, 351);
- t2.createNewKey(ic, 321);
- t2.createNewKey(id, 351);
- }
- endTime = System.currentTimeMillis();
-
- System.out.println("Time Taken: " + (double) ((endTime - startTime) / 1000.0) );
- System.out.println("Time Taken Per Key: " + (double) (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4)) );
- System.out.println();
-
-
- // Do Updates for the keys
- System.out.println("Setting Key-Values...");
startTime = System.currentTimeMillis();
+ System.out.println("Setting c...");
+ for (int t = 0; t < NUMBER_OF_TESTS; t++) {
+ for (int i = 0; i < 4; i++) {
+ String keyC = "c" + i;
+ String valueC = "c" + (i + t);
+ IoTString iKeyC = new IoTString(keyC);
+ IoTString iValueC = new IoTString(valueC);
-
- String keyA0 = "a0";
- String keyB0 = "b0";
- String keyC0 = "c0";
- String keyD0 = "d0";
- String valueA0 = "a0";
- String valueB0 = "b0";
- String valueC0 = "c0";
- String valueD0 = "d0";
-
- IoTString iKeyA0 = new IoTString(keyA0);
- IoTString iKeyB0 = new IoTString(keyB0);
- IoTString iKeyC0 = new IoTString(keyC0);
- IoTString iKeyD0 = new IoTString(keyD0);
- IoTString iValueA0 = new IoTString(valueA0);
- IoTString iValueB0 = new IoTString(valueB0);
- IoTString iValueC0 = new IoTString(valueC0);
- IoTString iValueD0 = new IoTString(valueD0);
-
- t1.startTransaction();
- t1.addKV( iKeyA0, iValueA0);
- t1.commitTransaction();
-
- t1.startTransaction();
- t1.addKV(iKeyB0, iValueB0);
- t1.commitTransaction();
-
- t2.startTransaction();
- t2.addKV(iKeyC0, iValueC0);
- t2.commitTransaction();
-
- t2.startTransaction();
- t2.addKV(iKeyD0, iValueD0);
- t2.commitTransaction();
-
- for (int i = 1; i < NUMBER_OF_TESTS; i++) {
- String keyB = "b" + i;
- String valueB = "b" + i;
- IoTString iKeyB = new IoTString(keyB);
- IoTString iValueB = new IoTString(valueB);
-
- String keyBOld = "b" + (i - 1);
- String valueBOld = "b" + (i - 2);
- IoTString iKeyBOld = new IoTString(keyBOld);
- IoTString iValueBOld = new IoTString(valueBOld);
-
-
- t1.startTransaction();
- t1.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyBOld, iValueBOld, Guard.Equal))));
- t1.addKV(iKeyB, iValueB);
- t1.commitTransaction();
- }
-
- for (int i = 1; i < NUMBER_OF_TESTS; i++) {
- String keyC = "c" + i;
- String valueC = "c" + i;
- IoTString iKeyC = new IoTString(keyC);
- IoTString iValueC = new IoTString(valueC);
-
- String keyCOld = "c" + (i - 1);
- String valueCOld = "c" + (i - 2);
- IoTString iKeyCOld = new IoTString(keyCOld);
- IoTString iValueCOld = new IoTString(valueCOld);
-
-
- t2.startTransaction();
- t2.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyCOld, iValueCOld, Guard.Equal))));
- t2.addKV(iKeyC, iValueC);
- t2.commitTransaction();
+ t2.startTransaction();
+ t2.getSpeculativeAtomic(iKeyC);
+ t2.addKV(iKeyC, iValueC);
+ t2.commitTransaction();
+ }
}
-
- for (int i = 1; i < NUMBER_OF_TESTS; i++) {
- String keyA = "a" + i;
- String keyD = "d" + i;
- String valueA = "a" + i;
- String valueD = "d" + i;
-
- IoTString iKeyA = new IoTString(keyA);
- IoTString iKeyD = new IoTString(keyD);
- IoTString iValueA = new IoTString(valueA);
- IoTString iValueD = new IoTString(valueD);
+ endTime = System.currentTimeMillis();
+ System.out.println("Time Taken: " + (double) ((endTime - startTime) / 1000.0) );
+ System.out.println("Time Taken Per Key: " + (double) (((endTime - startTime) / 1000.0) / (4 * NUMBER_OF_TESTS)) );
+ System.out.println();
- String keyAOld = "a" + (i - 1);
- String keyDOld = "d" + (i - 1);
- String valueAOld = "a" + (i - 2);
- String valueDOld = "d" + (i - 2);
- IoTString iKeyAOld = new IoTString(keyAOld);
- IoTString iKeyDOld = new IoTString(keyDOld);
- IoTString iValueAOld = new IoTString(valueAOld);
- IoTString iValueDOld = new IoTString(valueDOld);
+ System.out.println("Checking c");
+ for (int i = 0; i < 4; i++) {
+ String keyC = "c" + i;
+ String valueC = "c" + (i + NUMBER_OF_TESTS - 1);
+ IoTString iKeyC = new IoTString(keyC);
+ IoTString iValueC = new IoTString(valueC);
+ IoTString testValC1 = t1.getSpeculative(iKeyC);
+ IoTString testValC2 = t2.getSpeculative(iKeyC);
- t1.startTransaction();
- t1.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyAOld, iValueAOld, Guard.Equal))));
- t1.addKV(iKeyA, iValueA);
- t1.commitTransaction();
+ if ((testValC1 != null)) {
+ System.out.println("Key-Value t1 incorrect: " + keyC + " " + testValC1);
+ foundError = true;
+ }
- t2.startTransaction();
- t2.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyDOld, iValueDOld, Guard.Equal))));
- t2.addKV(iKeyD, iValueD);
- t2.commitTransaction();
+ if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
+ System.out.println("Key-Value t2 incorrect: " + keyC + " " + testValC2);
+ foundError = true;
+ }
}
- endTime = System.currentTimeMillis();
+ System.out.println("Setting a and b...");
+ for (int t = 0; t < NUMBER_OF_TESTS; t++) {
+ for (int i = 0; i < 4; i++) {
+ String keyA = "a" + i;
+ String keyD = "d" + i;
+ String valueA = "a" + (i + t);
+ String valueD = "d" + (i + t);
- System.out.println("Time Taken: " + (double) ((endTime - startTime) / 1000.0) );
- System.out.println("Time Taken Per Update: " + (double) (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4)) );
- System.out.println();
+ IoTString iKeyA = new IoTString(keyA);
+ IoTString iKeyD = new IoTString(keyD);
+ IoTString iValueA = new IoTString(valueA);
+ IoTString iValueD = new IoTString(valueD);
+
+ t1.startTransaction();
+ t1.addKV(iKeyA, iValueA);
+ t1.commitTransaction();
+ t2.startTransaction();
+ t2.addKV(iKeyD, iValueD);
+ t2.commitTransaction();
+ }
+ }
System.out.println("Updating Clients...");
t1.update();
t1.update();
t2.update();
- boolean foundError = false;
-
System.out.println("Checking Key-Values...");
- for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+ for (int i = 0; i < 4; i++) {
String keyA = "a" + i;
String keyB = "b" + i;
String keyC = "c" + i;
String keyD = "d" + i;
- String valueA = "a" + i;
- String valueB = "b" + i;
- String valueC = "c" + i;
- String valueD = "d" + i;
+ String valueA = "a" + (i + NUMBER_OF_TESTS - 1);
+ String valueB = "b" + (i + NUMBER_OF_TESTS - 1);
+ String valueC = "c" + (i + NUMBER_OF_TESTS - 1);
+ String valueD = "d" + (i + NUMBER_OF_TESTS - 1);
IoTString iKeyA = new IoTString(keyA);
IoTString iKeyB = new IoTString(keyB);
IoTString testValC2 = t2.getCommitted(iKeyC);
IoTString testValD2 = t2.getCommitted(iKeyD);
+ if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
+ System.out.println("Key-Value t1 incorrect: " + keyA + " " + testValA1);
+ foundError = true;
+ }
+
+ if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
+ System.out.println("Key-Value t1 incorrect: " + keyB + " " + testValB1);
+ foundError = true;
+ }
+
+ if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
+ System.out.println("Key-Value t1 incorrect: " + keyC + " " + testValC1);
+ foundError = true;
+ }
+
+ if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
+ System.out.println("Key-Value t1 incorrect: " + keyD + " " + testValD1);
+ foundError = true;
+ }
+
+ if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
+ System.out.println("Key-Value t2 incorrect: " + keyA + " " + testValA2);
+ foundError = true;
+ }
+
+ if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
+ System.out.println("Key-Value t2 incorrect: " + keyB + " " + testValB2);
+ foundError = true;
+ }
+
+ if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
+ System.out.println("Key-Value t2 incorrect: " + keyC + " " + testValC2);
+ foundError = true;
+ }
- if (i == 0) {
- if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
- System.out.println("Key-Value t1 incorrect: " + keyA);
- foundError = true;
- }
-
- if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
- System.out.println("Key-Value t1 incorrect: " + keyB);
- foundError = true;
- }
-
- if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
- System.out.println("Key-Value t1 incorrect: " + keyC);
- foundError = true;
- }
-
- if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
- System.out.println("Key-Value t1 incorrect: " + keyD);
- foundError = true;
- }
-
-
- if ((testValA2 == null) || (testValA2.equals(iValueA) == false)) {
- System.out.println("Key-Value t2 incorrect: " + keyA + " " + testValA2);
- foundError = true;
- }
-
- if ((testValB2 == null) || (testValB2.equals(iValueB) == false)) {
- System.out.println("Key-Value t2 incorrect: " + keyB + " " + testValB2);
- foundError = true;
- }
-
- if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
- System.out.println("Key-Value t2 incorrect: " + keyC + " " + testValC2);
- foundError = true;
- }
-
- if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
- System.out.println("Key-Value t2 incorrect: " + keyD + " " + testValD2);
- foundError = true;
- }
- } else {
- if (testValA1 != null) {
- System.out.println("Key-Value t1 incorrect: " + keyA);
- foundError = true;
- }
-
- if (testValB1 != null) {
- System.out.println("Key-Value t1 incorrect: " + keyB);
- foundError = true;
- }
-
- if (testValC1 != null) {
- System.out.println("Key-Value t1 incorrect: " + keyC);
- foundError = true;
- }
-
- if (testValD1 != null) {
- System.out.println("Key-Value t1 incorrect: " + keyD);
- foundError = true;
- }
-
- if (testValA2 != null) {
- System.out.println("Key-Value t2 incorrect: " + keyA + " " + testValA2);
- foundError = true;
- }
-
- if (testValB2 != null) {
- System.out.println("Key-Value t2 incorrect: " + keyB + " " + testValB2);
- foundError = true;
- }
-
- if (testValC2 != null) {
- System.out.println("Key-Value t2 incorrect: " + keyC + " " + testValC2);
- foundError = true;
- }
-
- if (testValD2 != null) {
- System.out.println("Key-Value t2 incorrect: " + keyD + " " + testValD2);
- foundError = true;
- }
+ if ((testValD2 == null) || (testValD2.equals(iValueD) == false)) {
+ System.out.println("Key-Value t2 incorrect: " + keyD + " " + testValD2);
+ foundError = true;
}
}
}
}
- static void test6() {
-
+ static void test6() throws ServerException {
long startTime = 0;
long endTime = 0;
Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
t2.update();
- // t1.rebuild();
- // t2.rebuild();
// Make the Keys
System.out.println("Setting up keys");
}
endTime = System.currentTimeMillis();
+
+
System.out.println("Time Taken: " + (double) ((endTime - startTime) / 1000.0) );
System.out.println("Time Taken Per Key: " + (double) (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4)) );
System.out.println();
// Do Updates for the keys
System.out.println("Setting Key-Values...");
startTime = System.currentTimeMillis();
-
-
- t1.startTransaction();
- t1.addKV( new IoTString("a0"), new IoTString("a0"));
- t1.commitTransaction();
-
- t1.startTransaction();
- t1.addKV(new IoTString("b0"), new IoTString("b0"));
- t1.commitTransaction();
-
- t2.startTransaction();
- t2.addKV(new IoTString("c0"), new IoTString("c0"));
- t2.commitTransaction();
-
- t2.startTransaction();
- t2.addKV(new IoTString("d0"), new IoTString("d0"));
- t2.commitTransaction();
-
- for (int i = 1; i < NUMBER_OF_TESTS; i++) {
+ for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+ String keyA = "a" + i;
String keyB = "b" + i;
- String valueB = "b" + i;
- IoTString iKeyB = new IoTString(keyB);
- IoTString iValueB = new IoTString(valueB);
-
- String keyBOld = "b" + (i - 1);
- String valueBOld = "b" + (i - 1);
- IoTString iKeyBOld = new IoTString(keyBOld);
- IoTString iValueBOld = new IoTString(valueBOld);
-
-
- t1.startTransaction();
- t1.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyBOld, iValueBOld, Guard.Equal))));
- t1.addKV(iKeyB, iValueB);
- t1.commitTransaction();
- }
-
- for (int i = 1; i < NUMBER_OF_TESTS; i++) {
String keyC = "c" + i;
- String valueC = "c" + i;
- IoTString iKeyC = new IoTString(keyC);
- IoTString iValueC = new IoTString(valueC);
-
- String keyCOld = "c" + (i - 1);
- String valueCOld = "c" + (i - 1);
- IoTString iKeyCOld = new IoTString(keyCOld);
- IoTString iValueCOld = new IoTString(valueCOld);
-
-
- t2.startTransaction();
- t2.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyCOld, iValueCOld, Guard.Equal))));
- t2.addKV(iKeyC, iValueC);
- t2.commitTransaction();
- }
-
- for (int i = 1; i < NUMBER_OF_TESTS; i++) {
- String keyA = "a" + i;
String keyD = "d" + i;
String valueA = "a" + i;
+ String valueB = "b" + i;
+ String valueC = "c" + i;
String valueD = "d" + i;
IoTString iKeyA = new IoTString(keyA);
+ IoTString iKeyB = new IoTString(keyB);
+ IoTString iKeyC = new IoTString(keyC);
IoTString iKeyD = new IoTString(keyD);
IoTString iValueA = new IoTString(valueA);
+ IoTString iValueB = new IoTString(valueB);
+ IoTString iValueC = new IoTString(valueC);
IoTString iValueD = new IoTString(valueD);
-
- String keyAOld = "a" + (i - 1);
- String keyDOld = "d" + (i - 1);
- String valueAOld = "a" + (i - 1);
- String valueDOld = "d" + (i - 1);
- IoTString iKeyAOld = new IoTString(keyAOld);
- IoTString iKeyDOld = new IoTString(keyDOld);
- IoTString iValueAOld = new IoTString(valueAOld);
- IoTString iValueDOld = new IoTString(valueDOld);
-
-
t1.startTransaction();
- t1.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyAOld, iValueAOld, Guard.Equal))));
+ t1.getCommittedAtomic(iKeyA);
t1.addKV(iKeyA, iValueA);
t1.commitTransaction();
+ t1.startTransaction();
+ t1.getCommittedAtomic(iKeyB);
+ t1.addKV(iKeyB, iValueB);
+ t1.commitTransaction();
+
+ t2.startTransaction();
+ t2.getCommittedAtomic(iKeyC);
+ t2.addKV(iKeyC, iValueC);
+ t2.commitTransaction();
+
t2.startTransaction();
- t2.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyDOld, iValueDOld, Guard.Equal))));
+ t2.getCommittedAtomic(iKeyD);
t2.addKV(iKeyD, iValueD);
t2.commitTransaction();
}
-
endTime = System.currentTimeMillis();
System.out.println("Time Taken: " + (double) ((endTime - startTime) / 1000.0) );
} else {
System.out.println("No Errors Found...");
}
+
+ // System.out.println();
+ // System.out.println();
+ // System.out.println();
+ // t1.printSlots();
+ // System.out.println();
+ // System.out.println();
+ // System.out.println();
+ // t2.printSlots();
}
- static void test5() {
+ static void test5() throws ServerException {
long startTime = 0;
long endTime = 0;
+ boolean foundError = false;
// Setup the 2 clients
Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
t2.update();
- // t1.rebuild();
- // t2.rebuild();
-
-
// Make the Keys
System.out.println("Setting up keys");
- startTime = System.currentTimeMillis();
- for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+ for (int i = 0; i < 4; i++) {
String a = "a" + i;
String b = "b" + i;
String c = "c" + i;
System.out.println("Time Taken: " + (double) ((endTime - startTime) / 1000.0) );
- System.out.println("Time Taken Per Key: " + (double) (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4)) );
+ System.out.println("Time Taken Per Key: " + (double) (((endTime - startTime) / 1000.0) / (4)) );
System.out.println();
// Do Updates for the keys
System.out.println("Setting Key-Values...");
- startTime = System.currentTimeMillis();
- for (int i = 0; i < NUMBER_OF_TESTS; i++) {
- String keyA = "a" + i;
- String keyB = "b" + i;
- String keyC = "c" + i;
- String keyD = "d" + i;
- String valueA = "a" + i;
- String valueB = "b" + i;
- String valueC = "c" + i;
- String valueD = "d" + i;
- IoTString iKeyA = new IoTString(keyA);
+ for (int t = 0; t < NUMBER_OF_TESTS; t++) {
+ for (int i = 0; i < 4; i++) {
+ String keyB = "b" + i;
+ String valueB = "b" + (i + t);
+
+ IoTString iKeyB = new IoTString(keyB);
+ IoTString iValueB = new IoTString(valueB);
+
+ t1.startTransaction();
+ t1.addKV(iKeyB, iValueB);
+ t1.commitTransaction();
+ }
+ }
+
+ for (int i = 0; i < 4; i++) {
+
+ String keyB = "b" + i;
+ String valueB = "b" + (i + NUMBER_OF_TESTS - 1);
IoTString iKeyB = new IoTString(keyB);
- IoTString iKeyC = new IoTString(keyC);
- IoTString iKeyD = new IoTString(keyD);
- IoTString iValueA = new IoTString(valueA);
IoTString iValueB = new IoTString(valueB);
- IoTString iValueC = new IoTString(valueC);
- IoTString iValueD = new IoTString(valueD);
-
+ IoTString testValB1 = t1.getSpeculative(iKeyB);
+ IoTString testValB2 = t2.getSpeculative(iKeyB);
- if (i != 0) {
- String keyAOld = "a" + (i - 1);
- String keyBOld = "b" + (i - 1);
- String keyCOld = "c" + (i - 1);
- String keyDOld = "d" + (i - 1);
- String valueAOld = "a" + (i - 1);
- String valueBOld = "b" + (i - 1);
- String valueCOld = "c" + (i - 1);
- String valueDOld = "d" + (i - 1);
+ if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
+ System.out.println("Key-Value t1 incorrect: " + keyB);
+ foundError = true;
+ }
- IoTString iKeyAOld = new IoTString(keyAOld);
- IoTString iKeyBOld = new IoTString(keyBOld);
- IoTString iKeyCOld = new IoTString(keyCOld);
- IoTString iKeyDOld = new IoTString(keyDOld);
- IoTString iValueAOld = new IoTString(valueAOld);
- IoTString iValueBOld = new IoTString(valueBOld);
- IoTString iValueCOld = new IoTString(valueCOld);
- IoTString iValueDOld = new IoTString(valueDOld);
+ if ((testValB2 != null)) {
+ System.out.println("Key-Value t2 incorrect: " + keyB);
+ foundError = true;
+ }
+ }
- t1.startTransaction();
- t1.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyAOld, iValueAOld, Guard.Equal))));
- t1.addKV(iKeyA, iValueA);
- t1.commitTransaction();
+ for (int t = 0; t < NUMBER_OF_TESTS; t++) {
+ for (int i = 0; i < 4; i++) {
+ String keyC = "c" + i;
+ String valueC = "c" + (i + t);
- t1.startTransaction();
- t1.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyBOld, iValueBOld, Guard.Equal))));
- t1.addKV(iKeyB, iValueB);
- t1.commitTransaction();
+ IoTString iKeyC = new IoTString(keyC);
+ IoTString iValueC = new IoTString(valueC);
t2.startTransaction();
- t2.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyCOld, iValueCOld, Guard.Equal))));
t2.addKV(iKeyC, iValueC);
t2.commitTransaction();
+ }
+ }
- t2.startTransaction();
- t2.addGuard(new Guard(new IoTString(Guard.createExpression(iKeyDOld, iValueDOld, Guard.Equal))));
- t2.addKV(iKeyD, iValueD);
- t2.commitTransaction();
+ for (int i = 0; i < 4; i++) {
+ String keyC = "c" + i;
+ String valueC = "c" + (i + NUMBER_OF_TESTS - 1);
+ IoTString iKeyC = new IoTString(keyC);
+ IoTString iValueC = new IoTString(valueC);
+ IoTString testValC1 = t1.getSpeculative(iKeyC);
+ IoTString testValC2 = t2.getSpeculative(iKeyC);
- } else {
- t1.startTransaction();
- t1.addKV(iKeyA, iValueA);
- t1.commitTransaction();
+ if ((testValC1 != null)) {
+ System.out.println("Key-Value t1 incorrect: " + keyC + " " + testValC1);
+ foundError = true;
+ }
+
+ if ((testValC2 == null) || (testValC2.equals(iValueC) == false)) {
+ System.out.println("Key-Value t2 incorrect: " + keyC + " " + testValC2);
+ foundError = true;
+ }
+ }
+
+ for (int t = 0; t < NUMBER_OF_TESTS; t++) {
+ for (int i = 0; i < 4; i++) {
+ String keyA = "a" + i;
+ String keyD = "d" + i;
+ String valueA = "a" + (i + t);
+ String valueD = "d" + (i + t);
+
+ IoTString iKeyA = new IoTString(keyA);
+ IoTString iKeyD = new IoTString(keyD);
+ IoTString iValueA = new IoTString(valueA);
+ IoTString iValueD = new IoTString(valueD);
t1.startTransaction();
- t1.addKV(iKeyB, iValueB);
+ t1.addKV(iKeyA, iValueA);
t1.commitTransaction();
- t2.startTransaction();
- t2.addKV(iKeyC, iValueC);
- t2.commitTransaction();
-
t2.startTransaction();
t2.addKV(iKeyD, iValueD);
t2.commitTransaction();
}
}
- endTime = System.currentTimeMillis();
-
- System.out.println("Time Taken: " + (double) ((endTime - startTime) / 1000.0) );
- System.out.println("Time Taken Per Update: " + (double) (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 4)) );
- System.out.println();
-
System.out.println("Updating Clients...");
t1.update();
t1.update();
t2.update();
- boolean foundError = false;
System.out.println("Checking Key-Values...");
- for (int i = 0; i < NUMBER_OF_TESTS; i++) {
+ for (int i = 0; i < 4; i++) {
String keyA = "a" + i;
String keyB = "b" + i;
String keyC = "c" + i;
String keyD = "d" + i;
- String valueA = "a" + i;
- String valueB = "b" + i;
- String valueC = "c" + i;
- String valueD = "d" + i;
+ String valueA = "a" + (i + NUMBER_OF_TESTS - 1);
+ String valueB = "b" + (i + NUMBER_OF_TESTS - 1);
+ String valueC = "c" + (i + NUMBER_OF_TESTS - 1);
+ String valueD = "d" + (i + NUMBER_OF_TESTS - 1);
IoTString iKeyA = new IoTString(keyA);
IoTString iKeyB = new IoTString(keyB);
IoTString testValD2 = t2.getCommitted(iKeyD);
if ((testValA1 == null) || (testValA1.equals(iValueA) == false)) {
- System.out.println("Key-Value t1 incorrect: " + keyA);
+ System.out.println("Key-Value t1 incorrect: " + keyA + " " + testValA1);
foundError = true;
}
if ((testValB1 == null) || (testValB1.equals(iValueB) == false)) {
- System.out.println("Key-Value t1 incorrect: " + keyB);
+ System.out.println("Key-Value t1 incorrect: " + keyB + " " + testValB1);
foundError = true;
}
if ((testValC1 == null) || (testValC1.equals(iValueC) == false)) {
- System.out.println("Key-Value t1 incorrect: " + keyC);
+ System.out.println("Key-Value t1 incorrect: " + keyC + " " + testValC1);
foundError = true;
}
if ((testValD1 == null) || (testValD1.equals(iValueD) == false)) {
- System.out.println("Key-Value t1 incorrect: " + keyD);
+ System.out.println("Key-Value t1 incorrect: " + keyD + " " + testValD1);
foundError = true;
}
}
}
- static void test4() {
+ static void test4() throws ServerException {
long startTime = 0;
long endTime = 0;
endTime = System.currentTimeMillis();
System.out.println("Time Taken: " + (double) ((endTime - startTime) / 1000.0) );
- System.out.println("Time Taken Per Update: " + (double) (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 8)) );
+ System.out.println("Time Taken Per Update: " + (double) (((endTime - startTime) / 1000.0) / (NUMBER_OF_TESTS * 16)) );
System.out.println();
}
}
- static void test3() {
+ static void test3() throws ServerException {
long startTime = 0;
long endTime = 0;
+ boolean foundError = false;
// Setup the 2 clients
Table t1 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 321);
t1.update();
t2.update();
- boolean foundError = false;
System.out.println("Checking Key-Values...");
for (int i = 0; i < NUMBER_OF_TESTS; i++) {
}
}
- static void test2() {
+ static void test2() throws ServerException {
long startTime = 0;
long endTime = 0;
Table t2 = new Table("http://127.0.0.1/test.iotcloud/", "reallysecret", 351);
t2.update();
- // t1.rebuild();
- // t2.rebuild();
-
-
-
// Make the Keys
System.out.println("Setting up keys");
startTime = System.currentTimeMillis();