Interface CloudPool
-
- All Known Implementing Classes:
CloudPoolClient
public interface CloudPoolACloudPoolis a management interface towards an elastic pool of machines for a particular cloud provider, handling communication with the cloud provider according to its API. TheCloudPoolprovides a cloud-neutral API to clients, such as the autoscaler, with a number of management primitives for the machine pool. In general terms, these primitives allow clients to:- track the machine pool members and their states
- modify the size of the machine pool (the cloud pool continuously starts/stops machine instances so that the number of machines in the pool matches the desired size set for the pool)
CloudPoolinstance is intended to be made network-accessible by aCloudPoolRestApiREST endpoint, which exposes theCloudPoolthrough the elastisys:scale cloud pool REST API). Implementors should take measures to ensure that implementations are thread-safe, since they may be called by several concurrent threads.- See Also:
CloudPoolRestApi
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description voidattachMachine(java.lang.String machineId)Attaches an already running machine instance to the pool, growing the pool with a new member.voidconfigure(com.google.gson.JsonObject configuration)Updates the configuration for thisCloudPool.voiddetachMachine(java.lang.String machineId, boolean decrementDesiredSize)Removes a member from the pool without terminating it.java.util.Optional<com.google.gson.JsonObject>getConfiguration()Returns the configuration currently set for thisCloudPool, if one has been set.MachinePoolgetMachinePool()Returns a list of the members of the cloud pool.PoolSizeSummarygetPoolSize()Returns the current size of theMachinePool-- both in terms of the desired size and the actual size (as these may differ at any time).CloudPoolStatusgetStatus()Returns the execution status for theCloudPool.java.util.concurrent.Future<?>setDesiredSize(int desiredSize)Sets the desired number of machines in the machine pool.voidsetMembershipStatus(java.lang.String machineId, MembershipStatus membershipStatus)Sets the membership status of a given pool member.voidsetServiceState(java.lang.String machineId, ServiceState serviceState)Sets the service state of a given machine pool member.voidstart()Starts theCloudPool.voidstop()Stops theCloudPool.voidterminateMachine(java.lang.String machineId, boolean decrementDesiredSize)Terminates a particular machine pool member.
-
-
-
Method Detail
-
configure
void configure(com.google.gson.JsonObject configuration) throws java.lang.IllegalArgumentException, CloudPoolExceptionUpdates the configuration for thisCloudPool. This operation does not change theCloudPool's started state -- if theCloudPoolis started it should remain started, and if it is in a stopped state it should remain stopped. The configuration is passed as a JSON object. It is up to theCloudPoolto validate and apply the contents of the configuration as well as to perform whatever changes are needed for the new configuration to take effect.- Parameters:
configuration- The JSON configuration to be set.- Throws:
java.lang.IllegalArgumentException- If the received configuration was invalid.CloudPoolException- If the configuration could not be applied.
-
getConfiguration
java.util.Optional<com.google.gson.JsonObject> getConfiguration()
Returns the configuration currently set for thisCloudPool, if one has been set.- Returns:
- A JSON configuration if set,
Optional#absent()otherwise.
-
start
void start() throws NotConfiguredExceptionStarts theCloudPool. This will set theCloudPoolin an activated state where it will start to accept requests to query or modify the machine pool. If theCloudPoolhas not been configured the method will fail. If theCloudPoolis already started this is a no-op.- Throws:
NotConfiguredException- If theCloudPoolhas not been configured.
-
stop
void stop()
-
getStatus
CloudPoolStatus getStatus()
Returns the execution status for theCloudPool.- Returns:
-
getMachinePool
MachinePool getMachinePool() throws CloudPoolException, NotStartedException
Returns a list of the members of the cloud pool. Note, that the response may include machines in anyMachineState, even machines that are in the process of terminating. TheMembershipStatusof a machine in an allocated/started state determines if it is to be considered an active member of the pool.The active size of the machine pool should be interpreted as the number of allocated machines (in any of the non-terminal machine statesREQUESTED,PENDINGorRUNNINGthat have not been marked with an inactiveMembershipStatus. SeeMachine.isActiveMember(). The service state should be set to UNKNOWN for all machine instances for which no service state has been reported (seesetServiceState(String, ServiceState)). Similarly, theMembershipStatusshould be set toMembershipStatus.defaultStatus()for all machine instances for which no membership status has been reported (seesetMembershipStatus(String, MembershipStatus)).- Returns:
- A list of cloud pool members.
- Throws:
CloudPoolException- If the operation could not be completed.NotStartedException- If theCloudPoolis not started.
-
getPoolSize
PoolSizeSummary getPoolSize() throws CloudPoolException, NotStartedException
Returns the current size of theMachinePool-- both in terms of the desired size and the actual size (as these may differ at any time).- Returns:
- The current
PoolSizeSummary. - Throws:
CloudPoolException- If the operation could not be completed.NotStartedException- If theCloudPoolis not started.
-
setDesiredSize
java.util.concurrent.Future<?> setDesiredSize(int desiredSize) throws java.lang.IllegalArgumentException, CloudPoolException, NotStartedExceptionSets the desired number of machines in the machine pool. This method is asynchronous and returns immediately after updating the desired size. There may be a delay before the changes take effect and are reflected in the machine pool. The method returns aFuturethat the caller can use if it needs to wait for the size update to be applied to the pool. Note: theCloudPoolimplementation should take measures to ensure that requested machines are recognized as pool members. The specific mechanism to mark pool members, which may depend on the features offered by the particular cloud API, is left to the implementation but could, for example, make use of tags.- Parameters:
desiredSize- The desired number of machines in the pool.- Returns:
- A
Futurethat the caller can use to wait for the size update to be applied to the pool. - Throws:
java.lang.IllegalArgumentException- If the desired size is illegal.CloudPoolException- If the operation could not be completed.NotStartedException- If theCloudPoolis not started.
-
terminateMachine
void terminateMachine(java.lang.String machineId, boolean decrementDesiredSize) throws NotFoundException, NotEvictableException, CloudPoolException, NotStartedExceptionTerminates a particular machine pool member. The caller can control if a replacement machine is to be provisioned via thedecrementDesiredSizeparameter. Note: a machine that is protected from removal by a membership status withevictable: falsecan not be terminated.- Parameters:
machineId- The machine to terminate.decrementDesiredSize- If the desired pool size should be decremented (true) or left at its current size (false).- Throws:
NotFoundException- If the specified machine is not a member of the pool.NotEvictableException- If the specified machine has aMembershipStatusthat prevents it from being removed.CloudPoolException- If the operation could not be completed.NotStartedException- If theCloudPoolis not started.
-
setServiceState
void setServiceState(java.lang.String machineId, ServiceState serviceState) throws NotFoundException, CloudPoolException, NotStartedExceptionSets the service state of a given machine pool member. Setting the service state does not have any functional implications on the pool member, but should be seen as way to supply operational information about the service running on the machine to third-party services (such as load balancers).- Parameters:
machineId- The id of the machine whose service state is to be updated.serviceState- TheServiceStateto assign to the machine.- Throws:
NotFoundException- If the specified machine is not a member of the pool.CloudPoolException- If the operation could not be completed.NotStartedException- If theCloudPoolis not started.
-
setMembershipStatus
void setMembershipStatus(java.lang.String machineId, MembershipStatus membershipStatus) throws NotFoundException, CloudPoolException, NotStartedExceptionSets the membership status of a given pool member. The membership status for a machine can be set to protect the machine from being terminated (by setting its evictability status) and/or to mark a machine as being in need of replacement by flagging it as an inactive pool member.- Parameters:
machineId- The id of the machine whose status is to be updated.membershipStatus- TheMembershipStatusto set.- Throws:
NotFoundExceptionCloudPoolExceptionNotStartedException- If theCloudPoolis not started.
-
attachMachine
void attachMachine(java.lang.String machineId) throws NotFoundException, CloudPoolException, NotStartedExceptionAttaches an already running machine instance to the pool, growing the pool with a new member. This operation implies that the desired size of the pool is incremented by one.- Parameters:
machineId- The identifier of the machine to attach to the pool.- Throws:
NotFoundException- If the specified machine does not exist.CloudPoolException- If the operation could not be completed.NotStartedException- If theCloudPoolis not started.
-
detachMachine
void detachMachine(java.lang.String machineId, boolean decrementDesiredSize) throws NotFoundException, NotEvictableException, CloudPoolException, NotStartedExceptionRemoves a member from the pool without terminating it. The machine keeps running but is no longer considered a pool member and, therefore, needs to be managed independently. The caller can control if a replacement machine is to be provisioned via thedecrementDesiredSizeparameter. Note: a machine that is protected from removal by a membership status withevictable: falsecan not be terminated.- Parameters:
machineId- The identifier of the machine to detach from the pool.decrementDesiredSize- If the desired pool size should be decremented (true) or left at its current size (false).- Throws:
NotFoundException- If the specified machine is not a member of the pool.NotEvictableException- If the specified machine has aMembershipStatusthat prevents it from being removed.CloudPoolException- If the operation could not be completed.NotStartedException- If theCloudPoolis not started.
-
-