private static void addData(String val, GossipManager gossipService) { SharedDataMessage m = new SharedDataMessage(); m.setExpireAt(Long.MAX_VALUE); m.setKey(INDEX_KEY_FOR_SET); m.setPayload(new OrSet<String>(val)); m.setTimestamp(System.currentTimeMillis()); gossipService.merge(m); }
public void acquireSharedDataLock(String key) throws VoteFailedException { final Timer.Context context = lockTimeMetric.time(); gossipManager.merge(generateLockMessage(key)); int deadlockDetectCount = 0; while (true) {
void crdtSetTest(String key, Function<Set<String>, CrdtAddRemoveSet<String, Set<String>, ?>> construct){ //populate clients.get(0).merge(generateSharedMsg(key, construct.apply(setFromList("1", "2")))); clients.get(1).merge(generateSharedMsg(key, construct.apply(setFromList("3", "4")))); assertMergedCrdt(key, construct.apply(setFromList("1", "2", "3", "4")).value()); //drop element @SuppressWarnings("unchecked") CrdtAddRemoveSet<String, ?, ?> set = (CrdtAddRemoveSet<String, ?, ?>) clients.get(0).findCrdt(key); clients.get(0).merge(generateSharedMsg(key, set.remove("3"))); //assert deletion assertMergedCrdt(key, construct.apply(setFromList("1", "2", "4")).value()); }
@Test public void PNCounterTest(){ Consumer<List<Integer>> counterUpdate = list -> { int clientIndex = 0; for (int delta : list){ PNCounter c = (PNCounter) clients.get(clientIndex).findCrdt(pnCounterKey); c = new PNCounter(c, new PNCounter.Builder(clients.get(clientIndex)).increment(((long) delta))); clients.get(clientIndex).merge(generateSharedMsg(pnCounterKey, c)); clientIndex = (clientIndex + 1) % clients.size(); } }; // given PNCounter clients.get(0).merge(generateSharedMsg(pnCounterKey, new PNCounter(new PNCounter.Builder(clients.get(0))))); clients.get(1).merge(generateSharedMsg(pnCounterKey, new PNCounter(new PNCounter.Builder(clients.get(1))))); assertMergedCrdt(pnCounterKey, (long) 0); List<List<Integer>> updateLists = new ArrayList<>(); updateLists.add(Arrays.asList(2, 3)); updateLists.add(Arrays.asList(-3, 5)); updateLists.add(Arrays.asList(1, 1)); updateLists.add(Arrays.asList(1, -7)); Long[] expectedResults = {5L, 7L, 9L, 3L}; for (int i = 0; i < updateLists.size(); i++){ counterUpdate.accept(updateLists.get(i)); assertMergedCrdt(pnCounterKey, expectedResults[i]); } }
private static void removeData(String val, GossipManager gossipService) { @SuppressWarnings("unchecked") OrSet<String> s = (OrSet<String>) gossipService.findCrdt(INDEX_KEY_FOR_SET); SharedDataMessage m = new SharedDataMessage(); m.setExpireAt(Long.MAX_VALUE); m.setKey(INDEX_KEY_FOR_SET); m.setPayload(new OrSet<String>(s, new OrSet.Builder<String>().remove(val))); m.setTimestamp(System.currentTimeMillis()); gossipService.merge(m); }
private static void gcount(String val, GossipManager gossipManager) { GrowOnlyCounter c = (GrowOnlyCounter) gossipManager.findCrdt(INDEX_KEY_FOR_COUNTER); Long l = Long.valueOf(val); if (c == null) { c = new GrowOnlyCounter(new GrowOnlyCounter.Builder(gossipManager).increment((l))); } else { c = new GrowOnlyCounter(c, new GrowOnlyCounter.Builder(gossipManager).increment((l))); } SharedDataMessage m = new SharedDataMessage(); m.setExpireAt(Long.MAX_VALUE); m.setKey(INDEX_KEY_FOR_COUNTER); m.setPayload(c); m.setTimestamp(System.currentTimeMillis()); gossipManager.merge(m); }
void increment(Long l, GossipManager gossipManager) { PNCounter c = (PNCounter) gossipManager.findCrdt("myPNCounter"); if (c == null) { c = new PNCounter(new PNCounter.Builder(gossipManager).increment((l))); } else { c = new PNCounter(c, new PNCounter.Builder(gossipManager).increment((l))); } SharedDataMessage m = new SharedDataMessage(); m.setExpireAt(Long.MAX_VALUE); m.setKey("myPNCounter"); m.setPayload(c); m.setTimestamp(System.currentTimeMillis()); gossipManager.merge(m); }
void decrement(Long l, GossipManager gossipManager) { PNCounter c = (PNCounter) gossipManager.findCrdt("myPNCounter"); if (c == null) { c = new PNCounter(new PNCounter.Builder(gossipManager).decrement((l))); } else { c = new PNCounter(c, new PNCounter.Builder(gossipManager).decrement((l))); } SharedDataMessage m = new SharedDataMessage(); m.setExpireAt(Long.MAX_VALUE); m.setKey("myPNCounter"); m.setPayload(c); m.setTimestamp(System.currentTimeMillis()); gossipManager.merge(m); }
@Test public void GrowOnlyCounterTest(){ Consumer<Long> assertCountUpdated = count -> { for (GossipManager client : clients){ TUnit.assertThat(() -> client.findCrdt(gCounterKey)) .afterWaitingAtMost(10, TimeUnit.SECONDS) .isEqualTo(new GrowOnlyCounter(new GrowOnlyCounter.Builder(client).increment(count))); } }; //generate different increment Object payload = new GrowOnlyCounter(new GrowOnlyCounter.Builder(clients.get(0)).increment(1L)); clients.get(0).merge(generateSharedMsg(gCounterKey, payload)); payload = new GrowOnlyCounter(new GrowOnlyCounter.Builder(clients.get(1)).increment(2L)); clients.get(1).merge(generateSharedMsg(gCounterKey, payload)); assertCountUpdated.accept((long) 3); //update one GrowOnlyCounter gc = (GrowOnlyCounter) clients.get(1).findCrdt(gCounterKey); GrowOnlyCounter gc2 = new GrowOnlyCounter(gc, new GrowOnlyCounter.Builder(clients.get(1)).increment(4L)); clients.get(1).merge(generateSharedMsg(gCounterKey, gc2)); assertCountUpdated.accept((long) 7); }