TEST: Do not assert max_seq_of_updates if promotion
If a primary promotion happens in the test testAddRemoveShardOnLeader, the max_seq_no_of_updates_or_deletes on a new primary might be higher than the max_seq_no_of_updates_or_deletes on the replicas or copies of the follower. Relates #36607
This commit is contained in:
parent
97107e99e8
commit
2028c2af14
|
@ -102,7 +102,7 @@ public class ShardFollowTaskReplicationTests extends ESIndexLevelReplicationTest
|
||||||
followerGroup.assertAllEqual(indexedDocIds.size() - deleteDocIds.size());
|
followerGroup.assertAllEqual(indexedDocIds.size() - deleteDocIds.size());
|
||||||
});
|
});
|
||||||
shardFollowTask.markAsCompleted();
|
shardFollowTask.markAsCompleted();
|
||||||
assertConsistentHistoryBetweenLeaderAndFollower(leaderGroup, followerGroup);
|
assertConsistentHistoryBetweenLeaderAndFollower(leaderGroup, followerGroup, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,6 +122,7 @@ public class ShardFollowTaskReplicationTests extends ESIndexLevelReplicationTest
|
||||||
followerSeqNoStats.getMaxSeqNo());
|
followerSeqNoStats.getMaxSeqNo());
|
||||||
int batches = between(0, 10);
|
int batches = between(0, 10);
|
||||||
int docCount = 0;
|
int docCount = 0;
|
||||||
|
boolean hasPromotion = false;
|
||||||
for (int i = 0; i < batches; i++) {
|
for (int i = 0; i < batches; i++) {
|
||||||
docCount += leaderGroup.indexDocs(between(1, 5));
|
docCount += leaderGroup.indexDocs(between(1, 5));
|
||||||
if (leaderGroup.getReplicas().isEmpty() == false && randomInt(100) < 5) {
|
if (leaderGroup.getReplicas().isEmpty() == false && randomInt(100) < 5) {
|
||||||
|
@ -132,6 +133,7 @@ public class ShardFollowTaskReplicationTests extends ESIndexLevelReplicationTest
|
||||||
} else if (leaderGroup.getReplicas().isEmpty() == false && rarely()) {
|
} else if (leaderGroup.getReplicas().isEmpty() == false && rarely()) {
|
||||||
IndexShard newPrimary = randomFrom(leaderGroup.getReplicas());
|
IndexShard newPrimary = randomFrom(leaderGroup.getReplicas());
|
||||||
leaderGroup.promoteReplicaToPrimary(newPrimary).get();
|
leaderGroup.promoteReplicaToPrimary(newPrimary).get();
|
||||||
|
hasPromotion = true;
|
||||||
} else if (randomInt(100) < 5) {
|
} else if (randomInt(100) < 5) {
|
||||||
leaderGroup.addReplica();
|
leaderGroup.addReplica();
|
||||||
leaderGroup.startReplicas(1);
|
leaderGroup.startReplicas(1);
|
||||||
|
@ -143,7 +145,7 @@ public class ShardFollowTaskReplicationTests extends ESIndexLevelReplicationTest
|
||||||
int expectedDoc = docCount;
|
int expectedDoc = docCount;
|
||||||
assertBusy(() -> followerGroup.assertAllEqual(expectedDoc));
|
assertBusy(() -> followerGroup.assertAllEqual(expectedDoc));
|
||||||
shardFollowTask.markAsCompleted();
|
shardFollowTask.markAsCompleted();
|
||||||
assertConsistentHistoryBetweenLeaderAndFollower(leaderGroup, followerGroup);
|
assertConsistentHistoryBetweenLeaderAndFollower(leaderGroup, followerGroup, hasPromotion == false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -285,7 +287,7 @@ public class ShardFollowTaskReplicationTests extends ESIndexLevelReplicationTest
|
||||||
try {
|
try {
|
||||||
assertBusy(() -> {
|
assertBusy(() -> {
|
||||||
assertThat(followerGroup.getPrimary().getGlobalCheckpoint(), equalTo(leadingPrimary.getGlobalCheckpoint()));
|
assertThat(followerGroup.getPrimary().getGlobalCheckpoint(), equalTo(leadingPrimary.getGlobalCheckpoint()));
|
||||||
assertConsistentHistoryBetweenLeaderAndFollower(leaderGroup, followerGroup);
|
assertConsistentHistoryBetweenLeaderAndFollower(leaderGroup, followerGroup, true);
|
||||||
});
|
});
|
||||||
} finally {
|
} finally {
|
||||||
shardFollowTask.markAsCompleted();
|
shardFollowTask.markAsCompleted();
|
||||||
|
@ -476,7 +478,8 @@ public class ShardFollowTaskReplicationTests extends ESIndexLevelReplicationTest
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertConsistentHistoryBetweenLeaderAndFollower(ReplicationGroup leader, ReplicationGroup follower) throws Exception {
|
private void assertConsistentHistoryBetweenLeaderAndFollower(ReplicationGroup leader, ReplicationGroup follower,
|
||||||
|
boolean assertMaxSeqNoOfUpdatesOrDeletes) throws Exception {
|
||||||
final List<Tuple<String, Long>> docAndSeqNosOnLeader = getDocIdAndSeqNos(leader.getPrimary()).stream()
|
final List<Tuple<String, Long>> docAndSeqNosOnLeader = getDocIdAndSeqNos(leader.getPrimary()).stream()
|
||||||
.map(d -> Tuple.tuple(d.getId(), d.getSeqNo())).collect(Collectors.toList());
|
.map(d -> Tuple.tuple(d.getId(), d.getSeqNo())).collect(Collectors.toList());
|
||||||
final Set<Tuple<Long, Translog.Operation.Type>> operationsOnLeader = new HashSet<>();
|
final Set<Tuple<Long, Translog.Operation.Type>> operationsOnLeader = new HashSet<>();
|
||||||
|
@ -487,7 +490,9 @@ public class ShardFollowTaskReplicationTests extends ESIndexLevelReplicationTest
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (IndexShard followingShard : follower) {
|
for (IndexShard followingShard : follower) {
|
||||||
assertThat(followingShard.getMaxSeqNoOfUpdatesOrDeletes(), equalTo(leader.getPrimary().getMaxSeqNoOfUpdatesOrDeletes()));
|
if (assertMaxSeqNoOfUpdatesOrDeletes) {
|
||||||
|
assertThat(followingShard.getMaxSeqNoOfUpdatesOrDeletes(), equalTo(leader.getPrimary().getMaxSeqNoOfUpdatesOrDeletes()));
|
||||||
|
}
|
||||||
List<Tuple<String, Long>> docAndSeqNosOnFollower = getDocIdAndSeqNos(followingShard).stream()
|
List<Tuple<String, Long>> docAndSeqNosOnFollower = getDocIdAndSeqNos(followingShard).stream()
|
||||||
.map(d -> Tuple.tuple(d.getId(), d.getSeqNo())).collect(Collectors.toList());
|
.map(d -> Tuple.tuple(d.getId(), d.getSeqNo())).collect(Collectors.toList());
|
||||||
assertThat(docAndSeqNosOnFollower, equalTo(docAndSeqNosOnLeader));
|
assertThat(docAndSeqNosOnFollower, equalTo(docAndSeqNosOnLeader));
|
||||||
|
|
Loading…
Reference in New Issue