Hi all,

I'd like to restructure the org.apache.brooklyn.entity.machine.pool.ServerPool entity and associated location, in a way that is not backwards compatible. This entity is marked "@Beta". This is motivated by some changes in Clocker.

This will be quick to do - if there is agreement I'll do it within the next couple of days so we can get these changes in 0.9.0.

_*Background*_
The ServerPool creates a pre-allocated set of machines (managed as a DynamicCluster) that other applications can deploy to. It registers a "location type" that allows other apps to treat this as a target - the location's obtain() will claim a machine; the release() will return it to the pool.

Multiple locations can be created that are all backed by this same ServerPool.

The ServerPool makes use of the LocationOwner and DynamicLocation interfaces.


_*Comparing to Clocker's usage*_
Clocker also makes use of the LocationOwner and DynamicLocation. When a cluster of Docker hosts is provisioned, it automatically creates a "docker location" that can be targeted by other applications (and similarly for a single Docker host).

Importantly, Clocker creates that single location immediately. All applications share that location object.


_*ServerPool Limitations*_
The ServerPool's usage of LocationOwner is inconsistency: the ServerPool "owns" multiple locations, which is not modelled in the LocationOwner interface.

When a machine is released (making it reusable by the server pool), it is not cleaned up. e.g. if the previous app left software installed (or even running), then that will still be on the machine!

If you call serverPoolLocation.obtain(config) then the config is currently ignored. It just claims the next available machine from the ServerPool cluster.


_*Short-term Changes*_
Short-term, I'd like to change ServerPool so that it has *one* location. Any app that makes use of that location will be re-using the same location object. There are two reasons: 1. this is more consistent with LocationOwner, and with the usage in Clocker; 2. this is closer to what actually happens under-the-covers: it is sharing the same ServerPool, and not respecting different config for different locations.

I'd also like to change the DynamicLocation interface to make explicit its responsibilities for register/unregister - this will give it an opportunity to register the location so it can be used by other apps.


_*Longer term*_
Much longer term, we could have a new implementation of ServerPool that deals better with the cleanup. For example, instead of returning a direct reference to the machine, it could create a single Docker container with sshd running, and return that. On release, it would delete the docker container.

Reply via email to