From cec174f14fde25c72e858756681ee13d16cd95d5 Mon Sep 17 00:00:00 2001
From: Garet Halliday <me@garet.holiday>
Date: Wed, 13 Sep 2023 18:22:40 -0500
Subject: [PATCH] fix txn mode, split pairing time from active time in metrics

---
 lib/auth/credentials/cleartext.go       |  2 +-
 lib/gat/metrics/state.go                |  2 ++
 lib/gat/pool/flow.go                    | 11 +++++++++--
 lib/gat/pool/pools/transaction/apply.go |  1 +
 test/tester_test.go                     |  2 +-
 5 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/lib/auth/credentials/cleartext.go b/lib/auth/credentials/cleartext.go
index 5fe0b7f5..45821e07 100644
--- a/lib/auth/credentials/cleartext.go
+++ b/lib/auth/credentials/cleartext.go
@@ -118,7 +118,7 @@ func MakeCleartextScramVerifier(username, password string, hashGenerator scram.H
 	}
 
 	kf := scram.KeyFactors{
-		Iters: 1,
+		Iters: 4096,
 	}
 	stored := client.GetStoredCredentials(kf)
 
diff --git a/lib/gat/metrics/state.go b/lib/gat/metrics/state.go
index 4d6653da..0c6a13cc 100644
--- a/lib/gat/metrics/state.go
+++ b/lib/gat/metrics/state.go
@@ -6,6 +6,7 @@ const (
 	ConnStateActive ConnState = iota
 	ConnStateIdle
 	ConnStateAwaitingServer
+	ConnStatePairing
 	ConnStateRunningResetQuery
 
 	ConnStateCount
@@ -15,6 +16,7 @@ var connStateString = [ConnStateCount]string{
 	ConnStateActive:            "active",
 	ConnStateIdle:              "idle",
 	ConnStateAwaitingServer:    "awaiting server",
+	ConnStatePairing:           "pairing",
 	ConnStateRunningResetQuery: "running reset query",
 }
 
diff --git a/lib/gat/pool/flow.go b/lib/gat/pool/flow.go
index b5fb57e0..d051e5a9 100644
--- a/lib/gat/pool/flow.go
+++ b/lib/gat/pool/flow.go
@@ -10,8 +10,15 @@ import (
 )
 
 func Pair(options Options, client *Client, server *Server) (clientErr, serverErr error) {
-	client.SetState(metrics.ConnStateActive, server.GetID())
-	server.SetState(metrics.ConnStateActive, client.GetID())
+	defer func() {
+		client.SetState(metrics.ConnStateActive, server.GetID())
+		server.SetState(metrics.ConnStateActive, client.GetID())
+	}()
+
+	if options.ParameterStatusSync != ParameterStatusSyncNone || options.ExtendedQuerySync {
+		client.SetState(metrics.ConnStatePairing, server.GetID())
+		server.SetState(metrics.ConnStatePairing, client.GetID())
+	}
 
 	switch options.ParameterStatusSync {
 	case ParameterStatusSyncDynamic:
diff --git a/lib/gat/pool/pools/transaction/apply.go b/lib/gat/pool/pools/transaction/apply.go
index a431fe94..637585b0 100644
--- a/lib/gat/pool/pools/transaction/apply.go
+++ b/lib/gat/pool/pools/transaction/apply.go
@@ -6,5 +6,6 @@ func Apply(options pool.Options) pool.Options {
 	options.Pooler = new(Pooler)
 	options.ParameterStatusSync = pool.ParameterStatusSyncDynamic
 	options.ExtendedQuerySync = true
+	options.ReleaseAfterTransaction = true
 	return options
 }
diff --git a/test/tester_test.go b/test/tester_test.go
index d5eeb843..fe26506a 100644
--- a/test/tester_test.go
+++ b/test/tester_test.go
@@ -24,7 +24,7 @@ func TestTester(t *testing.T) {
 		},
 		Peer: dialer.Net{
 			Network: "tcp",
-			Address: "localhost:5432",
+			Address: "localhost:6432",
 			AcceptOptions: backends.AcceptOptions{
 				Credentials: credentials.Cleartext{
 					Username: "postgres",
-- 
GitLab