@Test public void testSubmitToAllMembersCallable() throws InterruptedException { final int k = simpleTestNodeCount; TestHazelcastInstanceFactory factory = createHazelcastInstanceFactory(k); final HazelcastInstance[] instances = factory.newInstances(new Config()); final AtomicInteger count = new AtomicInteger(0); final CountDownLatch countDownLatch = new CountDownLatch(k * k); final MultiExecutionCallback callback = new MultiExecutionCallback() { public void onResponse(Member member, Object value) { count.incrementAndGet(); countDownLatch.countDown(); } public void onComplete(Map<Member, Object> values) {} }; for (int i = 0; i < k; i++) { final IExecutorService service = instances[i].getExecutorService("testSubmitToAllMembersCallable"); final String script = "hazelcast.getAtomicLong('testSubmitToAllMembersCallable').incrementAndGet();"; service.submitToAllMembers(new ScriptCallable(script, null), callback); } countDownLatch.await(30, TimeUnit.SECONDS); final IAtomicLong result = instances[0].getAtomicLong("testSubmitToAllMembersCallable"); assertEquals(k * k, result.get()); assertEquals(k * k, count.get()); }
@Test public void submitRunnableToAllMembers_withMultiExecutionCallback() throws Exception { IExecutorService service = client.getExecutorService(randomString()); final CountDownLatch responseLatch = new CountDownLatch(CLUSTER_SIZE); final CountDownLatch completeLatch = new CountDownLatch(1); String mapName = randomString(); Runnable runnable = new MapPutRunnable(mapName); service.submitToAllMembers( runnable, new MultiExecutionCallback() { public void onResponse(Member member, Object value) { responseLatch.countDown(); } public void onComplete(Map<Member, Object> values) { completeLatch.countDown(); } }); IMap map = client.getMap(mapName); assertOpenEventually("responseLatch", responseLatch); assertOpenEventually("completeLatch", completeLatch); assertEquals(CLUSTER_SIZE, map.size()); }
@Test public void submitCallableWithNullResultToAllMembers_withMultiExecutionCallback() throws Exception { IExecutorService service = client.getExecutorService(randomString()); final CountDownLatch responseLatch = new CountDownLatch(CLUSTER_SIZE); final CountDownLatch completeLatch = new CountDownLatch(CLUSTER_SIZE); Callable callable = new NullCallable(); service.submitToAllMembers( callable, new MultiExecutionCallback() { public void onResponse(Member member, Object value) { if (value == null) { responseLatch.countDown(); } } public void onComplete(Map<Member, Object> values) { for (Member member : values.keySet()) { Object value = values.get(member); if (value == null) { completeLatch.countDown(); } } } }); assertOpenEventually("responseLatch", responseLatch); assertOpenEventually("completeLatch", completeLatch); }
@Test public void submitCallableToAllMembers() throws Exception { IExecutorService service = client.getExecutorService(randomString()); String msg = randomString(); Callable<String> callable = new AppendCallable(msg); Map<Member, Future<String>> map = service.submitToAllMembers(callable); for (Member member : map.keySet()) { Future<String> result = map.get(member); assertEquals(msg + AppendCallable.APPENDAGE, result.get()); } }
/** * Submits a task to multiple members of the Hazelcast task cluster. * * @param task The task * @param where A {@link MemberSelector}, an {@link Iterable} of {@link Member}, a string * (comma-separated member tags), or null for all members * @return A map of members to futures for the task */ @SuppressWarnings("unchecked") private <T> Map<Member, Future<T>> multiTask(SerializableApplicationTask<T> task, Object where) { IExecutorService executor = getHazelcastExecutorService(); if (where instanceof String) return executor.submitToMembers( task, new TaggedMembers(HAZELCAST_MEMBER_TAGS_ATTRIBUTE, (String) where)); else if (where instanceof MemberSelector) return executor.submitToMembers(task, (MemberSelector) where); else if (where instanceof Collection) return executor.submitToMembers(task, (Collection<Member>) where); else if (where instanceof Iterable) { ArrayList<Member> members = new ArrayList<Member>(); for (Member member : (Iterable<Member>) where) members.add(member); return executor.submitToMembers(task, members); } else return executor.submitToAllMembers(task); }