good morning!!!!

Skip to content
Snippets Groups Projects
Commit c2002f32 authored by Garet Halliday's avatar Garet Halliday
Browse files

nice

parent 60c108b1
No related branches found
No related tags found
No related merge requests found
...@@ -159,15 +159,16 @@ func (T *Pools) Lookup(user, database string) *pool.Pool { ...@@ -159,15 +159,16 @@ func (T *Pools) Lookup(user, database string) *pool.Pool {
switch poolMode { switch poolMode {
case PoolModeSession: case PoolModeSession:
p = session.NewPool(poolOptions) poolOptions = session.Apply(poolOptions)
case PoolModeTransaction: case PoolModeTransaction:
if T.Config.PgBouncer.ServerResetQueryAlways == 0 { if T.Config.PgBouncer.ServerResetQueryAlways == 0 {
poolOptions.ServerResetQuery = "" poolOptions.ServerResetQuery = ""
} }
p = transaction.NewPool(poolOptions) poolOptions = transaction.Apply(poolOptions)
default: default:
return nil return nil
} }
p = pool.NewPool(poolOptions)
T.pools.Store(poolKey{ T.pools.Store(poolKey{
User: user, User: user,
......
...@@ -138,16 +138,16 @@ func (T *Server) addPool(name string, userCreds, serverCreds auth.Credentials, d ...@@ -138,16 +138,16 @@ func (T *Server) addPool(name string, userCreds, serverCreds auth.Credentials, d
poolOptions := pool.Options{ poolOptions := pool.Options{
Credentials: userCreds, Credentials: userCreds,
} }
var p *pool.Pool
switch T.opConfig.Mode { switch T.opConfig.Mode {
case "transaction": case "transaction":
p = transaction.NewPool(poolOptions) poolOptions = transaction.Apply(poolOptions)
case "session": case "session":
p = session.NewPool(poolOptions) poolOptions = session.Apply(poolOptions)
default: default:
log.Printf(`unknown pool mode "%s"`, T.opConfig.Mode) log.Printf(`unknown pool mode "%s"`, T.opConfig.Mode)
return return
} }
p := pool.NewPool(poolOptions)
recipeOptions := recipe.Options{ recipeOptions := recipe.Options{
Dialer: d, Dialer: d,
......
package pool package pool
import ( import (
"log"
"sync" "sync"
"time" "time"
...@@ -157,6 +158,7 @@ func (T *Pool) scaleUp() { ...@@ -157,6 +158,7 @@ func (T *Pool) scaleUp() {
func (T *Pool) scaleUpL1(name string, r *recipe.Recipe) { func (T *Pool) scaleUpL1(name string, r *recipe.Recipe) {
conn, params, err := r.Dial() conn, params, err := r.Dial()
if err != nil { if err != nil {
log.Print("failed to dial server: ", err)
// failed to dial // failed to dial
r.Free() r.Free()
return return
......
...@@ -4,9 +4,9 @@ import ( ...@@ -4,9 +4,9 @@ import (
"pggat/lib/gat/pool" "pggat/lib/gat/pool"
) )
func NewPool(options pool.Options) *pool.Pool { func Apply(options pool.Options) pool.Options {
options.Pooler = new(Pooler) options.Pooler = new(Pooler)
options.ParameterStatusSync = pool.ParameterStatusSyncInitial options.ParameterStatusSync = pool.ParameterStatusSyncInitial
options.ExtendedQuerySync = false options.ExtendedQuerySync = false
return pool.NewPool(options) return options
} }
...@@ -2,9 +2,9 @@ package transaction ...@@ -2,9 +2,9 @@ package transaction
import "pggat/lib/gat/pool" import "pggat/lib/gat/pool"
func NewPool(options pool.Options) *pool.Pool { func Apply(options pool.Options) pool.Options {
options.Pooler = new(Pooler) options.Pooler = new(Pooler)
options.ParameterStatusSync = pool.ParameterStatusSyncDynamic options.ParameterStatusSync = pool.ParameterStatusSyncDynamic
options.ExtendedQuerySync = true options.ExtendedQuerySync = true
return pool.NewPool(options) return options
} }
package test package test
import ( import (
"pggat/lib/gat/pool"
"pggat/lib/gat/pool/dialer" "pggat/lib/gat/pool/dialer"
) )
type Config struct { type Config struct {
Modes map[string]pool.Options
Peer dialer.Dialer Peer dialer.Dialer
} }
package test
import (
"errors"
"io"
"tuxpa.in/a/zlog/log"
"pggat/lib/fed"
packets "pggat/lib/fed/packets/v3.0"
"pggat/lib/gat/pool"
"pggat/lib/gat/pool/recipe"
"pggat/lib/gsql"
"pggat/lib/util/maps"
"pggat/test/inst"
)
type Runner struct {
config Config
test Test
pools map[string]*pool.Pool
}
func MakeRunner(config Config, test Test) Runner {
return Runner{
config: config,
test: test,
}
}
func (T *Runner) setup() error {
// get pools ready
maps.Clear(T.pools)
if T.pools == nil {
T.pools = make(map[string]*pool.Pool)
}
for name, options := range T.config.Modes {
p := pool.NewPool(options)
p.AddRecipe("server", recipe.NewRecipe(
recipe.Options{
Dialer: T.config.Peer,
},
))
T.pools[name] = p
}
return nil
}
type logWriter struct{}
func (logWriter) WritePacket(pkt fed.Packet) error {
log.Print("got packet ", pkt)
return nil
}
func (T *Runner) run(pkts ...fed.Packet) error {
for name, p := range T.pools {
var client gsql.Client
client.Do(logWriter{}, pkts...)
if err := client.Close(); err != nil {
return err
}
if err := p.Serve(&client, nil, [8]byte{}); err != nil && !errors.Is(err, io.EOF) {
return err
}
_ = name
}
return nil
}
func (T *Runner) Run() error {
if err := T.setup(); err != nil {
return err
}
for _, i := range T.test.Instructions {
switch v := i.(type) {
case inst.SimpleQuery:
q := packets.Query(v)
if err := T.run(q.IntoPacket()); err != nil {
return err
}
}
}
return nil
}
package test package test
import (
"tuxpa.in/a/zlog/log"
"pggat/test/inst"
)
type Tester struct { type Tester struct {
config Config config Config
} }
...@@ -16,19 +10,10 @@ func NewTester(config Config) *Tester { ...@@ -16,19 +10,10 @@ func NewTester(config Config) *Tester {
} }
} }
func (T *Tester) run(test Test) error {
for _, v := range test.Instructions {
switch i := v.(type) {
case inst.SimpleQuery:
log.Println("run", i)
}
}
return nil // TODO(garet)
}
func (T *Tester) Run(tests ...Test) error { func (T *Tester) Run(tests ...Test) error {
for _, test := range tests { for _, test := range tests {
if err := T.run(test); err != nil { runner := MakeRunner(T.config, test)
if err := runner.Run(); err != nil {
return err return err
} }
} }
......
...@@ -5,13 +5,22 @@ import ( ...@@ -5,13 +5,22 @@ import (
"pggat/lib/auth/credentials" "pggat/lib/auth/credentials"
"pggat/lib/bouncer/backends/v0" "pggat/lib/bouncer/backends/v0"
"pggat/lib/gat/pool"
"pggat/lib/gat/pool/dialer" "pggat/lib/gat/pool/dialer"
"pggat/lib/gat/pool/pools/session"
"pggat/lib/gat/pool/pools/transaction"
"pggat/test" "pggat/test"
"pggat/test/tests" "pggat/test/tests"
) )
func TestTester(t *testing.T) { func TestTester(t *testing.T) {
tester := test.NewTester(test.Config{ tester := test.NewTester(test.Config{
Modes: map[string]pool.Options{
"transaction": transaction.Apply(pool.Options{}),
"session": session.Apply(pool.Options{
ServerResetQuery: "discard all",
}),
},
Peer: dialer.Net{ Peer: dialer.Net{
Network: "tcp", Network: "tcp",
Address: "localhost:5432", Address: "localhost:5432",
...@@ -20,7 +29,7 @@ func TestTester(t *testing.T) { ...@@ -20,7 +29,7 @@ func TestTester(t *testing.T) {
Username: "postgres", Username: "postgres",
Password: "password", Password: "password",
}, },
Database: "pggat", Database: "postgres",
}, },
}, },
}) })
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment