Better fix for flapping test - TestJetStreamClusterStaleReadsOnRestart (#4516)

Signed-off-by: Derek Collison <derek@nats.io>
This commit is contained in:
Derek Collison
2023-09-12 08:32:16 -07:00
committed by GitHub
2 changed files with 27 additions and 16 deletions

View File

@@ -3642,8 +3642,13 @@ func (js *jetStream) processClusterCreateStream(acc *Account, sa *streamAssignme
return
}
// Re-capture node.
js.mu.RLock()
node := rg.node
js.mu.RUnlock()
// Start our monitoring routine.
if rg.node != nil {
if node != nil {
if !alreadyRunning {
if mset != nil {
mset.monitorWg.Add(1)

View File

@@ -7095,25 +7095,31 @@ func TestJetStreamClusterStaleReadsOnRestart(t *testing.T) {
c.restartServer(sl)
c.waitOnAllCurrent()
c.waitOnStreamLeader("$G", "TEST")
// Allow the 3rd replica to be current.
time.Sleep(250 * time.Millisecond)
// Grab expected from leader.
var state StreamState
for _, s := range c.servers {
if s.Running() {
mset, err := s.GlobalAccount().lookupStream("TEST")
require_NoError(t, err)
var fs StreamState
mset.store.FastState(&fs)
if state.FirstSeq == 0 {
state = fs
}
if !reflect.DeepEqual(fs, state) {
t.Fatalf("States do not match, exepected %+v but got %+v", state, fs)
sl = c.streamLeader("$G", "TEST")
mset, err := sl.GlobalAccount().lookupStream("TEST")
require_NoError(t, err)
mset.store.FastState(&state)
checkFor(t, 10*time.Second, 200*time.Millisecond, func() error {
for _, s := range c.servers {
if s.Running() {
mset, err := s.GlobalAccount().lookupStream("TEST")
if err != nil {
return err
}
var fs StreamState
mset.store.FastState(&fs)
if !reflect.DeepEqual(fs, state) {
return fmt.Errorf("States do not match, expected %+v but got %+v", state, fs)
}
}
}
}
return nil
})
}
func TestJetStreamClusterReplicasChangeStreamInfo(t *testing.T) {