diff --git a/.travis.yml b/.travis.yml index bfa1dc4c..4b56a983 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,11 @@ os: linux dist: focal +branches: + only: + - main + - dev + vm: size: 2x-large @@ -8,12 +13,13 @@ language: go go: # This should be quoted or use .x, but should not be unquoted. # Remember that a YAML bare float drops trailing zeroes. - - '1.19.10' + - '1.19.11' +go_import_path: github.com/nats-io/nats-server + addons: apt: packages: - rpm -go_import_path: github.com/nats-io/nats-server jobs: include: diff --git a/README.md b/README.md index 05cd1418..4eeb391c 100644 --- a/README.md +++ b/README.md @@ -37,8 +37,8 @@ If you are interested in contributing to NATS, read about our... [Fossa-Image]: https://app.fossa.io/api/projects/git%2Bgithub.com%2Fnats-io%2Fnats-server.svg?type=shield [Build-Status-Url]: https://travis-ci.com/github/nats-io/nats-server [Build-Status-Image]: https://travis-ci.com/nats-io/nats-server.svg?branch=main -[Release-Url]: https://github.com/nats-io/nats-server/releases/tag/v2.9.19 -[Release-image]: https://img.shields.io/badge/release-v2.9.19-1eb0fc.svg +[Release-Url]: https://github.com/nats-io/nats-server/releases/tag/v2.9.20 +[Release-image]: https://img.shields.io/badge/release-v2.9.20-1eb0fc.svg [Coverage-Url]: https://coveralls.io/r/nats-io/nats-server?branch=main [Coverage-image]: https://coveralls.io/repos/github/nats-io/nats-server/badge.svg?branch=main [ReportCard-Url]: https://goreportcard.com/report/nats-io/nats-server diff --git a/server/jetstream_cluster_2_test.go b/server/jetstream_cluster_2_test.go index 26670a31..31ac47c5 100644 --- a/server/jetstream_cluster_2_test.go +++ b/server/jetstream_cluster_2_test.go @@ -3306,6 +3306,7 @@ func TestJetStreamClusterStreamUpdateSyncBug(t *testing.T) { } // We need to snapshot to force upper layer catchup vs RAFT layer. + c.waitOnAllCurrent() mset, err := c.streamLeader("$G", "TEST").GlobalAccount().lookupStream("TEST") if err != nil { t.Fatalf("Expected to find a stream for %q", "TEST") @@ -3314,6 +3315,7 @@ func TestJetStreamClusterStreamUpdateSyncBug(t *testing.T) { t.Fatalf("Unexpected error: %v", err) } + c.waitOnAllCurrent() nsl = c.restartServer(nsl) c.waitOnStreamCurrent(nsl, "$G", "TEST") diff --git a/server/jetstream_cluster_3_test.go b/server/jetstream_cluster_3_test.go index 57be3f03..626b97ca 100644 --- a/server/jetstream_cluster_3_test.go +++ b/server/jetstream_cluster_3_test.go @@ -356,7 +356,7 @@ func TestJetStreamClusterDeleteConsumerWhileServerDown(t *testing.T) { // Restart. s = c.restartServer(s) - checkFor(t, time.Second, 200*time.Millisecond, func() error { + checkFor(t, time.Second*2, 200*time.Millisecond, func() error { hs := s.healthz(&HealthzOptions{ JSEnabledOnly: false, JSServerOnly: false, diff --git a/server/jetstream_leafnode_test.go b/server/jetstream_leafnode_test.go index abc789a9..50982757 100644 --- a/server/jetstream_leafnode_test.go +++ b/server/jetstream_leafnode_test.go @@ -298,8 +298,8 @@ jetstream :{ server_name: A cluster: { name: clust1 - listen: 127.0.0.1:50554 - routes=[nats-route://127.0.0.1:50555] + listen: 127.0.0.1:20104 + routes=[nats-route://127.0.0.1:20105] no_advertise: true } ` @@ -327,8 +327,8 @@ jetstream: { server_name: B cluster: { name: clust1 - listen: 127.0.0.1:50555 - routes=[nats-route://127.0.0.1:50554] + listen: 127.0.0.1:20105 + routes=[nats-route://127.0.0.1:20104] no_advertise: true } ` @@ -350,8 +350,8 @@ jetstream: { server_name: LA cluster: { name: clustL - listen: 127.0.0.1:50556 - routes=[nats-route://127.0.0.1:50557] + listen: 127.0.0.1:20106 + routes=[nats-route://127.0.0.1:20107] no_advertise: true } leafnodes:{ @@ -378,8 +378,8 @@ jetstream: { server_name: LB cluster: { name: clustL - listen: 127.0.0.1:50557 - routes=[nats-route://127.0.0.1:50556] + listen: 127.0.0.1:20107 + routes=[nats-route://127.0.0.1:20106] no_advertise: true } leafnodes:{ @@ -568,8 +568,8 @@ jetstream: { %s store_dir: '%s'; max_mem: 50Mb, max_file: 50Mb } server_name: A cluster: { name: clust1 - listen: 127.0.0.1:50554 - routes=[nats-route://127.0.0.1:50555,nats-route://127.0.0.1:50556] + listen: 127.0.0.1:20114 + routes=[nats-route://127.0.0.1:20115,nats-route://127.0.0.1:20116] no_advertise: true } ` @@ -592,8 +592,8 @@ jetstream: { %s store_dir: '%s'; max_mem: 50Mb, max_file: 50Mb } server_name: B cluster: { name: clust1 - listen: 127.0.0.1:50555 - routes=[nats-route://127.0.0.1:50554,nats-route://127.0.0.1:50556] + listen: 127.0.0.1:20115 + routes=[nats-route://127.0.0.1:20114,nats-route://127.0.0.1:20116] no_advertise: true } ` @@ -619,8 +619,8 @@ jetstream: { server_name: C cluster: { name: clust1 - listen: 127.0.0.1:50556 - routes=[nats-route://127.0.0.1:50554,nats-route://127.0.0.1:50555] + listen: 127.0.0.1:20116 + routes=[nats-route://127.0.0.1:20114,nats-route://127.0.0.1:20115] no_advertise: true } ` @@ -741,8 +741,8 @@ jetstream: { max_file: 50Mb } leafnodes:{ - remotes:[{url:nats://a1:a1@127.0.0.1:50555, account: A, credentials: '%s' }, - {url:nats://s1:s1@127.0.0.1:50555, account: SYS, credentials: '%s', deny_imports: foo, deny_exports: bar}] + remotes:[{url:nats://a1:a1@127.0.0.1:20125, account: A, credentials: '%s' }, + {url:nats://s1:s1@127.0.0.1:20125, account: SYS, credentials: '%s', deny_imports: foo, deny_exports: bar}] } ` akp, err := nkeys.CreateAccount() @@ -1052,8 +1052,8 @@ jetstream : { domain: "DHUB", store_dir: '%s', max_mem: 100Mb, max_file: 100Mb } server_name: HUB1 cluster: { name: HUB - listen: 127.0.0.1:50554 - routes=[nats-route://127.0.0.1:50555] + listen: 127.0.0.1:20134 + routes=[nats-route://127.0.0.1:20135] } leafnodes: { listen:127.0.0.1:-1 @@ -1070,8 +1070,8 @@ jetstream : { domain: "DHUB", store_dir: '%s', max_mem: 100Mb, max_file: 100Mb } server_name: HUB2 cluster: { name: HUB - listen: 127.0.0.1:50555 - routes=[nats-route://127.0.0.1:50554] + listen: 127.0.0.1:20135 + routes=[nats-route://127.0.0.1:20134] } leafnodes: { listen:127.0.0.1:-1 @@ -1088,8 +1088,8 @@ jetstream: { domain: "DLEAF", store_dir: '%s', max_mem: 100Mb, max_file: 100Mb } server_name: LEAF1 cluster: { name: LEAF - listen: 127.0.0.1:50556 - routes=[nats-route://127.0.0.1:50557] + listen: 127.0.0.1:20136 + routes=[nats-route://127.0.0.1:20137] } leafnodes: { remotes:[{url:nats://a1:a1@127.0.0.1:%d, account: A},{url:nats://b1:b1@127.0.0.1:%d, account: B}] @@ -1107,8 +1107,8 @@ jetstream: { domain: "DLEAF", store_dir: '%s', max_mem: 100Mb, max_file: 100Mb } server_name: LEAF2 cluster: { name: LEAF - listen: 127.0.0.1:50557 - routes=[nats-route://127.0.0.1:50556] + listen: 127.0.0.1:20137 + routes=[nats-route://127.0.0.1:20136] } leafnodes: { remotes:[{url:nats://a1:a1@127.0.0.1:%d, account: A},{url:nats://b1:b1@127.0.0.1:%d, account: B}] diff --git a/server/jetstream_test.go b/server/jetstream_test.go index 377bc264..5e518204 100644 --- a/server/jetstream_test.go +++ b/server/jetstream_test.go @@ -5261,13 +5261,15 @@ func TestJetStreamRedeliverCount(t *testing.T) { nc, js := jsClientConnect(t, s) defer nc.Close() - // Send 10 msgs - for i := 0; i < 10; i++ { - js.Publish("DC", []byte("OK!")) - } - if state := mset.state(); state.Msgs != 10 { - t.Fatalf("Expected %d messages, got %d", 10, state.Msgs) + if _, err = js.Publish("DC", []byte("OK!")); err != nil { + t.Fatal(err) } + checkFor(t, time.Second, time.Millisecond*250, func() error { + if state := mset.state(); state.Msgs != 1 { + return fmt.Errorf("Expected %d messages, got %d", 1, state.Msgs) + } + return nil + }) o, err := mset.addConsumer(workerModeConfig("WQ")) if err != nil { @@ -8556,13 +8558,16 @@ func TestJetStreamMsgHeaders(t *testing.T) { nc.PublishMsg(m) nc.Flush() - state := mset.state() - if state.Msgs != 1 { - t.Fatalf("Expected 1 message, got %d", state.Msgs) - } - if state.Bytes == 0 { - t.Fatalf("Expected non-zero bytes") - } + checkFor(t, time.Second*2, time.Millisecond*250, func() error { + state := mset.state() + if state.Msgs != 1 { + return fmt.Errorf("Expected 1 message, got %d", state.Msgs) + } + if state.Bytes == 0 { + return fmt.Errorf("Expected non-zero bytes") + } + return nil + }) // Now access raw from stream. sm, err := mset.getMsg(1) @@ -10626,38 +10631,37 @@ func TestJetStreamAccountImportJSAdvisoriesAsService(t *testing.T) { if err != nil { t.Fatalf("Unexpected error adding stream: %v", err) } - msg, err := subJS.NextMsg(time.Second) - if err != nil { - t.Fatalf("Unexpected error: %v", err) + + gotEvents := map[string]int{} + for i := 0; i < 2; i++ { + msg, err := subJS.NextMsg(time.Second * 2) + if err != nil { + t.Fatalf("Unexpected error: %v", err) + } + gotEvents[msg.Subject]++ } - if msg.Subject != "$JS.EVENT.ADVISORY.STREAM.CREATED.ORDERS" { - t.Fatalf("Unexpected subject: %q", msg.Subject) + if c := gotEvents["$JS.EVENT.ADVISORY.STREAM.CREATED.ORDERS"]; c != 1 { + t.Fatalf("Should have received one advisory from $JS.EVENT.ADVISORY.STREAM.CREATED.ORDERS but got %d", c) } - msg, err = subJS.NextMsg(time.Second) - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - if msg.Subject != "$JS.EVENT.ADVISORY.API" { - t.Fatalf("Unexpected subject: %q", msg.Subject) + if c := gotEvents["$JS.EVENT.ADVISORY.API"]; c != 1 { + t.Fatalf("Should have received one advisory from $JS.EVENT.ADVISORY.API but got %d", c) } // same set of events should be received by AGG account // on subjects containing account name (ACC.JS) - msg, err = subAgg.NextMsg(time.Second) - if err != nil { - t.Fatalf("Unexpected error: %v", err) + gotEvents = map[string]int{} + for i := 0; i < 2; i++ { + msg, err := subAgg.NextMsg(time.Second * 2) + if err != nil { + t.Fatalf("Unexpected error: %v", err) + } + gotEvents[msg.Subject]++ } - if msg.Subject != "$JS.EVENT.ADVISORY.ACC.JS.STREAM.CREATED.ORDERS" { - t.Fatalf("Unexpected subject: %q", msg.Subject) + if c := gotEvents["$JS.EVENT.ADVISORY.ACC.JS.STREAM.CREATED.ORDERS"]; c != 1 { + t.Fatalf("Should have received one advisory from $JS.EVENT.ADVISORY.ACC.JS.STREAM.CREATED.ORDERS but got %d", c) } - - // we get error here, since we do not get the api audit event - msg, err = subAgg.NextMsg(time.Second) - if err != nil { - t.Fatalf("Unexpected error: %v", err) - } - if msg.Subject != "$JS.EVENT.ADVISORY.ACC.JS.API" { - t.Fatalf("Unexpected subject: %q", msg.Subject) + if c := gotEvents["$JS.EVENT.ADVISORY.ACC.JS.API"]; c != 1 { + t.Fatalf("Should have received one advisory from $JS.EVENT.ADVISORY.ACC.JS.API but got %d", c) } } diff --git a/server/norace_test.go b/server/norace_test.go index 51b1f0f7..f730080b 100644 --- a/server/norace_test.go +++ b/server/norace_test.go @@ -2430,7 +2430,7 @@ func TestNoRaceJetStreamSlowFilteredInititalPendingAndFirstMsg(t *testing.T) { }) // Threshold for taking too long. - const thresh = 100 * time.Millisecond + const thresh = 150 * time.Millisecond var dindex int testConsumerCreate := func(subj string, startSeq, expectedNumPending uint64) {