diff --git a/lib/gat/handlers/pool/spool/kitchen/chef.go b/lib/gat/handlers/pool/spool/kitchen/chef.go index 60c70acad6a4bc746d1fa4b808144cb88c3b40fa..c2b7b0cb4ef533d8a29e7a37be341706167981d5 100644 --- a/lib/gat/handlers/pool/spool/kitchen/chef.go +++ b/lib/gat/handlers/pool/spool/kitchen/chef.go @@ -88,7 +88,10 @@ func (T *Chef) forget(name string) []*fed.Conn { for conn := range r.conns { conns = append(conns, conn) _ = conn.Close() + r.recipe.Free() + delete(T.byConn, conn) + delete(r.conns, conn) } T.order = slices.Remove(T.order, r) @@ -263,6 +266,7 @@ func (T *Chef) Cook() (*fed.Conn, error) { } } + T.config.Logger.Warn("no available recipes to scale up pool") return nil, ErrNoRecipes } diff --git a/lib/gat/handlers/pool/spool/pool.go b/lib/gat/handlers/pool/spool/pool.go index 3c6569c4fb085aa9ca8e3860d4689006bd402097..fe210a68cc3e86fb97acc96a8f8bc0c1f5778e89 100644 --- a/lib/gat/handlers/pool/spool/pool.go +++ b/lib/gat/handlers/pool/spool/pool.go @@ -161,12 +161,15 @@ func (T *Pool) ScaleDown(now time.Time) time.Duration { delete(T.serversByID, s.ID) delete(T.serversByConn, s.Conn) } - } else if idle > m { - m = idle + } else { + util := T.config.IdleTimeout - idle + if idle < m { + m = util + } } } - return T.config.IdleTimeout - m + return m } func (T *Pool) ScaleLoop() {