[Monitoring] Use the same Cluster State for all Collectors (elastic/x-pack-elasticsearch#3216)
This commit changes the Collectors so that they all use the same instance of ClusterState. relates elastic/x-pack-elasticsearch#3156 Original commit: elastic/x-pack-elasticsearch@4f537b026c
This commit is contained in:
parent
0d46e9035c
commit
711254fd24
|
@ -161,7 +161,7 @@ public class Monitoring implements ActionPlugin {
|
||||||
collectors.add(new IndexRecoveryCollector(settings, clusterService, licenseState, client));
|
collectors.add(new IndexRecoveryCollector(settings, clusterService, licenseState, client));
|
||||||
collectors.add(new JobStatsCollector(settings, clusterService, licenseState, client));
|
collectors.add(new JobStatsCollector(settings, clusterService, licenseState, client));
|
||||||
|
|
||||||
final MonitoringService monitoringService = new MonitoringService(settings, clusterSettings, threadPool, collectors, exporters);
|
final MonitoringService monitoringService = new MonitoringService(settings, clusterService, threadPool, collectors, exporters);
|
||||||
|
|
||||||
return Arrays.asList(monitoringService, exporters, cleanerService);
|
return Arrays.asList(monitoringService, exporters, cleanerService);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,8 @@ package org.elasticsearch.xpack.monitoring;
|
||||||
import org.apache.logging.log4j.message.ParameterizedMessage;
|
import org.apache.logging.log4j.message.ParameterizedMessage;
|
||||||
import org.apache.logging.log4j.util.Supplier;
|
import org.apache.logging.log4j.util.Supplier;
|
||||||
import org.elasticsearch.action.ActionListener;
|
import org.elasticsearch.action.ActionListener;
|
||||||
|
import org.elasticsearch.cluster.ClusterState;
|
||||||
|
import org.elasticsearch.cluster.service.ClusterService;
|
||||||
import org.elasticsearch.common.component.AbstractLifecycleComponent;
|
import org.elasticsearch.common.component.AbstractLifecycleComponent;
|
||||||
import org.elasticsearch.common.settings.ClusterSettings;
|
import org.elasticsearch.common.settings.ClusterSettings;
|
||||||
import org.elasticsearch.common.settings.Setting;
|
import org.elasticsearch.common.settings.Setting;
|
||||||
|
@ -61,6 +63,7 @@ public class MonitoringService extends AbstractLifecycleComponent {
|
||||||
/** Task in charge of collecting and exporting monitoring data **/
|
/** Task in charge of collecting and exporting monitoring data **/
|
||||||
private final MonitoringExecution monitor = new MonitoringExecution();
|
private final MonitoringExecution monitor = new MonitoringExecution();
|
||||||
|
|
||||||
|
private final ClusterService clusterService;
|
||||||
private final ThreadPool threadPool;
|
private final ThreadPool threadPool;
|
||||||
private final Set<Collector> collectors;
|
private final Set<Collector> collectors;
|
||||||
private final Exporters exporters;
|
private final Exporters exporters;
|
||||||
|
@ -68,14 +71,15 @@ public class MonitoringService extends AbstractLifecycleComponent {
|
||||||
private volatile TimeValue interval;
|
private volatile TimeValue interval;
|
||||||
private volatile ThreadPool.Cancellable scheduler;
|
private volatile ThreadPool.Cancellable scheduler;
|
||||||
|
|
||||||
MonitoringService(Settings settings, ClusterSettings clusterSettings, ThreadPool threadPool,
|
MonitoringService(Settings settings, ClusterService clusterService, ThreadPool threadPool,
|
||||||
Set<Collector> collectors, Exporters exporters) {
|
Set<Collector> collectors, Exporters exporters) {
|
||||||
super(settings);
|
super(settings);
|
||||||
|
this.clusterService = Objects.requireNonNull(clusterService);
|
||||||
this.threadPool = Objects.requireNonNull(threadPool);
|
this.threadPool = Objects.requireNonNull(threadPool);
|
||||||
this.collectors = Objects.requireNonNull(collectors);
|
this.collectors = Objects.requireNonNull(collectors);
|
||||||
this.exporters = Objects.requireNonNull(exporters);
|
this.exporters = Objects.requireNonNull(exporters);
|
||||||
this.interval = INTERVAL.get(settings);
|
this.interval = INTERVAL.get(settings);
|
||||||
clusterSettings.addSettingsUpdateConsumer(INTERVAL, this::setInterval);
|
clusterService.getClusterSettings().addSettingsUpdateConsumer(INTERVAL, this::setInterval);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setInterval(TimeValue interval) {
|
void setInterval(TimeValue interval) {
|
||||||
|
@ -191,6 +195,8 @@ public class MonitoringService extends AbstractLifecycleComponent {
|
||||||
@Override
|
@Override
|
||||||
protected void doRun() throws Exception {
|
protected void doRun() throws Exception {
|
||||||
final long timestamp = System.currentTimeMillis();
|
final long timestamp = System.currentTimeMillis();
|
||||||
|
final long intervalInMillis = interval.getMillis();
|
||||||
|
final ClusterState clusterState = clusterService.state();
|
||||||
|
|
||||||
final Collection<MonitoringDoc> results = new ArrayList<>();
|
final Collection<MonitoringDoc> results = new ArrayList<>();
|
||||||
for (Collector collector : collectors) {
|
for (Collector collector : collectors) {
|
||||||
|
@ -201,7 +207,7 @@ public class MonitoringService extends AbstractLifecycleComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Collection<MonitoringDoc> result = collector.collect(timestamp, interval.getMillis());
|
Collection<MonitoringDoc> result = collector.collect(timestamp, intervalInMillis, clusterState);
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
results.addAll(result);
|
results.addAll(result);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ package org.elasticsearch.xpack.monitoring.collector;
|
||||||
import org.apache.logging.log4j.message.ParameterizedMessage;
|
import org.apache.logging.log4j.message.ParameterizedMessage;
|
||||||
import org.apache.logging.log4j.util.Supplier;
|
import org.apache.logging.log4j.util.Supplier;
|
||||||
import org.elasticsearch.ElasticsearchTimeoutException;
|
import org.elasticsearch.ElasticsearchTimeoutException;
|
||||||
|
import org.elasticsearch.cluster.ClusterState;
|
||||||
import org.elasticsearch.cluster.node.DiscoveryNode;
|
import org.elasticsearch.cluster.node.DiscoveryNode;
|
||||||
import org.elasticsearch.cluster.service.ClusterService;
|
import org.elasticsearch.cluster.service.ClusterService;
|
||||||
import org.elasticsearch.common.Strings;
|
import org.elasticsearch.common.Strings;
|
||||||
|
@ -68,8 +69,10 @@ public abstract class Collector extends AbstractComponent {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates if the current collector is allowed to collect data
|
* Indicates if the current collector is allowed to collect data
|
||||||
|
*
|
||||||
|
* @param isElectedMaster true if the current local node is the elected master node
|
||||||
*/
|
*/
|
||||||
protected boolean shouldCollect() {
|
protected boolean shouldCollect(final boolean isElectedMaster) {
|
||||||
if (licenseState.isMonitoringAllowed() == false) {
|
if (licenseState.isMonitoringAllowed() == false) {
|
||||||
logger.trace("collector [{}] can not collect data due to invalid license", name());
|
logger.trace("collector [{}] can not collect data due to invalid license", name());
|
||||||
return false;
|
return false;
|
||||||
|
@ -77,15 +80,12 @@ public abstract class Collector extends AbstractComponent {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean isLocalNodeMaster() {
|
public Collection<MonitoringDoc> collect(final long timestamp, final long interval, final ClusterState clusterState) {
|
||||||
return clusterService.state().nodes().isLocalNodeElectedMaster();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Collection<MonitoringDoc> collect(final long timestamp, final long interval) {
|
|
||||||
try {
|
try {
|
||||||
if (shouldCollect()) {
|
final boolean isElectedMaster = clusterState.getNodes().isLocalNodeElectedMaster();
|
||||||
|
if (shouldCollect(isElectedMaster)) {
|
||||||
logger.trace("collector [{}] - collecting data...", name());
|
logger.trace("collector [{}] - collecting data...", name());
|
||||||
return doCollect(convertNode(timestamp, clusterService.localNode()), interval);
|
return doCollect(convertNode(timestamp, clusterService.localNode()), interval, clusterState);
|
||||||
}
|
}
|
||||||
} catch (ElasticsearchTimeoutException e) {
|
} catch (ElasticsearchTimeoutException e) {
|
||||||
logger.error((Supplier<?>) () -> new ParameterizedMessage("collector [{}] timed out when collecting data", name()));
|
logger.error((Supplier<?>) () -> new ParameterizedMessage("collector [{}] timed out when collecting data", name()));
|
||||||
|
@ -95,11 +95,9 @@ public abstract class Collector extends AbstractComponent {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract Collection<MonitoringDoc> doCollect(MonitoringDoc.Node sourceNode, long interval) throws Exception;
|
protected abstract Collection<MonitoringDoc> doCollect(MonitoringDoc.Node node,
|
||||||
|
long interval,
|
||||||
protected String clusterUUID() {
|
ClusterState clusterState) throws Exception;
|
||||||
return clusterService.state().metaData().clusterUUID();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a timestamp to use in {@link MonitoringDoc}
|
* Returns a timestamp to use in {@link MonitoringDoc}
|
||||||
|
@ -110,6 +108,16 @@ public abstract class Collector extends AbstractComponent {
|
||||||
return System.currentTimeMillis();
|
return System.currentTimeMillis();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extracts the current cluster's UUID from a {@link ClusterState}
|
||||||
|
*
|
||||||
|
* @param clusterState the {@link ClusterState}
|
||||||
|
* @return the cluster's UUID
|
||||||
|
*/
|
||||||
|
protected static String clusterUuid(final ClusterState clusterState) {
|
||||||
|
return clusterState.metaData().clusterUUID();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the value of the collection timeout configured for the current {@link Collector}.
|
* Returns the value of the collection timeout configured for the current {@link Collector}.
|
||||||
*
|
*
|
||||||
|
|
|
@ -81,13 +81,15 @@ public class ClusterStatsCollector extends Collector {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean shouldCollect() {
|
protected boolean shouldCollect(final boolean isElectedMaster) {
|
||||||
// This collector can always collect data on the master node
|
// This collector can always collect data on the master node
|
||||||
return isLocalNodeMaster();
|
return isElectedMaster;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Collection<MonitoringDoc> doCollect(final MonitoringDoc.Node node, final long interval) throws Exception {
|
protected Collection<MonitoringDoc> doCollect(final MonitoringDoc.Node node,
|
||||||
|
final long interval,
|
||||||
|
final ClusterState clusterState) throws Exception {
|
||||||
final Supplier<ClusterStatsResponse> clusterStatsSupplier =
|
final Supplier<ClusterStatsResponse> clusterStatsSupplier =
|
||||||
() -> client.admin().cluster().prepareClusterStats().get(getCollectionTimeout());
|
() -> client.admin().cluster().prepareClusterStats().get(getCollectionTimeout());
|
||||||
final Supplier<List<XPackFeatureSet.Usage>> usageSupplier =
|
final Supplier<List<XPackFeatureSet.Usage>> usageSupplier =
|
||||||
|
@ -96,8 +98,8 @@ public class ClusterStatsCollector extends Collector {
|
||||||
final ClusterStatsResponse clusterStats = clusterStatsSupplier.get();
|
final ClusterStatsResponse clusterStats = clusterStatsSupplier.get();
|
||||||
|
|
||||||
final String clusterName = clusterService.getClusterName().value();
|
final String clusterName = clusterService.getClusterName().value();
|
||||||
|
final String clusterUuid = clusterUuid(clusterState);
|
||||||
final String version = Version.CURRENT.toString();
|
final String version = Version.CURRENT.toString();
|
||||||
final ClusterState clusterState = clusterService.state();
|
|
||||||
final License license = licenseService.getLicense();
|
final License license = licenseService.getLicense();
|
||||||
final List<XPackFeatureSet.Usage> xpackUsage = collect(usageSupplier);
|
final List<XPackFeatureSet.Usage> xpackUsage = collect(usageSupplier);
|
||||||
final boolean apmIndicesExist = doAPMIndicesExist(clusterState);
|
final boolean apmIndicesExist = doAPMIndicesExist(clusterState);
|
||||||
|
@ -108,7 +110,7 @@ public class ClusterStatsCollector extends Collector {
|
||||||
|
|
||||||
// Adds a cluster stats document
|
// Adds a cluster stats document
|
||||||
return Collections.singleton(
|
return Collections.singleton(
|
||||||
new ClusterStatsMonitoringDoc(clusterUUID(), timestamp(), interval, node, clusterName, version, clusterStats.getStatus(),
|
new ClusterStatsMonitoringDoc(clusterUuid, timestamp(), interval, node, clusterName, version, clusterStats.getStatus(),
|
||||||
license, apmIndicesExist, xpackUsage, clusterStats, clusterState, clusterNeedsTLSEnabled));
|
license, apmIndicesExist, xpackUsage, clusterStats, clusterState, clusterNeedsTLSEnabled));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ package org.elasticsearch.xpack.monitoring.collector.indices;
|
||||||
import org.elasticsearch.action.admin.indices.recovery.RecoveryResponse;
|
import org.elasticsearch.action.admin.indices.recovery.RecoveryResponse;
|
||||||
import org.elasticsearch.action.support.IndicesOptions;
|
import org.elasticsearch.action.support.IndicesOptions;
|
||||||
import org.elasticsearch.client.Client;
|
import org.elasticsearch.client.Client;
|
||||||
|
import org.elasticsearch.cluster.ClusterState;
|
||||||
import org.elasticsearch.cluster.service.ClusterService;
|
import org.elasticsearch.cluster.service.ClusterService;
|
||||||
import org.elasticsearch.common.settings.Setting;
|
import org.elasticsearch.common.settings.Setting;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
|
@ -59,12 +60,14 @@ public class IndexRecoveryCollector extends Collector {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean shouldCollect() {
|
protected boolean shouldCollect(final boolean isElectedMaster) {
|
||||||
return super.shouldCollect() && isLocalNodeMaster();
|
return isElectedMaster && super.shouldCollect(isElectedMaster);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Collection<MonitoringDoc> doCollect(final MonitoringDoc.Node node, final long interval) throws Exception {
|
protected Collection<MonitoringDoc> doCollect(final MonitoringDoc.Node node,
|
||||||
|
final long interval,
|
||||||
|
final ClusterState clusterState) throws Exception {
|
||||||
List<MonitoringDoc> results = new ArrayList<>(1);
|
List<MonitoringDoc> results = new ArrayList<>(1);
|
||||||
RecoveryResponse recoveryResponse = client.admin().indices().prepareRecoveries()
|
RecoveryResponse recoveryResponse = client.admin().indices().prepareRecoveries()
|
||||||
.setIndices(getCollectionIndices())
|
.setIndices(getCollectionIndices())
|
||||||
|
@ -73,7 +76,8 @@ public class IndexRecoveryCollector extends Collector {
|
||||||
.get(getCollectionTimeout());
|
.get(getCollectionTimeout());
|
||||||
|
|
||||||
if (recoveryResponse.hasRecoveries()) {
|
if (recoveryResponse.hasRecoveries()) {
|
||||||
results.add(new IndexRecoveryMonitoringDoc(clusterUUID(), timestamp(), interval, node, recoveryResponse));
|
final String clusterUuid = clusterUuid(clusterState);
|
||||||
|
results.add(new IndexRecoveryMonitoringDoc(clusterUuid, timestamp(), interval, node, recoveryResponse));
|
||||||
}
|
}
|
||||||
return Collections.unmodifiableCollection(results);
|
return Collections.unmodifiableCollection(results);
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,12 +49,14 @@ public class IndexStatsCollector extends Collector {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean shouldCollect() {
|
protected boolean shouldCollect(final boolean isElectedMaster) {
|
||||||
return super.shouldCollect() && isLocalNodeMaster();
|
return isElectedMaster && super.shouldCollect(isElectedMaster);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Collection<MonitoringDoc> doCollect(final MonitoringDoc.Node node, final long interval) throws Exception {
|
protected Collection<MonitoringDoc> doCollect(final MonitoringDoc.Node node,
|
||||||
|
final long interval,
|
||||||
|
final ClusterState clusterState) throws Exception {
|
||||||
final List<MonitoringDoc> results = new ArrayList<>();
|
final List<MonitoringDoc> results = new ArrayList<>();
|
||||||
final IndicesStatsResponse indicesStats = client.admin().indices().prepareStats()
|
final IndicesStatsResponse indicesStats = client.admin().indices().prepareStats()
|
||||||
.setIndices(getCollectionIndices())
|
.setIndices(getCollectionIndices())
|
||||||
|
@ -73,8 +75,7 @@ public class IndexStatsCollector extends Collector {
|
||||||
.get(getCollectionTimeout());
|
.get(getCollectionTimeout());
|
||||||
|
|
||||||
final long timestamp = timestamp();
|
final long timestamp = timestamp();
|
||||||
final String clusterUuid = clusterUUID();
|
final String clusterUuid = clusterUuid(clusterState);
|
||||||
final ClusterState clusterState = clusterService.state();
|
|
||||||
|
|
||||||
// add the indices stats that we use to collect the index stats
|
// add the indices stats that we use to collect the index stats
|
||||||
results.add(new IndicesStatsMonitoringDoc(clusterUuid, timestamp, interval, node, indicesStats));
|
results.add(new IndicesStatsMonitoringDoc(clusterUuid, timestamp, interval, node, indicesStats));
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
package org.elasticsearch.xpack.monitoring.collector.ml;
|
package org.elasticsearch.xpack.monitoring.collector.ml;
|
||||||
|
|
||||||
import org.elasticsearch.client.Client;
|
import org.elasticsearch.client.Client;
|
||||||
|
import org.elasticsearch.cluster.ClusterState;
|
||||||
import org.elasticsearch.cluster.metadata.MetaData;
|
import org.elasticsearch.cluster.metadata.MetaData;
|
||||||
import org.elasticsearch.cluster.service.ClusterService;
|
import org.elasticsearch.cluster.service.ClusterService;
|
||||||
import org.elasticsearch.common.settings.Setting;
|
import org.elasticsearch.common.settings.Setting;
|
||||||
|
@ -57,15 +58,18 @@ public class JobStatsCollector extends Collector {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean shouldCollect() {
|
protected boolean shouldCollect(final boolean isElectedMaster) {
|
||||||
// This can only run when monitoring is allowed + ML is enabled/allowed, but also only on the elected master node
|
// This can only run when monitoring is allowed + ML is enabled/allowed, but also only on the elected master node
|
||||||
return super.shouldCollect() &&
|
return isElectedMaster
|
||||||
XPackSettings.MACHINE_LEARNING_ENABLED.get(settings) && licenseState.isMachineLearningAllowed() &&
|
&& super.shouldCollect(isElectedMaster)
|
||||||
isLocalNodeMaster();
|
&& XPackSettings.MACHINE_LEARNING_ENABLED.get(settings)
|
||||||
|
&& licenseState.isMachineLearningAllowed();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected List<MonitoringDoc> doCollect(final MonitoringDoc.Node node, final long interval) throws Exception {
|
protected List<MonitoringDoc> doCollect(final MonitoringDoc.Node node,
|
||||||
|
final long interval,
|
||||||
|
final ClusterState clusterState) throws Exception {
|
||||||
// fetch details about all jobs
|
// fetch details about all jobs
|
||||||
try (ThreadContext.StoredContext ignore = stashWithOrigin(threadContext, MONITORING_ORIGIN)) {
|
try (ThreadContext.StoredContext ignore = stashWithOrigin(threadContext, MONITORING_ORIGIN)) {
|
||||||
final GetJobsStatsAction.Response jobs =
|
final GetJobsStatsAction.Response jobs =
|
||||||
|
@ -73,7 +77,7 @@ public class JobStatsCollector extends Collector {
|
||||||
.actionGet(getCollectionTimeout());
|
.actionGet(getCollectionTimeout());
|
||||||
|
|
||||||
final long timestamp = timestamp();
|
final long timestamp = timestamp();
|
||||||
final String clusterUuid = clusterUUID();
|
final String clusterUuid = clusterUuid(clusterState);
|
||||||
|
|
||||||
return jobs.getResponse().results().stream()
|
return jobs.getResponse().results().stream()
|
||||||
.map(jobStats -> new JobStatsMonitoringDoc(clusterUuid, timestamp, interval, node, jobStats))
|
.map(jobStats -> new JobStatsMonitoringDoc(clusterUuid, timestamp, interval, node, jobStats))
|
||||||
|
|
|
@ -11,6 +11,7 @@ import org.elasticsearch.action.admin.cluster.node.stats.NodesStatsResponse;
|
||||||
import org.elasticsearch.action.admin.indices.stats.CommonStatsFlags;
|
import org.elasticsearch.action.admin.indices.stats.CommonStatsFlags;
|
||||||
import org.elasticsearch.bootstrap.BootstrapInfo;
|
import org.elasticsearch.bootstrap.BootstrapInfo;
|
||||||
import org.elasticsearch.client.Client;
|
import org.elasticsearch.client.Client;
|
||||||
|
import org.elasticsearch.cluster.ClusterState;
|
||||||
import org.elasticsearch.cluster.service.ClusterService;
|
import org.elasticsearch.cluster.service.ClusterService;
|
||||||
import org.elasticsearch.common.settings.Setting;
|
import org.elasticsearch.common.settings.Setting;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
|
@ -59,12 +60,14 @@ public class NodeStatsCollector extends Collector {
|
||||||
|
|
||||||
// For testing purpose
|
// For testing purpose
|
||||||
@Override
|
@Override
|
||||||
protected boolean shouldCollect() {
|
protected boolean shouldCollect(final boolean isElectedMaster) {
|
||||||
return super.shouldCollect();
|
return super.shouldCollect(isElectedMaster);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Collection<MonitoringDoc> doCollect(final MonitoringDoc.Node node, final long interval) throws Exception {
|
protected Collection<MonitoringDoc> doCollect(final MonitoringDoc.Node node,
|
||||||
|
final long interval,
|
||||||
|
final ClusterState clusterState) throws Exception {
|
||||||
NodesStatsRequest request = new NodesStatsRequest("_local");
|
NodesStatsRequest request = new NodesStatsRequest("_local");
|
||||||
request.indices(FLAGS);
|
request.indices(FLAGS);
|
||||||
request.os(true);
|
request.os(true);
|
||||||
|
@ -81,10 +84,11 @@ public class NodeStatsCollector extends Collector {
|
||||||
throw response.failures().get(0);
|
throw response.failures().get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final String clusterUuid = clusterUuid(clusterState);
|
||||||
final NodeStats nodeStats = response.getNodes().get(0);
|
final NodeStats nodeStats = response.getNodes().get(0);
|
||||||
|
|
||||||
return Collections.singletonList(new NodeStatsMonitoringDoc(clusterUUID(), nodeStats.getTimestamp(), interval, node,
|
return Collections.singletonList(new NodeStatsMonitoringDoc(clusterUuid, nodeStats.getTimestamp(), interval, node,
|
||||||
node.getUUID(), isLocalNodeMaster(), nodeStats, BootstrapInfo.isMemoryLocked()));
|
node.getUUID(), clusterState.getNodes().isLocalNodeElectedMaster(), nodeStats, BootstrapInfo.isMemoryLocked()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,21 +38,21 @@ public class ShardsCollector extends Collector {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean shouldCollect() {
|
protected boolean shouldCollect(final boolean isElectedMaster) {
|
||||||
return super.shouldCollect() && isLocalNodeMaster();
|
return isElectedMaster && super.shouldCollect(isElectedMaster);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Collection<MonitoringDoc> doCollect(final MonitoringDoc.Node node, final long interval) throws Exception {
|
protected Collection<MonitoringDoc> doCollect(final MonitoringDoc.Node node,
|
||||||
|
final long interval,
|
||||||
|
final ClusterState clusterState) throws Exception {
|
||||||
final List<MonitoringDoc> results = new ArrayList<>(1);
|
final List<MonitoringDoc> results = new ArrayList<>(1);
|
||||||
|
|
||||||
final ClusterState clusterState = clusterService.state();
|
|
||||||
if (clusterState != null) {
|
if (clusterState != null) {
|
||||||
RoutingTable routingTable = clusterState.routingTable();
|
RoutingTable routingTable = clusterState.routingTable();
|
||||||
if (routingTable != null) {
|
if (routingTable != null) {
|
||||||
List<ShardRouting> shards = routingTable.allShards();
|
List<ShardRouting> shards = routingTable.allShards();
|
||||||
if (shards != null) {
|
if (shards != null) {
|
||||||
final String clusterUUID = clusterUUID();
|
final String clusterUuid = clusterUuid(clusterState);
|
||||||
final String stateUUID = clusterState.stateUUID();
|
final String stateUUID = clusterState.stateUUID();
|
||||||
final long timestamp = timestamp();
|
final long timestamp = timestamp();
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ public class ShardsCollector extends Collector {
|
||||||
// If the shard is assigned to a node, the shard monitoring document refers to this node
|
// If the shard is assigned to a node, the shard monitoring document refers to this node
|
||||||
shardNode = convertNode(node.getTimestamp(), clusterState.getNodes().get(shard.currentNodeId()));
|
shardNode = convertNode(node.getTimestamp(), clusterState.getNodes().get(shard.currentNodeId()));
|
||||||
}
|
}
|
||||||
results.add(new ShardMonitoringDoc(clusterUUID, timestamp, interval, shardNode, shard, stateUUID));
|
results.add(new ShardMonitoringDoc(clusterUuid, timestamp, interval, shardNode, shard, stateUUID));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
package org.elasticsearch.xpack.monitoring;
|
package org.elasticsearch.xpack.monitoring;
|
||||||
|
|
||||||
import org.elasticsearch.action.ActionListener;
|
import org.elasticsearch.action.ActionListener;
|
||||||
|
import org.elasticsearch.cluster.ClusterState;
|
||||||
import org.elasticsearch.cluster.service.ClusterService;
|
import org.elasticsearch.cluster.service.ClusterService;
|
||||||
import org.elasticsearch.common.settings.ClusterSettings;
|
import org.elasticsearch.common.settings.ClusterSettings;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
|
@ -48,6 +49,7 @@ public class MonitoringServiceTests extends ESTestCase {
|
||||||
final Monitoring monitoring = new Monitoring(Settings.EMPTY, licenseState);
|
final Monitoring monitoring = new Monitoring(Settings.EMPTY, licenseState);
|
||||||
clusterSettings = new ClusterSettings(Settings.EMPTY, new HashSet<>(monitoring.getSettings()));
|
clusterSettings = new ClusterSettings(Settings.EMPTY, new HashSet<>(monitoring.getSettings()));
|
||||||
when(clusterService.getClusterSettings()).thenReturn(clusterSettings);
|
when(clusterService.getClusterSettings()).thenReturn(clusterSettings);
|
||||||
|
when(clusterService.state()).thenReturn(mock(ClusterState.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
|
@ -59,7 +61,7 @@ public class MonitoringServiceTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testIsMonitoringActive() throws Exception {
|
public void testIsMonitoringActive() throws Exception {
|
||||||
monitoringService = new MonitoringService(Settings.EMPTY, clusterSettings, threadPool, emptySet(), new CountingExporter());
|
monitoringService = new MonitoringService(Settings.EMPTY, clusterService, threadPool, emptySet(), new CountingExporter());
|
||||||
|
|
||||||
monitoringService.start();
|
monitoringService.start();
|
||||||
assertBusy(() -> assertTrue(monitoringService.isStarted()));
|
assertBusy(() -> assertTrue(monitoringService.isStarted()));
|
||||||
|
@ -82,7 +84,7 @@ public class MonitoringServiceTests extends ESTestCase {
|
||||||
Settings settings = Settings.builder().put(MonitoringService.INTERVAL.getKey(), TimeValue.MINUS_ONE).build();
|
Settings settings = Settings.builder().put(MonitoringService.INTERVAL.getKey(), TimeValue.MINUS_ONE).build();
|
||||||
|
|
||||||
CountingExporter exporter = new CountingExporter();
|
CountingExporter exporter = new CountingExporter();
|
||||||
monitoringService = new MonitoringService(settings, clusterSettings, threadPool, emptySet(), exporter);
|
monitoringService = new MonitoringService(settings, clusterService, threadPool, emptySet(), exporter);
|
||||||
|
|
||||||
monitoringService.start();
|
monitoringService.start();
|
||||||
assertBusy(() -> assertTrue(monitoringService.isStarted()));
|
assertBusy(() -> assertTrue(monitoringService.isStarted()));
|
||||||
|
@ -105,7 +107,7 @@ public class MonitoringServiceTests extends ESTestCase {
|
||||||
final BlockingExporter exporter = new BlockingExporter(latch);
|
final BlockingExporter exporter = new BlockingExporter(latch);
|
||||||
|
|
||||||
Settings settings = Settings.builder().put(MonitoringService.INTERVAL.getKey(), MonitoringService.MIN_INTERVAL).build();
|
Settings settings = Settings.builder().put(MonitoringService.INTERVAL.getKey(), MonitoringService.MIN_INTERVAL).build();
|
||||||
monitoringService = new MonitoringService(settings, clusterSettings, threadPool, emptySet(), exporter);
|
monitoringService = new MonitoringService(settings, clusterService, threadPool, emptySet(), exporter);
|
||||||
|
|
||||||
monitoringService.start();
|
monitoringService.start();
|
||||||
assertBusy(() -> assertTrue(monitoringService.isStarted()));
|
assertBusy(() -> assertTrue(monitoringService.isStarted()));
|
||||||
|
|
|
@ -59,7 +59,7 @@ public abstract class BaseCollectorTestCase extends ESTestCase {
|
||||||
|
|
||||||
protected void whenLocalNodeElectedMaster(final boolean electedMaster) {
|
protected void whenLocalNodeElectedMaster(final boolean electedMaster) {
|
||||||
when(clusterService.state()).thenReturn(clusterState);
|
when(clusterService.state()).thenReturn(clusterState);
|
||||||
when(clusterState.nodes()).thenReturn(nodes);
|
when(clusterState.getNodes()).thenReturn(nodes);
|
||||||
when(nodes.isLocalNodeElectedMaster()).thenReturn(electedMaster);
|
when(nodes.isLocalNodeElectedMaster()).thenReturn(electedMaster);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -66,24 +66,17 @@ public class ClusterStatsCollectorTests extends BaseCollectorTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testShouldCollectReturnsFalseIfNotMaster() {
|
public void testShouldCollectReturnsFalseIfNotMaster() {
|
||||||
// this controls the blockage
|
|
||||||
whenLocalNodeElectedMaster(false);
|
|
||||||
|
|
||||||
final ClusterStatsCollector collector =
|
final ClusterStatsCollector collector =
|
||||||
new ClusterStatsCollector(Settings.EMPTY, clusterService, licenseState, client, licenseService);
|
new ClusterStatsCollector(Settings.EMPTY, clusterService, licenseState, client, licenseService);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(false));
|
assertThat(collector.shouldCollect(false), is(false));
|
||||||
verify(nodes).isLocalNodeElectedMaster();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testShouldCollectReturnsTrue() {
|
public void testShouldCollectReturnsTrue() {
|
||||||
whenLocalNodeElectedMaster(true);
|
|
||||||
|
|
||||||
final ClusterStatsCollector collector =
|
final ClusterStatsCollector collector =
|
||||||
new ClusterStatsCollector(Settings.EMPTY, clusterService, licenseState, client, licenseService);
|
new ClusterStatsCollector(Settings.EMPTY, clusterService, licenseState, client, licenseService);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(true));
|
assertThat(collector.shouldCollect(true), is(true));
|
||||||
verify(nodes).isLocalNodeElectedMaster();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testDoAPMIndicesExistReturnsBasedOnIndices() {
|
public void testDoAPMIndicesExistReturnsBasedOnIndices() {
|
||||||
|
@ -219,7 +212,7 @@ public class ClusterStatsCollectorTests extends BaseCollectorTestCase {
|
||||||
|
|
||||||
final long interval = randomNonNegativeLong();
|
final long interval = randomNonNegativeLong();
|
||||||
|
|
||||||
final Collection<MonitoringDoc> results = collector.doCollect(node, interval);
|
final Collection<MonitoringDoc> results = collector.doCollect(node, interval, clusterState);
|
||||||
assertEquals(1, results.size());
|
assertEquals(1, results.size());
|
||||||
|
|
||||||
final MonitoringDoc monitoringDoc = results.iterator().next();
|
final MonitoringDoc monitoringDoc = results.iterator().next();
|
||||||
|
@ -254,7 +247,8 @@ public class ClusterStatsCollectorTests extends BaseCollectorTestCase {
|
||||||
assertThat(document.getClusterState().stateUUID(), equalTo(clusterState.stateUUID()));
|
assertThat(document.getClusterState().stateUUID(), equalTo(clusterState.stateUUID()));
|
||||||
|
|
||||||
verify(clusterService, times(1)).getClusterName();
|
verify(clusterService, times(1)).getClusterName();
|
||||||
verify(clusterService, times(2)).state();
|
verify(clusterState, times(1)).metaData();
|
||||||
|
verify(metaData, times(1)).clusterUUID();
|
||||||
verify(licenseService, times(1)).getLicense();
|
verify(licenseService, times(1)).getLicense();
|
||||||
verify(clusterAdminClient).prepareClusterStats();
|
verify(clusterAdminClient).prepareClusterStats();
|
||||||
verify(client).execute(same(XPackUsageAction.INSTANCE), any(XPackUsageRequest.class));
|
verify(client).execute(same(XPackUsageAction.INSTANCE), any(XPackUsageRequest.class));
|
||||||
|
|
|
@ -44,6 +44,7 @@ import static org.mockito.Matchers.eq;
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
@ -52,35 +53,30 @@ public class IndexRecoveryCollectorTests extends BaseCollectorTestCase {
|
||||||
public void testShouldCollectReturnsFalseIfMonitoringNotAllowed() {
|
public void testShouldCollectReturnsFalseIfMonitoringNotAllowed() {
|
||||||
// this controls the blockage
|
// this controls the blockage
|
||||||
when(licenseState.isMonitoringAllowed()).thenReturn(false);
|
when(licenseState.isMonitoringAllowed()).thenReturn(false);
|
||||||
whenLocalNodeElectedMaster(randomBoolean());
|
final boolean isElectedMaster = randomBoolean();
|
||||||
|
whenLocalNodeElectedMaster(isElectedMaster);
|
||||||
|
|
||||||
final IndexRecoveryCollector collector = new IndexRecoveryCollector(Settings.EMPTY, clusterService, licenseState, client);
|
final IndexRecoveryCollector collector = new IndexRecoveryCollector(Settings.EMPTY, clusterService, licenseState, client);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(false));
|
assertThat(collector.shouldCollect(isElectedMaster), is(false));
|
||||||
verify(licenseState).isMonitoringAllowed();
|
if (isElectedMaster) {
|
||||||
|
verify(licenseState).isMonitoringAllowed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testShouldCollectReturnsFalseIfNotMaster() {
|
public void testShouldCollectReturnsFalseIfNotMaster() {
|
||||||
when(licenseState.isMonitoringAllowed()).thenReturn(true);
|
when(licenseState.isMonitoringAllowed()).thenReturn(true);
|
||||||
// this controls the blockage
|
|
||||||
whenLocalNodeElectedMaster(false);
|
|
||||||
|
|
||||||
final IndexRecoveryCollector collector = new IndexRecoveryCollector(Settings.EMPTY, clusterService, licenseState, client);
|
final IndexRecoveryCollector collector = new IndexRecoveryCollector(Settings.EMPTY, clusterService, licenseState, client);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(false));
|
assertThat(collector.shouldCollect(false), is(false));
|
||||||
verify(licenseState).isMonitoringAllowed();
|
|
||||||
verify(nodes).isLocalNodeElectedMaster();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testShouldCollectReturnsTrue() {
|
public void testShouldCollectReturnsTrue() {
|
||||||
when(licenseState.isMonitoringAllowed()).thenReturn(true);
|
when(licenseState.isMonitoringAllowed()).thenReturn(true);
|
||||||
whenLocalNodeElectedMaster(true);
|
|
||||||
|
|
||||||
final IndexRecoveryCollector collector = new IndexRecoveryCollector(Settings.EMPTY, clusterService, licenseState, client);
|
final IndexRecoveryCollector collector = new IndexRecoveryCollector(Settings.EMPTY, clusterService, licenseState, client);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(true));
|
assertThat(collector.shouldCollect(true), is(true));
|
||||||
verify(licenseState).isMonitoringAllowed();
|
verify(licenseState).isMonitoringAllowed();
|
||||||
verify(nodes).isLocalNodeElectedMaster();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testDoCollect() throws Exception {
|
public void testDoCollect() throws Exception {
|
||||||
|
@ -157,8 +153,12 @@ public class IndexRecoveryCollectorTests extends BaseCollectorTestCase {
|
||||||
|
|
||||||
final long interval = randomNonNegativeLong();
|
final long interval = randomNonNegativeLong();
|
||||||
|
|
||||||
final Collection<MonitoringDoc> results = collector.doCollect(node, interval);
|
final Collection<MonitoringDoc> results = collector.doCollect(node, interval, clusterState);
|
||||||
verify(indicesAdminClient).prepareRecoveries();
|
verify(indicesAdminClient).prepareRecoveries();
|
||||||
|
if (recoveryStates.isEmpty() == false) {
|
||||||
|
verify(clusterState).metaData();
|
||||||
|
verify(metaData).clusterUUID();
|
||||||
|
}
|
||||||
|
|
||||||
if (nbRecoveries == 0) {
|
if (nbRecoveries == 0) {
|
||||||
assertEquals(0, results.size());
|
assertEquals(0, results.size());
|
||||||
|
|
|
@ -36,6 +36,7 @@ import static org.mockito.Matchers.eq;
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
@ -44,35 +45,30 @@ public class IndexStatsCollectorTests extends BaseCollectorTestCase {
|
||||||
public void testShouldCollectReturnsFalseIfMonitoringNotAllowed() {
|
public void testShouldCollectReturnsFalseIfMonitoringNotAllowed() {
|
||||||
// this controls the blockage
|
// this controls the blockage
|
||||||
when(licenseState.isMonitoringAllowed()).thenReturn(false);
|
when(licenseState.isMonitoringAllowed()).thenReturn(false);
|
||||||
whenLocalNodeElectedMaster(randomBoolean());
|
final boolean isElectedMaster = randomBoolean();
|
||||||
|
whenLocalNodeElectedMaster(isElectedMaster);
|
||||||
|
|
||||||
final IndexStatsCollector collector = new IndexStatsCollector(Settings.EMPTY, clusterService, licenseState, client);
|
final IndexStatsCollector collector = new IndexStatsCollector(Settings.EMPTY, clusterService, licenseState, client);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(false));
|
assertThat(collector.shouldCollect(isElectedMaster), is(false));
|
||||||
verify(licenseState).isMonitoringAllowed();
|
if (isElectedMaster) {
|
||||||
|
verify(licenseState).isMonitoringAllowed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testShouldCollectReturnsFalseIfNotMaster() {
|
public void testShouldCollectReturnsFalseIfNotMaster() {
|
||||||
when(licenseState.isMonitoringAllowed()).thenReturn(true);
|
when(licenseState.isMonitoringAllowed()).thenReturn(true);
|
||||||
// this controls the blockage
|
|
||||||
whenLocalNodeElectedMaster(false);
|
|
||||||
|
|
||||||
final IndexStatsCollector collector = new IndexStatsCollector(Settings.EMPTY, clusterService, licenseState, client);
|
final IndexStatsCollector collector = new IndexStatsCollector(Settings.EMPTY, clusterService, licenseState, client);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(false));
|
assertThat(collector.shouldCollect(false), is(false));
|
||||||
verify(licenseState).isMonitoringAllowed();
|
|
||||||
verify(nodes).isLocalNodeElectedMaster();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testShouldCollectReturnsTrue() {
|
public void testShouldCollectReturnsTrue() {
|
||||||
when(licenseState.isMonitoringAllowed()).thenReturn(true);
|
when(licenseState.isMonitoringAllowed()).thenReturn(true);
|
||||||
whenLocalNodeElectedMaster(true);
|
|
||||||
|
|
||||||
final IndexStatsCollector collector = new IndexStatsCollector(Settings.EMPTY, clusterService, licenseState, client);
|
final IndexStatsCollector collector = new IndexStatsCollector(Settings.EMPTY, clusterService, licenseState, client);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(true));
|
assertThat(collector.shouldCollect(true), is(true));
|
||||||
verify(licenseState).isMonitoringAllowed();
|
verify(licenseState).isMonitoringAllowed();
|
||||||
verify(nodes).isLocalNodeElectedMaster();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testDoCollect() throws Exception {
|
public void testDoCollect() throws Exception {
|
||||||
|
@ -133,8 +129,11 @@ public class IndexStatsCollectorTests extends BaseCollectorTestCase {
|
||||||
|
|
||||||
final long interval = randomNonNegativeLong();
|
final long interval = randomNonNegativeLong();
|
||||||
|
|
||||||
final Collection<MonitoringDoc> results = collector.doCollect(node, interval);
|
final Collection<MonitoringDoc> results = collector.doCollect(node, interval, clusterState);
|
||||||
verify(indicesAdminClient).prepareStats();
|
verify(indicesAdminClient).prepareStats();
|
||||||
|
verify(clusterState, times(1 + indices)).metaData();
|
||||||
|
verify(clusterState, times(indices)).routingTable();
|
||||||
|
verify(metaData).clusterUUID();
|
||||||
|
|
||||||
assertEquals(1 + indices, results.size());
|
assertEquals(1 + indices, results.size());
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,8 @@ public class JobStatsCollectorTests extends BaseCollectorTestCase {
|
||||||
public void testShouldCollectReturnsFalseIfMonitoringNotAllowed() {
|
public void testShouldCollectReturnsFalseIfMonitoringNotAllowed() {
|
||||||
final Settings settings = randomFrom(mlEnabledSettings(), mlDisabledSettings());
|
final Settings settings = randomFrom(mlEnabledSettings(), mlDisabledSettings());
|
||||||
final boolean mlAllowed = randomBoolean();
|
final boolean mlAllowed = randomBoolean();
|
||||||
|
final boolean isElectedMaster = randomBoolean();
|
||||||
|
whenLocalNodeElectedMaster(isElectedMaster);
|
||||||
|
|
||||||
// this controls the blockage
|
// this controls the blockage
|
||||||
when(licenseState.isMonitoringAllowed()).thenReturn(false);
|
when(licenseState.isMonitoringAllowed()).thenReturn(false);
|
||||||
|
@ -50,9 +52,10 @@ public class JobStatsCollectorTests extends BaseCollectorTestCase {
|
||||||
|
|
||||||
final JobStatsCollector collector = new JobStatsCollector(settings, clusterService, licenseState, client);
|
final JobStatsCollector collector = new JobStatsCollector(settings, clusterService, licenseState, client);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(false));
|
assertThat(collector.shouldCollect(isElectedMaster), is(false));
|
||||||
|
if (isElectedMaster) {
|
||||||
verify(licenseState).isMonitoringAllowed();
|
verify(licenseState).isMonitoringAllowed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testShouldCollectReturnsFalseIfNotMaster() {
|
public void testShouldCollectReturnsFalseIfNotMaster() {
|
||||||
|
@ -62,13 +65,11 @@ public class JobStatsCollectorTests extends BaseCollectorTestCase {
|
||||||
when(licenseState.isMonitoringAllowed()).thenReturn(randomBoolean());
|
when(licenseState.isMonitoringAllowed()).thenReturn(randomBoolean());
|
||||||
when(licenseState.isMachineLearningAllowed()).thenReturn(randomBoolean());
|
when(licenseState.isMachineLearningAllowed()).thenReturn(randomBoolean());
|
||||||
// this controls the blockage
|
// this controls the blockage
|
||||||
whenLocalNodeElectedMaster(false);
|
final boolean isElectedMaster = false;
|
||||||
|
|
||||||
final JobStatsCollector collector = new JobStatsCollector(settings, clusterService, licenseState, client);
|
final JobStatsCollector collector = new JobStatsCollector(settings, clusterService, licenseState, client);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(false));
|
assertThat(collector.shouldCollect(isElectedMaster), is(false));
|
||||||
|
|
||||||
verify(licenseState).isMonitoringAllowed();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testShouldCollectReturnsFalseIfMLIsDisabled() {
|
public void testShouldCollectReturnsFalseIfMLIsDisabled() {
|
||||||
|
@ -77,13 +78,17 @@ public class JobStatsCollectorTests extends BaseCollectorTestCase {
|
||||||
|
|
||||||
when(licenseState.isMonitoringAllowed()).thenReturn(randomBoolean());
|
when(licenseState.isMonitoringAllowed()).thenReturn(randomBoolean());
|
||||||
when(licenseState.isMachineLearningAllowed()).thenReturn(randomBoolean());
|
when(licenseState.isMachineLearningAllowed()).thenReturn(randomBoolean());
|
||||||
whenLocalNodeElectedMaster(randomBoolean());
|
|
||||||
|
final boolean isElectedMaster = randomBoolean();
|
||||||
|
whenLocalNodeElectedMaster(isElectedMaster);
|
||||||
|
|
||||||
final JobStatsCollector collector = new JobStatsCollector(settings, clusterService, licenseState, client);
|
final JobStatsCollector collector = new JobStatsCollector(settings, clusterService, licenseState, client);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(false));
|
assertThat(collector.shouldCollect(isElectedMaster), is(false));
|
||||||
|
|
||||||
verify(licenseState).isMonitoringAllowed();
|
if (isElectedMaster) {
|
||||||
|
verify(licenseState).isMonitoringAllowed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testShouldCollectReturnsFalseIfMLIsNotAllowed() {
|
public void testShouldCollectReturnsFalseIfMLIsNotAllowed() {
|
||||||
|
@ -92,13 +97,16 @@ public class JobStatsCollectorTests extends BaseCollectorTestCase {
|
||||||
when(licenseState.isMonitoringAllowed()).thenReturn(randomBoolean());
|
when(licenseState.isMonitoringAllowed()).thenReturn(randomBoolean());
|
||||||
// this is controls the blockage
|
// this is controls the blockage
|
||||||
when(licenseState.isMachineLearningAllowed()).thenReturn(false);
|
when(licenseState.isMachineLearningAllowed()).thenReturn(false);
|
||||||
whenLocalNodeElectedMaster(randomBoolean());
|
final boolean isElectedMaster = randomBoolean();
|
||||||
|
whenLocalNodeElectedMaster(isElectedMaster);
|
||||||
|
|
||||||
final JobStatsCollector collector = new JobStatsCollector(settings, clusterService, licenseState, client);
|
final JobStatsCollector collector = new JobStatsCollector(settings, clusterService, licenseState, client);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(false));
|
assertThat(collector.shouldCollect(isElectedMaster), is(false));
|
||||||
|
|
||||||
verify(licenseState).isMonitoringAllowed();
|
if (isElectedMaster) {
|
||||||
|
verify(licenseState).isMonitoringAllowed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testShouldCollectReturnsTrue() {
|
public void testShouldCollectReturnsTrue() {
|
||||||
|
@ -106,18 +114,19 @@ public class JobStatsCollectorTests extends BaseCollectorTestCase {
|
||||||
|
|
||||||
when(licenseState.isMonitoringAllowed()).thenReturn(true);
|
when(licenseState.isMonitoringAllowed()).thenReturn(true);
|
||||||
when(licenseState.isMachineLearningAllowed()).thenReturn(true);
|
when(licenseState.isMachineLearningAllowed()).thenReturn(true);
|
||||||
whenLocalNodeElectedMaster(true);
|
final boolean isElectedMaster = true;
|
||||||
|
|
||||||
final JobStatsCollector collector = new JobStatsCollector(settings, clusterService, licenseState, client);
|
final JobStatsCollector collector = new JobStatsCollector(settings, clusterService, licenseState, client);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(true));
|
assertThat(collector.shouldCollect(isElectedMaster), is(true));
|
||||||
|
|
||||||
verify(licenseState).isMonitoringAllowed();
|
verify(licenseState).isMonitoringAllowed();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testDoCollect() throws Exception {
|
public void testDoCollect() throws Exception {
|
||||||
final MetaData metaData = mock(MetaData.class);
|
|
||||||
final String clusterUuid = randomAlphaOfLength(5);
|
final String clusterUuid = randomAlphaOfLength(5);
|
||||||
|
whenClusterStateWithUUID(clusterUuid);
|
||||||
|
|
||||||
final MonitoringDoc.Node node = randomMonitoringNode(random());
|
final MonitoringDoc.Node node = randomMonitoringNode(random());
|
||||||
final MachineLearningClient client = mock(MachineLearningClient.class);
|
final MachineLearningClient client = mock(MachineLearningClient.class);
|
||||||
final ThreadContext threadContext = new ThreadContext(Settings.EMPTY);
|
final ThreadContext threadContext = new ThreadContext(Settings.EMPTY);
|
||||||
|
@ -125,10 +134,6 @@ public class JobStatsCollectorTests extends BaseCollectorTestCase {
|
||||||
final TimeValue timeout = TimeValue.timeValueSeconds(randomIntBetween(1, 120));
|
final TimeValue timeout = TimeValue.timeValueSeconds(randomIntBetween(1, 120));
|
||||||
withCollectionTimeout(JobStatsCollector.JOB_STATS_TIMEOUT, timeout);
|
withCollectionTimeout(JobStatsCollector.JOB_STATS_TIMEOUT, timeout);
|
||||||
|
|
||||||
when(clusterService.state()).thenReturn(clusterState);
|
|
||||||
when(clusterState.metaData()).thenReturn(metaData);
|
|
||||||
when(metaData.clusterUUID()).thenReturn(clusterUuid);
|
|
||||||
|
|
||||||
final JobStatsCollector collector = new JobStatsCollector(Settings.EMPTY, clusterService, licenseState, client, threadContext);
|
final JobStatsCollector collector = new JobStatsCollector(Settings.EMPTY, clusterService, licenseState, client, threadContext);
|
||||||
assertEquals(timeout, collector.getCollectionTimeout());
|
assertEquals(timeout, collector.getCollectionTimeout());
|
||||||
|
|
||||||
|
@ -143,7 +148,9 @@ public class JobStatsCollectorTests extends BaseCollectorTestCase {
|
||||||
|
|
||||||
final long interval = randomNonNegativeLong();
|
final long interval = randomNonNegativeLong();
|
||||||
|
|
||||||
final List<MonitoringDoc> monitoringDocs = collector.doCollect(node, interval);
|
final List<MonitoringDoc> monitoringDocs = collector.doCollect(node, interval, clusterState);
|
||||||
|
verify(clusterState).metaData();
|
||||||
|
verify(metaData).clusterUUID();
|
||||||
|
|
||||||
assertThat(monitoringDocs, hasSize(jobStats.size()));
|
assertThat(monitoringDocs, hasSize(jobStats.size()));
|
||||||
|
|
||||||
|
|
|
@ -40,21 +40,24 @@ public class NodeStatsCollectorTests extends BaseCollectorTestCase {
|
||||||
public void testShouldCollectReturnsFalseIfMonitoringNotAllowed() {
|
public void testShouldCollectReturnsFalseIfMonitoringNotAllowed() {
|
||||||
// this controls the blockage
|
// this controls the blockage
|
||||||
when(licenseState.isMonitoringAllowed()).thenReturn(false);
|
when(licenseState.isMonitoringAllowed()).thenReturn(false);
|
||||||
whenLocalNodeElectedMaster(randomBoolean());
|
final boolean isElectedMaster = randomBoolean();
|
||||||
|
whenLocalNodeElectedMaster(isElectedMaster);
|
||||||
|
|
||||||
final NodeStatsCollector collector = new NodeStatsCollector(Settings.EMPTY, clusterService, licenseState, client);
|
final NodeStatsCollector collector = new NodeStatsCollector(Settings.EMPTY, clusterService, licenseState, client);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(false));
|
assertThat(collector.shouldCollect(isElectedMaster), is(false));
|
||||||
verify(licenseState).isMonitoringAllowed();
|
if (isElectedMaster) {
|
||||||
|
verify(licenseState).isMonitoringAllowed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testShouldCollectReturnsTrue() {
|
public void testShouldCollectReturnsTrue() {
|
||||||
when(licenseState.isMonitoringAllowed()).thenReturn(true);
|
when(licenseState.isMonitoringAllowed()).thenReturn(true);
|
||||||
whenLocalNodeElectedMaster(true);
|
final boolean isElectedMaster = true;
|
||||||
|
|
||||||
final NodeStatsCollector collector = new NodeStatsCollector(Settings.EMPTY, clusterService, licenseState, client);
|
final NodeStatsCollector collector = new NodeStatsCollector(Settings.EMPTY, clusterService, licenseState, client);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(true));
|
assertThat(collector.shouldCollect(isElectedMaster), is(true));
|
||||||
verify(licenseState).isMonitoringAllowed();
|
verify(licenseState).isMonitoringAllowed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +80,7 @@ public class NodeStatsCollectorTests extends BaseCollectorTestCase {
|
||||||
assertEquals(timeout, collector.getCollectionTimeout());
|
assertEquals(timeout, collector.getCollectionTimeout());
|
||||||
|
|
||||||
final FailedNodeException e = expectThrows(FailedNodeException.class, () ->
|
final FailedNodeException e = expectThrows(FailedNodeException.class, () ->
|
||||||
collector.doCollect(randomMonitoringNode(random()), randomNonNegativeLong()));
|
collector.doCollect(randomMonitoringNode(random()), randomNonNegativeLong(), clusterState));
|
||||||
assertEquals(exception, e);
|
assertEquals(exception, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +115,10 @@ public class NodeStatsCollectorTests extends BaseCollectorTestCase {
|
||||||
|
|
||||||
final long interval = randomNonNegativeLong();
|
final long interval = randomNonNegativeLong();
|
||||||
|
|
||||||
final Collection<MonitoringDoc> results = collector.doCollect(node, interval);
|
final Collection<MonitoringDoc> results = collector.doCollect(node, interval, clusterState);
|
||||||
|
verify(clusterState).metaData();
|
||||||
|
verify(metaData).clusterUUID();
|
||||||
|
|
||||||
assertEquals(1, results.size());
|
assertEquals(1, results.size());
|
||||||
|
|
||||||
final MonitoringDoc monitoringDoc = results.iterator().next();
|
final MonitoringDoc monitoringDoc = results.iterator().next();
|
||||||
|
|
|
@ -45,12 +45,15 @@ public class ShardsCollectorTests extends BaseCollectorTestCase {
|
||||||
public void testShouldCollectReturnsFalseIfMonitoringNotAllowed() {
|
public void testShouldCollectReturnsFalseIfMonitoringNotAllowed() {
|
||||||
// this controls the blockage
|
// this controls the blockage
|
||||||
when(licenseState.isMonitoringAllowed()).thenReturn(false);
|
when(licenseState.isMonitoringAllowed()).thenReturn(false);
|
||||||
whenLocalNodeElectedMaster(randomBoolean());
|
final boolean isElectedMaster = randomBoolean();
|
||||||
|
whenLocalNodeElectedMaster(isElectedMaster);
|
||||||
|
|
||||||
final ShardsCollector collector = new ShardsCollector(Settings.EMPTY, clusterService, licenseState);
|
final ShardsCollector collector = new ShardsCollector(Settings.EMPTY, clusterService, licenseState);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(false));
|
assertThat(collector.shouldCollect(isElectedMaster), is(false));
|
||||||
verify(licenseState).isMonitoringAllowed();
|
if (isElectedMaster) {
|
||||||
|
verify(licenseState).isMonitoringAllowed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testShouldCollectReturnsFalseIfNotMaster() {
|
public void testShouldCollectReturnsFalseIfNotMaster() {
|
||||||
|
@ -60,9 +63,7 @@ public class ShardsCollectorTests extends BaseCollectorTestCase {
|
||||||
|
|
||||||
final ShardsCollector collector = new ShardsCollector(Settings.EMPTY, clusterService, licenseState);
|
final ShardsCollector collector = new ShardsCollector(Settings.EMPTY, clusterService, licenseState);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(false));
|
assertThat(collector.shouldCollect(false), is(false));
|
||||||
verify(licenseState).isMonitoringAllowed();
|
|
||||||
verify(nodes).isLocalNodeElectedMaster();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testShouldCollectReturnsTrue() {
|
public void testShouldCollectReturnsTrue() {
|
||||||
|
@ -71,20 +72,16 @@ public class ShardsCollectorTests extends BaseCollectorTestCase {
|
||||||
|
|
||||||
final ShardsCollector collector = new ShardsCollector(Settings.EMPTY, clusterService, licenseState);
|
final ShardsCollector collector = new ShardsCollector(Settings.EMPTY, clusterService, licenseState);
|
||||||
|
|
||||||
assertThat(collector.shouldCollect(), is(true));
|
assertThat(collector.shouldCollect(true), is(true));
|
||||||
verify(licenseState).isMonitoringAllowed();
|
verify(licenseState).isMonitoringAllowed();
|
||||||
verify(nodes).isLocalNodeElectedMaster();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testDoCollectWhenNoClusterState() throws Exception {
|
public void testDoCollectWhenNoClusterState() throws Exception {
|
||||||
when(clusterService.state()).thenReturn(null);
|
|
||||||
|
|
||||||
final ShardsCollector collector = new ShardsCollector(Settings.EMPTY, clusterService, licenseState);
|
final ShardsCollector collector = new ShardsCollector(Settings.EMPTY, clusterService, licenseState);
|
||||||
|
|
||||||
final Collection<MonitoringDoc> results = collector.doCollect(randomMonitoringNode(random()), randomNonNegativeLong());
|
final Collection<MonitoringDoc> results = collector.doCollect(randomMonitoringNode(random()), randomNonNegativeLong(), null);
|
||||||
assertThat(results, notNullValue());
|
assertThat(results, notNullValue());
|
||||||
assertThat(results.size(), equalTo(0));
|
assertThat(results.size(), equalTo(0));
|
||||||
verify(clusterService).state();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testDoCollect() throws Exception {
|
public void testDoCollect() throws Exception {
|
||||||
|
@ -114,7 +111,10 @@ public class ShardsCollectorTests extends BaseCollectorTestCase {
|
||||||
|
|
||||||
final long interval = randomNonNegativeLong();
|
final long interval = randomNonNegativeLong();
|
||||||
|
|
||||||
final Collection<MonitoringDoc> results = collector.doCollect(node, interval);
|
final Collection<MonitoringDoc> results = collector.doCollect(node, interval, clusterState);
|
||||||
|
verify(clusterState).metaData();
|
||||||
|
verify(metaData).clusterUUID();
|
||||||
|
|
||||||
assertThat(results, notNullValue());
|
assertThat(results, notNullValue());
|
||||||
assertThat(results.size(), equalTo((indices != NONE) ? routingTable.allShards().size() : 0));
|
assertThat(results.size(), equalTo((indices != NONE) ? routingTable.allShards().size() : 0));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue