diff --git a/codegen/protocol/packets.tmpl b/codegen/protocol/packets.tmpl index 5474639f57eb4cdfe9172c383d643a04893e2e09..bc71d8e7b301d7cfc1cb6fddb0c4806a9eececad 100644 --- a/codegen/protocol/packets.tmpl +++ b/codegen/protocol/packets.tmpl @@ -3,6 +3,7 @@ package protocol import ( "bytes" "io" + "gfx.cafe/util/go/bufpool" ) // codegen: modify for debug only @@ -202,9 +203,9 @@ var _ io.Reader } func (T *{{$name}}) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return diff --git a/go.mod b/go.mod index 979aff3f518c7c096051e2ae6cb90ee01500e04f..7e96ddf8611db4900c970c11705389900cedd2aa 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module gfx.cafe/gfx/pggat go 1.19 require ( + gfx.cafe/util/go/bufpool v0.0.0-20220906091724-3a24b7f40ccf git.tuxpa.in/a/zlog v1.32.0 github.com/BurntSushi/toml v1.2.0 github.com/auxten/postgresql-parser v1.0.1 diff --git a/go.sum b/go.sum index 0838b82a9a5d2b0b835046bb5d5855703b7966e7..f5afeaa3ba04be4b69fae5329a1531108175ce9b 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +gfx.cafe/util/go/bufpool v0.0.0-20220906091724-3a24b7f40ccf h1:ya4IK1D+Kq0DrFdrrZ7tjmp3BgoO4v5sCAeUytR6j1U= +gfx.cafe/util/go/bufpool v0.0.0-20220906091724-3a24b7f40ccf/go.mod h1:+DiyiCOBGS9O9Ce4ewHQO3Y59h66WSWAbgZZ2O2AYYw= git.tuxpa.in/a/zlog v1.32.0 h1:KKXbRF1x8kJDSzUoGz/pivo+4TVY6xT5sVtdFZ6traY= git.tuxpa.in/a/zlog v1.32.0/go.mod h1:vUa2Qhu6DLPLqmfRy99FiPqaY2eb6/KQjtMekW3UNnA= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= diff --git a/lib/gat/client.go b/lib/gat/client.go index 65862339917cf5e0ad1d4610b01dae8e9dd3a5ff..60ed907015f5d202310ec0a8ffeadd1f3a3f5e98 100644 --- a/lib/gat/client.go +++ b/lib/gat/client.go @@ -256,7 +256,7 @@ func (c *Client) Accept(ctx context.Context) error { } c.log.Debug().Msg("Password authentication successful") authOk := new(protocol.Authentication) - authOk.Fields.Data = []byte{0, 0, 0, 0} + authOk.Fields.Code = 0 _, err = authOk.Write(c.wr) if err != nil { return err diff --git a/lib/gat/messages.go b/lib/gat/messages.go index 37d6a0931cda18cb340ce5d22e1c6e52011580ae..860d3d5106561f7f11e03aba342667878cca6693 100644 --- a/lib/gat/messages.go +++ b/lib/gat/messages.go @@ -21,7 +21,8 @@ func CreateMd5Challenge() (*protocol.Authentication, [4]byte, error) { } pkt := new(protocol.Authentication) - pkt.Fields.Data = append([]byte{0, 0, 0, 5}, salt[:]...) + pkt.Fields.Code = 5 + pkt.Fields.Salt = salt[:] return pkt, salt, nil } diff --git a/lib/gat/protocol/backend.go b/lib/gat/protocol/backend.go index 28e160994edbe44356af6b0fc8ae4cbe3a568710..ca40843ccb3e94978b562c3efe33160082fc931e 100644 --- a/lib/gat/protocol/backend.go +++ b/lib/gat/protocol/backend.go @@ -2,6 +2,7 @@ package protocol import ( "bytes" + "gfx.cafe/util/go/bufpool" "io" ) @@ -139,9 +140,9 @@ func (T *Authentication) Read(reader io.Reader) (err error) { } func (T *Authentication) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -212,9 +213,9 @@ func (T *BackendKeyData) Read(reader io.Reader) (err error) { } func (T *BackendKeyData) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -265,9 +266,9 @@ func (T *BindComplete) Read(reader io.Reader) (err error) { } func (T *BindComplete) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -318,9 +319,9 @@ func (T *CloseComplete) Read(reader io.Reader) (err error) { } func (T *CloseComplete) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -381,9 +382,9 @@ func (T *CommandComplete) Read(reader io.Reader) (err error) { } func (T *CommandComplete) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -472,9 +473,9 @@ func (T *CopyBothResponse) Read(reader io.Reader) (err error) { } func (T *CopyBothResponse) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -563,9 +564,9 @@ func (T *CopyInResponse) Read(reader io.Reader) (err error) { } func (T *CopyInResponse) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -654,9 +655,9 @@ func (T *CopyOutResponse) Read(reader io.Reader) (err error) { } func (T *CopyOutResponse) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -776,9 +777,9 @@ func (T *DataRow) Read(reader io.Reader) (err error) { } func (T *DataRow) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -829,9 +830,9 @@ func (T *EmptyQueryResponse) Read(reader io.Reader) (err error) { } func (T *EmptyQueryResponse) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -937,9 +938,9 @@ func (T *ErrorResponse) Read(reader io.Reader) (err error) { } func (T *ErrorResponse) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -1018,9 +1019,9 @@ func (T *FunctionCallResponse) Read(reader io.Reader) (err error) { } func (T *FunctionCallResponse) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -1109,9 +1110,9 @@ func (T *NegotiateProtocolVersion) Read(reader io.Reader) (err error) { } func (T *NegotiateProtocolVersion) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -1162,9 +1163,9 @@ func (T *NoData) Read(reader io.Reader) (err error) { } func (T *NoData) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -1270,9 +1271,9 @@ func (T *NoticeResponse) Read(reader io.Reader) (err error) { } func (T *NoticeResponse) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -1353,9 +1354,9 @@ func (T *NotificationResponse) Read(reader io.Reader) (err error) { } func (T *NotificationResponse) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -1434,9 +1435,9 @@ func (T *ParameterDescription) Read(reader io.Reader) (err error) { } func (T *ParameterDescription) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -1507,9 +1508,9 @@ func (T *ParameterStatus) Read(reader io.Reader) (err error) { } func (T *ParameterStatus) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -1560,9 +1561,9 @@ func (T *ParseComplete) Read(reader io.Reader) (err error) { } func (T *ParseComplete) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -1613,9 +1614,9 @@ func (T *PortalSuspended) Read(reader io.Reader) (err error) { } func (T *PortalSuspended) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -1676,9 +1677,9 @@ func (T *ReadyForQuery) Read(reader io.Reader) (err error) { } func (T *ReadyForQuery) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -1840,9 +1841,9 @@ func (T *RowDescription) Read(reader io.Reader) (err error) { } func (T *RowDescription) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return diff --git a/lib/gat/protocol/frontend.go b/lib/gat/protocol/frontend.go index b5344bdc68e1947a6797d8dfe8f411e07e614639..cfd28bf20ef9622c5c4bbe3d878cb95e488dba1b 100644 --- a/lib/gat/protocol/frontend.go +++ b/lib/gat/protocol/frontend.go @@ -2,6 +2,7 @@ package protocol import ( "bytes" + "gfx.cafe/util/go/bufpool" "io" ) @@ -55,9 +56,9 @@ func (T *AuthenticationResponse) Read(reader io.Reader) (err error) { } func (T *AuthenticationResponse) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -253,9 +254,9 @@ func (T *Bind) Read(reader io.Reader) (err error) { } func (T *Bind) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -335,9 +336,9 @@ func (T *CancelRequest) Read(reader io.Reader) (err error) { } func (T *CancelRequest) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -403,9 +404,9 @@ func (T *Close) Read(reader io.Reader) (err error) { } func (T *Close) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -466,9 +467,9 @@ func (T *CopyFail) Read(reader io.Reader) (err error) { } func (T *CopyFail) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -539,9 +540,9 @@ func (T *Describe) Read(reader io.Reader) (err error) { } func (T *Describe) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -612,9 +613,9 @@ func (T *Execute) Read(reader io.Reader) (err error) { } func (T *Execute) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -665,9 +666,9 @@ func (T *Flush) Read(reader io.Reader) (err error) { } func (T *Flush) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -835,9 +836,9 @@ func (T *FunctionCall) Read(reader io.Reader) (err error) { } func (T *FunctionCall) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -897,9 +898,9 @@ func (T *GSSENCRequest) Read(reader io.Reader) (err error) { } func (T *GSSENCRequest) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -993,9 +994,9 @@ func (T *Parse) Read(reader io.Reader) (err error) { } func (T *Parse) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -1056,9 +1057,9 @@ func (T *Query) Read(reader io.Reader) (err error) { } func (T *Query) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -1118,9 +1119,9 @@ func (T *SSLRequest) Read(reader io.Reader) (err error) { } func (T *SSLRequest) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -1262,9 +1263,9 @@ func (T *StartupMessage) Read(reader io.Reader) (err error) { } func (T *StartupMessage) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -1310,9 +1311,9 @@ func (T *Sync) Read(reader io.Reader) (err error) { } func (T *Sync) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -1363,9 +1364,9 @@ func (T *Terminate) Read(reader io.Reader) (err error) { } func (T *Terminate) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return diff --git a/lib/gat/protocol/shared.go b/lib/gat/protocol/shared.go index 567fe6b5ad16dc5b325e4de46fe6d36e90463e2a..3b7823ff89ee5cda54b7a7c76206ff1578dd415e 100644 --- a/lib/gat/protocol/shared.go +++ b/lib/gat/protocol/shared.go @@ -2,6 +2,7 @@ package protocol import ( "bytes" + "gfx.cafe/util/go/bufpool" "io" ) @@ -55,9 +56,9 @@ func (T *CopyData) Read(reader io.Reader) (err error) { } func (T *CopyData) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return @@ -108,9 +109,9 @@ func (T *CopyDone) Read(reader io.Reader) (err error) { } func (T *CopyDone) Write(writer io.Writer) (length int, err error) { - // TODO replace with pool - var buf bytes.Buffer - length, err = T.Fields.Write(&buf) + buf := bufpool.Get(0) + defer bufpool.Put(buf) + length, err = T.Fields.Write(buf) if err != nil { length = 0 return diff --git a/lib/gat/server.go b/lib/gat/server.go index bfeb9fae7e8eb1ed988606729dc30cebb8429df7..49c97227424d1189da78a2b5c48619dfcd588054 100644 --- a/lib/gat/server.go +++ b/lib/gat/server.go @@ -62,7 +62,7 @@ func DialServer(ctx context.Context, addr string, user *config.User, db string, s.remote = s.conn.RemoteAddr() s.r = bufio.NewReader(s.conn) s.wr = s.conn - s.server_info = []byte{} + s.server_info = []*protocol.ParameterStatus{} s.user = *user s.db = db @@ -76,7 +76,6 @@ func DialServer(ctx context.Context, addr string, user *config.User, db string, func (s *Server) startup(ctx context.Context) error { s.log.Debug().Msg("sending startup") - //TODO: grow / bufpool start := new(protocol.StartupMessage) start.Fields.ProtocolVersionNumber = 196608 start.Fields.Parameters = []protocol.FieldsStartupMessageParameters{