Simplify CcrRetentionLeaseIT#testForgetFollower

This test was more complicated than necessary, where we were capturing
requests to prevent removal of retention leases, so that our forget
follower request could remove the retention leases instead. Instead, a
pause is enough to ensure that the retention leases are not re-added
after we remove them by the forget follower request. This commit
simplifies this test, and should remove some spurious failures.

Relates #39850
This commit is contained in:
Jason Tedor 2019-03-08 12:24:47 -05:00
parent c23ff0803e
commit 6675bafc49
No known key found for this signature in database
GPG Key ID: FA89F05560F16BC5
1 changed files with 20 additions and 51 deletions

View File

@ -937,60 +937,29 @@ public class CcrRetentionLeaseIT extends CcrIntegTestCase {
pauseFollow(followerIndex);
followerClient().admin().indices().close(new CloseIndexRequest(followerIndex)).actionGet();
final ClusterStateResponse followerClusterState = followerClient().admin().cluster().prepareState().clear().setNodes(true).get();
try {
for (final ObjectCursor<DiscoveryNode> senderNode : followerClusterState.getState().nodes().getNodes().values()) {
final MockTransportService senderTransportService =
(MockTransportService) getFollowerCluster().getInstance(TransportService.class, senderNode.value.getName());
senderTransportService.addSendBehavior(
(connection, requestId, action, request, options) -> {
if (RetentionLeaseActions.Remove.ACTION_NAME.equals(action)
|| TransportActionProxy.getProxyAction(RetentionLeaseActions.Remove.ACTION_NAME).equals(action)) {
final RetentionLeaseActions.RemoveRequest removeRequest = (RetentionLeaseActions.RemoveRequest) request;
if (randomBoolean()) {
throw new ConnectTransportException(connection.getNode(), "connection failed");
} else {
throw new IndexShardClosedException(removeRequest.getShardId());
}
}
connection.sendRequest(requestId, action, request, options);
});
}
final ClusterStateResponse followerIndexClusterState =
followerClient().admin().cluster().prepareState().clear().setMetaData(true).setIndices(followerIndex).get();
final String followerUUID = followerIndexClusterState.getState().metaData().index(followerIndex).getIndexUUID();
expectThrows(
ElasticsearchException.class,
() -> followerClient().execute(UnfollowAction.INSTANCE, new UnfollowAction.Request(followerIndex)).actionGet());
final BroadcastResponse forgetFollowerResponse = leaderClient().execute(
ForgetFollowerAction.INSTANCE,
new ForgetFollowerAction.Request(
getFollowerCluster().getClusterName(),
followerIndex,
followerUUID,
"leader_cluster",
leaderIndex)).actionGet();
final ClusterStateResponse followerIndexClusterState =
followerClient().admin().cluster().prepareState().clear().setMetaData(true).setIndices(followerIndex).get();
final String followerUUID = followerIndexClusterState.getState().metaData().index(followerIndex).getIndexUUID();
assertThat(forgetFollowerResponse.getTotalShards(), equalTo(numberOfShards));
assertThat(forgetFollowerResponse.getSuccessfulShards(), equalTo(numberOfShards));
assertThat(forgetFollowerResponse.getFailedShards(), equalTo(0));
assertThat(forgetFollowerResponse.getShardFailures(), emptyArray());
final BroadcastResponse forgetFollowerResponse = leaderClient().execute(
ForgetFollowerAction.INSTANCE,
new ForgetFollowerAction.Request(
getFollowerCluster().getClusterName(),
followerIndex,
followerUUID,
"leader_cluster",
leaderIndex)).actionGet();
assertThat(forgetFollowerResponse.getTotalShards(), equalTo(numberOfShards));
assertThat(forgetFollowerResponse.getSuccessfulShards(), equalTo(numberOfShards));
assertThat(forgetFollowerResponse.getFailedShards(), equalTo(0));
assertThat(forgetFollowerResponse.getShardFailures(), emptyArray());
final IndicesStatsResponse afterForgetFollowerStats =
leaderClient().admin().indices().stats(new IndicesStatsRequest().clear().indices(leaderIndex)).actionGet();
final List<ShardStats> afterForgetFollowerShardsStats = getShardsStats(afterForgetFollowerStats);
for (final ShardStats shardStats : afterForgetFollowerShardsStats) {
assertThat(shardStats.getRetentionLeaseStats().retentionLeases().leases(), empty());
}
} finally {
for (final ObjectCursor<DiscoveryNode> senderNode : followerClusterState.getState().nodes().getDataNodes().values()) {
final MockTransportService senderTransportService =
(MockTransportService) getFollowerCluster().getInstance(TransportService.class, senderNode.value.getName());
senderTransportService.clearAllRules();
}
final IndicesStatsResponse afterForgetFollowerStats =
leaderClient().admin().indices().stats(new IndicesStatsRequest().clear().indices(leaderIndex)).actionGet();
final List<ShardStats> afterForgetFollowerShardsStats = getShardsStats(afterForgetFollowerStats);
for (final ShardStats shardStats : afterForgetFollowerShardsStats) {
assertThat(shardStats.getRetentionLeaseStats().retentionLeases().leases(), empty());
}
}