Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
WIP > XPack, Update Core and X-Pack test setup
* Do not delete X-Pack templates * Use context timeouts * Check pending tasks // ---------------------------------------------------------------------------------------------------- // https://github.com/elastic/elasticsearch/blob/master/test/framework/src/main/java/org/elasticsearch/test/rest/ESRestTestCase.java ensureNoInitializingShards(); wipeCluster(); waitForClusterStateUpdatesToFinish(); logIfThereAreRunningTasks(); wipeCluster() { if (hasXPack) { wipeRollupJobs(); waitForPendingRollupTasks(); } wipeSnapshots(); adminClient().performRequest(new Request("DELETE", "*")); if (hasXPack) { Request request = new Request("GET", "_cat/templates"); request.addParameter("h", "name"); if (isXPackTemplate(template)) continue; adminClient().performRequest(new Request("DELETE", "_template/" + template)); } else { adminClient().performRequest(new Request("DELETE", "_template/*")); } wipeClusterSettings(); if (hasXPack) { deleteAllPolicies(); } wipeRollupJobs() { Response response = adminClient().performRequest(new Request("GET", "/_rollup/job/_all")); for (Map<String, Object> jobConfig : jobConfigs) { String jobId = (String) ((Map<String, Object>) jobConfig.get("config")).get("id"); Request request = new Request("POST", "/_rollup/job/" + jobId + "/_stop"); request.addParameter("ignore", "404"); request.addParameter("wait_for_completion", "true"); request.addParameter("timeout", "10s"); } for (Map<String, Object> jobConfig : jobConfigs) { Request request = new Request("DELETE", "/_rollup/job/" + jobId); request.addParameter("ignore", "404"); } waitForPendingRollupTasks() { waitForPendingTasks(adminClient(), taskName -> taskName.startsWith("xpack/rollup/job") == false); ensureNoInitializingShards() { Request request = new Request("GET", "/_cluster/health"); request.addParameter("wait_for_no_initializing_shards", "true"); request.addParameter("timeout", "70s"); request.addParameter("level", "shards"); adminClient().performRequest(request); waitForClusterStateUpdatesToFinish() { assertBusy(() -> { Response response = adminClient().performRequest(new Request("GET", "/_cluster/pending_tasks")); List<?> tasks = (List<?>) entityAsMap(response).get("tasks"); if (false == tasks.isEmpty()) { fail(message.toString()); }, 30, TimeUnit.SECONDS); // curl -s -k -X POST 'https://elastic:elastic@localhost:9200/_all/_ilm/remove' deleteAllPolicies() { Response response = adminClient().performRequest(new Request("GET", "/_ilm/policy")); for (String policyName : policies.keySet()) { adminClient().performRequest(new Request("DELETE", "/_ilm/policy/" + policyName)); } // elastic/elasticsearch#31642 // // > At the end of every ESRestTestCase we clean the cluster which includes // > deleting all of the templates. If xpack is installed it'll automatically // > recreate a few templates every time they are removed. Which is slow. // isXPackTemplate(String name) { if (name.startsWith(".monitoring-")) { return true; } if (name.startsWith(".watch") || name.startsWith(".triggered_watches")) { return true; } if (name.startsWith(".ml-")) { return true; } switch (name) { case ".triggered_watches": case ".watches": case "logstash-index-template": case "security_audit_log": return true; default: return false; } // ---------------------------------------------------------------------------------------------------- // https://github.com/elastic/elasticsearch/blob/master/x-pack/plugin/src/test/java/org/elasticsearch/xpack/test/rest/XPackRestIT.java setupForTests() { waitForTemplates(); waitForWatcher(); enableMonitoring(); cleanup() disableMonitoring(); clearMlState(); if (isWaitForPendingTasks()) { // This waits for pending tasks to complete, so must go last (otherwise // it could be waiting for pending tasks while monitoring is still running). ESRestTestCase.waitForPendingTasks(adminClient(), task -> { // Don't check rollup jobs because we clear them in the superclass. return task.contains(RollupJob.NAME); }); waitForTemplates() { for (String template : templates) { awaitCallApi("indices.exists_template", singletonMap("name", template), emptyList(), response -> true, () -> "Exception when waiting for [" + template + "] template to be created"); } waitForWatcher() { if (isWatcherTest()) { // ensure watcher is started, so that a test can stop watcher and everything still works fine enableMonitoring() { if (isMonitoringTest()) { // Enable monitoring and waits for monitoring documents to be collected and indexed clearMlState() { if (isMachineLearningTest()) { new MlRestTestStateCleaner(logger, adminClient()).clearMlMetadata(); } isMonitoringTest() { String testName = getTestName(); return testName != null && (testName.contains("=monitoring/") || testName.contains("=monitoring\\")); } isWatcherTest() { String testName = getTestName(); return testName != null && (testName.contains("=watcher/") || testName.contains("=watcher\\")); } isMachineLearningTest() { String testName = getTestName(); return testName != null && (testName.contains("=ml/") || testName.contains("=ml\\")); } // ---------------------------------------------------------------------------------------------------- // https://github.com/elastic/elasticsearch/blob/master/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/ml/integration/MlRestTestStateCleaner.java class MlRestTestStateCleaner { ... } clearMlMetadata() { deleteAllDatafeeds(); deleteAllJobs(); deleteAllDataFrameAnalytics(); // indices will be deleted by the ESRestTestCase class deleteAllDatafeeds() { Request datafeedsRequest = new Request("GET", "/_ml/datafeeds"); datafeedsRequest.addParameter("filter_path", "datafeeds"); datafeeds = (List<Map<String, Object>>) XContentMapValues.extractValue("datafeeds", ESRestTestCase.entityAsMap(datafeedsResponse)); try { adminClient.performRequest(new Request("POST", "/_ml/datafeeds/_all/_stop")); } catch (Exception e1) { logger.warn("failed to stop all datafeeds. Forcing stop", e1); try { adminClient.performRequest(new Request("POST", "/_ml/datafeeds/_all/_stop?force=true")); } catch (Exception e2) { logger.warn("Force-closing all data feeds failed", e2); } throw new RuntimeException( "Had to resort to force-stopping datafeeds, something went wrong?", e1); } for (Map<String, Object> datafeed : datafeeds) { String datafeedId = (String) datafeed.get("datafeed_id"); adminClient.performRequest(new Request("DELETE", "/_ml/datafeeds/" + datafeedId)); } deleteAllJobs() { Request jobsRequest = new Request("GET", "/_ml/anomaly_detectors"); jobsRequest.addParameter("filter_path", "jobs"); jobConfigs = (List<Map<String, Object>>) XContentMapValues.extractValue("jobs", ESRestTestCase.entityAsMap(response)); if (jobConfigs == null) { return; } adminClient.performRequest(new Request("POST", "/_ml/anomaly_detectors/_all/_close")); for (Map<String, Object> jobConfig : jobConfigs) { String jobId = (String) jobConfig.get("job_id"); adminClient.performRequest(new Request("DELETE", "/_ml/anomaly_detectors/" + jobId)); } deleteAllDataFrameAnalytics() { Request analyticsRequest = new Request("GET", "/_ml/data_frame/analytics?size=10000"); analyticsRequest.addParameter("filter_path", "data_frame_analytics"); analytics = (List<Map<String, Object>>) XContentMapValues.extractValue("data_frame_analytics", ESRestTestCase.entityAsMap(analyticsResponse)); if (analytics == null) { return; } for (Map<String, Object> config : analytics) { String id = (String) config.get("id"); adminClient.performRequest(new Request("DELETE", "/_ml/data_frame/analytics/" + id)); }
- Loading branch information