diff --git a/core/src/main/java/org/elasticsearch/action/admin/cluster/node/stats/NodeStats.java b/core/src/main/java/org/elasticsearch/action/admin/cluster/node/stats/NodeStats.java index 5dbc8f76098..ea8c3bc106f 100644 --- a/core/src/main/java/org/elasticsearch/action/admin/cluster/node/stats/NodeStats.java +++ b/core/src/main/java/org/elasticsearch/action/admin/cluster/node/stats/NodeStats.java @@ -29,7 +29,7 @@ import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.http.HttpStats; import org.elasticsearch.indices.NodeIndicesStats; import org.elasticsearch.indices.breaker.AllCircuitBreakerStats; -import org.elasticsearch.monitor.fs.FsStats; +import org.elasticsearch.monitor.fs.FsInfo; import org.elasticsearch.monitor.jvm.JvmStats; import org.elasticsearch.monitor.os.OsStats; import org.elasticsearch.monitor.process.ProcessStats; @@ -62,7 +62,7 @@ public class NodeStats extends BaseNodeResponse implements ToXContent { private ThreadPoolStats threadPool; @Nullable - private FsStats fs; + private FsInfo fs; @Nullable private TransportStats transport; @@ -78,7 +78,7 @@ public class NodeStats extends BaseNodeResponse implements ToXContent { public NodeStats(DiscoveryNode node, long timestamp, @Nullable NodeIndicesStats indices, @Nullable OsStats os, @Nullable ProcessStats process, @Nullable JvmStats jvm, @Nullable ThreadPoolStats threadPool, - @Nullable FsStats fs, @Nullable TransportStats transport, @Nullable HttpStats http, + @Nullable FsInfo fs, @Nullable TransportStats transport, @Nullable HttpStats http, @Nullable AllCircuitBreakerStats breaker) { super(node); this.timestamp = timestamp; @@ -146,7 +146,7 @@ public class NodeStats extends BaseNodeResponse implements ToXContent { * File system level stats. */ @Nullable - public FsStats getFs() { + public FsInfo getFs() { return fs; } @@ -191,7 +191,7 @@ public class NodeStats extends BaseNodeResponse implements ToXContent { threadPool = ThreadPoolStats.readThreadPoolStats(in); } if (in.readBoolean()) { - fs = FsStats.readFsStats(in); + fs = FsInfo.readFsInfo(in); } if (in.readBoolean()) { transport = TransportStats.readTransportStats(in); diff --git a/core/src/main/java/org/elasticsearch/action/admin/cluster/stats/ClusterStatsNodes.java b/core/src/main/java/org/elasticsearch/action/admin/cluster/stats/ClusterStatsNodes.java index f4026954614..7a512fd75ea 100644 --- a/core/src/main/java/org/elasticsearch/action/admin/cluster/stats/ClusterStatsNodes.java +++ b/core/src/main/java/org/elasticsearch/action/admin/cluster/stats/ClusterStatsNodes.java @@ -36,7 +36,7 @@ import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.xcontent.ToXContent; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilderString; -import org.elasticsearch.monitor.fs.FsStats; +import org.elasticsearch.monitor.fs.FsInfo; import org.elasticsearch.monitor.jvm.JvmInfo; import org.elasticsearch.monitor.os.OsInfo; @@ -52,7 +52,7 @@ public class ClusterStatsNodes implements ToXContent, Streamable { private OsStats os; private ProcessStats process; private JvmStats jvm; - private FsStats.Path fs; + private FsInfo.Path fs; private Set plugins; private ClusterStatsNodes() { @@ -63,7 +63,7 @@ public class ClusterStatsNodes implements ToXContent, Streamable { this.versions = new HashSet<>(); this.os = new OsStats(); this.jvm = new JvmStats(); - this.fs = new FsStats.Path(); + this.fs = new FsInfo.Path(); this.plugins = new HashSet<>(); this.process = new ProcessStats(); @@ -116,7 +116,7 @@ public class ClusterStatsNodes implements ToXContent, Streamable { return jvm; } - public FsStats.Path getFs() { + public FsInfo.Path getFs() { return fs; } @@ -138,7 +138,7 @@ public class ClusterStatsNodes implements ToXContent, Streamable { os = OsStats.readOsStats(in); process = ProcessStats.readStats(in); jvm = JvmStats.readJvmStats(in); - fs = FsStats.Path.readInfoFrom(in); + fs = FsInfo.Path.readInfoFrom(in); size = in.readVInt(); plugins = new HashSet<>(size); diff --git a/core/src/main/java/org/elasticsearch/cluster/InternalClusterInfoService.java b/core/src/main/java/org/elasticsearch/cluster/InternalClusterInfoService.java index e9bab0a0a48..87f6e57616f 100644 --- a/core/src/main/java/org/elasticsearch/cluster/InternalClusterInfoService.java +++ b/core/src/main/java/org/elasticsearch/cluster/InternalClusterInfoService.java @@ -39,7 +39,7 @@ import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.util.concurrent.EsRejectedExecutionException; -import org.elasticsearch.monitor.fs.FsStats; +import org.elasticsearch.monitor.fs.FsInfo; import org.elasticsearch.node.settings.NodeSettingsService; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.transport.ReceiveTimeoutTransportException; @@ -320,7 +320,7 @@ public class InternalClusterInfoService extends AbstractComponent implements Clu long available = 0; long total = 0; - for (FsStats.Path info : nodeStats.getFs()) { + for (FsInfo.Path info : nodeStats.getFs()) { available += info.getAvailable().bytes(); total += info.getTotal().bytes(); } diff --git a/core/src/main/java/org/elasticsearch/env/NodeEnvironment.java b/core/src/main/java/org/elasticsearch/env/NodeEnvironment.java index 4d55216a479..00c2c2437a2 100644 --- a/core/src/main/java/org/elasticsearch/env/NodeEnvironment.java +++ b/core/src/main/java/org/elasticsearch/env/NodeEnvironment.java @@ -41,7 +41,7 @@ import org.elasticsearch.index.Index; import org.elasticsearch.index.settings.IndexSettings; import org.elasticsearch.index.shard.ShardId; import org.elasticsearch.index.store.FsDirectoryService; -import org.elasticsearch.monitor.fs.FsStats; +import org.elasticsearch.monitor.fs.FsInfo; import org.elasticsearch.monitor.fs.FsProbe; import java.io.Closeable; @@ -225,7 +225,7 @@ public class NodeEnvironment extends AbstractComponent implements Closeable { spinsDesc = "no"; } - FsStats.Path fsPath = FsProbe.getFSInfo(nodePath); + FsInfo.Path fsPath = FsProbe.getFSInfo(nodePath); sb.append(", free_space [") .append(fsPath.getFree()) .append("], usable_space [") @@ -242,13 +242,12 @@ public class NodeEnvironment extends AbstractComponent implements Closeable { } logger.debug(sb.toString()); } else if (logger.isInfoEnabled()) { - FsStats.Path totFSPath = new FsStats.Path(); + FsInfo.Path totFSPath = new FsInfo.Path(); Set allTypes = new HashSet<>(); Set allSpins = new HashSet<>(); Set allMounts = new HashSet<>(); for (NodePath nodePath : nodePaths) { - // TODO: can/should I use the chosen FsProbe instead (i.e. sigar if it's available)? - FsStats.Path fsPath = FsProbe.getFSInfo(nodePath); + FsInfo.Path fsPath = FsProbe.getFSInfo(nodePath); String mount = fsPath.getMount(); if (allMounts.contains(mount) == false) { allMounts.add(mount); diff --git a/core/src/main/java/org/elasticsearch/monitor/fs/FsStats.java b/core/src/main/java/org/elasticsearch/monitor/fs/FsInfo.java similarity index 97% rename from core/src/main/java/org/elasticsearch/monitor/fs/FsStats.java rename to core/src/main/java/org/elasticsearch/monitor/fs/FsInfo.java index b5ccff194a6..6fcbec5ee90 100644 --- a/core/src/main/java/org/elasticsearch/monitor/fs/FsStats.java +++ b/core/src/main/java/org/elasticsearch/monitor/fs/FsInfo.java @@ -34,7 +34,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Set; -public class FsStats implements Iterable, Streamable, ToXContent { +public class FsInfo implements Iterable, Streamable, ToXContent { public static class Path implements Streamable, ToXContent { @@ -197,11 +197,11 @@ public class FsStats implements Iterable, Streamable, ToXContent { Path total; Path[] paths; - FsStats() { + FsInfo() { } - public FsStats(long timestamp, Path[] paths) { + public FsInfo(long timestamp, Path[] paths) { this.timestamp = timestamp; this.paths = paths; this.total = null; @@ -238,8 +238,8 @@ public class FsStats implements Iterable, Streamable, ToXContent { return Iterators.forArray(paths); } - public static FsStats readFsStats(StreamInput in) throws IOException { - FsStats stats = new FsStats(); + public static FsInfo readFsInfo(StreamInput in) throws IOException { + FsInfo stats = new FsInfo(); stats.readFrom(in); return stats; } diff --git a/core/src/main/java/org/elasticsearch/monitor/fs/FsProbe.java b/core/src/main/java/org/elasticsearch/monitor/fs/FsProbe.java index b16c7b6ef3e..56bc352a5bc 100644 --- a/core/src/main/java/org/elasticsearch/monitor/fs/FsProbe.java +++ b/core/src/main/java/org/elasticsearch/monitor/fs/FsProbe.java @@ -37,20 +37,20 @@ public class FsProbe extends AbstractComponent { this.nodeEnv = nodeEnv; } - public FsStats stats() throws IOException { + public FsInfo stats() throws IOException { if (!nodeEnv.hasNodeFile()) { - return new FsStats(System.currentTimeMillis(), new FsStats.Path[0]); + return new FsInfo(System.currentTimeMillis(), new FsInfo.Path[0]); } NodePath[] dataLocations = nodeEnv.nodePaths(); - FsStats.Path[] paths = new FsStats.Path[dataLocations.length]; + FsInfo.Path[] paths = new FsInfo.Path[dataLocations.length]; for (int i = 0; i < dataLocations.length; i++) { paths[i] = getFSInfo(dataLocations[i]); } - return new FsStats(System.currentTimeMillis(), paths); + return new FsInfo(System.currentTimeMillis(), paths); } - public static FsStats.Path getFSInfo(NodePath nodePath) throws IOException { - FsStats.Path fsPath = new FsStats.Path(); + public static FsInfo.Path getFSInfo(NodePath nodePath) throws IOException { + FsInfo.Path fsPath = new FsInfo.Path(); fsPath.path = nodePath.path.toAbsolutePath().toString(); // NOTE: we use already cached (on node startup) FileStore and spins diff --git a/core/src/main/java/org/elasticsearch/monitor/fs/FsService.java b/core/src/main/java/org/elasticsearch/monitor/fs/FsService.java index 506b42e549b..c95a7bf8b3a 100644 --- a/core/src/main/java/org/elasticsearch/monitor/fs/FsService.java +++ b/core/src/main/java/org/elasticsearch/monitor/fs/FsService.java @@ -33,33 +33,33 @@ public class FsService extends AbstractComponent { private final FsProbe probe; - private final SingleObjectCache fsStatsCache; + private final SingleObjectCache fsStatsCache; @Inject public FsService(Settings settings, FsProbe probe) throws IOException { super(settings); this.probe = probe; TimeValue refreshInterval = settings.getAsTime("monitor.fs.refresh_interval", TimeValue.timeValueSeconds(1)); - fsStatsCache = new FsStatsCache(refreshInterval, probe.stats()); + fsStatsCache = new FsInfoCache(refreshInterval, probe.stats()); logger.debug("Using probe [{}] with refresh_interval [{}]", probe, refreshInterval); } - public FsStats stats() { + public FsInfo stats() { return fsStatsCache.getOrRefresh(); } - private class FsStatsCache extends SingleObjectCache { - public FsStatsCache(TimeValue interval, FsStats initValue) { + private class FsInfoCache extends SingleObjectCache { + public FsInfoCache(TimeValue interval, FsInfo initValue) { super(interval, initValue); } @Override - protected FsStats refresh() { + protected FsInfo refresh() { try { return probe.stats(); } catch (IOException ex) { logger.warn("Failed to fetch fs stats - returning empty instance"); - return new FsStats(); + return new FsInfo(); } } } diff --git a/core/src/main/java/org/elasticsearch/rest/action/cat/RestNodesAction.java b/core/src/main/java/org/elasticsearch/rest/action/cat/RestNodesAction.java index 6ce84bf7283..87fc5378fd1 100644 --- a/core/src/main/java/org/elasticsearch/rest/action/cat/RestNodesAction.java +++ b/core/src/main/java/org/elasticsearch/rest/action/cat/RestNodesAction.java @@ -48,7 +48,7 @@ import org.elasticsearch.index.refresh.RefreshStats; import org.elasticsearch.index.search.stats.SearchStats; import org.elasticsearch.index.suggest.stats.SuggestStats; import org.elasticsearch.indices.NodeIndicesStats; -import org.elasticsearch.monitor.fs.FsStats; +import org.elasticsearch.monitor.fs.FsInfo; import org.elasticsearch.monitor.jvm.JvmInfo; import org.elasticsearch.monitor.jvm.JvmStats; import org.elasticsearch.monitor.os.OsInfo; @@ -224,7 +224,7 @@ public class RestNodesAction extends AbstractCatAction { ProcessInfo processInfo = info == null ? null : info.getProcess(); JvmStats jvmStats = stats == null ? null : stats.getJvm(); - FsStats fsStats = stats == null ? null : stats.getFs(); + FsInfo fsInfo = stats == null ? null : stats.getFs(); OsStats osStats = stats == null ? null : stats.getOs(); ProcessStats processStats = stats == null ? null : stats.getProcess(); NodeIndicesStats indicesStats = stats == null ? null : stats.getIndices(); @@ -244,7 +244,7 @@ public class RestNodesAction extends AbstractCatAction { table.addCell(node.getVersion().number()); table.addCell(info == null ? null : info.getBuild().hashShort()); table.addCell(jvmInfo == null ? null : jvmInfo.version()); - table.addCell(fsStats == null ? null : fsStats.getTotal().getAvailable()); + table.addCell(fsInfo == null ? null : fsInfo.getTotal().getAvailable()); table.addCell(jvmStats == null ? null : jvmStats.getMem().getHeapUsed()); table.addCell(jvmStats == null ? null : jvmStats.getMem().getHeapUsedPercent()); table.addCell(jvmInfo == null ? null : jvmInfo.getMem().getHeapMax()); diff --git a/core/src/test/java/org/elasticsearch/cluster/routing/allocation/decider/MockDiskUsagesTests.java b/core/src/test/java/org/elasticsearch/cluster/routing/allocation/decider/MockDiskUsagesTests.java index 2449ed8ef24..1db310c4770 100644 --- a/core/src/test/java/org/elasticsearch/cluster/routing/allocation/decider/MockDiskUsagesTests.java +++ b/core/src/test/java/org/elasticsearch/cluster/routing/allocation/decider/MockDiskUsagesTests.java @@ -32,7 +32,7 @@ import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.cluster.routing.RoutingNode; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.monitor.fs.FsStats; +import org.elasticsearch.monitor.fs.FsInfo; import org.elasticsearch.node.settings.NodeSettingsService; import org.elasticsearch.test.ElasticsearchIntegrationTest; import org.elasticsearch.threadpool.ThreadPool; @@ -141,15 +141,15 @@ public class MockDiskUsagesTests extends ElasticsearchIntegrationTest { /** Create a fake NodeStats for the given node and usage */ public static NodeStats makeStats(String nodeName, DiskUsage usage) { - FsStats.Path[] paths = new FsStats.Path[1]; - FsStats.Path path = new FsStats.Path("/path.data", null, + FsInfo.Path[] paths = new FsInfo.Path[1]; + FsInfo.Path path = new FsInfo.Path("/path.data", null, usage.getTotalBytes(), usage.getFreeBytes(), usage.getFreeBytes()); paths[0] = path; - FsStats fsStats = new FsStats(System.currentTimeMillis(), paths); + FsInfo fsInfo = new FsInfo(System.currentTimeMillis(), paths); return new NodeStats(new DiscoveryNode(nodeName, null, Version.V_2_0_0), System.currentTimeMillis(), null, null, null, null, null, - fsStats, + fsInfo, null, null, null); } diff --git a/core/src/test/java/org/elasticsearch/index/store/CorruptedFileTest.java b/core/src/test/java/org/elasticsearch/index/store/CorruptedFileTest.java index 735cac6198b..baa1f087cb7 100644 --- a/core/src/test/java/org/elasticsearch/index/store/CorruptedFileTest.java +++ b/core/src/test/java/org/elasticsearch/index/store/CorruptedFileTest.java @@ -60,7 +60,7 @@ import org.elasticsearch.indices.IndicesService; import org.elasticsearch.indices.recovery.RecoveryFileChunkRequest; import org.elasticsearch.indices.recovery.RecoverySettings; import org.elasticsearch.indices.recovery.RecoveryTarget; -import org.elasticsearch.monitor.fs.FsStats; +import org.elasticsearch.monitor.fs.FsInfo; import org.elasticsearch.snapshots.SnapshotState; import org.elasticsearch.test.ElasticsearchIntegrationTest; import org.elasticsearch.test.InternalTestCluster; @@ -570,7 +570,7 @@ public class CorruptedFileTest extends ElasticsearchIntegrationTest { NodeStats nodeStats = nodeStatses.getNodes()[0]; List files = new ArrayList<>(); filesToNodes.put(nodeStats.getNode().getName(), files); - for (FsStats.Path info : nodeStats.getFs()) { + for (FsInfo.Path info : nodeStats.getFs()) { String path = info.getPath(); final String relativeDataLocationPath = "indices/test/" + Integer.toString(shardRouting.getId()) + "/index"; Path file = PathUtils.get(path).resolve(relativeDataLocationPath); @@ -604,7 +604,7 @@ public class CorruptedFileTest extends ElasticsearchIntegrationTest { String nodeId = shardRouting.currentNodeId(); NodesStatsResponse nodeStatses = client().admin().cluster().prepareNodesStats(nodeId).setFs(true).get(); Set files = new TreeSet<>(); // treeset makes sure iteration order is deterministic - for (FsStats.Path info : nodeStatses.getNodes()[0].getFs()) { + for (FsInfo.Path info : nodeStatses.getNodes()[0].getFs()) { String path = info.getPath(); final String relativeDataLocationPath = "indices/test/" + Integer.toString(shardRouting.getId()) + "/index"; Path file = PathUtils.get(path).resolve(relativeDataLocationPath); @@ -716,7 +716,7 @@ public class CorruptedFileTest extends ElasticsearchIntegrationTest { assertThat(routing.toString(), nodeStatses.getNodes().length, equalTo(1)); List files = new ArrayList<>(); - for (FsStats.Path info : nodeStatses.getNodes()[0].getFs()) { + for (FsInfo.Path info : nodeStatses.getNodes()[0].getFs()) { String path = info.getPath(); Path file = PathUtils.get(path).resolve("indices/test/" + Integer.toString(routing.getId()) + "/index"); if (Files.exists(file)) { // multi data path might only have one path in use diff --git a/core/src/test/java/org/elasticsearch/index/store/CorruptedTranslogTests.java b/core/src/test/java/org/elasticsearch/index/store/CorruptedTranslogTests.java index 319ed0fba4f..9968e742cb9 100644 --- a/core/src/test/java/org/elasticsearch/index/store/CorruptedTranslogTests.java +++ b/core/src/test/java/org/elasticsearch/index/store/CorruptedTranslogTests.java @@ -33,7 +33,7 @@ import org.elasticsearch.common.io.PathUtils; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.index.shard.IndexShard; import org.elasticsearch.index.translog.TranslogConfig; -import org.elasticsearch.monitor.fs.FsStats; +import org.elasticsearch.monitor.fs.FsInfo; import org.elasticsearch.test.ElasticsearchIntegrationTest; import org.elasticsearch.test.engine.MockEngineSupport; import org.elasticsearch.test.junit.annotations.TestLogging; @@ -124,7 +124,7 @@ public class CorruptedTranslogTests extends ElasticsearchIntegrationTest { String nodeId = shardRouting.currentNodeId(); NodesStatsResponse nodeStatses = client().admin().cluster().prepareNodesStats(nodeId).setFs(true).get(); Set files = new TreeSet<>(); // treeset makes sure iteration order is deterministic - for (FsStats.Path fsPath : nodeStatses.getNodes()[0].getFs()) { + for (FsInfo.Path fsPath : nodeStatses.getNodes()[0].getFs()) { String path = fsPath.getPath(); final String relativeDataLocationPath = "indices/test/" + Integer.toString(shardRouting.getId()) + "/translog"; Path file = PathUtils.get(path).resolve(relativeDataLocationPath); diff --git a/core/src/test/java/org/elasticsearch/monitor/fs/FsProbeTests.java b/core/src/test/java/org/elasticsearch/monitor/fs/FsProbeTests.java index 0291d29ad05..82c9097d693 100644 --- a/core/src/test/java/org/elasticsearch/monitor/fs/FsProbeTests.java +++ b/core/src/test/java/org/elasticsearch/monitor/fs/FsProbeTests.java @@ -31,21 +31,21 @@ import static org.hamcrest.Matchers.*; public class FsProbeTests extends ElasticsearchTestCase { @Test - public void testFsStats() throws IOException { + public void testFsInfo() throws IOException { try (NodeEnvironment env = newNodeEnvironment()) { FsProbe probe = new FsProbe(Settings.EMPTY, env); - FsStats stats = probe.stats(); + FsInfo stats = probe.stats(); assertNotNull(stats); assertThat(stats.getTimestamp(), greaterThan(0L)); - FsStats.Path total = stats.getTotal(); + FsInfo.Path total = stats.getTotal(); assertNotNull(total); assertThat(total.total, greaterThan(0L)); assertThat(total.free, greaterThan(0L)); assertThat(total.available, greaterThan(0L)); - for (FsStats.Path path : stats) { + for (FsInfo.Path path : stats) { assertNotNull(path); assertThat(path.getPath(), not(isEmptyOrNullString())); assertThat(path.getMount(), not(isEmptyOrNullString()));