paymentsdb: sort FetchInFlightPayments result by sequence number

The SQL implementation collects payments into a map before converting
to a slice, resulting in non-deterministic iteration order due to Go's
intentional map randomisation. Sort the result by SequenceNum to produce
a deterministic, insertion-ordered output.

Note that the current sole caller (resumePayments in router.go) processes
each payment independently, so this ordering does not affect any existing
behaviour.
This commit is contained in:
ziggie committed 2026-02-25 18:36:14 +01:00
1 parent 0c2951aa05
commit 216de55dff
1 file changed
+7 -1
+7 -1
View File
@@ -7,6 +7,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"math" "math"
"sort"
"strconv" "strconv"
"time" "time"
@@ -1060,11 +1061,16 @@ func (s *SQLStore) FetchInFlightPayments(ctx context.Context) ([]*MPPayment,
return err return err
} }
// Convert map to slice. // Convert map to slice and sort by sequence number to
// produce a deterministic ordering.
mpPayments = make([]*MPPayment, 0, len(processedPayments)) mpPayments = make([]*MPPayment, 0, len(processedPayments))
for _, payment := range processedPayments { for _, payment := range processedPayments {
mpPayments = append(mpPayments, payment) mpPayments = append(mpPayments, payment)
} }
sort.Slice(mpPayments, func(i, j int) bool {
return mpPayments[i].SequenceNum <
mpPayments[j].SequenceNum
})
return nil return nil
}, func() { }, func() {