From 9ff5d2a1abe98ead1409e9c66172f52ac5a07f5b Mon Sep 17 00:00:00 2001 From: Garet Halliday <me@garet.holiday> Date: Wed, 16 Aug 2023 19:14:35 -0500 Subject: [PATCH] session pool ok --- lib/bouncer/backends/v0/query.go | 5 +++++ lib/gat/pools/session/pool.go | 2 +- lib/middleware/middlewares/ps/sync.go | 2 +- pgbouncer.ini | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/bouncer/backends/v0/query.go b/lib/bouncer/backends/v0/query.go index 73afaeb8..7abcdc5f 100644 --- a/lib/bouncer/backends/v0/query.go +++ b/lib/bouncer/backends/v0/query.go @@ -1,6 +1,7 @@ package backends import ( + "pggat2/lib/util/strutil" "pggat2/lib/zap" packets "pggat2/lib/zap/packets/v3.0" ) @@ -127,6 +128,10 @@ func QueryString(ctx *Context, server zap.ReadWriter, query string) error { return Query(ctx, server, packet) } +func SetParameter(ctx *Context, server zap.ReadWriter, name strutil.CIString, value string) error { + return QueryString(ctx, server, `SET `+strutil.Escape(name.String(), `"`)+` = `+strutil.Escape(value, `'`)) +} + func FunctionCall(ctx *Context, server zap.ReadWriter, packet *zap.Packet) error { if err := server.Write(packet); err != nil { return err diff --git a/lib/gat/pools/session/pool.go b/lib/gat/pools/session/pool.go index 732247ca..ba1f32b6 100644 --- a/lib/gat/pools/session/pool.go +++ b/lib/gat/pools/session/pool.go @@ -133,7 +133,7 @@ func (T *Pool) Serve(ctx *gat.Context, client zap.ReadWriter, ps map[strutil.CIS packets.WriteParameterStatus(pkt, key.String(), value) pkts.Append(pkt) - if err := backends.QueryString(&backends.Context{}, conn.rw, `SET `+strutil.Escape(key.String(), `"`)+` = `+strutil.Escape(value, `'`)); err != nil { + if err := backends.SetParameter(&backends.Context{}, conn.rw, key, value); err != nil { connOk = false return true } diff --git a/lib/middleware/middlewares/ps/sync.go b/lib/middleware/middlewares/ps/sync.go index aa752f54..e4547aec 100644 --- a/lib/middleware/middlewares/ps/sync.go +++ b/lib/middleware/middlewares/ps/sync.go @@ -23,7 +23,7 @@ func sync(tracking []strutil.CIString, clientPackets *zap.Packets, c *Client, se } if slices.Contains(tracking, name) { - if err := backends.QueryString(&backends.Context{}, server, `SET `+strutil.Escape(name.String(), `"`)+` = `+strutil.Escape(value, `'`)); err != nil { + if err := backends.SetParameter(&backends.Context{}, server, name, value); err != nil { panic(err) // TODO(garet) } if s.parameters == nil { diff --git a/pgbouncer.ini b/pgbouncer.ini index 6dc48900..118c7214 100644 --- a/pgbouncer.ini +++ b/pgbouncer.ini @@ -1,5 +1,5 @@ [pgbouncer] -pool_mode = transaction +pool_mode = session auth_file = userlist.txt listen_addr = * -- GitLab