package org.infinispan.remoting.rpc;
/**
* Represents different handling mechanisms when dealing with remote command responses.
* These include waiting for responses from all nodes in the cluster ({@link ResponseMode#SYNCHRONOUS}}),
* not waiting for any responses at all ({@link ResponseMode#ASYNCHRONOUS}}),
* or waiting for first valid response ({@link ResponseMode#WAIT_FOR_VALID_RESPONSE}})
*
* @author Manik Surtani
* @since 4.0
*/
public enum ResponseMode {
SYNCHRONOUS,
/**
* Most commands should use this mode to prevent SuspectExceptions when we are doing a broadcast
* (or anycast that translates to JGroups broadcast). That would cause SuspectExceptions in SYNCHRONOUS mode
* in a situation when:
* 1) node is leaving, we want to address all living members but while topology was already updated, view was not yet
* 2) we use asymmetric cluster so the other nodes respond with CacheNotFoundResponse to such broadcast
*/
SYNCHRONOUS_IGNORE_LEAVERS,
ASYNCHRONOUS,
WAIT_FOR_VALID_RESPONSE;
public boolean isSynchronous() {
return !isAsynchronous();
}
public boolean isAsynchronous() {
return this == ASYNCHRONOUS;
}
}