Browse Source

add indices flag to nodes info request; use boolean to express 'null' indexing buffer value on the wire

Mike McCandless 9 years ago
parent
commit
ebc3c17c34

+ 7 - 2
core/src/main/java/org/elasticsearch/action/admin/cluster/node/info/NodeInfo.java

@@ -208,7 +208,11 @@ public class NodeInfo extends BaseNodeResponse {
         super.readFrom(in);
         version = Version.readVersion(in);
         build = Build.readBuild(in);
-        totalIndexingBuffer = new ByteSizeValue(in.readLong());
+        if (in.readBoolean()) {
+            totalIndexingBuffer = new ByteSizeValue(in.readLong());
+        } else {
+            totalIndexingBuffer = null;
+        }
         if (in.readBoolean()) {
             Map<String, String> builder = new HashMap<>();
             int size = in.readVInt();
@@ -253,8 +257,9 @@ public class NodeInfo extends BaseNodeResponse {
         out.writeVInt(version.id);
         Build.writeBuild(build, out);
         if (totalIndexingBuffer == null) {
-            out.writeLong(0);
+            out.writeBoolean(false);
         } else {
+            out.writeBoolean(true);
             out.writeLong(totalIndexingBuffer.bytes());
         }
         if (getServiceAttributes() == null) {

+ 21 - 0
core/src/main/java/org/elasticsearch/action/admin/cluster/node/info/NodesInfoRequest.java

@@ -39,6 +39,7 @@ public class NodesInfoRequest extends BaseNodesRequest<NodesInfoRequest> {
     private boolean http = true;
     private boolean plugins = true;
     private boolean ingest = true;
+    private boolean indices = true;
 
     public NodesInfoRequest() {
     }
@@ -64,6 +65,7 @@ public class NodesInfoRequest extends BaseNodesRequest<NodesInfoRequest> {
         http = false;
         plugins = false;
         ingest = false;
+        indices = false;
         return this;
     }
 
@@ -80,6 +82,7 @@ public class NodesInfoRequest extends BaseNodesRequest<NodesInfoRequest> {
         http = true;
         plugins = true;
         ingest = true;
+        indices = true;
         return this;
     }
 
@@ -221,6 +224,22 @@ public class NodesInfoRequest extends BaseNodesRequest<NodesInfoRequest> {
         return ingest;
     }
 
+    /**
+     * Should information about indices (currently just indexing buffers) be returned
+     * @param indices true if you want info
+     */
+    public NodesInfoRequest indices(boolean indices) {
+        this.indices = indices;
+        return this;
+    }
+
+    /**
+     * @return true if information about indices (currently just indexing buffers)
+     */
+    public boolean indices() {
+        return indices;
+    }
+
     @Override
     public void readFrom(StreamInput in) throws IOException {
         super.readFrom(in);
@@ -233,6 +252,7 @@ public class NodesInfoRequest extends BaseNodesRequest<NodesInfoRequest> {
         http = in.readBoolean();
         plugins = in.readBoolean();
         ingest = in.readBoolean();
+        indices = in.readBoolean();
     }
 
     @Override
@@ -247,5 +267,6 @@ public class NodesInfoRequest extends BaseNodesRequest<NodesInfoRequest> {
         out.writeBoolean(http);
         out.writeBoolean(plugins);
         out.writeBoolean(ingest);
+        out.writeBoolean(indices);
     }
 }

+ 8 - 0
core/src/main/java/org/elasticsearch/action/admin/cluster/node/info/NodesInfoRequestBuilder.java

@@ -118,4 +118,12 @@ public class NodesInfoRequestBuilder extends NodesOperationRequestBuilder<NodesI
         request().ingest(ingest);
         return this;
     }
+
+    /**
+     * Should the node indices info be returned.
+     */
+    public NodesInfoRequestBuilder setIndices(boolean indices) {
+        request().indices(indices);
+        return this;
+    }
 }

+ 3 - 2
core/src/main/java/org/elasticsearch/action/admin/cluster/node/info/NodesInfoResponse.java

@@ -69,8 +69,9 @@ public class NodesInfoResponse extends BaseNodesResponse<NodeInfo> implements To
 
             builder.field("version", nodeInfo.getVersion());
             builder.field("build_hash", nodeInfo.getBuild().shortHash());
-            builder.field("total_indexing_buffer_in_bytes", nodeInfo.getTotalIndexingBuffer().bytes());
-            builder.field("total_indexing_buffer", nodeInfo.getTotalIndexingBuffer());
+            if (nodeInfo.getTotalIndexingBuffer() != null) {
+                builder.byteSizeField("total_indexing_buffer", "total_indexing_buffer_in_bytes", nodeInfo.getTotalIndexingBuffer());
+            }
 
             if (nodeInfo.getServiceAttributes() != null) {
                 for (Map.Entry<String, String> nodeAttribute : nodeInfo.getServiceAttributes().entrySet()) {

+ 1 - 1
core/src/main/java/org/elasticsearch/action/admin/cluster/node/info/TransportNodesInfoAction.java

@@ -77,7 +77,7 @@ public class TransportNodesInfoAction extends TransportNodesAction<NodesInfoRequ
     protected NodeInfo nodeOperation(NodeInfoRequest nodeRequest) {
         NodesInfoRequest request = nodeRequest.request;
         return nodeService.info(request.settings(), request.os(), request.process(), request.jvm(), request.threadPool(),
-                request.transport(), request.http(), request.plugins(), request.ingest());
+                request.transport(), request.http(), request.plugins(), request.ingest(), request.indices());
     }
 
     @Override

+ 1 - 1
core/src/main/java/org/elasticsearch/action/admin/cluster/stats/TransportClusterStatsAction.java

@@ -92,7 +92,7 @@ public class TransportClusterStatsAction extends TransportNodesAction<ClusterSta
 
     @Override
     protected ClusterStatsNodeResponse nodeOperation(ClusterStatsNodeRequest nodeRequest) {
-        NodeInfo nodeInfo = nodeService.info(false, true, false, true, false, true, false, true, false);
+        NodeInfo nodeInfo = nodeService.info(false, true, false, true, false, true, false, true, false, true);
         NodeStats nodeStats = nodeService.stats(CommonStatsFlags.NONE, false, true, true, false, true, false, false, false, false, false, false);
         List<ShardStats> shardsStats = new ArrayList<>();
         for (IndexService indexService : indicesService) {

+ 2 - 2
core/src/main/java/org/elasticsearch/node/service/NodeService.java

@@ -141,7 +141,7 @@ public class NodeService extends AbstractComponent implements Closeable {
     }
 
     public NodeInfo info(boolean settings, boolean os, boolean process, boolean jvm, boolean threadPool,
-                         boolean transport, boolean http, boolean plugin, boolean ingest) {
+                         boolean transport, boolean http, boolean plugin, boolean ingest, boolean indices) {
         return new NodeInfo(version, Build.CURRENT, discovery.localNode(), serviceAttributes,
                 settings ? settingsFilter.filter(this.settings) : null,
                 os ? monitorService.osService().info() : null,
@@ -152,7 +152,7 @@ public class NodeService extends AbstractComponent implements Closeable {
                 http ? (httpServer == null ? null : httpServer.info()) : null,
                 plugin ? (pluginService == null ? null : pluginService.info()) : null,
                 ingest ? (ingestService == null ? null : ingestService.info()) : null,
-                indicesService == null ? null : indicesService.getTotalIndexingBufferBytes()
+                indices ? indicesService.getTotalIndexingBufferBytes() : null
         );
     }
 

+ 2 - 1
core/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/info/RestNodesInfoAction.java

@@ -43,7 +43,7 @@ import static org.elasticsearch.rest.RestRequest.Method.GET;
 public class RestNodesInfoAction extends BaseRestHandler {
 
     private final SettingsFilter settingsFilter;
-    private final static Set<String> ALLOWED_METRICS = Sets.newHashSet("http", "jvm", "os", "plugins", "process", "settings", "thread_pool", "transport", "ingest");
+    private final static Set<String> ALLOWED_METRICS = Sets.newHashSet("http", "jvm", "os", "plugins", "process", "settings", "thread_pool", "transport", "ingest", "indices");
 
     @Inject
     public RestNodesInfoAction(Settings settings, RestController controller, Client client, SettingsFilter settingsFilter) {
@@ -97,6 +97,7 @@ public class RestNodesInfoAction extends BaseRestHandler {
             nodesInfoRequest.http(metrics.contains("http"));
             nodesInfoRequest.plugins(metrics.contains("plugins"));
             nodesInfoRequest.ingest(metrics.contains("ingest"));
+            nodesInfoRequest.indices(metrics.contains("indices"));
         }
 
         settingsFilter.addFilterSettingParams(request);

+ 11 - 0
core/src/test/java/org/elasticsearch/nodesinfo/SimpleNodesInfoIT.java

@@ -102,6 +102,17 @@ public class SimpleNodesInfoIT extends ESIntegTestCase {
         assertThat(response.getNodesMap().get(server2NodeId), notNullValue());
         assertNotNull(response.getNodesMap().get(server2NodeId).getTotalIndexingBuffer());
         assertThat(response.getNodesMap().get(server2NodeId).getTotalIndexingBuffer().bytes(), greaterThan(0L));
+
+        // again, using only the indices flag
+        response = client().admin().cluster().prepareNodesInfo().clear().setIndices(true).execute().actionGet();
+        assertThat(response.getNodes().size(), is(2));
+        assertThat(response.getNodesMap().get(server1NodeId), notNullValue());
+        assertNotNull(response.getNodesMap().get(server1NodeId).getTotalIndexingBuffer());
+        assertThat(response.getNodesMap().get(server1NodeId).getTotalIndexingBuffer().bytes(), greaterThan(0L));
+
+        assertThat(response.getNodesMap().get(server2NodeId), notNullValue());
+        assertNotNull(response.getNodesMap().get(server2NodeId).getTotalIndexingBuffer());
+        assertThat(response.getNodesMap().get(server2NodeId).getTotalIndexingBuffer().bytes(), greaterThan(0L));
     }
 
     public void testAllocatedProcessors() throws Exception {