use of org.jgroups.blocks.atomic.CounterService in project JGroups by belaban.
the class ForkChannelTest method testCounterService.
/**
* Tests CounterService on 2 different fork-channels, using the *same* fork-stack. This means the 2 counter
* services will 'see' each other and the counters must have the same value
* @throws Exception
*/
public void testCounterService() throws Exception {
a.connect(CLUSTER);
fc1 = new ForkChannel(a, "stack", "fc1", false, ProtocolStack.Position.ABOVE, FORK.class, new COUNTER());
fc2 = new ForkChannel(a, "stack", "fc2", false, ProtocolStack.Position.ABOVE, FORK.class, new COUNTER());
fc1.connect("foo");
fc2.connect("bar");
CounterService cs1 = new CounterService(fc1), cs2 = new CounterService(fc2);
Counter c1 = cs1.getOrCreateCounter("counter", 1), c2 = cs2.getOrCreateCounter("counter", 1);
System.out.println("counter1=" + c1 + ", counter2=" + c2);
assert c1.get() == 1 && c2.get() == 1;
c1.addAndGet(5);
System.out.println("counter1=" + c1 + ", counter2=" + c2);
assert c1.get() == 6 && c2.get() == 6;
c2.compareAndSet(6, 10);
System.out.println("counter1=" + c1 + ", counter2=" + c2);
assert c1.get() == 10 && c2.get() == 10;
}
use of org.jgroups.blocks.atomic.CounterService in project JGroups by belaban.
the class CounterServiceDemo method loop.
void loop() throws Exception {
CounterService counter_service = new CounterService(ch);
ch.connect("counter-cluster");
Counter counter = counter_service.getOrCreateCounter("mycounter", 1);
boolean looping = true;
while (looping) {
try {
int key = Util.keyPress("[1] Increment [2] Decrement [3] Compare and set\n" + "[4] Create counter [5] Delete counter\n" + "[6] Print counters [7] Get counter\n" + "[8] Increment 1M times [9] Dump pending requests [x] Exit\n");
switch(key) {
case '1':
long val = counter.incrementAndGet();
System.out.println("counter: " + val);
break;
case '2':
val = counter.decrementAndGet();
System.out.println("counter: " + val);
break;
case '3':
long expect = Util.readLongFromStdin("expected value: ");
long update = Util.readLongFromStdin("update: ");
if (counter.compareAndSet(expect, update)) {
System.out.println("-- set counter \"" + counter.getName() + "\" to " + update + "\n");
} else {
System.err.println("failed setting counter \"" + counter.getName() + "\" from " + expect + " to " + update + ", current value is " + counter.get() + "\n");
}
break;
case '4':
String counter_name = Util.readStringFromStdin("counter name: ");
counter = counter_service.getOrCreateCounter(counter_name, 1);
break;
case '5':
counter_name = Util.readStringFromStdin("counter name: ");
counter_service.deleteCounter(counter_name);
break;
case '6':
System.out.println("Counters (current=" + counter.getName() + "):\n\n" + counter_service.printCounters());
break;
case '7':
counter.get();
break;
case '8':
int NUM = Util.readIntFromStdin("num: ");
System.out.println("");
int print = NUM / 10;
long retval = 0;
long start = System.currentTimeMillis();
for (int i = 0; i < NUM; i++) {
retval = counter.incrementAndGet();
if (i > 0 && i % print == 0)
System.out.println("-- count=" + retval);
}
long diff = System.currentTimeMillis() - start;
System.out.println("\n" + NUM + " incrs took " + diff + " ms; " + (NUM / (diff / 1000.0)) + " ops /sec\n");
break;
case '9':
System.out.println("Pending requests:\n" + counter_service.dumpPendingRequests());
break;
case 'x':
case -1:
looping = false;
break;
}
} catch (Throwable t) {
System.err.println(t);
}
}
Util.close(ch);
}
Aggregations