diff --git a/lib/gat/handlers/pool/pools/hybrid/pool.go b/lib/gat/handlers/pool/pools/hybrid/pool.go index 705a48f286a1b17bcbeaf612ff36088a86cd8b03..6bf3aaf1eb2dbc3df533a6c51e38fa4af9bf98f0 100644 --- a/lib/gat/handlers/pool/pools/hybrid/pool.go +++ b/lib/gat/handlers/pool/pools/hybrid/pool.go @@ -310,6 +310,13 @@ func (T *Pool) serveRW(conn *fed.Conn) error { } func (T *Pool) serveOnly(conn *fed.Conn, write bool) error { + var sp *spool.Pool + if write { + sp = &T.primary + } else { + sp = &T.replica + } + conn.Middleware = append( conn.Middleware, unterminate.Unterminate, @@ -322,13 +329,8 @@ func (T *Pool) serveOnly(conn *fed.Conn, write bool) error { T.addClient(client) defer T.removeClient(client) - if write { - T.primary.AddClient(client.ID) - defer T.primary.RemoveClient(client.ID) - } else { - T.replica.AddClient(client.ID) - defer T.replica.RemoveClient(client.ID) - } + sp.AddClient(client.ID) + defer sp.RemoveClient(client.ID) var err, serverErr error @@ -336,17 +338,9 @@ func (T *Pool) serveOnly(conn *fed.Conn, write bool) error { defer func() { if server != nil { if serverErr != nil { - if write { - T.primary.RemoveServer(server) - } else { - T.replica.RemoveServer(server) - } + sp.RemoveServer(server) } else { - if write { - T.primary.Release(server) - } else { - T.replica.Release(server) - } + sp.Release(server) } server = nil } @@ -355,11 +349,7 @@ func (T *Pool) serveOnly(conn *fed.Conn, write bool) error { if !conn.Ready { client.SetState(metrics.ConnStateAwaitingServer, nil, true) - if write { - server = T.primary.Acquire(client.ID) - } else { - server = T.replica.Acquire(client.ID) - } + server = sp.Acquire(client.ID) if server == nil { return pool.ErrFailedToAcquirePeer } @@ -382,11 +372,7 @@ func (T *Pool) serveOnly(conn *fed.Conn, write bool) error { for { if server != nil { - if write { - T.primary.Release(server) - } else { - T.replica.Release(server) - } + sp.Release(server) server = nil } client.SetState(metrics.ConnStateIdle, nil, true) @@ -399,11 +385,7 @@ func (T *Pool) serveOnly(conn *fed.Conn, write bool) error { client.SetState(metrics.ConnStateAwaitingServer, nil, true) - if write { - server = T.primary.Acquire(client.ID) - } else { - server = T.replica.Acquire(client.ID) - } + server = sp.Acquire(client.ID) if server == nil { return pool.ErrFailedToAcquirePeer } diff --git a/lib/gat/handlers/pool/spool/pool.go b/lib/gat/handlers/pool/spool/pool.go index 9783f050af53412cd0806b2d487f82429bb6befc..7589ae16ea073585b4a480993c909d517d9d82f6 100644 --- a/lib/gat/handlers/pool/spool/pool.go +++ b/lib/gat/handlers/pool/spool/pool.go @@ -89,6 +89,7 @@ func (T *Pool) removeServer(conn *fed.Conn) { } delete(T.serversByConn, conn) delete(T.serversByID, server.ID) + T.pooler.DeleteServer(server.ID) } func (T *Pool) AddRecipe(name string, recipe *pool.Recipe) { @@ -160,6 +161,7 @@ func (T *Pool) ScaleDown(now time.Time) time.Duration { if T.chef.Ignite(s.Conn) { delete(T.serversByID, s.ID) delete(T.serversByConn, s.Conn) + T.pooler.DeleteServer(s.ID) } } else { until := T.config.IdleTimeout - idle @@ -291,12 +293,14 @@ func (T *Pool) Release(server *Server) { func (T *Pool) RemoveServer(server *Server) { T.chef.Burn(server.Conn) + T.pooler.DeleteServer(server.ID) T.mu.Lock() defer T.mu.Unlock() delete(T.serversByID, server.ID) delete(T.serversByConn, server.Conn) + T.pooler.DeleteServer(server.ID) } func (T *Pool) Cancel(server *Server) {