Search in sources :

Example 1 with CounterService

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;
}
Also used : FORK(org.jgroups.protocols.FORK) CounterService(org.jgroups.blocks.atomic.CounterService) Counter(org.jgroups.blocks.atomic.Counter) ForkChannel(org.jgroups.fork.ForkChannel) COUNTER(org.jgroups.protocols.COUNTER)

Example 2 with CounterService

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);
}
Also used : CounterService(org.jgroups.blocks.atomic.CounterService) Counter(org.jgroups.blocks.atomic.Counter)

Aggregations

Counter (org.jgroups.blocks.atomic.Counter)2 CounterService (org.jgroups.blocks.atomic.CounterService)2 ForkChannel (org.jgroups.fork.ForkChannel)1 COUNTER (org.jgroups.protocols.COUNTER)1 FORK (org.jgroups.protocols.FORK)1