Skip to content

Commit

Permalink
Wipe Snapshots Before Indices in RestTests (elastic#39662)
Browse files Browse the repository at this point in the history
* Wipe Snapshots Before Indices in RestTests

* If we have a snapshot ongoing from the previous test and enter this method, then deleting the indices fails, which in turn fails the whole wipe
   * Fixed by first deleting/aborting snapshots
  • Loading branch information
original-brownbear committed Mar 6, 2019
1 parent 4b5d658 commit e48c3de
Showing 1 changed file with 13 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.WarningsHandler;
import org.elasticsearch.cluster.SnapshotsInProgress;
import org.elasticsearch.common.CheckedRunnable;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.io.PathUtils;
Expand Down Expand Up @@ -72,6 +73,7 @@
import java.security.cert.CertificateException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -449,6 +451,8 @@ private void wipeCluster() throws Exception {
waitForPendingRollupTasks();
}

final Map<String, List<Map<?,?>>> inProgressSnapshots = wipeSnapshots();

if (preserveIndicesUponCompletion() == false) {
// wipe indices
try {
Expand Down Expand Up @@ -489,8 +493,6 @@ private void wipeCluster() throws Exception {
}
}

wipeSnapshots();

// wipe cluster settings
if (preserveClusterSettings() == false) {
wipeClusterSettings();
Expand All @@ -499,14 +501,18 @@ private void wipeCluster() throws Exception {
if (hasXPack && false == preserveILMPoliciesUponCompletion()) {
deleteAllPolicies();
}

assertTrue("Found in progress snapshots [" + inProgressSnapshots + "].", inProgressSnapshots.isEmpty());
}

/**
* Wipe fs snapshots we created one by one and all repositories so that the next test can create the repositories fresh and they'll
* start empty. There isn't an API to delete all snapshots. There is an API to delete all snapshot repositories but that leaves all of
* the snapshots intact in the repository.
* @return Map of repository name to list of snapshots found in unfinished state
*/
private void wipeSnapshots() throws IOException {
private Map<String, List<Map<?, ?>>> wipeSnapshots() throws IOException {
final Map<String, List<Map<?, ?>>> inProgressSnapshots = new HashMap<>();
for (Map.Entry<String, ?> repo : entityAsMap(adminClient.performRequest(new Request("GET", "/_snapshot/_all"))).entrySet()) {
String repoName = repo.getKey();
Map<?, ?> repoSpec = (Map<?, ?>) repo.getValue();
Expand All @@ -519,6 +525,9 @@ private void wipeSnapshots() throws IOException {
for (Object snapshot : snapshots) {
Map<?, ?> snapshotInfo = (Map<?, ?>) snapshot;
String name = (String) snapshotInfo.get("snapshot");
if (SnapshotsInProgress.State.valueOf((String) snapshotInfo.get("state")).completed() == false) {
inProgressSnapshots.computeIfAbsent(repoName, key -> new ArrayList<>()).add(snapshotInfo);
}
logger.debug("wiping snapshot [{}/{}]", repoName, name);
adminClient().performRequest(new Request("DELETE", "/_snapshot/" + repoName + "/" + name));
}
Expand All @@ -528,6 +537,7 @@ private void wipeSnapshots() throws IOException {
adminClient().performRequest(new Request("DELETE", "_snapshot/" + repoName));
}
}
return inProgressSnapshots;
}

/**
Expand Down

0 comments on commit e48c3de

Please sign in to comment.