Delete generic pools when their environment is deleted

This commit is contained in:
Soam Vasani
2017-01-11 13:35:28 -08:00
parent 6af56753ea
commit 5460f8ac05
2 changed files with 82 additions and 30 deletions
+22 -8
View File
@@ -47,7 +47,7 @@ type (
request struct {
requestType
env *fission.Environment
currentEnvs []fission.Environment
envList []fission.Environment
responseChannel chan *response
}
response struct {
@@ -100,27 +100,43 @@ func (gpm *GenericPoolManager) service() {
req.responseChannel <- &response{pool: pool}
case CLEANUP_POOLS:
uids := make(map[string]bool)
for _, env := range req.currentEnvs {
for _, env := range req.envList {
uids[env.Metadata.Uid] = true
}
for env, pool := range gpm.pools {
_, ok := uids[env.Metadata.Uid]
if !ok {
// Env no longer exists -- remove from gpm.pools
// map and delete the pool
// Env no longer exists -- remove our cache
log.Printf("Destroying generic pool for environment [%v]", env)
delete(gpm.pools, env)
// and delete the pool asynchronously.
go pool.destroy()
}
}
// no response, caller doesn't wait
}
}
}
func (gpm *GenericPoolManager) GetPool(env *fission.Environment) (*GenericPool, error) {
c := make(chan *response)
gpm.requestChannel <- &request{env: env, responseChannel: c}
gpm.requestChannel <- &request{
requestType: GET_POOL,
env: env,
responseChannel: c,
}
resp := <-c
return resp.pool, resp.error
}
func (gpm *GenericPoolManager) CleanupPools(envs []fission.Environment) {
gpm.requestChannel <- &request{
requestType: CLEANUP_POOLS,
envList: envs,
}
}
func (gpm *GenericPoolManager) eagerPoolCreator() {
failureCount := 0
maxFailures := 5
@@ -137,13 +153,11 @@ func (gpm *GenericPoolManager) eagerPoolCreator() {
}
}
envUids := make(map[string]bool)
// Create pools for all envs. TODO: we should make this a bit less eager, only
// creating pools for envs that are actually used by functions. Also we might want
// to keep these eagerly created pools smaller than the ones created when there are
// actual function calls.
for _, env := range envs {
envUids[env.Metadata.Uid] = true
_, err := gpm.GetPool(&env)
if err != nil {
log.Printf("eager-create pool failed: %v", err)
@@ -151,6 +165,6 @@ func (gpm *GenericPoolManager) eagerPoolCreator() {
}
// Clean up pools whose env was deleted
gpm.CleanupPools(envs)
}
}