From 3b8354a1ce72a56abce9858b080c8f08bd57cb81 Mon Sep 17 00:00:00 2001
From: Garet Halliday <me@garet.holiday>
Date: Thu, 14 Sep 2023 12:54:35 -0500
Subject: [PATCH] daisy chaining 11 pggats fails :(

---
 lib/rob/schedulers/v2/sink/sink.go |  6 ++++--
 test/tester_test.go                | 34 ++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/lib/rob/schedulers/v2/sink/sink.go b/lib/rob/schedulers/v2/sink/sink.go
index d8473821..70e34356 100644
--- a/lib/rob/schedulers/v2/sink/sink.go
+++ b/lib/rob/schedulers/v2/sink/sink.go
@@ -231,8 +231,10 @@ func (T *Sink) StealFor(rhs *Sink) uuid.UUID {
 
 	rhs.Enqueue(j)
 
-	for j, ok = pending.PopFront(); ok; j, ok = pending.PopFront() {
-		rhs.Enqueue(j)
+	if pending != nil {
+		for j, ok = pending.PopFront(); ok; j, ok = pending.PopFront() {
+			rhs.Enqueue(j)
+		}
 	}
 
 	return user
diff --git a/test/tester_test.go b/test/tester_test.go
index 90a92b5e..8b2580c3 100644
--- a/test/tester_test.go
+++ b/test/tester_test.go
@@ -47,6 +47,40 @@ func TestTester(t *testing.T) {
 		Password: password,
 	}
 
+	for i := 0; i < 10; i++ {
+		var g gat.PoolsMap
+		p := pool.NewPool(transaction.Apply(pool.Options{
+			Credentials: creds,
+		}))
+		p.AddRecipe("runner", recipe.NewRecipe(recipe.Options{
+			Dialer: control,
+		}))
+		g.Add("runner", "pool", p)
+
+		listener, err := gat.Listen("tcp", ":0", frontends.AcceptOptions{})
+		if err != nil {
+			t.Error(err)
+			return
+		}
+		port := listener.Listener.Addr().(*net.TCPAddr).Port
+
+		go func() {
+			err := gat.Serve(listener, &g)
+			if err != nil {
+				t.Error(err)
+			}
+		}()
+
+		control = dialer.Net{
+			Network: "tcp",
+			Address: ":" + strconv.Itoa(port),
+			AcceptOptions: backends.AcceptOptions{
+				Credentials: creds,
+				Database:    "pool",
+			},
+		}
+	}
+
 	var g gat.PoolsMap
 
 	transactionPool := pool.NewPool(transaction.Apply(pool.Options{
-- 
GitLab