@Override public <T> DistributedAnswer<T> call(DistributedCall<T> callable, MemberSelector memberSelector, long timeoutMs) throws InterruptedException { IExecutorService executor = hzInstance.getExecutorService("default"); Map<Member, Future<T>> futures = executor.submitToMembers(callable, memberSelector); try { DistributedAnswer<T> distributedAnswer = new DistributedAnswer<>(); long maxTime = System.currentTimeMillis() + timeoutMs; for (Map.Entry<Member, Future<T>> entry : futures.entrySet()) { long remainingMs = Math.max(maxTime - System.currentTimeMillis(), 5L); try { T answer = entry.getValue().get(remainingMs, TimeUnit.MILLISECONDS); distributedAnswer.setAnswer(entry.getKey(), answer); } catch (ExecutionException e) { distributedAnswer.setFailed(entry.getKey(), e); } catch (TimeoutException e) { distributedAnswer.setTimedOut(entry.getKey()); } } return distributedAnswer; } finally { futures.values().forEach(f -> f.cancel(true)); } }
this.generateGroupExecutorId(groupId)).submitToMembers(callable, members); List<Member> invalidMembers = new ArrayList<>(); for (Map.Entry<Member, Future<T>> entry : executionResult.entrySet()) {
Collection<MemberResponse<T>> result = new ArrayList<MemberResponse<T>>(members.size()); Map<Member, Future<T>> resultFutures = execSvc.submitToMembers(callable, members); for(Entry<Member, Future<T>> futureEntry : resultFutures.entrySet()) { Future<T> future = futureEntry.getValue();
private static void notifyAdmins(HazelcastInstance sysInstance, Member local, String schemaName, boolean initialized) { int cnt = 0; IExecutorService execService = sysInstance.getExecutorService(PN_XDM_SYSTEM_POOL); Set<Member> admins = getAdmins(sysInstance); // notify admin about new schema node (local) // hzInstance -> system instance, SchemaManagement is in its context // submit task to init member in admin.. SchemaAdministrator adminTask = new SchemaAdministrator(schemaName, !initialized, local.getUuid()); Map<Member, Future<Boolean>> result = execService.submitToMembers(adminTask, admins); for (Map.Entry<Member, Future<Boolean>> e: result.entrySet()) { try { if (e.getValue().get()) { cnt++; } else { logger.info("notifyAdmins; failed admin notification on member {}", e.getKey()); } } catch (InterruptedException | ExecutionException ex) { logger.error("notifyAdmins.error; ", ex); } } logger.debug("notifyAdmins; notified {} admin nodes out of {} admins", cnt, admins.size()); }
@Override public <T> List<T> execute(String groupId, Callable<T> callable) throws AnalyticsClusterException { if (!this.groups.containsKey(groupId)) { throw new AnalyticsClusterException("The node is required to join the group (" + groupId + ") before sending cluster messages"); } List<Member> members = this.getGroupMembers(groupId); List<T> result = new ArrayList<T>(); Map<Member, Future<T>> executionResult; executionResult = this.hz.getExecutorService(this.generateGroupExecutorId(groupId)).submitToMembers( callable, members); for (Map.Entry<Member, Future<T>> entry : executionResult.entrySet()) { try { result.add(entry.getValue().get()); } catch (InterruptedException | ExecutionException e) { throw new AnalyticsClusterException("Error in cluster execute: " + e.getMessage(), e); } } return result; }
IExecutorService execService = hzInstance.getExecutorService(PN_XDM_SYSTEM_POOL); Map<Member, Future<Boolean>> result = execService.submitToMembers(setter, named); for (Map.Entry<Member, Future<Boolean>> entry: result.entrySet()) { try {
@ManagedOperation(description="Compiles registered Module") public boolean compileModule() { Module module = getEntity(); try { boolean result = true; xqComp.compileModule(module); ModuleReloader task = new ModuleReloader(module); Map<Member, Future<Boolean>> futures = execService.submitToMembers(task, new MemberSelector() { @Override public boolean select(Member member) { return !"admin".equalsIgnoreCase(member.getStringAttribute(pn_cluster_node_role)); } }); try { for (Map.Entry<Member, Future<Boolean>> e: futures.entrySet()) { if (!e.getValue().get()) { result = false; } } } catch (InterruptedException | ExecutionException ex) { logger.error("compileModule.error; {}", ex); result = false; } return result; } catch (BagriException ex) { throw new RuntimeException(ex.getMessage()); } }