org.infinispan.manager.ClusterExecutionPolicy Maven / Gradle / Ivy
package org.infinispan.manager;
import org.infinispan.remoting.transport.TopologyAwareAddress;
/**
* ClusterExecutionPolicy controls how which nodes commands submitted via {@link ClusterExecutor}. That is the user
* can ensure that a command goes or doesn't go to a specific physical location such as on the existing machine, rack
* or site.
*
* ClusterExecutionPolicy effectively scopes execution of commands to a subset of nodes. For
* example, someone might want to exclusively execute commands on a local network site instead of a
* backup remote network centre as well. Others might, for example, use only a dedicated subset of a
* certain Infinispan rack nodes for specific task execution.
*
*
* @author William Burns
* @since 9.0
*/
public enum ClusterExecutionPolicy {
/**
* The command can be executed on any node in the cluster
*/
ALL {
@Override
public boolean include(TopologyAwareAddress thisAddress, TopologyAwareAddress otherAddress) {
return true;
}
},
/**
* The command can be executed only on the same machine from where it was initiated. Note this implies
* same rack and same site.
*/
SAME_MACHINE {
@Override
public boolean include(TopologyAwareAddress thisAddress, TopologyAwareAddress otherAddress) {
return thisAddress.isSameMachine(otherAddress);
}
},
/**
* The command will be executed only on a different machine. Note this means it may or may not be on the same rack
* or site.
*/
DIFFERENT_MACHINE {
@Override
public boolean include(TopologyAwareAddress thisAddress, TopologyAwareAddress otherAddress) {
return !thisAddress.isSameMachine(otherAddress);
}
},
/**
* The command will be executed on a machine on the same rack. Note this means it may or may not be executed on the
* same machine.
*/
SAME_RACK {
@Override
public boolean include(TopologyAwareAddress thisAddress, TopologyAwareAddress otherAddress) {
return thisAddress.isSameRack(otherAddress);
}
},
/**
* The command will be executed on machine on a different rack. Note this means may or may not be on the same site.
*/
DIFFERENT_RACK {
@Override
public boolean include(TopologyAwareAddress thisAddress, TopologyAwareAddress otherAddress) {
return !thisAddress.isSameRack(otherAddress);
}
},
/**
* The command will be executed on a machine on the same site. Note this means it may or may not be executed on the
* same machine or even same rack.
*/
SAME_SITE {
@Override
public boolean include(TopologyAwareAddress thisAddress, TopologyAwareAddress otherAddress) {
return thisAddress.isSameSite(otherAddress);
}
},
/**
* The command will be executed on a different site.
*/
DIFFERENT_SITE {
@Override
public boolean include(TopologyAwareAddress thisAddress, TopologyAwareAddress otherAddress) {
return !thisAddress.isSameSite(otherAddress);
}
},
;
abstract public boolean include(TopologyAwareAddress thisAddress, TopologyAwareAddress otherAddress);
}