Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Copyright (c) 2008-2021, Hazelcast, Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.hazelcast.core;
import com.hazelcast.cluster.Member;
import com.hazelcast.cluster.MemberSelector;
import com.hazelcast.config.SplitBrainProtectionConfig;
import com.hazelcast.executor.LocalExecutorStats;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
/**
* Distributed implementation of {@link ExecutorService}.
* IExecutorService provides additional methods like executing tasks
* on a specific member, on a member who is owner of a specific key,
* executing a tasks on multiple members and listening execution result using a callback.
*
* Supports split brain protection {@link SplitBrainProtectionConfig} since 3.10 in cluster
* versions 3.10 and higher.
*
* @see ExecutorService
* @see ExecutionCallback
* @see MultiExecutionCallback
*/
public interface IExecutorService extends ExecutorService, DistributedObject {
/**
* Executes a task on a randomly selected member.
*
* @param command the task that is executed on a randomly selected member
* @param memberSelector memberSelector
* @throws java.util.concurrent.RejectedExecutionException if no member is selected
*/
void execute(@Nonnull Runnable command,
@Nonnull MemberSelector memberSelector);
/**
* Executes a task on the owner of the specified key.
*
* @param command a task executed on the owner of the specified key
* @param key the specified key
*/
void executeOnKeyOwner(@Nonnull Runnable command,
@Nonnull Object key);
/**
* Executes a task on the specified member.
*
* @param command the task executed on the specified member
* @param member the specified member
*/
void executeOnMember(@Nonnull Runnable command,
@Nonnull Member member);
/**
* Executes a task on each of the specified members.
*
* @param command the task executed on the specified members
* @param members the specified members
*/
void executeOnMembers(@Nonnull Runnable command,
@Nonnull Collection members);
/**
* Executes a task on each of the selected members.
*
* @param command a task executed on each of the selected members
* @param memberSelector memberSelector
* @throws java.util.concurrent.RejectedExecutionException if no member is selected
*/
void executeOnMembers(@Nonnull Runnable command,
@Nonnull MemberSelector memberSelector);
/**
* Executes a task on all of the known cluster members.
*
* @param command a task executed on all of the known cluster members
*/
void executeOnAllMembers(@Nonnull Runnable command);
/**
* Submits a task to a randomly selected member and returns a Future
* representing that task.
*
* @param task task submitted to a randomly selected member
* @param memberSelector memberSelector
* @param the result type of callable
* @return a Future representing pending completion of the task
* @throws java.util.concurrent.RejectedExecutionException if no member is selected
*/
Future submit(@Nonnull Callable task,
@Nonnull MemberSelector memberSelector);
/**
* Submits a task to the owner of the specified key and returns a Future
* representing that task.
*
* @param task task submitted to the owner of the specified key
* @param key the specified key
* @param the result type of callable
* @return a Future representing pending completion of the task
*/
Future submitToKeyOwner(@Nonnull Callable task,
@Nonnull Object key);
/**
* Submits a task to the specified member and returns a Future
* representing that task.
*
* @param task the task submitted to the specified member
* @param member the specified member
* @param the result type of callable
* @return a Future representing pending completion of the task
*/
Future submitToMember(@Nonnull Callable task,
@Nonnull Member member);
/**
* Submits a task to given members and returns
* map of Member-Future pairs representing pending completion of the task on each member
*
* @param task the task submitted to given members
* @param members the given members
* @param the result type of callable
* @return map of Member-Future pairs representing pending completion of the task on each member
*/
Map> submitToMembers(@Nonnull Callable task,
@Nonnull Collection members);
/**
* Submits a task to selected members and returns a
* map of Member-Future pairs representing pending completion of the task on each member.
*
* @param task the task submitted to selected members
* @param memberSelector memberSelector
* @param the result type of callable
* @return map of Member-Future pairs representing pending completion of the task on each member
* @throws java.util.concurrent.RejectedExecutionException if no member is selected
*/
Map> submitToMembers(@Nonnull Callable task,
@Nonnull MemberSelector memberSelector);
/**
* Submits task to all cluster members and returns a
* map of Member-Future pairs representing pending completion of the task on each member.
*
* @param task the task submitted to all cluster members
* @param the result type of callable
* @return map of Member-Future pairs representing pending completion of the task on each member
*/
Map> submitToAllMembers(@Nonnull Callable task);
/**
* Submits a task to a random member. Caller will be notified of the result of the task by
* {@link ExecutionCallback#onResponse(Object)} or {@link ExecutionCallback#onFailure(Throwable)}.
*
* @param task a task submitted to a random member
* @param callback callback
* @param the response type of callback
*/
void submit(@Nonnull Runnable task,
@Nullable ExecutionCallback callback);
/**
* Submits a task to randomly selected members. Caller will be notified for the result of the task by
* {@link ExecutionCallback#onResponse(Object)} or {@link ExecutionCallback#onFailure(Throwable)}.
*
* @param task the task submitted to randomly selected members
* @param memberSelector memberSelector
* @param callback callback
* @param the response type of callback
* @throws java.util.concurrent.RejectedExecutionException if no member is selected
*/
void submit(@Nonnull Runnable task,
@Nonnull MemberSelector memberSelector,
@Nullable ExecutionCallback callback);
/**
* Submits a task to the owner of the specified key. Caller will be notified for the result of the task by
* {@link ExecutionCallback#onResponse(Object)} or {@link ExecutionCallback#onFailure(Throwable)}.
*
* @param task task submitted to the owner of the specified key
* @param key the specified key
* @param callback callback
* @param the response type of callback
*/
void submitToKeyOwner(@Nonnull Runnable task,
@Nonnull Object key,
@Nonnull ExecutionCallback callback);
/**
* Submits a task to the specified member. Caller will be notified for the result of the task by
* {@link ExecutionCallback#onResponse(Object)} or {@link ExecutionCallback#onFailure(Throwable)}.
*
* @param task the task submitted to the specified member
* @param member the specified member
* @param callback callback
* @param the response type of callback
*/
void submitToMember(@Nonnull Runnable task,
@Nonnull Member member,
@Nullable ExecutionCallback callback);
/**
* Submits a task to the specified members. Caller will be notified for the result of the each task by
* {@link MultiExecutionCallback#onResponse(Member, Object)}, and when all tasks are completed,
* {@link MultiExecutionCallback#onComplete(java.util.Map)} will be called.
*
* @param task the task submitted to the specified members
* @param members the specified members
* @param callback callback
*/
void submitToMembers(@Nonnull Runnable task,
@Nonnull Collection members,
@Nonnull MultiExecutionCallback callback);
/**
* Submits task to the selected members. Caller will be notified for the result of the each task by
* {@link MultiExecutionCallback#onResponse(Member, Object)}, and when all tasks are completed,
* {@link MultiExecutionCallback#onComplete(java.util.Map)} will be called.
*
* @param task the task submitted to the selected members
* @param memberSelector memberSelector
* @param callback callback
* @throws java.util.concurrent.RejectedExecutionException if no member is selected
*/
void submitToMembers(@Nonnull Runnable task,
@Nonnull MemberSelector memberSelector,
@Nonnull MultiExecutionCallback callback);
/**
* Submits task to all the cluster members. Caller will be notified for the result of each task by
* {@link MultiExecutionCallback#onResponse(Member, Object)}, and when all tasks are completed,
* {@link MultiExecutionCallback#onComplete(java.util.Map)} will be called.
*
* @param task the task submitted to all the cluster members
* @param callback callback
*/
void submitToAllMembers(@Nonnull Runnable task,
@Nonnull MultiExecutionCallback callback);
/**
* Submits a task to a random member. Caller will be notified for the result of the task by
* {@link ExecutionCallback#onResponse(Object)} or {@link ExecutionCallback#onFailure(Throwable)}.
*
* @param task the task submitted to a random member
* @param callback callback
* @param the result type of callable
*/
void submit(@Nonnull Callable task,
@Nullable ExecutionCallback callback);
/**
* Submits task to a randomly selected member. Caller will be notified for the result of the task by
* {@link ExecutionCallback#onResponse(Object)} or {@link ExecutionCallback#onFailure(Throwable)}.
*
* @param task the task submitted to a randomly selected member
* @param memberSelector memberSelector
* @param callback callback
* @param the result type of callable
* @throws java.util.concurrent.RejectedExecutionException if no member is selected
*/
void submit(@Nonnull Callable task,
@Nonnull MemberSelector memberSelector,
@Nullable ExecutionCallback callback);
/**
* Submits task to the owner of the specified key. Caller will be notified for the result of the task by
* {@link ExecutionCallback#onResponse(Object)} or {@link ExecutionCallback#onFailure(Throwable)}.
*
* @param task the task submitted to the owner of the specified key
* @param key the specified key
* @param callback callback
* @param the result type of callable
*/
void submitToKeyOwner(@Nonnull Callable task,
@Nonnull Object key,
@Nullable ExecutionCallback callback);
/**
* Submits a task to the specified member. Caller will be notified for the result of the task by
* {@link ExecutionCallback#onResponse(Object)} or {@link ExecutionCallback#onFailure(Throwable)}.
*
* @param task the task submitted to the specified member
* @param member the specified member
* @param callback callback
* @param the result type of callable
*/
void submitToMember(@Nonnull Callable task,
@Nonnull Member member,
@Nullable ExecutionCallback callback);
/**
* Submits a task to the specified members. Caller will be notified for the result of each task by
* {@link MultiExecutionCallback#onResponse(Member, Object)}, and when all tasks are completed,
* {@link MultiExecutionCallback#onComplete(java.util.Map)} will be called.
*
* @param task the task submitted to the specified members
* @param members the specified members
* @param callback callback
* @param the result type of callable
*/
void submitToMembers(@Nonnull Callable task,
@Nonnull Collection members,
@Nonnull MultiExecutionCallback callback);
/**
* Submits task to the selected members. Caller will be notified for the result of each task by
* {@link MultiExecutionCallback#onResponse(Member, Object)}, and when all tasks are completed,
* {@link MultiExecutionCallback#onComplete(java.util.Map)} will be called.
*
* @param task the task submitted to the selected members
* @param memberSelector memberSelector
* @param callback callback
* @param the result type of callable
* @throws java.util.concurrent.RejectedExecutionException if no member is selected
*/
void submitToMembers(@Nonnull Callable task,
@Nonnull MemberSelector memberSelector,
@Nonnull MultiExecutionCallback callback);
/**
* Submits task to all the cluster members. Caller will be notified for the result of the each task by
* {@link MultiExecutionCallback#onResponse(Member, Object)}, and when all tasks are completed,
* {@link MultiExecutionCallback#onComplete(java.util.Map)} will be called.
*
* @param task the task submitted to all the cluster members
* @param callback callback
* @param the result type of callable
*/
void submitToAllMembers(@Nonnull Callable task,
@Nonnull MultiExecutionCallback callback);
/**
* Returns local statistics related to this executor service.
*
* @return local statistics related to this executor service
*/
LocalExecutorStats getLocalExecutorStats();
}