diff --git a/lib/fed/conn.go b/lib/fed/conn.go index 90dbd6bc77647cc107189689eaa9bf22c4b9315a..599b4baf8d1e66b7ee1b13886699f6d9fe12e7a6 100644 --- a/lib/fed/conn.go +++ b/lib/fed/conn.go @@ -5,6 +5,8 @@ import ( "encoding/binary" "io" "net" + + "pggat2/lib/util/pools" ) type Conn interface { @@ -16,6 +18,8 @@ type Conn interface { Close() error } +var buffers = pools.Locked[net.Buffers]{} + const pktBufSize = 4096 type netConn struct { @@ -29,9 +33,12 @@ type netConn struct { } func WrapNetConn(conn net.Conn) Conn { + bufs, _ := buffers.Get() return &netConn{ conn: conn, w: conn, + + writeBuf: bufs, } } @@ -146,6 +153,10 @@ func (T *netConn) WritePacket(packet Packet) error { } func (T *netConn) Close() error { + if T.writeBuf != nil { + buffers.Put(T.writeBuf) + T.writeBuf = nil + } return T.conn.Close() } diff --git a/lib/gat/acceptor.go b/lib/gat/acceptor.go index 4a445c6caf2a0f3451190a33abdd5901fcc5f16c..87fdfe2aef4c02169dec77b2efe55fa337e77217 100644 --- a/lib/gat/acceptor.go +++ b/lib/gat/acceptor.go @@ -1,8 +1,12 @@ package gat import ( + "errors" + "io" "net" + "tuxpa.in/a/zlog/log" + "pggat2/lib/bouncer/frontends/v0" "pggat2/lib/fed" "pggat2/lib/util/beforeexit" @@ -61,6 +65,7 @@ func serve(client fed.Conn, acceptParams frontends.AcceptParams, pools Pools) er p := pools.Lookup(acceptParams.User, acceptParams.Database) if p == nil { + log.Printf("pool not found: user=%s database=%s", acceptParams.User, acceptParams.Database) return nil } @@ -81,12 +86,17 @@ func Serve(acceptor Acceptor, pools Pools) error { for { conn, acceptParams, err := acceptor.Accept() if err != nil { - // log.Println("error accepting", err) + if errors.Is(err, net.ErrClosed) { + return nil + } + log.Print("error accepting client: ", err) continue } go func() { - _ = serve(conn, acceptParams, pools) - // log.Println("error serving", err) + err := serve(conn, acceptParams, pools) + if err != nil && !errors.Is(err, io.EOF) { + log.Print("error serving client: ", err) + } }() } }