mirror of
https://github.com/elastic/elasticsearch.git
synced 2025-06-28 01:22:26 -04:00
Extract repositories metrics into its own class (#103034)
This PR is a follow up of https://github.com/elastic/elasticsearch/pull/102505#discussion_r1402957598 that move the repositories metrics management into its own class which is then passed around instead of relying on the raw meterRegistry and string metric names.
This commit is contained in:
parent
e20821f13e
commit
b9c29807ec
42 changed files with 210 additions and 145 deletions
|
@ -21,8 +21,8 @@ import org.elasticsearch.common.unit.ByteSizeUnit;
|
||||||
import org.elasticsearch.common.unit.ByteSizeValue;
|
import org.elasticsearch.common.unit.ByteSizeValue;
|
||||||
import org.elasticsearch.common.util.BigArrays;
|
import org.elasticsearch.common.util.BigArrays;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.blobstore.MeteredBlobStoreRepository;
|
import org.elasticsearch.repositories.blobstore.MeteredBlobStoreRepository;
|
||||||
import org.elasticsearch.telemetry.metric.MeterRegistry;
|
|
||||||
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
@ -109,7 +109,7 @@ public class AzureRepository extends MeteredBlobStoreRepository {
|
||||||
recoverySettings,
|
recoverySettings,
|
||||||
buildBasePath(metadata),
|
buildBasePath(metadata),
|
||||||
buildLocation(metadata),
|
buildLocation(metadata),
|
||||||
MeterRegistry.NOOP
|
RepositoriesMetrics.NOOP
|
||||||
);
|
);
|
||||||
this.chunkSize = Repository.CHUNK_SIZE_SETTING.get(metadata.settings());
|
this.chunkSize = Repository.CHUNK_SIZE_SETTING.get(metadata.settings());
|
||||||
this.storageService = storageService;
|
this.storageService = storageService;
|
||||||
|
|
|
@ -21,6 +21,7 @@ import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.ReloadablePlugin;
|
import org.elasticsearch.plugins.ReloadablePlugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.threadpool.ExecutorBuilder;
|
import org.elasticsearch.threadpool.ExecutorBuilder;
|
||||||
import org.elasticsearch.threadpool.ScalingExecutorBuilder;
|
import org.elasticsearch.threadpool.ScalingExecutorBuilder;
|
||||||
|
@ -62,7 +63,8 @@ public class AzureRepositoryPlugin extends Plugin implements RepositoryPlugin, R
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.singletonMap(AzureRepository.TYPE, metadata -> {
|
return Collections.singletonMap(AzureRepository.TYPE, metadata -> {
|
||||||
AzureStorageService storageService = azureStoreService.get();
|
AzureStorageService storageService = azureStoreService.get();
|
||||||
|
|
|
@ -42,6 +42,7 @@ import org.elasticsearch.core.SuppressForbidden;
|
||||||
import org.elasticsearch.env.Environment;
|
import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.RepositoriesService;
|
import org.elasticsearch.repositories.RepositoriesService;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.repositories.blobstore.BlobStoreRepository;
|
import org.elasticsearch.repositories.blobstore.BlobStoreRepository;
|
||||||
|
@ -256,7 +257,8 @@ public class GoogleCloudStorageBlobStoreRepositoryTests extends ESMockAPIBasedRe
|
||||||
NamedXContentRegistry registry,
|
NamedXContentRegistry registry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.singletonMap(
|
return Collections.singletonMap(
|
||||||
GoogleCloudStorageRepository.TYPE,
|
GoogleCloudStorageRepository.TYPE,
|
||||||
|
|
|
@ -17,6 +17,7 @@ import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.ReloadablePlugin;
|
import org.elasticsearch.plugins.ReloadablePlugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
||||||
|
|
||||||
|
@ -48,7 +49,8 @@ public class GoogleCloudStoragePlugin extends Plugin implements RepositoryPlugin
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.singletonMap(
|
return Collections.singletonMap(
|
||||||
GoogleCloudStorageRepository.TYPE,
|
GoogleCloudStorageRepository.TYPE,
|
||||||
|
|
|
@ -19,9 +19,9 @@ import org.elasticsearch.common.unit.ByteSizeUnit;
|
||||||
import org.elasticsearch.common.unit.ByteSizeValue;
|
import org.elasticsearch.common.unit.ByteSizeValue;
|
||||||
import org.elasticsearch.common.util.BigArrays;
|
import org.elasticsearch.common.util.BigArrays;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.RepositoryException;
|
import org.elasticsearch.repositories.RepositoryException;
|
||||||
import org.elasticsearch.repositories.blobstore.MeteredBlobStoreRepository;
|
import org.elasticsearch.repositories.blobstore.MeteredBlobStoreRepository;
|
||||||
import org.elasticsearch.telemetry.metric.MeterRegistry;
|
|
||||||
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -78,7 +78,7 @@ class GoogleCloudStorageRepository extends MeteredBlobStoreRepository {
|
||||||
recoverySettings,
|
recoverySettings,
|
||||||
buildBasePath(metadata),
|
buildBasePath(metadata),
|
||||||
buildLocation(metadata),
|
buildLocation(metadata),
|
||||||
MeterRegistry.NOOP
|
RepositoriesMetrics.NOOP
|
||||||
);
|
);
|
||||||
this.storageService = storageService;
|
this.storageService = storageService;
|
||||||
|
|
||||||
|
|
|
@ -37,14 +37,14 @@ import java.util.Map;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
|
|
||||||
import static org.elasticsearch.repositories.RepositoriesModule.HTTP_REQUEST_TIME_IN_MICROS_HISTOGRAM;
|
import static org.elasticsearch.repositories.RepositoriesMetrics.HTTP_REQUEST_TIME_IN_MICROS_HISTOGRAM;
|
||||||
import static org.elasticsearch.repositories.RepositoriesModule.METRIC_EXCEPTIONS_COUNT;
|
import static org.elasticsearch.repositories.RepositoriesMetrics.METRIC_EXCEPTIONS_COUNT;
|
||||||
import static org.elasticsearch.repositories.RepositoriesModule.METRIC_EXCEPTIONS_HISTOGRAM;
|
import static org.elasticsearch.repositories.RepositoriesMetrics.METRIC_EXCEPTIONS_HISTOGRAM;
|
||||||
import static org.elasticsearch.repositories.RepositoriesModule.METRIC_OPERATIONS_COUNT;
|
import static org.elasticsearch.repositories.RepositoriesMetrics.METRIC_OPERATIONS_COUNT;
|
||||||
import static org.elasticsearch.repositories.RepositoriesModule.METRIC_REQUESTS_COUNT;
|
import static org.elasticsearch.repositories.RepositoriesMetrics.METRIC_REQUESTS_COUNT;
|
||||||
import static org.elasticsearch.repositories.RepositoriesModule.METRIC_THROTTLES_COUNT;
|
import static org.elasticsearch.repositories.RepositoriesMetrics.METRIC_THROTTLES_COUNT;
|
||||||
import static org.elasticsearch.repositories.RepositoriesModule.METRIC_THROTTLES_HISTOGRAM;
|
import static org.elasticsearch.repositories.RepositoriesMetrics.METRIC_THROTTLES_HISTOGRAM;
|
||||||
import static org.elasticsearch.repositories.RepositoriesModule.METRIC_UNSUCCESSFUL_OPERATIONS_COUNT;
|
import static org.elasticsearch.repositories.RepositoriesMetrics.METRIC_UNSUCCESSFUL_OPERATIONS_COUNT;
|
||||||
import static org.elasticsearch.rest.RestStatus.INTERNAL_SERVER_ERROR;
|
import static org.elasticsearch.rest.RestStatus.INTERNAL_SERVER_ERROR;
|
||||||
import static org.elasticsearch.rest.RestStatus.NOT_FOUND;
|
import static org.elasticsearch.rest.RestStatus.NOT_FOUND;
|
||||||
import static org.elasticsearch.rest.RestStatus.TOO_MANY_REQUESTS;
|
import static org.elasticsearch.rest.RestStatus.TOO_MANY_REQUESTS;
|
||||||
|
|
|
@ -37,6 +37,7 @@ import org.elasticsearch.index.IndexVersion;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.PluginsService;
|
import org.elasticsearch.plugins.PluginsService;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.RepositoriesService;
|
import org.elasticsearch.repositories.RepositoriesService;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.repositories.RepositoryData;
|
import org.elasticsearch.repositories.RepositoryData;
|
||||||
|
@ -74,7 +75,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.StreamSupport;
|
import java.util.stream.StreamSupport;
|
||||||
|
|
||||||
import static org.elasticsearch.repositories.RepositoriesModule.METRIC_REQUESTS_COUNT;
|
import static org.elasticsearch.repositories.RepositoriesMetrics.METRIC_REQUESTS_COUNT;
|
||||||
import static org.elasticsearch.repositories.blobstore.BlobStoreTestUtil.randomNonDataPurpose;
|
import static org.elasticsearch.repositories.blobstore.BlobStoreTestUtil.randomNonDataPurpose;
|
||||||
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
|
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
|
||||||
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertHitCount;
|
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertHitCount;
|
||||||
|
@ -444,9 +445,10 @@ public class S3BlobStoreRepositoryTests extends ESMockAPIBasedRepositoryIntegTes
|
||||||
NamedXContentRegistry registry,
|
NamedXContentRegistry registry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return new S3Repository(metadata, registry, getService(), clusterService, bigArrays, recoverySettings, getMeterRegistry()) {
|
return new S3Repository(metadata, registry, getService(), clusterService, bigArrays, recoverySettings, repositoriesMetrics) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlobStore blobStore() {
|
public BlobStore blobStore() {
|
||||||
|
|
|
@ -30,8 +30,8 @@ import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.PluginsService;
|
import org.elasticsearch.plugins.PluginsService;
|
||||||
import org.elasticsearch.repositories.AbstractThirdPartyRepositoryTestCase;
|
import org.elasticsearch.repositories.AbstractThirdPartyRepositoryTestCase;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.RepositoriesService;
|
import org.elasticsearch.repositories.RepositoriesService;
|
||||||
import org.elasticsearch.telemetry.metric.MeterRegistry;
|
|
||||||
import org.elasticsearch.test.ClusterServiceUtils;
|
import org.elasticsearch.test.ClusterServiceUtils;
|
||||||
import org.elasticsearch.test.fixtures.minio.MinioTestContainer;
|
import org.elasticsearch.test.fixtures.minio.MinioTestContainer;
|
||||||
import org.elasticsearch.test.fixtures.testcontainers.TestContainersThreadFilter;
|
import org.elasticsearch.test.fixtures.testcontainers.TestContainersThreadFilter;
|
||||||
|
@ -145,7 +145,7 @@ public class S3RepositoryThirdPartyTests extends AbstractThirdPartyRepositoryTes
|
||||||
ClusterServiceUtils.createClusterService(threadpool),
|
ClusterServiceUtils.createClusterService(threadpool),
|
||||||
BigArrays.NON_RECYCLING_INSTANCE,
|
BigArrays.NON_RECYCLING_INSTANCE,
|
||||||
new RecoverySettings(node().settings(), node().injector().getInstance(ClusterService.class).getClusterSettings()),
|
new RecoverySettings(node().settings(), node().injector().getInstance(ClusterService.class).getClusterSettings()),
|
||||||
MeterRegistry.NOOP
|
RepositoriesMetrics.NOOP
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
repository.start();
|
repository.start();
|
||||||
|
|
|
@ -32,9 +32,7 @@ import org.elasticsearch.common.blobstore.OperationPurpose;
|
||||||
import org.elasticsearch.common.unit.ByteSizeValue;
|
import org.elasticsearch.common.unit.ByteSizeValue;
|
||||||
import org.elasticsearch.common.util.BigArrays;
|
import org.elasticsearch.common.util.BigArrays;
|
||||||
import org.elasticsearch.core.TimeValue;
|
import org.elasticsearch.core.TimeValue;
|
||||||
import org.elasticsearch.telemetry.metric.LongCounter;
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.telemetry.metric.LongHistogram;
|
|
||||||
import org.elasticsearch.telemetry.metric.MeterRegistry;
|
|
||||||
import org.elasticsearch.threadpool.ThreadPool;
|
import org.elasticsearch.threadpool.ThreadPool;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -54,14 +52,6 @@ import java.util.concurrent.atomic.LongAdder;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static org.elasticsearch.core.Strings.format;
|
import static org.elasticsearch.core.Strings.format;
|
||||||
import static org.elasticsearch.repositories.RepositoriesModule.HTTP_REQUEST_TIME_IN_MICROS_HISTOGRAM;
|
|
||||||
import static org.elasticsearch.repositories.RepositoriesModule.METRIC_EXCEPTIONS_COUNT;
|
|
||||||
import static org.elasticsearch.repositories.RepositoriesModule.METRIC_EXCEPTIONS_HISTOGRAM;
|
|
||||||
import static org.elasticsearch.repositories.RepositoriesModule.METRIC_OPERATIONS_COUNT;
|
|
||||||
import static org.elasticsearch.repositories.RepositoriesModule.METRIC_REQUESTS_COUNT;
|
|
||||||
import static org.elasticsearch.repositories.RepositoriesModule.METRIC_THROTTLES_COUNT;
|
|
||||||
import static org.elasticsearch.repositories.RepositoriesModule.METRIC_THROTTLES_HISTOGRAM;
|
|
||||||
import static org.elasticsearch.repositories.RepositoriesModule.METRIC_UNSUCCESSFUL_OPERATIONS_COUNT;
|
|
||||||
|
|
||||||
class S3BlobStore implements BlobStore {
|
class S3BlobStore implements BlobStore {
|
||||||
|
|
||||||
|
@ -91,15 +81,7 @@ class S3BlobStore implements BlobStore {
|
||||||
|
|
||||||
private final ThreadPool threadPool;
|
private final ThreadPool threadPool;
|
||||||
private final Executor snapshotExecutor;
|
private final Executor snapshotExecutor;
|
||||||
private final MeterRegistry meterRegistry;
|
private final RepositoriesMetrics repositoriesMetrics;
|
||||||
private final LongCounter requestCounter;
|
|
||||||
private final LongCounter exceptionCounter;
|
|
||||||
private final LongCounter throttleCounter;
|
|
||||||
private final LongCounter operationCounter;
|
|
||||||
private final LongCounter unsuccessfulOperationCounter;
|
|
||||||
private final LongHistogram exceptionHistogram;
|
|
||||||
private final LongHistogram throttleHistogram;
|
|
||||||
private final LongHistogram httpRequestTimeInMicroHistogram;
|
|
||||||
|
|
||||||
private final StatsCollectors statsCollectors = new StatsCollectors();
|
private final StatsCollectors statsCollectors = new StatsCollectors();
|
||||||
|
|
||||||
|
@ -117,7 +99,7 @@ class S3BlobStore implements BlobStore {
|
||||||
RepositoryMetadata repositoryMetadata,
|
RepositoryMetadata repositoryMetadata,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
ThreadPool threadPool,
|
ThreadPool threadPool,
|
||||||
MeterRegistry meterRegistry
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
this.service = service;
|
this.service = service;
|
||||||
this.bigArrays = bigArrays;
|
this.bigArrays = bigArrays;
|
||||||
|
@ -129,15 +111,7 @@ class S3BlobStore implements BlobStore {
|
||||||
this.repositoryMetadata = repositoryMetadata;
|
this.repositoryMetadata = repositoryMetadata;
|
||||||
this.threadPool = threadPool;
|
this.threadPool = threadPool;
|
||||||
this.snapshotExecutor = threadPool.executor(ThreadPool.Names.SNAPSHOT);
|
this.snapshotExecutor = threadPool.executor(ThreadPool.Names.SNAPSHOT);
|
||||||
this.meterRegistry = meterRegistry;
|
this.repositoriesMetrics = repositoriesMetrics;
|
||||||
this.requestCounter = this.meterRegistry.getLongCounter(METRIC_REQUESTS_COUNT);
|
|
||||||
this.exceptionCounter = this.meterRegistry.getLongCounter(METRIC_EXCEPTIONS_COUNT);
|
|
||||||
this.throttleCounter = this.meterRegistry.getLongCounter(METRIC_THROTTLES_COUNT);
|
|
||||||
this.operationCounter = this.meterRegistry.getLongCounter(METRIC_OPERATIONS_COUNT);
|
|
||||||
this.unsuccessfulOperationCounter = this.meterRegistry.getLongCounter(METRIC_UNSUCCESSFUL_OPERATIONS_COUNT);
|
|
||||||
this.exceptionHistogram = this.meterRegistry.getLongHistogram(METRIC_EXCEPTIONS_HISTOGRAM);
|
|
||||||
this.throttleHistogram = this.meterRegistry.getLongHistogram(METRIC_THROTTLES_HISTOGRAM);
|
|
||||||
this.httpRequestTimeInMicroHistogram = this.meterRegistry.getLongHistogram(HTTP_REQUEST_TIME_IN_MICROS_HISTOGRAM);
|
|
||||||
s3RequestRetryStats = new S3RequestRetryStats(getMaxRetries());
|
s3RequestRetryStats = new S3RequestRetryStats(getMaxRetries());
|
||||||
threadPool.scheduleWithFixedDelay(() -> {
|
threadPool.scheduleWithFixedDelay(() -> {
|
||||||
var priorRetryStats = s3RequestRetryStats;
|
var priorRetryStats = s3RequestRetryStats;
|
||||||
|
@ -214,21 +188,21 @@ class S3BlobStore implements BlobStore {
|
||||||
.map(List::size)
|
.map(List::size)
|
||||||
.orElse(0);
|
.orElse(0);
|
||||||
|
|
||||||
operationCounter.incrementBy(1, attributes);
|
repositoriesMetrics.operationCounter().incrementBy(1, attributes);
|
||||||
if (numberOfAwsErrors == requestCount) {
|
if (numberOfAwsErrors == requestCount) {
|
||||||
unsuccessfulOperationCounter.incrementBy(1, attributes);
|
repositoriesMetrics.unsuccessfulOperationCounter().incrementBy(1, attributes);
|
||||||
}
|
}
|
||||||
|
|
||||||
requestCounter.incrementBy(requestCount, attributes);
|
repositoriesMetrics.requestCounter().incrementBy(requestCount, attributes);
|
||||||
if (exceptionCount > 0) {
|
if (exceptionCount > 0) {
|
||||||
exceptionCounter.incrementBy(exceptionCount, attributes);
|
repositoriesMetrics.exceptionCounter().incrementBy(exceptionCount, attributes);
|
||||||
exceptionHistogram.record(exceptionCount, attributes);
|
repositoriesMetrics.exceptionHistogram().record(exceptionCount, attributes);
|
||||||
}
|
}
|
||||||
if (throttleCount > 0) {
|
if (throttleCount > 0) {
|
||||||
throttleCounter.incrementBy(throttleCount, attributes);
|
repositoriesMetrics.throttleCounter().incrementBy(throttleCount, attributes);
|
||||||
throttleHistogram.record(throttleCount, attributes);
|
repositoriesMetrics.throttleHistogram().record(throttleCount, attributes);
|
||||||
}
|
}
|
||||||
httpRequestTimeInMicroHistogram.record(getHttpRequestTimeInMicros(request), attributes);
|
repositoriesMetrics.httpRequestTimeInMicroHistogram().record(getHttpRequestTimeInMicros(request), attributes);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean assertConsistencyBetweenHttpRequestAndOperation(Request<?> request, Operation operation) {
|
private boolean assertConsistencyBetweenHttpRequestAndOperation(Request<?> request, Operation operation) {
|
||||||
|
|
|
@ -31,12 +31,12 @@ import org.elasticsearch.index.IndexVersions;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.monitor.jvm.JvmInfo;
|
import org.elasticsearch.monitor.jvm.JvmInfo;
|
||||||
import org.elasticsearch.repositories.FinalizeSnapshotContext;
|
import org.elasticsearch.repositories.FinalizeSnapshotContext;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.RepositoryData;
|
import org.elasticsearch.repositories.RepositoryData;
|
||||||
import org.elasticsearch.repositories.RepositoryException;
|
import org.elasticsearch.repositories.RepositoryException;
|
||||||
import org.elasticsearch.repositories.blobstore.MeteredBlobStoreRepository;
|
import org.elasticsearch.repositories.blobstore.MeteredBlobStoreRepository;
|
||||||
import org.elasticsearch.snapshots.SnapshotDeleteListener;
|
import org.elasticsearch.snapshots.SnapshotDeleteListener;
|
||||||
import org.elasticsearch.snapshots.SnapshotsService;
|
import org.elasticsearch.snapshots.SnapshotsService;
|
||||||
import org.elasticsearch.telemetry.metric.MeterRegistry;
|
|
||||||
import org.elasticsearch.threadpool.Scheduler;
|
import org.elasticsearch.threadpool.Scheduler;
|
||||||
import org.elasticsearch.threadpool.ThreadPool;
|
import org.elasticsearch.threadpool.ThreadPool;
|
||||||
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
||||||
|
@ -205,7 +205,7 @@ class S3Repository extends MeteredBlobStoreRepository {
|
||||||
final ClusterService clusterService,
|
final ClusterService clusterService,
|
||||||
final BigArrays bigArrays,
|
final BigArrays bigArrays,
|
||||||
final RecoverySettings recoverySettings,
|
final RecoverySettings recoverySettings,
|
||||||
final MeterRegistry meterRegistry
|
final RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
super(
|
super(
|
||||||
metadata,
|
metadata,
|
||||||
|
@ -215,7 +215,7 @@ class S3Repository extends MeteredBlobStoreRepository {
|
||||||
recoverySettings,
|
recoverySettings,
|
||||||
buildBasePath(metadata),
|
buildBasePath(metadata),
|
||||||
buildLocation(metadata),
|
buildLocation(metadata),
|
||||||
meterRegistry
|
repositoriesMetrics
|
||||||
);
|
);
|
||||||
this.service = service;
|
this.service = service;
|
||||||
this.snapshotExecutor = threadPool().executor(ThreadPool.Names.SNAPSHOT);
|
this.snapshotExecutor = threadPool().executor(ThreadPool.Names.SNAPSHOT);
|
||||||
|
@ -408,7 +408,7 @@ class S3Repository extends MeteredBlobStoreRepository {
|
||||||
metadata,
|
metadata,
|
||||||
bigArrays,
|
bigArrays,
|
||||||
threadPool,
|
threadPool,
|
||||||
meterRegistry
|
repositoriesMetrics
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,8 +23,8 @@ import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.ReloadablePlugin;
|
import org.elasticsearch.plugins.ReloadablePlugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.telemetry.metric.MeterRegistry;
|
|
||||||
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -60,7 +60,6 @@ public class S3RepositoryPlugin extends Plugin implements RepositoryPlugin, Relo
|
||||||
}
|
}
|
||||||
|
|
||||||
private final SetOnce<S3Service> service = new SetOnce<>();
|
private final SetOnce<S3Service> service = new SetOnce<>();
|
||||||
private final SetOnce<MeterRegistry> meterRegistry = new SetOnce<>();
|
|
||||||
private final Settings settings;
|
private final Settings settings;
|
||||||
|
|
||||||
public S3RepositoryPlugin(Settings settings) {
|
public S3RepositoryPlugin(Settings settings) {
|
||||||
|
@ -77,16 +76,16 @@ public class S3RepositoryPlugin extends Plugin implements RepositoryPlugin, Relo
|
||||||
final NamedXContentRegistry registry,
|
final NamedXContentRegistry registry,
|
||||||
final ClusterService clusterService,
|
final ClusterService clusterService,
|
||||||
final BigArrays bigArrays,
|
final BigArrays bigArrays,
|
||||||
final RecoverySettings recoverySettings
|
final RecoverySettings recoverySettings,
|
||||||
|
final RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return new S3Repository(metadata, registry, service.get(), clusterService, bigArrays, recoverySettings, meterRegistry.get());
|
return new S3Repository(metadata, registry, service.get(), clusterService, bigArrays, recoverySettings, repositoriesMetrics);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<?> createComponents(PluginServices services) {
|
public Collection<?> createComponents(PluginServices services) {
|
||||||
service.set(s3Service(services.environment(), services.clusterService().getSettings()));
|
service.set(s3Service(services.environment(), services.clusterService().getSettings()));
|
||||||
this.service.get().refreshAndClearCache(S3ClientSettings.load(settings));
|
this.service.get().refreshAndClearCache(S3ClientSettings.load(settings));
|
||||||
meterRegistry.set(services.telemetryProvider().getMeterRegistry());
|
|
||||||
return List.of(service);
|
return List.of(service);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,11 +99,12 @@ public class S3RepositoryPlugin extends Plugin implements RepositoryPlugin, Relo
|
||||||
final NamedXContentRegistry registry,
|
final NamedXContentRegistry registry,
|
||||||
final ClusterService clusterService,
|
final ClusterService clusterService,
|
||||||
final BigArrays bigArrays,
|
final BigArrays bigArrays,
|
||||||
final RecoverySettings recoverySettings
|
final RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.singletonMap(
|
return Collections.singletonMap(
|
||||||
S3Repository.TYPE,
|
S3Repository.TYPE,
|
||||||
metadata -> createRepository(metadata, registry, clusterService, bigArrays, recoverySettings)
|
metadata -> createRepository(metadata, registry, clusterService, bigArrays, recoverySettings, repositoriesMetrics)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,8 +146,4 @@ public class S3RepositoryPlugin extends Plugin implements RepositoryPlugin, Relo
|
||||||
public void close() throws IOException {
|
public void close() throws IOException {
|
||||||
getService().close();
|
getService().close();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected MeterRegistry getMeterRegistry() {
|
|
||||||
return meterRegistry.get();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,12 +26,12 @@ import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.PluginsService;
|
import org.elasticsearch.plugins.PluginsService;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.RepositoriesService;
|
import org.elasticsearch.repositories.RepositoriesService;
|
||||||
import org.elasticsearch.rest.AbstractRestChannel;
|
import org.elasticsearch.rest.AbstractRestChannel;
|
||||||
import org.elasticsearch.rest.RestRequest;
|
import org.elasticsearch.rest.RestRequest;
|
||||||
import org.elasticsearch.rest.RestResponse;
|
import org.elasticsearch.rest.RestResponse;
|
||||||
import org.elasticsearch.rest.action.admin.cluster.RestGetRepositoriesAction;
|
import org.elasticsearch.rest.action.admin.cluster.RestGetRepositoriesAction;
|
||||||
import org.elasticsearch.telemetry.metric.MeterRegistry;
|
|
||||||
import org.elasticsearch.test.ESSingleNodeTestCase;
|
import org.elasticsearch.test.ESSingleNodeTestCase;
|
||||||
import org.elasticsearch.test.rest.FakeRestRequest;
|
import org.elasticsearch.test.rest.FakeRestRequest;
|
||||||
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
||||||
|
@ -262,9 +262,10 @@ public class RepositoryCredentialsTests extends ESSingleNodeTestCase {
|
||||||
NamedXContentRegistry registry,
|
NamedXContentRegistry registry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return new S3Repository(metadata, registry, getService(), clusterService, bigArrays, recoverySettings, MeterRegistry.NOOP) {
|
return new S3Repository(metadata, registry, getService(), clusterService, bigArrays, recoverySettings, repositoriesMetrics) {
|
||||||
@Override
|
@Override
|
||||||
protected void assertSnapshotOrGenericThread() {
|
protected void assertSnapshotOrGenericThread() {
|
||||||
// eliminate thread name check as we create repo manually on test/main threads
|
// eliminate thread name check as we create repo manually on test/main threads
|
||||||
|
|
|
@ -36,9 +36,9 @@ import org.elasticsearch.core.Nullable;
|
||||||
import org.elasticsearch.core.SuppressForbidden;
|
import org.elasticsearch.core.SuppressForbidden;
|
||||||
import org.elasticsearch.core.TimeValue;
|
import org.elasticsearch.core.TimeValue;
|
||||||
import org.elasticsearch.env.Environment;
|
import org.elasticsearch.env.Environment;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.blobstore.AbstractBlobContainerRetriesTestCase;
|
import org.elasticsearch.repositories.blobstore.AbstractBlobContainerRetriesTestCase;
|
||||||
import org.elasticsearch.repositories.blobstore.BlobStoreTestUtil;
|
import org.elasticsearch.repositories.blobstore.BlobStoreTestUtil;
|
||||||
import org.elasticsearch.telemetry.metric.MeterRegistry;
|
|
||||||
import org.hamcrest.Matcher;
|
import org.hamcrest.Matcher;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
@ -162,7 +162,7 @@ public class S3BlobContainerRetriesTests extends AbstractBlobContainerRetriesTes
|
||||||
repositoryMetadata,
|
repositoryMetadata,
|
||||||
BigArrays.NON_RECYCLING_INSTANCE,
|
BigArrays.NON_RECYCLING_INSTANCE,
|
||||||
new DeterministicTaskQueue().getThreadPool(),
|
new DeterministicTaskQueue().getThreadPool(),
|
||||||
MeterRegistry.NOOP
|
RepositoriesMetrics.NOOP
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -18,9 +18,9 @@ import org.elasticsearch.common.unit.ByteSizeValue;
|
||||||
import org.elasticsearch.common.util.MockBigArrays;
|
import org.elasticsearch.common.util.MockBigArrays;
|
||||||
import org.elasticsearch.env.Environment;
|
import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.RepositoryException;
|
import org.elasticsearch.repositories.RepositoryException;
|
||||||
import org.elasticsearch.repositories.blobstore.BlobStoreTestUtil;
|
import org.elasticsearch.repositories.blobstore.BlobStoreTestUtil;
|
||||||
import org.elasticsearch.telemetry.metric.MeterRegistry;
|
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
||||||
import org.hamcrest.Matchers;
|
import org.hamcrest.Matchers;
|
||||||
|
@ -129,7 +129,7 @@ public class S3RepositoryTests extends ESTestCase {
|
||||||
BlobStoreTestUtil.mockClusterService(),
|
BlobStoreTestUtil.mockClusterService(),
|
||||||
MockBigArrays.NON_RECYCLING_INSTANCE,
|
MockBigArrays.NON_RECYCLING_INSTANCE,
|
||||||
new RecoverySettings(Settings.EMPTY, new ClusterSettings(Settings.EMPTY, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS)),
|
new RecoverySettings(Settings.EMPTY, new ClusterSettings(Settings.EMPTY, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS)),
|
||||||
MeterRegistry.NOOP
|
RepositoriesMetrics.NOOP
|
||||||
) {
|
) {
|
||||||
@Override
|
@Override
|
||||||
protected void assertSnapshotOrGenericThread() {
|
protected void assertSnapshotOrGenericThread() {
|
||||||
|
|
|
@ -18,6 +18,7 @@ import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.repositories.url.URLRepository;
|
import org.elasticsearch.repositories.url.URLRepository;
|
||||||
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
||||||
|
@ -47,7 +48,8 @@ public class URLRepositoryPlugin extends Plugin implements RepositoryPlugin {
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.singletonMap(URLRepository.TYPE, metadata -> {
|
return Collections.singletonMap(URLRepository.TYPE, metadata -> {
|
||||||
assert httpClientFactory.get() != null : "Expected to get a configured http client factory";
|
assert httpClientFactory.get() != null : "Expected to get a configured http client factory";
|
||||||
|
|
|
@ -18,6 +18,7 @@ import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
||||||
|
|
||||||
|
@ -108,7 +109,8 @@ public final class HdfsPlugin extends Plugin implements RepositoryPlugin {
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.singletonMap(
|
return Collections.singletonMap(
|
||||||
"hdfs",
|
"hdfs",
|
||||||
|
|
|
@ -27,6 +27,7 @@ import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
import org.elasticsearch.repositories.IndexId;
|
import org.elasticsearch.repositories.IndexId;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.RepositoriesService;
|
import org.elasticsearch.repositories.RepositoriesService;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.repositories.RepositoryData;
|
import org.elasticsearch.repositories.RepositoryData;
|
||||||
|
@ -72,7 +73,8 @@ public class ShardSnapshotsServiceIT extends ESIntegTestCase {
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.singletonMap(
|
return Collections.singletonMap(
|
||||||
TYPE,
|
TYPE,
|
||||||
|
|
|
@ -70,7 +70,8 @@ public class InvalidRepositoryIT extends ESIntegTestCase {
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.singletonMap(
|
return Collections.singletonMap(
|
||||||
TYPE,
|
TYPE,
|
||||||
|
|
|
@ -25,6 +25,7 @@ import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.repositories.fs.FsRepository;
|
import org.elasticsearch.repositories.fs.FsRepository;
|
||||||
import org.elasticsearch.snapshots.AbstractSnapshotIntegTestCase;
|
import org.elasticsearch.snapshots.AbstractSnapshotIntegTestCase;
|
||||||
|
@ -94,7 +95,8 @@ public class BlobStoreRepositoryOperationPurposeIT extends AbstractSnapshotInteg
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Map.of(
|
return Map.of(
|
||||||
ASSERTING_REPO_TYPE,
|
ASSERTING_REPO_TYPE,
|
||||||
|
|
|
@ -20,6 +20,7 @@ import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.repositories.IndexId;
|
import org.elasticsearch.repositories.IndexId;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.RepositoriesService;
|
import org.elasticsearch.repositories.RepositoriesService;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.repositories.RepositoryData;
|
import org.elasticsearch.repositories.RepositoryData;
|
||||||
|
@ -207,7 +208,8 @@ public class MetadataLoadingDuringSnapshotRestoreIT extends AbstractSnapshotInte
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.singletonMap(
|
return Collections.singletonMap(
|
||||||
TYPE,
|
TYPE,
|
||||||
|
|
|
@ -31,6 +31,7 @@ import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.repositories.fs.FsRepository;
|
import org.elasticsearch.repositories.fs.FsRepository;
|
||||||
import org.elasticsearch.snapshots.mockstore.BlobStoreWrapper;
|
import org.elasticsearch.snapshots.mockstore.BlobStoreWrapper;
|
||||||
|
@ -204,7 +205,8 @@ public class SnapshotsServiceDoubleFinalizationIT extends AbstractSnapshotIntegT
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Map.of(
|
return Map.of(
|
||||||
REPO_TYPE,
|
REPO_TYPE,
|
||||||
|
|
|
@ -13,6 +13,7 @@ import org.elasticsearch.common.util.BigArrays;
|
||||||
import org.elasticsearch.env.Environment;
|
import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.index.IndexVersion;
|
import org.elasticsearch.index.IndexVersion;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.snapshots.Snapshot;
|
import org.elasticsearch.snapshots.Snapshot;
|
||||||
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
||||||
|
@ -39,7 +40,8 @@ public interface RepositoryPlugin {
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.emptyMap();
|
return Collections.emptyMap();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
/*
|
||||||
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||||
|
* or more contributor license agreements. Licensed under the Elastic License
|
||||||
|
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
||||||
|
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
||||||
|
* Side Public License, v 1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.elasticsearch.repositories;
|
||||||
|
|
||||||
|
import org.elasticsearch.telemetry.metric.LongCounter;
|
||||||
|
import org.elasticsearch.telemetry.metric.LongHistogram;
|
||||||
|
import org.elasticsearch.telemetry.metric.MeterRegistry;
|
||||||
|
|
||||||
|
public record RepositoriesMetrics(
|
||||||
|
LongCounter requestCounter,
|
||||||
|
LongCounter exceptionCounter,
|
||||||
|
LongCounter throttleCounter,
|
||||||
|
LongCounter operationCounter,
|
||||||
|
LongCounter unsuccessfulOperationCounter,
|
||||||
|
LongHistogram exceptionHistogram,
|
||||||
|
LongHistogram throttleHistogram,
|
||||||
|
LongHistogram httpRequestTimeInMicroHistogram
|
||||||
|
) {
|
||||||
|
|
||||||
|
public static RepositoriesMetrics NOOP = new RepositoriesMetrics(MeterRegistry.NOOP);
|
||||||
|
|
||||||
|
public static final String METRIC_REQUESTS_COUNT = "es.repositories.requests.count";
|
||||||
|
public static final String METRIC_EXCEPTIONS_COUNT = "es.repositories.exceptions.count";
|
||||||
|
public static final String METRIC_THROTTLES_COUNT = "es.repositories.throttles.count";
|
||||||
|
public static final String METRIC_OPERATIONS_COUNT = "es.repositories.operations.count";
|
||||||
|
public static final String METRIC_UNSUCCESSFUL_OPERATIONS_COUNT = "es.repositories.operations.unsuccessful.count";
|
||||||
|
public static final String METRIC_EXCEPTIONS_HISTOGRAM = "es.repositories.exceptions.histogram";
|
||||||
|
public static final String METRIC_THROTTLES_HISTOGRAM = "es.repositories.throttles.histogram";
|
||||||
|
public static final String HTTP_REQUEST_TIME_IN_MICROS_HISTOGRAM = "es.repositories.requests.http_request_time.histogram";
|
||||||
|
|
||||||
|
public RepositoriesMetrics(MeterRegistry meterRegistry) {
|
||||||
|
this(
|
||||||
|
meterRegistry.registerLongCounter(METRIC_REQUESTS_COUNT, "repository request counter", "unit"),
|
||||||
|
meterRegistry.registerLongCounter(METRIC_EXCEPTIONS_COUNT, "repository request exception counter", "unit"),
|
||||||
|
meterRegistry.registerLongCounter(METRIC_THROTTLES_COUNT, "repository request throttle counter", "unit"),
|
||||||
|
meterRegistry.registerLongCounter(METRIC_OPERATIONS_COUNT, "repository operation counter", "unit"),
|
||||||
|
meterRegistry.registerLongCounter(METRIC_UNSUCCESSFUL_OPERATIONS_COUNT, "repository unsuccessful operation counter", "unit"),
|
||||||
|
meterRegistry.registerLongHistogram(METRIC_EXCEPTIONS_HISTOGRAM, "repository request exception histogram", "unit"),
|
||||||
|
meterRegistry.registerLongHistogram(METRIC_THROTTLES_HISTOGRAM, "repository request throttle histogram", "unit"),
|
||||||
|
meterRegistry.registerLongHistogram(
|
||||||
|
HTTP_REQUEST_TIME_IN_MICROS_HISTOGRAM,
|
||||||
|
"HttpRequestTime in microseconds expressed as as a histogram",
|
||||||
|
"micros"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -35,14 +35,6 @@ import java.util.function.BiConsumer;
|
||||||
*/
|
*/
|
||||||
public final class RepositoriesModule {
|
public final class RepositoriesModule {
|
||||||
|
|
||||||
public static final String METRIC_REQUESTS_COUNT = "es.repositories.requests.count";
|
|
||||||
public static final String METRIC_EXCEPTIONS_COUNT = "es.repositories.exceptions.count";
|
|
||||||
public static final String METRIC_THROTTLES_COUNT = "es.repositories.throttles.count";
|
|
||||||
public static final String METRIC_OPERATIONS_COUNT = "es.repositories.operations.count";
|
|
||||||
public static final String METRIC_UNSUCCESSFUL_OPERATIONS_COUNT = "es.repositories.operations.unsuccessful.count";
|
|
||||||
public static final String METRIC_EXCEPTIONS_HISTOGRAM = "es.repositories.exceptions.histogram";
|
|
||||||
public static final String METRIC_THROTTLES_HISTOGRAM = "es.repositories.throttles.histogram";
|
|
||||||
public static final String HTTP_REQUEST_TIME_IN_MICROS_HISTOGRAM = "es.repositories.requests.http_request_time.histogram";
|
|
||||||
private final RepositoriesService repositoriesService;
|
private final RepositoriesService repositoriesService;
|
||||||
|
|
||||||
public RepositoriesModule(
|
public RepositoriesModule(
|
||||||
|
@ -55,25 +47,7 @@ public final class RepositoriesModule {
|
||||||
RecoverySettings recoverySettings,
|
RecoverySettings recoverySettings,
|
||||||
TelemetryProvider telemetryProvider
|
TelemetryProvider telemetryProvider
|
||||||
) {
|
) {
|
||||||
// TODO: refactor APM metrics into their own class, passed in as a dependency (e.g. see BlobCacheMetrics as an example).
|
final RepositoriesMetrics repositoriesMetrics = new RepositoriesMetrics(telemetryProvider.getMeterRegistry());
|
||||||
telemetryProvider.getMeterRegistry().registerLongCounter(METRIC_REQUESTS_COUNT, "repository request counter", "unit");
|
|
||||||
telemetryProvider.getMeterRegistry().registerLongCounter(METRIC_EXCEPTIONS_COUNT, "repository request exception counter", "unit");
|
|
||||||
telemetryProvider.getMeterRegistry().registerLongCounter(METRIC_THROTTLES_COUNT, "repository operation counter", "unit");
|
|
||||||
telemetryProvider.getMeterRegistry()
|
|
||||||
.registerLongCounter(METRIC_OPERATIONS_COUNT, "repository unsuccessful operation counter", "unit");
|
|
||||||
telemetryProvider.getMeterRegistry()
|
|
||||||
.registerLongCounter(METRIC_UNSUCCESSFUL_OPERATIONS_COUNT, "repository request throttle counter", "unit");
|
|
||||||
telemetryProvider.getMeterRegistry()
|
|
||||||
.registerLongHistogram(METRIC_EXCEPTIONS_HISTOGRAM, "repository request exception histogram", "unit");
|
|
||||||
telemetryProvider.getMeterRegistry()
|
|
||||||
.registerLongHistogram(METRIC_THROTTLES_HISTOGRAM, "repository request throttle histogram", "unit");
|
|
||||||
telemetryProvider.getMeterRegistry()
|
|
||||||
.registerLongHistogram(
|
|
||||||
HTTP_REQUEST_TIME_IN_MICROS_HISTOGRAM,
|
|
||||||
"HttpRequestTime in microseconds expressed as as a histogram",
|
|
||||||
"micros"
|
|
||||||
);
|
|
||||||
|
|
||||||
Map<String, Repository.Factory> factories = new HashMap<>();
|
Map<String, Repository.Factory> factories = new HashMap<>();
|
||||||
factories.put(
|
factories.put(
|
||||||
FsRepository.TYPE,
|
FsRepository.TYPE,
|
||||||
|
@ -86,7 +60,8 @@ public final class RepositoriesModule {
|
||||||
namedXContentRegistry,
|
namedXContentRegistry,
|
||||||
clusterService,
|
clusterService,
|
||||||
bigArrays,
|
bigArrays,
|
||||||
recoverySettings
|
recoverySettings,
|
||||||
|
repositoriesMetrics
|
||||||
);
|
);
|
||||||
for (Map.Entry<String, Repository.Factory> entry : newRepoTypes.entrySet()) {
|
for (Map.Entry<String, Repository.Factory> entry : newRepoTypes.entrySet()) {
|
||||||
if (factories.put(entry.getKey(), entry.getValue()) != null) {
|
if (factories.put(entry.getKey(), entry.getValue()) != null) {
|
||||||
|
|
|
@ -14,9 +14,9 @@ import org.elasticsearch.common.UUIDs;
|
||||||
import org.elasticsearch.common.blobstore.BlobPath;
|
import org.elasticsearch.common.blobstore.BlobPath;
|
||||||
import org.elasticsearch.common.util.BigArrays;
|
import org.elasticsearch.common.util.BigArrays;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.RepositoryInfo;
|
import org.elasticsearch.repositories.RepositoryInfo;
|
||||||
import org.elasticsearch.repositories.RepositoryStatsSnapshot;
|
import org.elasticsearch.repositories.RepositoryStatsSnapshot;
|
||||||
import org.elasticsearch.telemetry.metric.MeterRegistry;
|
|
||||||
import org.elasticsearch.threadpool.ThreadPool;
|
import org.elasticsearch.threadpool.ThreadPool;
|
||||||
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ import java.util.Map;
|
||||||
|
|
||||||
public abstract class MeteredBlobStoreRepository extends BlobStoreRepository {
|
public abstract class MeteredBlobStoreRepository extends BlobStoreRepository {
|
||||||
private final RepositoryInfo repositoryInfo;
|
private final RepositoryInfo repositoryInfo;
|
||||||
protected final MeterRegistry meterRegistry;
|
protected final RepositoriesMetrics repositoriesMetrics;
|
||||||
|
|
||||||
public MeteredBlobStoreRepository(
|
public MeteredBlobStoreRepository(
|
||||||
RepositoryMetadata metadata,
|
RepositoryMetadata metadata,
|
||||||
|
@ -34,10 +34,10 @@ public abstract class MeteredBlobStoreRepository extends BlobStoreRepository {
|
||||||
RecoverySettings recoverySettings,
|
RecoverySettings recoverySettings,
|
||||||
BlobPath basePath,
|
BlobPath basePath,
|
||||||
Map<String, String> location,
|
Map<String, String> location,
|
||||||
MeterRegistry meterRegistry
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
super(metadata, namedXContentRegistry, clusterService, bigArrays, recoverySettings, basePath);
|
super(metadata, namedXContentRegistry, clusterService, bigArrays, recoverySettings, basePath);
|
||||||
this.meterRegistry = meterRegistry;
|
this.repositoriesMetrics = repositoriesMetrics;
|
||||||
ThreadPool threadPool = clusterService.getClusterApplierService().threadPool();
|
ThreadPool threadPool = clusterService.getClusterApplierService().threadPool();
|
||||||
this.repositoryInfo = new RepositoryInfo(
|
this.repositoryInfo = new RepositoryInfo(
|
||||||
UUIDs.randomBase64UUID(),
|
UUIDs.randomBase64UUID(),
|
||||||
|
|
|
@ -24,6 +24,8 @@ import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
@ -58,9 +60,13 @@ public class RepositoriesModuleTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testCanRegisterTwoRepositoriesWithDifferentTypes() {
|
public void testCanRegisterTwoRepositoriesWithDifferentTypes() {
|
||||||
when(plugin1.getRepositories(environment, contentRegistry, clusterService, MockBigArrays.NON_RECYCLING_INSTANCE, recoverySettings))
|
when(plugin1.getRepositories(eq(environment), eq(contentRegistry), eq(clusterService),
|
||||||
|
eq(MockBigArrays.NON_RECYCLING_INSTANCE), eq(recoverySettings),
|
||||||
|
any(RepositoriesMetrics.class)))
|
||||||
.thenReturn(Collections.singletonMap("type1", factory));
|
.thenReturn(Collections.singletonMap("type1", factory));
|
||||||
when(plugin2.getRepositories(environment, contentRegistry, clusterService, MockBigArrays.NON_RECYCLING_INSTANCE, recoverySettings))
|
when(plugin2.getRepositories(eq(environment), eq(contentRegistry), eq(clusterService),
|
||||||
|
eq(MockBigArrays.NON_RECYCLING_INSTANCE), eq(recoverySettings),
|
||||||
|
any(RepositoriesMetrics.class)))
|
||||||
.thenReturn(Collections.singletonMap("type2", factory));
|
.thenReturn(Collections.singletonMap("type2", factory));
|
||||||
|
|
||||||
// Would throw
|
// Would throw
|
||||||
|
@ -75,9 +81,13 @@ public class RepositoriesModuleTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testCannotRegisterTwoRepositoriesWithSameTypes() {
|
public void testCannotRegisterTwoRepositoriesWithSameTypes() {
|
||||||
when(plugin1.getRepositories(environment, contentRegistry, clusterService, MockBigArrays.NON_RECYCLING_INSTANCE, recoverySettings))
|
when(plugin1.getRepositories(eq(environment), eq(contentRegistry), eq(clusterService),
|
||||||
|
eq(MockBigArrays.NON_RECYCLING_INSTANCE), eq(recoverySettings),
|
||||||
|
any(RepositoriesMetrics.class)))
|
||||||
.thenReturn(Collections.singletonMap("type1", factory));
|
.thenReturn(Collections.singletonMap("type1", factory));
|
||||||
when(plugin2.getRepositories(environment, contentRegistry, clusterService, MockBigArrays.NON_RECYCLING_INSTANCE, recoverySettings))
|
when(plugin2.getRepositories(eq(environment), eq(contentRegistry), eq(clusterService),
|
||||||
|
eq(MockBigArrays.NON_RECYCLING_INSTANCE), eq(recoverySettings),
|
||||||
|
any(RepositoriesMetrics.class)))
|
||||||
.thenReturn(Collections.singletonMap("type1", factory));
|
.thenReturn(Collections.singletonMap("type1", factory));
|
||||||
|
|
||||||
IllegalArgumentException ex = expectThrows(
|
IllegalArgumentException ex = expectThrows(
|
||||||
|
@ -119,7 +129,9 @@ public class RepositoriesModuleTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testCannotRegisterNormalAndInternalRepositoriesWithSameTypes() {
|
public void testCannotRegisterNormalAndInternalRepositoriesWithSameTypes() {
|
||||||
when(plugin1.getRepositories(environment, contentRegistry, clusterService, MockBigArrays.NON_RECYCLING_INSTANCE, recoverySettings))
|
when(plugin1.getRepositories(eq(environment), eq(contentRegistry), eq(clusterService),
|
||||||
|
eq(MockBigArrays.NON_RECYCLING_INSTANCE), eq(recoverySettings),
|
||||||
|
any(RepositoriesMetrics.class)))
|
||||||
.thenReturn(Collections.singletonMap("type1", factory));
|
.thenReturn(Collections.singletonMap("type1", factory));
|
||||||
when(plugin2.getInternalRepositories(environment, contentRegistry, clusterService, recoverySettings)).thenReturn(
|
when(plugin2.getInternalRepositories(environment, contentRegistry, clusterService, recoverySettings)).thenReturn(
|
||||||
Collections.singletonMap("type1", factory)
|
Collections.singletonMap("type1", factory)
|
||||||
|
|
|
@ -39,7 +39,6 @@ import org.elasticsearch.indices.recovery.RecoveryState;
|
||||||
import org.elasticsearch.repositories.blobstore.MeteredBlobStoreRepository;
|
import org.elasticsearch.repositories.blobstore.MeteredBlobStoreRepository;
|
||||||
import org.elasticsearch.snapshots.SnapshotDeleteListener;
|
import org.elasticsearch.snapshots.SnapshotDeleteListener;
|
||||||
import org.elasticsearch.snapshots.SnapshotId;
|
import org.elasticsearch.snapshots.SnapshotId;
|
||||||
import org.elasticsearch.telemetry.metric.MeterRegistry;
|
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
import org.elasticsearch.threadpool.ThreadPool;
|
import org.elasticsearch.threadpool.ThreadPool;
|
||||||
import org.elasticsearch.transport.Transport;
|
import org.elasticsearch.transport.Transport;
|
||||||
|
@ -484,7 +483,7 @@ public class RepositoriesServiceTests extends ESTestCase {
|
||||||
mock(RecoverySettings.class),
|
mock(RecoverySettings.class),
|
||||||
BlobPath.EMPTY,
|
BlobPath.EMPTY,
|
||||||
Map.of("bucket", "bucket-a"),
|
Map.of("bucket", "bucket-a"),
|
||||||
MeterRegistry.NOOP
|
RepositoriesMetrics.NOOP
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -512,7 +511,7 @@ public class RepositoriesServiceTests extends ESTestCase {
|
||||||
mock(RecoverySettings.class),
|
mock(RecoverySettings.class),
|
||||||
BlobPath.EMPTY,
|
BlobPath.EMPTY,
|
||||||
Map.of("bucket", "bucket-b"),
|
Map.of("bucket", "bucket-b"),
|
||||||
MeterRegistry.NOOP
|
RepositoriesMetrics.NOOP
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@ import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.repositories.fs.FsRepository;
|
import org.elasticsearch.repositories.fs.FsRepository;
|
||||||
import org.elasticsearch.test.ESIntegTestCase;
|
import org.elasticsearch.test.ESIntegTestCase;
|
||||||
|
@ -69,7 +70,8 @@ public class BlobStoreRepositoryDeleteThrottlingTests extends ESSingleNodeTestCa
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.singletonMap(
|
return Collections.singletonMap(
|
||||||
TEST_REPO_TYPE,
|
TEST_REPO_TYPE,
|
||||||
|
|
|
@ -20,6 +20,7 @@ import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.license.LicenseSettings;
|
import org.elasticsearch.license.LicenseSettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.snapshots.AbstractSnapshotIntegTestCase;
|
import org.elasticsearch.snapshots.AbstractSnapshotIntegTestCase;
|
||||||
import org.elasticsearch.snapshots.SnapshotInfo;
|
import org.elasticsearch.snapshots.SnapshotInfo;
|
||||||
|
@ -57,7 +58,8 @@ public class LatencySimulatingBlobStoreRepositoryTests extends AbstractSnapshotI
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Map.of(
|
return Map.of(
|
||||||
REPO_TYPE,
|
REPO_TYPE,
|
||||||
|
|
|
@ -15,6 +15,7 @@ import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
import org.elasticsearch.xcontent.NamedXContentRegistry;
|
||||||
|
|
||||||
|
@ -34,7 +35,8 @@ public class LatencySimulatingRepositoryPlugin extends Plugin implements Reposit
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Map.of(
|
return Map.of(
|
||||||
TYPE,
|
TYPE,
|
||||||
|
|
|
@ -36,6 +36,7 @@ import org.elasticsearch.core.PathUtils;
|
||||||
import org.elasticsearch.env.Environment;
|
import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.repositories.blobstore.BlobStoreRepository;
|
import org.elasticsearch.repositories.blobstore.BlobStoreRepository;
|
||||||
import org.elasticsearch.repositories.fs.FsRepository;
|
import org.elasticsearch.repositories.fs.FsRepository;
|
||||||
|
@ -82,7 +83,8 @@ public class MockRepository extends FsRepository {
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.singletonMap(
|
return Collections.singletonMap(
|
||||||
"mock",
|
"mock",
|
||||||
|
|
|
@ -32,6 +32,7 @@ import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.EnginePlugin;
|
import org.elasticsearch.plugins.EnginePlugin;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.search.SearchHit;
|
import org.elasticsearch.search.SearchHit;
|
||||||
import org.elasticsearch.search.SearchHits;
|
import org.elasticsearch.search.SearchHits;
|
||||||
|
@ -86,7 +87,8 @@ public class SourceOnlySnapshotIT extends AbstractSnapshotIntegTestCase {
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.singletonMap("source", SourceOnlySnapshotRepository.newRepositoryFactory());
|
return Collections.singletonMap("source", SourceOnlySnapshotRepository.newRepositoryFactory());
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,6 +78,7 @@ import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
import org.elasticsearch.protocol.xpack.XPackInfoRequest;
|
import org.elasticsearch.protocol.xpack.XPackInfoRequest;
|
||||||
import org.elasticsearch.protocol.xpack.XPackInfoResponse;
|
import org.elasticsearch.protocol.xpack.XPackInfoResponse;
|
||||||
import org.elasticsearch.protocol.xpack.XPackUsageRequest;
|
import org.elasticsearch.protocol.xpack.XPackUsageRequest;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.rest.RestController;
|
import org.elasticsearch.rest.RestController;
|
||||||
import org.elasticsearch.rest.RestHandler;
|
import org.elasticsearch.rest.RestHandler;
|
||||||
|
@ -431,7 +432,8 @@ public class XPackPlugin extends XPackClientPlugin
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.singletonMap("source", SourceOnlySnapshotRepository.newRepositoryFactory());
|
return Collections.singletonMap("source", SourceOnlySnapshotRepository.newRepositoryFactory());
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,6 +78,7 @@ import org.elasticsearch.plugins.SearchPlugin;
|
||||||
import org.elasticsearch.plugins.ShutdownAwarePlugin;
|
import org.elasticsearch.plugins.ShutdownAwarePlugin;
|
||||||
import org.elasticsearch.plugins.SystemIndexPlugin;
|
import org.elasticsearch.plugins.SystemIndexPlugin;
|
||||||
import org.elasticsearch.plugins.interceptor.RestServerActionPlugin;
|
import org.elasticsearch.plugins.interceptor.RestServerActionPlugin;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.rest.RestController;
|
import org.elasticsearch.rest.RestController;
|
||||||
import org.elasticsearch.rest.RestHandler;
|
import org.elasticsearch.rest.RestHandler;
|
||||||
|
@ -493,13 +494,16 @@ public class LocalStateCompositeXPackPlugin extends XPackPlugin
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
HashMap<String, Repository.Factory> repositories = new HashMap<>(
|
HashMap<String, Repository.Factory> repositories = new HashMap<>(
|
||||||
super.getRepositories(env, namedXContentRegistry, clusterService, bigArrays, recoverySettings)
|
super.getRepositories(env, namedXContentRegistry, clusterService, bigArrays, recoverySettings, repositoriesMetrics)
|
||||||
);
|
);
|
||||||
filterPlugins(RepositoryPlugin.class).forEach(
|
filterPlugins(RepositoryPlugin.class).forEach(
|
||||||
r -> repositories.putAll(r.getRepositories(env, namedXContentRegistry, clusterService, bigArrays, recoverySettings))
|
r -> repositories.putAll(
|
||||||
|
r.getRepositories(env, namedXContentRegistry, clusterService, bigArrays, recoverySettings, RepositoriesMetrics.NOOP)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
return repositories;
|
return repositories;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ import org.elasticsearch.license.PostStartTrialRequest;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
import org.elasticsearch.repositories.IndexId;
|
import org.elasticsearch.repositories.IndexId;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.repositories.RepositoryData;
|
import org.elasticsearch.repositories.RepositoryData;
|
||||||
import org.elasticsearch.repositories.fs.FsRepository;
|
import org.elasticsearch.repositories.fs.FsRepository;
|
||||||
|
@ -60,7 +61,8 @@ public abstract class AbstractArchiveTestCase extends AbstractSnapshotIntegTestC
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Map.of(
|
return Map.of(
|
||||||
FAKE_VERSIONS_TYPE,
|
FAKE_VERSIONS_TYPE,
|
||||||
|
|
|
@ -34,6 +34,7 @@ import org.elasticsearch.indices.recovery.RecoveryState;
|
||||||
import org.elasticsearch.node.NodeRoleSettings;
|
import org.elasticsearch.node.NodeRoleSettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.repositories.IndexId;
|
import org.elasticsearch.repositories.IndexId;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.RepositoriesService;
|
import org.elasticsearch.repositories.RepositoriesService;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.repositories.fs.FsRepository;
|
import org.elasticsearch.repositories.fs.FsRepository;
|
||||||
|
@ -376,7 +377,8 @@ public class SearchableSnapshotDiskThresholdIntegTests extends DiskUsageIntegTes
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.singletonMap(
|
return Collections.singletonMap(
|
||||||
TYPE,
|
TYPE,
|
||||||
|
|
|
@ -41,6 +41,7 @@ import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.PluginsService;
|
import org.elasticsearch.plugins.PluginsService;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
import org.elasticsearch.repositories.IndexId;
|
import org.elasticsearch.repositories.IndexId;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.RepositoriesService;
|
import org.elasticsearch.repositories.RepositoriesService;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.repositories.RepositoryData;
|
import org.elasticsearch.repositories.RepositoryData;
|
||||||
|
@ -440,7 +441,8 @@ public class SearchableSnapshotsPrewarmingIntegTests extends ESSingleNodeTestCas
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.singletonMap(
|
return Collections.singletonMap(
|
||||||
"tracking",
|
"tracking",
|
||||||
|
|
|
@ -25,6 +25,7 @@ import org.elasticsearch.indices.recovery.RecoveryState;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
import org.elasticsearch.repositories.IndexId;
|
import org.elasticsearch.repositories.IndexId;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.RepositoriesService;
|
import org.elasticsearch.repositories.RepositoriesService;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.repositories.RepositoryData;
|
import org.elasticsearch.repositories.RepositoryData;
|
||||||
|
@ -240,7 +241,8 @@ public class SearchableSnapshotRecoveryStateIntegrationTests extends BaseSearcha
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.singletonMap(
|
return Collections.singletonMap(
|
||||||
"test-fs",
|
"test-fs",
|
||||||
|
|
|
@ -57,6 +57,7 @@ import org.elasticsearch.indices.recovery.RecoveryState;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
import org.elasticsearch.repositories.IndexId;
|
import org.elasticsearch.repositories.IndexId;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.RepositoriesService;
|
import org.elasticsearch.repositories.RepositoriesService;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.repositories.blobstore.BlobStoreRepository;
|
import org.elasticsearch.repositories.blobstore.BlobStoreRepository;
|
||||||
|
@ -148,7 +149,8 @@ public class SnapshotBasedIndexRecoveryIT extends AbstractSnapshotIntegTestCase
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Map.of(
|
return Map.of(
|
||||||
FAULTY_TYPE,
|
FAULTY_TYPE,
|
||||||
|
|
|
@ -32,6 +32,7 @@ import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.RepositoriesService;
|
import org.elasticsearch.repositories.RepositoriesService;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.repositories.RepositoryMissingException;
|
import org.elasticsearch.repositories.RepositoryMissingException;
|
||||||
|
@ -430,7 +431,8 @@ public class RepositoryAnalysisFailureIT extends AbstractSnapshotIntegTestCase {
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Map.of(
|
return Map.of(
|
||||||
DISRUPTABLE_REPO_TYPE,
|
DISRUPTABLE_REPO_TYPE,
|
||||||
|
|
|
@ -31,6 +31,7 @@ import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.RepositoriesService;
|
import org.elasticsearch.repositories.RepositoriesService;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.repositories.RepositoryMissingException;
|
import org.elasticsearch.repositories.RepositoryMissingException;
|
||||||
|
@ -149,7 +150,8 @@ public class RepositoryAnalysisSuccessIT extends AbstractSnapshotIntegTestCase {
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Map.of(
|
return Map.of(
|
||||||
ASSERTING_REPO_TYPE,
|
ASSERTING_REPO_TYPE,
|
||||||
|
|
|
@ -25,6 +25,7 @@ import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||||
import org.elasticsearch.node.Node;
|
import org.elasticsearch.node.Node;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.plugins.RepositoryPlugin;
|
import org.elasticsearch.plugins.RepositoryPlugin;
|
||||||
|
import org.elasticsearch.repositories.RepositoriesMetrics;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
import org.elasticsearch.repositories.fs.FsRepository;
|
import org.elasticsearch.repositories.fs.FsRepository;
|
||||||
import org.elasticsearch.snapshots.SnapshotInfo;
|
import org.elasticsearch.snapshots.SnapshotInfo;
|
||||||
|
@ -243,7 +244,8 @@ public class VotingOnlyNodePluginTests extends ESIntegTestCase {
|
||||||
NamedXContentRegistry namedXContentRegistry,
|
NamedXContentRegistry namedXContentRegistry,
|
||||||
ClusterService clusterService,
|
ClusterService clusterService,
|
||||||
BigArrays bigArrays,
|
BigArrays bigArrays,
|
||||||
RecoverySettings recoverySettings
|
RecoverySettings recoverySettings,
|
||||||
|
RepositoriesMetrics repositoriesMetrics
|
||||||
) {
|
) {
|
||||||
return Collections.singletonMap(
|
return Collections.singletonMap(
|
||||||
"verifyaccess-fs",
|
"verifyaccess-fs",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue