|
@@ -0,0 +1,123 @@
|
|
|
|
+/*
|
|
|
|
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
|
|
+ * or more contributor license agreements. Licensed under the Elastic License;
|
|
|
|
+ * you may not use this file except in compliance with the Elastic License.
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+package org.elasticsearch.xpack.searchablesnapshots.action;
|
|
|
|
+
|
|
|
|
+import org.elasticsearch.Version;
|
|
|
|
+import org.elasticsearch.action.support.DefaultShardOperationFailedException;
|
|
|
|
+import org.elasticsearch.cluster.routing.ShardRouting;
|
|
|
|
+import org.elasticsearch.cluster.routing.ShardRoutingState;
|
|
|
|
+import org.elasticsearch.repositories.IndexId;
|
|
|
|
+import org.elasticsearch.snapshots.SnapshotId;
|
|
|
|
+import org.elasticsearch.test.ESTestCase;
|
|
|
|
+import org.elasticsearch.xpack.core.searchablesnapshots.SearchableSnapshotShardStats;
|
|
|
|
+
|
|
|
|
+import java.io.IOException;
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.List;
|
|
|
|
+
|
|
|
|
+import static org.elasticsearch.cluster.routing.TestShardRouting.newShardRouting;
|
|
|
|
+import static org.hamcrest.CoreMatchers.equalTo;
|
|
|
|
+
|
|
|
|
+public class SearchableSnapshotsStatsResponseTests extends ESTestCase {
|
|
|
|
+
|
|
|
|
+ public void testSerialization() throws IOException {
|
|
|
|
+ for (int i = 0; i < randomIntBetween(10, 50); i++) {
|
|
|
|
+ final SearchableSnapshotsStatsResponse testInstance = createTestInstance();
|
|
|
|
+ final SearchableSnapshotsStatsResponse deserializedInstance = copyWriteable(
|
|
|
|
+ testInstance,
|
|
|
|
+ writableRegistry(),
|
|
|
|
+ SearchableSnapshotsStatsResponse::new,
|
|
|
|
+ Version.CURRENT
|
|
|
|
+ );
|
|
|
|
+ assertEqualInstances(testInstance, deserializedInstance);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void assertEqualInstances(SearchableSnapshotsStatsResponse expected, SearchableSnapshotsStatsResponse actual) {
|
|
|
|
+ assertThat(actual.getTotalShards(), equalTo(expected.getTotalShards()));
|
|
|
|
+ assertThat(actual.getSuccessfulShards(), equalTo(expected.getSuccessfulShards()));
|
|
|
|
+ assertThat(actual.getFailedShards(), equalTo(expected.getFailedShards()));
|
|
|
|
+ DefaultShardOperationFailedException[] originalFailures = expected.getShardFailures();
|
|
|
|
+ DefaultShardOperationFailedException[] parsedFailures = actual.getShardFailures();
|
|
|
|
+ assertThat(originalFailures.length, equalTo(parsedFailures.length));
|
|
|
|
+ for (int i = 0; i < originalFailures.length; i++) {
|
|
|
|
+ assertThat(originalFailures[i].index(), equalTo(parsedFailures[i].index()));
|
|
|
|
+ assertThat(originalFailures[i].shardId(), equalTo(parsedFailures[i].shardId()));
|
|
|
|
+ assertThat(originalFailures[i].status(), equalTo(parsedFailures[i].status()));
|
|
|
|
+ }
|
|
|
|
+ assertThat(actual.getStats(), equalTo(expected.getStats()));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private SearchableSnapshotsStatsResponse createTestInstance() {
|
|
|
|
+ final int totalShards = randomIntBetween(0, 20);
|
|
|
|
+ final int successfulShards = totalShards > 0 ? randomIntBetween(0, totalShards) : 0;
|
|
|
|
+ final int failedShards = totalShards - successfulShards;
|
|
|
|
+
|
|
|
|
+ final String indexName = randomAlphaOfLength(10);
|
|
|
|
+ final int replicas = randomIntBetween(0, 2);
|
|
|
|
+ final SnapshotId snapshotId = new SnapshotId(randomAlphaOfLength(5), randomAlphaOfLength(5));
|
|
|
|
+ final IndexId indexId = new IndexId(randomAlphaOfLength(5), randomAlphaOfLength(5));
|
|
|
|
+
|
|
|
|
+ final List<SearchableSnapshotShardStats> shardStats = new ArrayList<>();
|
|
|
|
+ final List<DefaultShardOperationFailedException> shardFailures = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ for (int i = 0; i < totalShards; i++) {
|
|
|
|
+ if (i < successfulShards) {
|
|
|
|
+ shardStats.add(createSearchableSnapshotShardStats(indexName, i, true, snapshotId, indexId));
|
|
|
|
+ for (int j = 0; j < replicas; j++) {
|
|
|
|
+ shardStats.add(createSearchableSnapshotShardStats(indexName, i, false, snapshotId, indexId));
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ shardFailures.add(new DefaultShardOperationFailedException(indexName, i, new Exception()));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return new SearchableSnapshotsStatsResponse(shardStats, totalShards, successfulShards, failedShards, shardFailures);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static SearchableSnapshotShardStats createSearchableSnapshotShardStats(
|
|
|
|
+ String index,
|
|
|
|
+ int shardId,
|
|
|
|
+ boolean primary,
|
|
|
|
+ SnapshotId snapshotId,
|
|
|
|
+ IndexId indexId
|
|
|
|
+ ) {
|
|
|
|
+ final ShardRouting shardRouting = newShardRouting(index, shardId, randomAlphaOfLength(5), primary, ShardRoutingState.STARTED);
|
|
|
|
+ final List<SearchableSnapshotShardStats.CacheIndexInputStats> inputStats = new ArrayList<>();
|
|
|
|
+ for (int j = 0; j < randomInt(10); j++) {
|
|
|
|
+ inputStats.add(randomCacheIndexInputStats());
|
|
|
|
+ }
|
|
|
|
+ return new SearchableSnapshotShardStats(shardRouting, snapshotId, indexId, inputStats);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static SearchableSnapshotShardStats.CacheIndexInputStats randomCacheIndexInputStats() {
|
|
|
|
+ return new SearchableSnapshotShardStats.CacheIndexInputStats(
|
|
|
|
+ randomAlphaOfLength(10),
|
|
|
|
+ randomNonNegativeLong(),
|
|
|
|
+ randomNonNegativeLong(),
|
|
|
|
+ randomNonNegativeLong(),
|
|
|
|
+ randomCounter(),
|
|
|
|
+ randomCounter(),
|
|
|
|
+ randomCounter(),
|
|
|
|
+ randomCounter(),
|
|
|
|
+ randomCounter(),
|
|
|
|
+ randomCounter(),
|
|
|
|
+ randomCounter(),
|
|
|
|
+ randomTimedCounter(),
|
|
|
|
+ randomTimedCounter(),
|
|
|
|
+ randomTimedCounter()
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static SearchableSnapshotShardStats.Counter randomCounter() {
|
|
|
|
+ return new SearchableSnapshotShardStats.Counter(randomLong(), randomLong(), randomLong(), randomLong());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static SearchableSnapshotShardStats.TimedCounter randomTimedCounter() {
|
|
|
|
+ return new SearchableSnapshotShardStats.TimedCounter(randomLong(), randomLong(), randomLong(), randomLong(), randomLong());
|
|
|
|
+ }
|
|
|
|
+}
|