Search code examples
javajbossjboss-cache

JBoss cache. Concurrency issue


I'm using JBossCache 'Malagueta' 3.2.0.GA

I faced with strange issue in production environment, sometimes writes to jboss cache do not work properly. I tried to reproduce this situation with simple java application

public static void testCache() {
    Cache cache = new DefaultCacheFactory().createCache(false);
    cache.create();
    cache.start();
    final Node node = cache.getRoot().addChild(Fqn.fromString("/child1"));
    int threadsCount = 20;
    final CyclicBarrier b = new CyclicBarrier(threadsCount);
    for (int i = 0; i < threadsCount; i++) {
        final long j = i;
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    b.await();
                    String name = RandomGenerator.getRandomName(4);
                    node.put(j, name);
                    String nameFromCache = (String) node.get(j);
                    if (!name.equals(nameFromCache)) {
                        System.out.println("error");
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

From time to time, this test output "error", which i run from static void main fail. 1 of 3 runs return "error" msg. It simply return null. I can't reproduce it on every machine.

Any clue ?


Solution

  • Update to cache 3.2.5 solved this problem. Seems like it's jboss cache bug.