corrupt_test.go (etcd-3.5.6) | : | corrupt_test.go (etcd-3.5.7) | ||
---|---|---|---|---|
skipping to change at line 151 | skipping to change at line 151 | |||
expectActions: []string{"HashByRev(0)", "PeerHashByRev(1) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)"}, | expectActions: []string{"HashByRev(0)", "PeerHashByRev(1) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)"}, | |||
}, | }, | |||
{ | { | |||
name: "Different local hash and compaction revis ion", | name: "Different local hash and compaction revis ion", | |||
hasher: fakeHasher{hashByRevResponses: []hashByRev {{hash: mvcc.KeyValueHash{Hash: 1, CompactRevision: 1}}, {hash: mvcc.KeyValueHas h{Hash: 2, CompactRevision: 2}}}}, | hasher: fakeHasher{hashByRevResponses: []hashByRev {{hash: mvcc.KeyValueHash{Hash: 1, CompactRevision: 1}}, {hash: mvcc.KeyValueHas h{Hash: 2, CompactRevision: 2}}}}, | |||
expectActions: []string{"HashByRev(0)", "PeerHashByRev(0) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)"}, | expectActions: []string{"HashByRev(0)", "PeerHashByRev(0) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)"}, | |||
}, | }, | |||
{ | { | |||
name: "Different local hash and same revisions", | name: "Different local hash and same revisions", | |||
hasher: fakeHasher{hashByRevResponses: []hashByRev {{hash: mvcc.KeyValueHash{Hash: 1, CompactRevision: 1}, revision: 1}, {hash: mvc c.KeyValueHash{Hash: 2, CompactRevision: 1}, revision: 1}}}, | hasher: fakeHasher{hashByRevResponses: []hashByRev {{hash: mvcc.KeyValueHash{Hash: 1, CompactRevision: 1}, revision: 1}, {hash: mvc c.KeyValueHash{Hash: 2, CompactRevision: 1}, revision: 1}}}, | |||
expectActions: []string{"HashByRev(0)", "PeerHashByRev(1) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)", "MemberId()", "Tr iggerCorruptAlarm(1)"}, | expectActions: []string{"HashByRev(0)", "PeerHashByRev(1) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)", "MemberId()", "Tr iggerCorruptAlarm(0)"}, | |||
expectCorrupt: true, | expectCorrupt: true, | |||
}, | }, | |||
{ | { | |||
name: "Peer with nil response", | name: "Peer with nil response", | |||
hasher: fakeHasher{ | hasher: fakeHasher{ | |||
peerHashes: []*peerHashKVResp{{}}, | peerHashes: []*peerHashKVResp{{}}, | |||
}, | }, | |||
expectActions: []string{"HashByRev(0)", "PeerHashByRev(0) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)"}, | expectActions: []string{"HashByRev(0)", "PeerHashByRev(0) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)"}, | |||
}, | }, | |||
{ | { | |||
name: "Peer with newer revision", | name: "Peer with newer revision", | |||
hasher: fakeHasher{ | hasher: fakeHasher{ | |||
peerHashes: []*peerHashKVResp{{peerInfo: peerInfo {id: 42}, resp: &pb.HashKVResponse{Header: &pb.ResponseHeader{Revision: 1}}}}, | peerHashes: []*peerHashKVResp{{peerInfo: peerInfo {id: 42}, resp: &pb.HashKVResponse{Header: &pb.ResponseHeader{Revision: 1}}}}, | |||
}, | }, | |||
expectActions: []string{"HashByRev(0)", "PeerHashByRev(0) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)", "TriggerCorruptAl arm(42)"}, | expectActions: []string{"HashByRev(0)", "PeerHashByRev(0) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)", "TriggerCorruptAl arm(0)"}, | |||
expectCorrupt: true, | expectCorrupt: true, | |||
}, | }, | |||
{ | { | |||
name: "Peer with newer compact revision", | name: "Peer with newer compact revision", | |||
hasher: fakeHasher{ | hasher: fakeHasher{ | |||
peerHashes: []*peerHashKVResp{{peerInfo: peerInfo {id: 88}, resp: &pb.HashKVResponse{Header: &pb.ResponseHeader{Revision: 10}, Com pactRevision: 2}}}, | peerHashes: []*peerHashKVResp{{peerInfo: peerInfo {id: 88}, resp: &pb.HashKVResponse{Header: &pb.ResponseHeader{Revision: 10}, Com pactRevision: 2}}}, | |||
}, | }, | |||
expectActions: []string{"HashByRev(0)", "PeerHashByRev(0) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)", "TriggerCorruptAl arm(88)"}, | expectActions: []string{"HashByRev(0)", "PeerHashByRev(0) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)", "TriggerCorruptAl arm(0)"}, | |||
expectCorrupt: true, | expectCorrupt: true, | |||
}, | }, | |||
{ | { | |||
name: "Peer with same hash and compact revision", | name: "Peer with same hash and compact revision", | |||
hasher: fakeHasher{ | hasher: fakeHasher{ | |||
hashByRevResponses: []hashByRev{{hash: mvcc.KeyVa lueHash{Hash: 1, CompactRevision: 1}, revision: 1}, {hash: mvcc.KeyValueHash{Has h: 2, CompactRevision: 2}, revision: 2}}, | hashByRevResponses: []hashByRev{{hash: mvcc.KeyVa lueHash{Hash: 1, CompactRevision: 1}, revision: 1}, {hash: mvcc.KeyValueHash{Has h: 2, CompactRevision: 2}, revision: 2}}, | |||
peerHashes: []*peerHashKVResp{{resp: &pb. HashKVResponse{Header: &pb.ResponseHeader{Revision: 1}, CompactRevision: 1, Hash : 1}}}, | peerHashes: []*peerHashKVResp{{resp: &pb. HashKVResponse{Header: &pb.ResponseHeader{Revision: 1}, CompactRevision: 1, Hash : 1}}}, | |||
}, | }, | |||
expectActions: []string{"HashByRev(0)", "PeerHashByRev(1) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)"}, | expectActions: []string{"HashByRev(0)", "PeerHashByRev(1) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)"}, | |||
}, | }, | |||
{ | { | |||
name: "Peer with different hash and same compact revision as first local", | name: "Peer with different hash and same compact revision as first local", | |||
hasher: fakeHasher{ | hasher: fakeHasher{ | |||
hashByRevResponses: []hashByRev{{hash: mvcc.KeyVa lueHash{Hash: 1, CompactRevision: 1}, revision: 1}, {hash: mvcc.KeyValueHash{Has h: 2, CompactRevision: 2}, revision: 2}}, | hashByRevResponses: []hashByRev{{hash: mvcc.KeyVa lueHash{Hash: 1, CompactRevision: 1}, revision: 1}, {hash: mvcc.KeyValueHash{Has h: 2, CompactRevision: 2}, revision: 2}}, | |||
peerHashes: []*peerHashKVResp{{peerInfo: peerInfo{id: 666}, resp: &pb.HashKVResponse{Header: &pb.ResponseHeader{Revision: 1}, CompactRevision: 1, Hash: 2}}}, | peerHashes: []*peerHashKVResp{{peerInfo: peerInfo{id: 666}, resp: &pb.HashKVResponse{Header: &pb.ResponseHeader{Revision: 1}, CompactRevision: 1, Hash: 2}}}, | |||
}, | }, | |||
expectActions: []string{"HashByRev(0)", "PeerHashByRev(1) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)", "TriggerCorruptAl arm(666)"}, | expectActions: []string{"HashByRev(0)", "PeerHashByRev(1) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)", "TriggerCorruptAl arm(0)"}, | |||
expectCorrupt: true, | expectCorrupt: true, | |||
}, | }, | |||
{ | { | |||
name: "Multiple corrupted peers trigger one alarm", | name: "Multiple corrupted peers trigger one alarm", | |||
hasher: fakeHasher{ | hasher: fakeHasher{ | |||
peerHashes: []*peerHashKVResp{ | peerHashes: []*peerHashKVResp{ | |||
{peerInfo: peerInfo{id: 88}, resp: &pb.Ha shKVResponse{Header: &pb.ResponseHeader{Revision: 10}, CompactRevision: 2}}, | {peerInfo: peerInfo{id: 88}, resp: &pb.Ha shKVResponse{Header: &pb.ResponseHeader{Revision: 10}, CompactRevision: 2}}, | |||
{peerInfo: peerInfo{id: 89}, resp: &pb.Ha shKVResponse{Header: &pb.ResponseHeader{Revision: 10}, CompactRevision: 2}}, | {peerInfo: peerInfo{id: 89}, resp: &pb.Ha shKVResponse{Header: &pb.ResponseHeader{Revision: 10}, CompactRevision: 2}}, | |||
}, | }, | |||
}, | }, | |||
expectActions: []string{"HashByRev(0)", "PeerHashByRev(0) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)", "TriggerCorruptAl arm(88)"}, | expectActions: []string{"HashByRev(0)", "PeerHashByRev(0) ", "ReqTimeout()", "LinearizableReadNotify()", "HashByRev(0)", "TriggerCorruptAl arm(0)"}, | |||
expectCorrupt: true, | expectCorrupt: true, | |||
}, | }, | |||
} | } | |||
for _, tc := range tcs { | for _, tc := range tcs { | |||
t.Run(tc.name, func(t *testing.T) { | t.Run(tc.name, func(t *testing.T) { | |||
monitor := corruptionChecker{ | monitor := corruptionChecker{ | |||
lg: zaptest.NewLogger(t), | lg: zaptest.NewLogger(t), | |||
hasher: &tc.hasher, | hasher: &tc.hasher, | |||
} | } | |||
err := monitor.PeriodicCheck() | err := monitor.PeriodicCheck() | |||
skipping to change at line 270 | skipping to change at line 270 | |||
peerHashes: []*peerHashKVResp{{resp: &pb.HashKVRe sponse{CompactRevision: 3}}}, | peerHashes: []*peerHashKVResp{{resp: &pb.HashKVRe sponse{CompactRevision: 3}}}, | |||
}, | }, | |||
expectActions: []string{"MemberId()", "ReqTimeout()", "Ha shes()", "PeerHashByRev(2)", "PeerHashByRev(1)"}, | expectActions: []string{"MemberId()", "ReqTimeout()", "Ha shes()", "PeerHashByRev(2)", "PeerHashByRev(1)"}, | |||
}, | }, | |||
{ | { | |||
name: "Peer returned same compaction revision but differe nt hash triggers alarm", | name: "Peer returned same compaction revision but differe nt hash triggers alarm", | |||
hasher: fakeHasher{ | hasher: fakeHasher{ | |||
hashes: []mvcc.KeyValueHash{{Revision: 1, Com pactRevision: 1, Hash: 1}, {Revision: 2, CompactRevision: 1, Hash: 2}}, | hashes: []mvcc.KeyValueHash{{Revision: 1, Com pactRevision: 1, Hash: 1}, {Revision: 2, CompactRevision: 1, Hash: 2}}, | |||
peerHashes: []*peerHashKVResp{{peerInfo: peerInfo {id: 42}, resp: &pb.HashKVResponse{CompactRevision: 1, Hash: 3}}}, | peerHashes: []*peerHashKVResp{{peerInfo: peerInfo {id: 42}, resp: &pb.HashKVResponse{CompactRevision: 1, Hash: 3}}}, | |||
}, | }, | |||
expectActions: []string{"MemberId()", "ReqTimeout()", "Ha shes()", "PeerHashByRev(2)", "TriggerCorruptAlarm(42)"}, | expectActions: []string{"MemberId()", "ReqTimeout()", "Ha shes()", "PeerHashByRev(2)", "TriggerCorruptAlarm(0)"}, | |||
expectCorrupt: true, | expectCorrupt: true, | |||
}, | }, | |||
{ | { | |||
name: "Peer returned same hash bumps last revision checke d", | name: "Peer returned same hash bumps last revision checke d", | |||
hasher: fakeHasher{ | hasher: fakeHasher{ | |||
hashes: []mvcc.KeyValueHash{{Revision: 1, Com pactRevision: 1, Hash: 1}, {Revision: 2, CompactRevision: 1, Hash: 1}}, | hashes: []mvcc.KeyValueHash{{Revision: 1, Com pactRevision: 1, Hash: 1}, {Revision: 2, CompactRevision: 1, Hash: 1}}, | |||
peerHashes: []*peerHashKVResp{{resp: &pb.HashKVRe sponse{Header: &pb.ResponseHeader{MemberId: 42}, CompactRevision: 1, Hash: 1}}}, | peerHashes: []*peerHashKVResp{{resp: &pb.HashKVRe sponse{Header: &pb.ResponseHeader{MemberId: 42}, CompactRevision: 1, Hash: 1}}}, | |||
}, | }, | |||
expectActions: []string{"MemberId()", "ReqTim eout()", "Hashes()", "PeerHashByRev(2)"}, | expectActions: []string{"MemberId()", "ReqTim eout()", "Hashes()", "PeerHashByRev(2)"}, | |||
expectLastRevisionChecked: 2, | expectLastRevisionChecked: 2, | |||
End of changes. 6 change blocks. | ||||
6 lines changed or deleted | 6 lines changed or added |