Search in sources :

Example 1 with InvocationFuture

use of com.hazelcast.spi.impl.operationservice.impl.InvocationFuture in project hazelcast by hazelcast.

the class JobExecutionService method checkExecutions.

/**
 * See also javadoc at {@link CheckLightJobsOperation}.
 */
private void checkExecutions() {
    try {
        long now = System.nanoTime();
        long uninitializedContextThreshold = now - UNINITIALIZED_CONTEXT_MAX_AGE_NS;
        Map<Address, List<Long>> executionsPerMember = new HashMap<>();
        for (ExecutionContext ctx : executionContexts.values()) {
            if (!ctx.isLightJob()) {
                continue;
            }
            Address coordinator = ctx.coordinator();
            if (coordinator != null) {
                // if coordinator is known, add execution to the list to check
                executionsPerMember.computeIfAbsent(coordinator, k -> new ArrayList<>()).add(ctx.executionId());
            } else {
                // if coordinator is not known, remove execution if it's not known for too long
                if (ctx.getCreatedOn() <= uninitializedContextThreshold) {
                    LoggingUtil.logFine(logger, "Terminating light job %s because it wasn't initialized during %d seconds", idToString(ctx.executionId()), NANOSECONDS.toSeconds(UNINITIALIZED_CONTEXT_MAX_AGE_NS));
                    terminateExecution0(ctx, TerminationMode.CANCEL_FORCEFUL, new CancellationException());
                }
            }
        }
        // submit the query to the coordinator
        for (Entry<Address, List<Long>> en : executionsPerMember.entrySet()) {
            long[] executionIds = en.getValue().stream().mapToLong(Long::longValue).toArray();
            Operation op = new CheckLightJobsOperation(executionIds);
            InvocationFuture<long[]> future = nodeEngine.getOperationService().createInvocationBuilder(JetServiceBackend.SERVICE_NAME, op, en.getKey()).invoke();
            future.whenComplete((r, t) -> {
                if (t instanceof TargetNotMemberException) {
                    // if the target isn't a member, then all executions are unknown
                    r = executionIds;
                } else if (t != null) {
                    logger.warning("Failed to check light job state with coordinator " + en.getKey() + ": " + t, t);
                    return;
                }
                assert r != null;
                for (long executionId : r) {
                    ExecutionContext execCtx = executionContexts.get(executionId);
                    if (execCtx != null) {
                        logger.fine("Terminating light job " + idToString(executionId) + " because the coordinator doesn't know it");
                        terminateExecution0(execCtx, TerminationMode.CANCEL_FORCEFUL, new CancellationException());
                    }
                }
            });
        }
        // clean up failedJobs
        failedJobs.values().removeIf(expiryTime -> expiryTime < now);
    } catch (Throwable e) {
        logger.severe("Failed to query live light executions: " + e, e);
    }
}
Also used : Address(com.hazelcast.cluster.Address) HazelcastInstanceNotActiveException(com.hazelcast.core.HazelcastInstanceNotActiveException) InvocationFuture(com.hazelcast.spi.impl.operationservice.impl.InvocationFuture) ScheduledFuture(java.util.concurrent.ScheduledFuture) Member(com.hazelcast.cluster.Member) UnaryOperator(java.util.function.UnaryOperator) JobTerminateRequestedException(com.hazelcast.jet.impl.exception.JobTerminateRequestedException) JetDelegatingClassLoader(com.hazelcast.jet.impl.deployment.JetDelegatingClassLoader) MemberInfo(com.hazelcast.internal.cluster.MemberInfo) MwCounter(com.hazelcast.internal.util.counters.MwCounter) Map(java.util.Map) DynamicMetricsProvider(com.hazelcast.internal.metrics.DynamicMetricsProvider) Counter(com.hazelcast.internal.util.counters.Counter) Collectors.toSet(java.util.stream.Collectors.toSet) ExecutionContext(com.hazelcast.jet.impl.execution.ExecutionContext) RetryableHazelcastException(com.hazelcast.spi.exception.RetryableHazelcastException) CancellationException(java.util.concurrent.CancellationException) Probe(com.hazelcast.internal.metrics.Probe) Collection(java.util.Collection) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) TargetNotMemberException(com.hazelcast.spi.exception.TargetNotMemberException) Objects(java.util.Objects) SenderReceiverKey(com.hazelcast.jet.impl.execution.ExecutionContext.SenderReceiverKey) List(java.util.List) Util.idToString(com.hazelcast.jet.Util.idToString) ExecutionPlan(com.hazelcast.jet.impl.execution.init.ExecutionPlan) MetricNames(com.hazelcast.jet.core.metrics.MetricNames) Entry(java.util.Map.Entry) TopologyChangedException(com.hazelcast.jet.core.TopologyChangedException) LoggingUtil(com.hazelcast.jet.impl.util.LoggingUtil) MetricsRegistry(com.hazelcast.internal.metrics.MetricsRegistry) NANOSECONDS(java.util.concurrent.TimeUnit.NANOSECONDS) MembershipManager(com.hazelcast.internal.cluster.impl.MembershipManager) MetricsCompressor(com.hazelcast.internal.metrics.impl.MetricsCompressor) Util.doWithClassLoader(com.hazelcast.jet.impl.util.Util.doWithClassLoader) SenderTasklet(com.hazelcast.jet.impl.execution.SenderTasklet) HashMap(java.util.HashMap) CompletableFuture(java.util.concurrent.CompletableFuture) MINUTES(java.util.concurrent.TimeUnit.MINUTES) Function(java.util.function.Function) ExecutionNotFoundException(com.hazelcast.jet.impl.exception.ExecutionNotFoundException) ArrayList(java.util.ArrayList) ConcurrentMap(java.util.concurrent.ConcurrentMap) EXECUTION(com.hazelcast.jet.impl.JobClassLoaderService.JobPhase.EXECUTION) MetricDescriptor(com.hazelcast.internal.metrics.MetricDescriptor) Collections.newSetFromMap(java.util.Collections.newSetFromMap) ILogger(com.hazelcast.logging.ILogger) Operation(com.hazelcast.spi.impl.operationservice.Operation) ExceptionUtil.withTryCatch(com.hazelcast.jet.impl.util.ExceptionUtil.withTryCatch) TaskletExecutionService(com.hazelcast.jet.impl.execution.TaskletExecutionService) ClusterServiceImpl(com.hazelcast.internal.cluster.impl.ClusterServiceImpl) Nonnull(javax.annotation.Nonnull) CheckLightJobsOperation(com.hazelcast.jet.impl.operation.CheckLightJobsOperation) Nullable(javax.annotation.Nullable) NodeEngineImpl(com.hazelcast.spi.impl.NodeEngineImpl) MemberLeftException(com.hazelcast.core.MemberLeftException) MetricsCollectionContext(com.hazelcast.internal.metrics.MetricsCollectionContext) MetricsCollector(com.hazelcast.internal.metrics.collectors.MetricsCollector) RawJobMetrics(com.hazelcast.jet.impl.metrics.RawJobMetrics) MetricTags(com.hazelcast.jet.core.metrics.MetricTags) TriggerMemberListPublishOp(com.hazelcast.internal.cluster.impl.operations.TriggerMemberListPublishOp) ExceptionUtil.peel(com.hazelcast.jet.impl.util.ExceptionUtil.peel) Util.jobIdAndExecutionId(com.hazelcast.jet.impl.util.Util.jobIdAndExecutionId) Util(com.hazelcast.jet.Util) SECONDS(java.util.concurrent.TimeUnit.SECONDS) CheckLightJobsOperation(com.hazelcast.jet.impl.operation.CheckLightJobsOperation) Address(com.hazelcast.cluster.Address) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Operation(com.hazelcast.spi.impl.operationservice.Operation) CheckLightJobsOperation(com.hazelcast.jet.impl.operation.CheckLightJobsOperation) TargetNotMemberException(com.hazelcast.spi.exception.TargetNotMemberException) ExecutionContext(com.hazelcast.jet.impl.execution.ExecutionContext) CancellationException(java.util.concurrent.CancellationException) List(java.util.List) ArrayList(java.util.ArrayList)

Example 2 with InvocationFuture

use of com.hazelcast.spi.impl.operationservice.impl.InvocationFuture in project hazelcast by hazelcast.

the class ScheduledFutureProxy method dispose.

@Override
public void dispose() {
    checkAccessibleHandler();
    checkAccessibleOwner();
    Operation op = new DisposeTaskOperation(handler);
    InvocationFuture future = invoke(op);
    handler = null;
    future.joinInternal();
}
Also used : DisposeTaskOperation(com.hazelcast.scheduledexecutor.impl.operations.DisposeTaskOperation) DisposeTaskOperation(com.hazelcast.scheduledexecutor.impl.operations.DisposeTaskOperation) GetResultOperation(com.hazelcast.scheduledexecutor.impl.operations.GetResultOperation) IsCanceledOperation(com.hazelcast.scheduledexecutor.impl.operations.IsCanceledOperation) Operation(com.hazelcast.spi.impl.operationservice.Operation) CancelTaskOperation(com.hazelcast.scheduledexecutor.impl.operations.CancelTaskOperation) GetStatisticsOperation(com.hazelcast.scheduledexecutor.impl.operations.GetStatisticsOperation) GetDelayOperation(com.hazelcast.scheduledexecutor.impl.operations.GetDelayOperation) IsDoneOperation(com.hazelcast.scheduledexecutor.impl.operations.IsDoneOperation) InvocationFuture(com.hazelcast.spi.impl.operationservice.impl.InvocationFuture)

Example 3 with InvocationFuture

use of com.hazelcast.spi.impl.operationservice.impl.InvocationFuture in project hazelcast by hazelcast.

the class ExecutorServiceProxy method submit.

@Nonnull
@Override
public <T> Future<T> submit(@Nonnull Runnable task, T result) {
    checkNotNull(task, "task must not be null");
    checkNotShutdown();
    NodeEngine nodeEngine = getNodeEngine();
    Callable<T> callable = createRunnableAdapter(task);
    Data callableData = nodeEngine.toData(callable);
    UUID uuid = newUnsecureUUID();
    int partitionId = getTaskPartitionId(callable);
    Operation op = new CallableTaskOperation(name, uuid, callableData).setPartitionId(partitionId);
    InvocationFuture future = invokeOnPartition(op);
    return new CancellableDelegatingFuture<>(future, result, nodeEngine, uuid, partitionId);
}
Also used : NodeEngine(com.hazelcast.spi.impl.NodeEngine) Data(com.hazelcast.internal.serialization.Data) ShutdownOperation(com.hazelcast.executor.impl.operations.ShutdownOperation) CallableTaskOperation(com.hazelcast.executor.impl.operations.CallableTaskOperation) Operation(com.hazelcast.spi.impl.operationservice.Operation) MemberCallableTaskOperation(com.hazelcast.executor.impl.operations.MemberCallableTaskOperation) InvocationFuture(com.hazelcast.spi.impl.operationservice.impl.InvocationFuture) UuidUtil.newUnsecureUUID(com.hazelcast.internal.util.UuidUtil.newUnsecureUUID) UUID(java.util.UUID) CallableTaskOperation(com.hazelcast.executor.impl.operations.CallableTaskOperation) MemberCallableTaskOperation(com.hazelcast.executor.impl.operations.MemberCallableTaskOperation) Nonnull(javax.annotation.Nonnull)

Example 4 with InvocationFuture

use of com.hazelcast.spi.impl.operationservice.impl.InvocationFuture in project hazelcast by hazelcast.

the class MigrationManager method commitMigrationToDestinationAsync.

/**
 * Sends a {@link MigrationCommitOperation} to the destination and returns {@code true} if the new partition state
 * was applied on the destination.
 */
@SuppressWarnings({ "checkstyle:npathcomplexity", "checkstyle:cyclomaticcomplexity", "checkstyle:methodlength" })
private CompletionStage<Boolean> commitMigrationToDestinationAsync(final MigrationInfo migration) {
    PartitionReplica destination = migration.getDestination();
    if (destination.isIdentical(node.getLocalMember())) {
        if (logger.isFinestEnabled()) {
            logger.finest("Shortcutting migration commit, since destination is master. -> " + migration);
        }
        return CompletableFuture.completedFuture(Boolean.TRUE);
    }
    Member member = node.getClusterService().getMember(destination.address(), destination.uuid());
    if (member == null) {
        logger.warning("Cannot commit " + migration + ". Destination " + destination + " is not a member anymore");
        return CompletableFuture.completedFuture(Boolean.FALSE);
    }
    try {
        if (logger.isFinestEnabled()) {
            logger.finest("Sending migration commit operation to " + destination + " for " + migration);
        }
        migration.setStatus(MigrationStatus.SUCCESS);
        UUID destinationUuid = member.getUuid();
        MigrationCommitOperation operation = new MigrationCommitOperation(migration, destinationUuid);
        InvocationFuture<Boolean> future = nodeEngine.getOperationService().createInvocationBuilder(SERVICE_NAME, operation, destination.address()).setTryCount(Integer.MAX_VALUE).setCallTimeout(memberHeartbeatTimeoutMillis).invoke();
        return future.handleAsync((done, t) -> {
            // Inspect commit result;
            // - if there's an exception, either retry or fail
            // - if result is true then success, otherwise failure
            logger.fine("Migration commit response received -> " + migration + ", success: " + done + ", failure: " + t);
            if (t != null) {
                logMigrationCommitFailure(migration, t);
                if (t instanceof OperationTimeoutException || t.getCause() instanceof OperationTimeoutException) {
                    return COMMIT_RETRY;
                }
                return COMMIT_FAILURE;
            }
            return done ? COMMIT_SUCCESS : COMMIT_FAILURE;
        }, asyncExecutor).thenComposeAsync(result -> {
            switch(result) {
                case COMMIT_SUCCESS:
                    return CompletableFuture.completedFuture(true);
                case COMMIT_FAILURE:
                    return CompletableFuture.completedFuture(false);
                case COMMIT_RETRY:
                    logger.fine("Retrying migration commit for -> " + migration);
                    return commitMigrationToDestinationAsync(migration);
                default:
                    throw new IllegalArgumentException("Unknown migration commit result: " + result);
            }
        }, asyncExecutor).handleAsync((result, t) -> {
            if (t != null) {
                logMigrationCommitFailure(migration, t);
                return false;
            }
            if (logger.isFineEnabled()) {
                logger.fine("Migration commit result " + result + " from " + destination + " for " + migration);
            }
            return result;
        }, asyncExecutor);
    } catch (Throwable t) {
        logMigrationCommitFailure(migration, t);
        return CompletableFuture.completedFuture(Boolean.FALSE);
    }
}
Also used : MigrationCommitOperation(com.hazelcast.internal.partition.operation.MigrationCommitOperation) Address(com.hazelcast.cluster.Address) HazelcastInstanceNotActiveException(com.hazelcast.core.HazelcastInstanceNotActiveException) InvocationFuture(com.hazelcast.spi.impl.operationservice.impl.InvocationFuture) Arrays(java.util.Arrays) PartitionRuntimeState(com.hazelcast.internal.partition.PartitionRuntimeState) ShutdownResponseOperation(com.hazelcast.internal.partition.operation.ShutdownResponseOperation) Preconditions(com.hazelcast.internal.util.Preconditions) ScheduledFuture(java.util.concurrent.ScheduledFuture) PartitionStateVersionMismatchException(com.hazelcast.internal.partition.PartitionStateVersionMismatchException) Clock(com.hazelcast.internal.util.Clock) MIGRATION_METRIC_MIGRATION_MANAGER_MIGRATION_ACTIVE(com.hazelcast.internal.metrics.MetricDescriptorConstants.MIGRATION_METRIC_MIGRATION_MANAGER_MIGRATION_ACTIVE) Member(com.hazelcast.cluster.Member) BiFunction(java.util.function.BiFunction) IntConsumer(java.util.function.IntConsumer) ASYNC_EXECUTOR(com.hazelcast.spi.impl.executionservice.ExecutionService.ASYNC_EXECUTOR) InternalCompletableFuture(com.hazelcast.spi.impl.InternalCompletableFuture) MigrationStateImpl(com.hazelcast.internal.partition.MigrationStateImpl) Future(java.util.concurrent.Future) PartitionTableView(com.hazelcast.internal.partition.PartitionTableView) MigrationCommitOperation(com.hazelcast.internal.partition.operation.MigrationCommitOperation) DATA_MEMBER_SELECTOR(com.hazelcast.cluster.memberselector.MemberSelectors.DATA_MEMBER_SELECTOR) Int2ObjectHashMap(com.hazelcast.internal.util.collection.Int2ObjectHashMap) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) MigrationRequestOperation(com.hazelcast.internal.partition.operation.MigrationRequestOperation) Map(java.util.Map) BOOLEAN(com.hazelcast.internal.metrics.ProbeUnit.BOOLEAN) PARTITIONS_PREFIX(com.hazelcast.internal.metrics.MetricDescriptorConstants.PARTITIONS_PREFIX) PersistenceConfig(com.hazelcast.config.PersistenceConfig) IntHashSet(com.hazelcast.internal.util.collection.IntHashSet) PARTITION_FRAGMENTED_MIGRATION_ENABLED(com.hazelcast.spi.properties.ClusterProperty.PARTITION_FRAGMENTED_MIGRATION_ENABLED) InternalPartition(com.hazelcast.internal.partition.InternalPartition) IPartitionLostEvent(com.hazelcast.internal.partition.IPartitionLostEvent) Probe(com.hazelcast.internal.metrics.Probe) Collection(java.util.Collection) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) BlockingQueue(java.util.concurrent.BlockingQueue) TargetNotMemberException(com.hazelcast.spi.exception.TargetNotMemberException) UUID(java.util.UUID) Collectors(java.util.stream.Collectors) PARTITION_CHUNKED_MIGRATION_ENABLED(com.hazelcast.spi.properties.ClusterProperty.PARTITION_CHUNKED_MIGRATION_ENABLED) Node(com.hazelcast.instance.impl.Node) ClusterProperty(com.hazelcast.spi.properties.ClusterProperty) Objects(java.util.Objects) ArrayBlockingQueue(java.util.concurrent.ArrayBlockingQueue) List(java.util.List) CompletionStage(java.util.concurrent.CompletionStage) OperationTimeoutException(com.hazelcast.core.OperationTimeoutException) PartitionIdSet(com.hazelcast.internal.util.collection.PartitionIdSet) Queue(java.util.Queue) MigrationStatus(com.hazelcast.internal.partition.MigrationInfo.MigrationStatus) MEGABYTES(com.hazelcast.memory.MemoryUnit.MEGABYTES) ReplicaMigrationEvent(com.hazelcast.partition.ReplicaMigrationEvent) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) CompletableFuture(java.util.concurrent.CompletableFuture) ExecutionService(com.hazelcast.spi.impl.executionservice.ExecutionService) OperationServiceImpl(com.hazelcast.spi.impl.operationservice.impl.OperationServiceImpl) TreeSet(java.util.TreeSet) ArrayList(java.util.ArrayList) ConcurrentMap(java.util.concurrent.ConcurrentMap) Level(java.util.logging.Level) MigrationEndpoint(com.hazelcast.internal.partition.MigrationEndpoint) HashSet(java.util.HashSet) PARTITION_MIGRATION_TIMEOUT(com.hazelcast.spi.properties.ClusterProperty.PARTITION_MIGRATION_TIMEOUT) ILogger(com.hazelcast.logging.ILogger) Operation(com.hazelcast.spi.impl.operationservice.Operation) PartitionReplica(com.hazelcast.internal.partition.PartitionReplica) FinalizeMigrationOperation(com.hazelcast.internal.partition.operation.FinalizeMigrationOperation) LinkedList(java.util.LinkedList) ClusterServiceImpl(com.hazelcast.internal.cluster.impl.ClusterServiceImpl) PartitionStateOperation(com.hazelcast.internal.partition.operation.PartitionStateOperation) LinkedHashSet(java.util.LinkedHashSet) Timer(com.hazelcast.internal.util.Timer) NodeEngineImpl(com.hazelcast.spi.impl.NodeEngineImpl) CoalescingDelayedTrigger(com.hazelcast.internal.util.scheduler.CoalescingDelayedTrigger) Iterator(java.util.Iterator) Executor(java.util.concurrent.Executor) MigrationParticipant(com.hazelcast.internal.partition.impl.MigrationInterceptor.MigrationParticipant) MemberLeftException(com.hazelcast.core.MemberLeftException) HazelcastProperties(com.hazelcast.spi.properties.HazelcastProperties) ExecutionException(java.util.concurrent.ExecutionException) TimeUnit(java.util.concurrent.TimeUnit) PARTITION_CHUNKED_MAX_MIGRATING_DATA_IN_MB(com.hazelcast.spi.properties.ClusterProperty.PARTITION_CHUNKED_MAX_MIGRATING_DATA_IN_MB) PartitionReplicaSyncRequest(com.hazelcast.internal.partition.operation.PartitionReplicaSyncRequest) Lock(java.util.concurrent.locks.Lock) SERVICE_NAME(com.hazelcast.internal.partition.IPartitionService.SERVICE_NAME) MigrationDecisionCallback(com.hazelcast.internal.partition.impl.MigrationPlanner.MigrationDecisionCallback) PromotionCommitOperation(com.hazelcast.internal.partition.operation.PromotionCommitOperation) ClusterState(com.hazelcast.cluster.ClusterState) PublishCompletedMigrationsOperation(com.hazelcast.internal.partition.operation.PublishCompletedMigrationsOperation) MigrationInfo(com.hazelcast.internal.partition.MigrationInfo) PARTITION_MIGRATION_INTERVAL(com.hazelcast.spi.properties.ClusterProperty.PARTITION_MIGRATION_INTERVAL) OperationService(com.hazelcast.spi.impl.operationservice.OperationService) Comparator(java.util.Comparator) Collections(java.util.Collections) PartitionReplica(com.hazelcast.internal.partition.PartitionReplica) OperationTimeoutException(com.hazelcast.core.OperationTimeoutException) UUID(java.util.UUID) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Member(com.hazelcast.cluster.Member)

Example 5 with InvocationFuture

use of com.hazelcast.spi.impl.operationservice.impl.InvocationFuture in project hazelcast by hazelcast.

the class PartitionServiceProxy method isMemberSafe.

@Override
public boolean isMemberSafe(Member member) {
    if (member == null) {
        throw new NullPointerException("Parameter member must not be null");
    }
    final Member localMember = nodeEngine.getLocalMember();
    if (localMember.equals(member)) {
        return isLocalMemberSafe();
    }
    final Address target = member.getAddress();
    final Operation operation = new SafeStateCheckOperation();
    final InvocationFuture future = nodeEngine.getOperationService().invokeOnTarget(InternalPartitionService.SERVICE_NAME, operation, target);
    boolean safe;
    try {
        final Object result = future.get(10, TimeUnit.SECONDS);
        safe = (Boolean) result;
    } catch (Throwable t) {
        safe = false;
        logger.warning("Error while querying member's safe state [" + member + "]", t);
    }
    return safe;
}
Also used : Address(com.hazelcast.cluster.Address) SafeStateCheckOperation(com.hazelcast.internal.partition.operation.SafeStateCheckOperation) Operation(com.hazelcast.spi.impl.operationservice.Operation) SafeStateCheckOperation(com.hazelcast.internal.partition.operation.SafeStateCheckOperation) InvocationFuture(com.hazelcast.spi.impl.operationservice.impl.InvocationFuture) Member(com.hazelcast.cluster.Member)

Aggregations

Operation (com.hazelcast.spi.impl.operationservice.Operation)5 InvocationFuture (com.hazelcast.spi.impl.operationservice.impl.InvocationFuture)5 Address (com.hazelcast.cluster.Address)4 Member (com.hazelcast.cluster.Member)4 ILogger (com.hazelcast.logging.ILogger)3 HazelcastInstanceNotActiveException (com.hazelcast.core.HazelcastInstanceNotActiveException)2 MemberLeftException (com.hazelcast.core.MemberLeftException)2 ClusterServiceImpl (com.hazelcast.internal.cluster.impl.ClusterServiceImpl)2 Probe (com.hazelcast.internal.metrics.Probe)2 NodeEngine (com.hazelcast.spi.impl.NodeEngine)2 OperationService (com.hazelcast.spi.impl.operationservice.OperationService)2 ArrayList (java.util.ArrayList)2 Iterator (java.util.Iterator)2 List (java.util.List)2 Map (java.util.Map)2 Set (java.util.Set)2 UUID (java.util.UUID)2 CompletableFuture (java.util.concurrent.CompletableFuture)2 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)2 Nonnull (javax.annotation.Nonnull)2