private void enableStatisticManagementOnNodes( String cacheName, boolean statOrMan, boolean enabled) { if (isClosed()) { throw new IllegalStateException(); } if (cacheName == null) { throw new NullPointerException(); } final ClientInvocationService invocationService = clientContext.getInvocationService(); final Collection<MemberImpl> members = clientContext.getClusterService().getMemberList(); final Collection<Future> futures = new ArrayList<Future>(); for (MemberImpl member : members) { try { CacheManagementConfigRequest request = new CacheManagementConfigRequest( getCacheNameWithPrefix(cacheName), statOrMan, enabled, member.getAddress()); final Future future = invocationService.invokeOnTarget(request, member.getAddress()); futures.add(future); } catch (Exception e) { ExceptionUtil.sneakyThrow(e); } } // make sure all configs are created try { FutureUtil.waitWithDeadline( futures, CacheProxyUtil.AWAIT_COMPLETION_TIMEOUT_SECONDS, TimeUnit.SECONDS); } catch (TimeoutException e) { logger.warning(e); } }
@Override public void checkIfLoaded() { if (isLoaded()) { try { // check all loading futures for exceptions FutureUtil.checkAllDone(loadingFutures); } catch (Exception e) { logger.severe("Exception while loading map " + name, e); ExceptionUtil.rethrow(e); } finally { loadingFutures.clear(); } } else { keyLoader.triggerLoadingWithDelay(); throw new RetryableHazelcastException( "Map " + getName() + " is still loading data from external store"); } }
public void waitUntilLoaded() { try { int mapNamePartition = partitionService.getPartitionId(name); Operation op = new PartitionCheckIfLoadedOperation(name, false, true); Future loadingFuture = operationService.invokeOnPartition(SERVICE_NAME, op, mapNamePartition); // wait for keys to be loaded - it's insignificant since it doesn't trigger the keys loading // it's just waiting for them to be loaded. Timeout failure doesn't mean anything negative // here. // This call just introduces some ordering of requests. FutureUtil.waitWithDeadline( singleton(loadingFuture), CHECK_IF_LOADED_TIMEOUT_SECONDS, SECONDS, logAllExceptions(WARNING)); OperationFactory opFactory = new PartitionCheckIfLoadedOperationFactory(name); Map<Integer, Object> results = operationService.invokeOnAllPartitions(SERVICE_NAME, opFactory); // wait for all the data to be loaded on all partitions - wait forever waitAllTrue(results, opFactory); } catch (Throwable t) { throw rethrow(t); } }
@Override public boolean isLoaded() { return FutureUtil.allDone(loadingFutures); }