From 8f671deb918c37509240eb13e2c39217403f9993 Mon Sep 17 00:00:00 2001 From: Derek Collison Date: Fri, 26 Mar 2021 04:40:30 -0700 Subject: [PATCH 1/4] Calling out to the storage update should not hold lock. We had lock inversion with consumers. Signed-off-by: Derek Collison --- server/memstore.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/memstore.go b/server/memstore.go index 9b7085e0..fef1a3cc 100644 --- a/server/memstore.go +++ b/server/memstore.go @@ -492,8 +492,11 @@ func (ms *memStore) removeMsg(seq uint64, secure bool) bool { } if ms.scb != nil { + // We do not want to hold any locks here. + ms.mu.Unlock() delta := int64(ss) ms.scb(-1, -delta, seq, sm.subj) + ms.mu.Lock() } return ok From 82d2704594e5ec6137204da55054394ca825df1d Mon Sep 17 00:00:00 2001 From: Derek Collison Date: Fri, 26 Mar 2021 04:58:30 -0700 Subject: [PATCH 2/4] Increase connection timeout to avoid test failures when running whole test suite. Signed-off-by: Derek Collison --- server/jwt_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/jwt_test.go b/server/jwt_test.go index 46ab1530..5e1ff24b 100644 --- a/server/jwt_test.go +++ b/server/jwt_test.go @@ -3369,7 +3369,7 @@ func TestAccountNATSResolverFetch(t *testing.T) { } connect := func(url string, credsfile string, acc string, srvs ...*Server) { t.Helper() - nc := natsConnect(t, url, nats.UserCredentials(credsfile)) + nc := natsConnect(t, url, nats.UserCredentials(credsfile), nats.Timeout(5*time.Second)) nc.Close() require_NoLocalOrRemoteConnections(acc, srvs...) } From c564b18482ac44580c27085bb0439c098a3ecd2e Mon Sep 17 00:00:00 2001 From: Derek Collison Date: Fri, 26 Mar 2021 05:28:00 -0700 Subject: [PATCH 3/4] Protect against negative Signed-off-by: Derek Collison --- server/jetstream_cluster.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/jetstream_cluster.go b/server/jetstream_cluster.go index cdb0f86b..d7f8545f 100644 --- a/server/jetstream_cluster.go +++ b/server/jetstream_cluster.go @@ -4486,6 +4486,9 @@ func (js *jetStream) clusterInfo(rg *raftGroup) *ClusterInfo { for _, rp := range peers { if rp.ID != id && rg.isMember(rp.ID) { lastSeen := now.Sub(rp.Last) + if lastSeen < 0 { + lastSeen = 1 + } current := rp.Current if current && lastSeen > lostQuorumInterval { current = false From 2d2938239fd0f5efa758fe27c5178cd93228525e Mon Sep 17 00:00:00 2001 From: Derek Collison Date: Fri, 26 Mar 2021 05:28:23 -0700 Subject: [PATCH 4/4] Bump to RC9 Signed-off-by: Derek Collison --- server/const.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/const.go b/server/const.go index f482eb6f..37ee8285 100644 --- a/server/const.go +++ b/server/const.go @@ -41,7 +41,7 @@ var ( const ( // VERSION is the current version for the server. - VERSION = "2.2.1-RC8" + VERSION = "2.2.1-RC9" // PROTO is the currently supported protocol. // 0 was the original