From 2bbea56e558db100eaf52b069cc40628450d884a Mon Sep 17 00:00:00 2001 From: Garet Halliday <me@garet.holiday> Date: Tue, 27 Dec 2022 12:45:23 -0600 Subject: [PATCH] hm --- lib/gat/admin/admin.go | 28 +++++++++------ lib/gat/pool/transaction/shard/conn.go | 48 ++++++++++++------------- lib/gat/pool/transaction/shard/shard.go | 16 ++++----- scripts/ddos/ddos.go | 2 +- test/docker-compose.yml | 2 +- 5 files changed, 52 insertions(+), 44 deletions(-) diff --git a/lib/gat/admin/admin.go b/lib/gat/admin/admin.go index 3c72400a..0dc63ca4 100644 --- a/lib/gat/admin/admin.go +++ b/lib/gat/admin/admin.go @@ -98,7 +98,11 @@ func New(g gat.Gat) *Database { Header: gatutil.TableHeader{ Columns: []gatutil.TableHeaderColumn{ { - Name: "Table name", + Name: "Database", + Type: gatutil.Text{}, + }, + { + Name: "User", Type: gatutil.Text{}, }, { @@ -119,17 +123,21 @@ func New(g gat.Gat) *Database { }, }, }, - Rows: []gatutil.TableRow{ - { + } + for dbname, db := range g.GetDatabases() { + for _, pool := range db.GetPools() { + uname := pool.GetUser().Name + table.Rows = append(table.Rows, gatutil.TableRow{ Columns: []any{ - "Test", - float64(1.0), - float64(2.0), - float64(3.0), - int64(123), + dbname, + uname, + float64(0), + float64(0), + float64(0), + int64(0), }, - }, - }, + }) + } } return table.Send(c) }) diff --git a/lib/gat/pool/transaction/shard/conn.go b/lib/gat/pool/transaction/shard/conn.go index c7d25f4c..5262affe 100644 --- a/lib/gat/pool/transaction/shard/conn.go +++ b/lib/gat/pool/transaction/shard/conn.go @@ -10,98 +10,98 @@ import ( "time" ) -type conn struct { +type Conn struct { conn gat.Connection conf *config.Server replicaId int s *Shard } -func (s *conn) GetServerInfo() []*protocol.ParameterStatus { +func (s *Conn) GetServerInfo() []*protocol.ParameterStatus { return s.conn.GetServerInfo() } -func (s *conn) GetDatabase() string { +func (s *Conn) GetDatabase() string { return s.conn.GetDatabase() } -func (s *conn) GetState() gat.ConnectionState { +func (s *Conn) GetState() gat.ConnectionState { return s.conn.GetState() } -func (s *conn) GetHost() string { +func (s *Conn) GetHost() string { return s.conn.GetHost() } -func (s *conn) GetPort() int { +func (s *Conn) GetPort() int { return s.conn.GetPort() } -func (s *conn) GetAddress() net.Addr { +func (s *Conn) GetAddress() net.Addr { return s.conn.GetAddress() } -func (s *conn) GetLocalAddress() net.Addr { +func (s *Conn) GetLocalAddress() net.Addr { return s.conn.GetLocalAddress() } -func (s *conn) GetConnectTime() time.Time { +func (s *Conn) GetConnectTime() time.Time { return s.conn.GetConnectTime() } -func (s *conn) GetRequestTime() time.Time { +func (s *Conn) GetRequestTime() time.Time { return s.conn.GetRequestTime() } -func (s *conn) GetClient() gat.Client { +func (s *Conn) GetClient() gat.Client { return s.conn.GetClient() } -func (s *conn) SetClient(client gat.Client) { +func (s *Conn) SetClient(client gat.Client) { s.conn.SetClient(client) } -func (s *conn) GetRemotePid() int { +func (s *Conn) GetRemotePid() int { return s.conn.GetRemotePid() } -func (s *conn) GetTLS() string { +func (s *Conn) GetTLS() string { return s.conn.GetTLS() } -func (s *conn) IsCloseNeeded() bool { +func (s *Conn) IsCloseNeeded() bool { return s.conn.IsCloseNeeded() } -func (s *conn) Close() error { +func (s *Conn) Close() error { return s.conn.Close() } -func (s *conn) Describe(ctx context.Context, client gat.Client, payload *protocol.Describe) error { +func (s *Conn) Describe(ctx context.Context, client gat.Client, payload *protocol.Describe) error { return s.conn.Describe(ctx, client, payload) } -func (s *conn) Execute(ctx context.Context, client gat.Client, payload *protocol.Execute) error { +func (s *Conn) Execute(ctx context.Context, client gat.Client, payload *protocol.Execute) error { return s.conn.Execute(ctx, client, payload) } -func (s *conn) CallFunction(ctx context.Context, client gat.Client, payload *protocol.FunctionCall) error { +func (s *Conn) CallFunction(ctx context.Context, client gat.Client, payload *protocol.FunctionCall) error { return s.conn.CallFunction(ctx, client, payload) } -func (s *conn) SimpleQuery(ctx context.Context, client gat.Client, payload string) error { +func (s *Conn) SimpleQuery(ctx context.Context, client gat.Client, payload string) error { return s.conn.SimpleQuery(ctx, client, payload) } -func (s *conn) Transaction(ctx context.Context, client gat.Client, payload string) error { +func (s *Conn) Transaction(ctx context.Context, client gat.Client, payload string) error { return s.conn.Transaction(ctx, client, payload) } -func (s *conn) Cancel() error { +func (s *Conn) Cancel() error { return s.conn.Cancel() } -func (s *conn) connect() { +func (s *Conn) connect() { if s.s == nil || s.conf == nil { return } @@ -116,7 +116,7 @@ func (s *conn) connect() { return } -func (s *conn) acquire() *conn { +func (s *Conn) acquire() *Conn { if s.conn == nil || s.conn.IsCloseNeeded() { s.connect() } diff --git a/lib/gat/pool/transaction/shard/shard.go b/lib/gat/pool/transaction/shard/shard.go index 5c887911..aedb5157 100644 --- a/lib/gat/pool/transaction/shard/shard.go +++ b/lib/gat/pool/transaction/shard/shard.go @@ -11,8 +11,8 @@ import ( ) type Shard struct { - primary Pool[*conn] - replicas []Pool[*conn] + primary Pool[*Conn] + replicas []Pool[*Conn] pool *config.Pool user *config.User @@ -43,8 +43,8 @@ func FromConfig(dialer gat.Dialer, options []protocol.FieldsStartupMessageParame return out } -func (s *Shard) newConn(conf *config.Server, replicaId int) *conn { - return &conn{ +func (s *Shard) newConn(conf *config.Server, replicaId int) *Conn { + return &Conn{ conf: conf, replicaId: replicaId, s: s, @@ -56,7 +56,7 @@ func (s *Shard) init() { defer s.mu.Unlock() poolSize := s.user.PoolSize for _, serv := range s.conf.Servers { - pool := NewChannelPool[*conn](poolSize) + pool := NewChannelPool[*Conn](poolSize) for i := 0; i < poolSize; i++ { pool.Put(s.newConn(serv, len(s.replicas))) } @@ -69,7 +69,7 @@ func (s *Shard) init() { } } -func (s *Shard) tryAcquireAvailableReplica() *conn { +func (s *Shard) tryAcquireAvailableReplica() *Conn { // try to get any available conn for _, replica := range s.replicas { c, ok := replica.TryGet() @@ -81,7 +81,7 @@ func (s *Shard) tryAcquireAvailableReplica() *conn { return nil } -func (s *Shard) Choose(role config.ServerRole) *conn { +func (s *Shard) Choose(role config.ServerRole) *Conn { s.mu.RLock() defer s.mu.RUnlock() start := time.Now() @@ -121,7 +121,7 @@ func (s *Shard) Choose(role config.ServerRole) *conn { } } -func (s *Shard) Return(conn *conn) { +func (s *Shard) Return(conn *Conn) { s.mu.RLock() defer s.mu.RUnlock() switch conn.conf.Role { diff --git a/scripts/ddos/ddos.go b/scripts/ddos/ddos.go index ba0f6e6b..6facf4d4 100644 --- a/scripts/ddos/ddos.go +++ b/scripts/ddos/ddos.go @@ -27,7 +27,7 @@ const PostgresHost = "postgres://dev_rw:pGf63Aq0M5ck@pggat-dev.gfx.town:6432/pre const ThreadCount = 1000 // TestTime how long to run the test. Set to 0 to run forever -const TestTime = 30 * time.Second +const TestTime = 0 * time.Second type col struct { V int `json:"v"` diff --git a/test/docker-compose.yml b/test/docker-compose.yml index 2d6583db..0567735f 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -30,7 +30,7 @@ services: image: prest/prest restart: always environment: - PREST_PG_URL: postgres://postgres:example@db:5432/prest + PREST_PG_URL: postgres://postgres:example@pggat:6432/prest PREST_DEBUG: true PREST_SSL_MODE: disable ports: -- GitLab