Created
March 28, 2019 20:24
-
-
Save lawrencejones/1079b115ea50621644b81520e2268019 to your computer and use it in GitHub Desktop.
Script to verify no data loss with a HA PG cluster
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"context" | |
"fmt" | |
"os" | |
"os/signal" | |
"sync" | |
"sync/atomic" | |
"syscall" | |
kitlog "github.com/go-kit/kit/log" | |
"github.com/jackc/pgx" | |
) | |
func connect(user string) *pgx.Conn { | |
conn, err := pgx.Connect( | |
pgx.ConnConfig{ | |
Host: "/tmp", Port: 5432, Database: "failover-testing", User: user, | |
}, | |
) | |
if err != nil { | |
panic(err) | |
} | |
return conn | |
} | |
func main() { | |
var wg sync.WaitGroup | |
var count uint64 | |
var logger = kitlog.NewLogfmtLogger(os.Stderr) | |
ctx, cancel := context.WithCancel(context.Background()) | |
sigc := make(chan os.Signal, 1) | |
signal.Notify(sigc, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM) | |
go func() { <-sigc; cancel() }() | |
logger.Log("event", "benchmark.start") | |
connect("postgres").Exec(`drop table if exists logs`) | |
connect("postgres").Exec(`create table logs (id bigserial primary key);`) | |
for i := 0; i < 10; i++ { | |
wg.Add(1) | |
go func() { | |
defer wg.Done() | |
var max uint64 | |
conn := connect("postgres") | |
for { | |
token := atomic.AddUint64(&count, 1) | |
if _, err := conn.ExecEx(ctx, fmt.Sprintf(`insert into logs values (%d);`, token), &pgx.QueryExOptions{}); err != nil { | |
logger.Log("idx", i, "max", max, "error", err) | |
return | |
} | |
max = token | |
} | |
}() | |
} | |
wg.Wait() | |
logger.Log("event", "benchmark.done") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment