Clean up snapshots after each REST test
The only repository we can be sure is safe to clean is `fs` so we clean any snapshots in those repositories after each test. Other repositories like url and azure tend to throw exceptions rather than let us fetch their contents during the REST test. So we clean what we can.... Closes #18159
This commit is contained in:
parent
16ed2fb423
commit
d0be96df7b
|
@ -9,13 +9,6 @@ setup:
|
||||||
settings:
|
settings:
|
||||||
location: "test_repo_get_1_loc"
|
location: "test_repo_get_1_loc"
|
||||||
|
|
||||||
---
|
|
||||||
teardown:
|
|
||||||
|
|
||||||
- do:
|
|
||||||
snapshot.delete_repository:
|
|
||||||
repository: test_repo_get_1
|
|
||||||
|
|
||||||
---
|
---
|
||||||
"Get snapshot info":
|
"Get snapshot info":
|
||||||
|
|
||||||
|
|
|
@ -9,13 +9,6 @@ setup:
|
||||||
settings:
|
settings:
|
||||||
location: "test_repo_status_1_loc"
|
location: "test_repo_status_1_loc"
|
||||||
|
|
||||||
---
|
|
||||||
teardown:
|
|
||||||
|
|
||||||
- do:
|
|
||||||
snapshot.delete_repository:
|
|
||||||
repository: test_repo_status_1
|
|
||||||
|
|
||||||
---
|
---
|
||||||
"Get snapshot status":
|
"Get snapshot status":
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,7 @@ import java.util.Set;
|
||||||
|
|
||||||
import javax.net.ssl.SSLContext;
|
import javax.net.ssl.SSLContext;
|
||||||
|
|
||||||
|
import static java.util.Collections.singletonMap;
|
||||||
import static java.util.Collections.sort;
|
import static java.util.Collections.sort;
|
||||||
import static java.util.Collections.unmodifiableList;
|
import static java.util.Collections.unmodifiableList;
|
||||||
|
|
||||||
|
@ -151,9 +152,34 @@ public class ESRestTestCase extends ESTestCase {
|
||||||
// wipe index templates
|
// wipe index templates
|
||||||
adminClient().performRequest("DELETE", "_template/*");
|
adminClient().performRequest("DELETE", "_template/*");
|
||||||
|
|
||||||
// wipe snapshots
|
wipeSnapshots();
|
||||||
// Technically this deletes all repositories and leave the snapshots in the repository. OK.
|
}
|
||||||
adminClient().performRequest("DELETE", "_snapshot/*");
|
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
private void wipeSnapshots() throws IOException {
|
||||||
|
for (Map.Entry<String, ?> repo : entityAsMap(adminClient.performRequest("GET", "_snapshot/_all")).entrySet()) {
|
||||||
|
String repoName = repo.getKey();
|
||||||
|
Map<?, ?> repoSpec = (Map<?, ?>) repo.getValue();
|
||||||
|
String repoType = (String) repoSpec.get("type");
|
||||||
|
if (repoType.equals("fs")) {
|
||||||
|
// All other repo types we really don't have a chance of being able to iterate properly, sadly.
|
||||||
|
String url = "_snapshot/" + repoName + "/_all";
|
||||||
|
Map<String, String> params = singletonMap("ignore_unavailable", "true");
|
||||||
|
List<?> snapshots = (List<?>) entityAsMap(adminClient.performRequest("GET", url, params)).get("snapshots");
|
||||||
|
for (Object snapshot : snapshots) {
|
||||||
|
Map<?, ?> snapshotInfo = (Map<?, ?>) snapshot;
|
||||||
|
String name = (String) snapshotInfo.get("snapshot");
|
||||||
|
logger.debug("wiping snapshot [{}/{}]", repoName, name);
|
||||||
|
adminClient().performRequest("DELETE", "_snapshot/" + repoName + "/" + name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
logger.debug("wiping snapshot repository [{}]", repoName);
|
||||||
|
adminClient().performRequest("DELETE", "_snapshot/" + repoName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue