_cluster/state should always return cluster_uuid (#30143)
Currently, the only way to get the REST response for the `/_cluster/state` call to return the `cluster_uuid` is to request the `metadata` metrics, which is one of the most expensive response structures. However, external monitoring agents will likely want the `cluster_uuid` to correlate the response with other API responses whether or not they want cluster metadata.
This commit is contained in:
parent
50945051b6
commit
725a5af2c6
|
@ -15,6 +15,12 @@ of the cluster state (its size when serialized for transmission over
|
||||||
the network), and the cluster state itself, which can be filtered to
|
the network), and the cluster state itself, which can be filtered to
|
||||||
only retrieve the parts of interest, as described below.
|
only retrieve the parts of interest, as described below.
|
||||||
|
|
||||||
|
The cluster's `cluster_uuid` is also returned as part of the top-level
|
||||||
|
response, in addition to the `metadata` section. added[6.4.0]
|
||||||
|
|
||||||
|
NOTE: While the cluster is still forming, it is possible for the `cluster_uuid`
|
||||||
|
to be `_na_` as well as the cluster state's version to be `-1`.
|
||||||
|
|
||||||
By default, the cluster state request is routed to the master node, to
|
By default, the cluster state request is routed to the master node, to
|
||||||
ensure that the latest cluster state is returned.
|
ensure that the latest cluster state is returned.
|
||||||
For debugging purposes, you can retrieve the cluster state local to a
|
For debugging purposes, you can retrieve the cluster state local to a
|
||||||
|
|
|
@ -18,3 +18,18 @@
|
||||||
- is_true: master_node
|
- is_true: master_node
|
||||||
- gte: { compressed_size_in_bytes: 50 }
|
- gte: { compressed_size_in_bytes: 50 }
|
||||||
- is_true: compressed_size
|
- is_true: compressed_size
|
||||||
|
|
||||||
|
---
|
||||||
|
"get cluster state returns cluster_uuid at the top level":
|
||||||
|
- skip:
|
||||||
|
version: " - 6.99.99"
|
||||||
|
reason: "cluster state including cluster_uuid at the top level is new in v6.4.0 and higher"
|
||||||
|
|
||||||
|
- do:
|
||||||
|
cluster.state:
|
||||||
|
human: true
|
||||||
|
|
||||||
|
- is_true: cluster_uuid
|
||||||
|
- is_true: master_node
|
||||||
|
- gte: { compressed_size_in_bytes: 50 }
|
||||||
|
- is_true: compressed_size
|
||||||
|
|
|
@ -156,3 +156,19 @@ setup:
|
||||||
- is_true: routing_table.indices.index1
|
- is_true: routing_table.indices.index1
|
||||||
- is_true: metadata.indices.index2
|
- is_true: metadata.indices.index2
|
||||||
- is_true: routing_table.indices.index2
|
- is_true: routing_table.indices.index2
|
||||||
|
|
||||||
|
---
|
||||||
|
"Filtering the cluster state returns cluster_uuid at the top level regardless of metric filters":
|
||||||
|
- skip:
|
||||||
|
version: " - 6.99.99"
|
||||||
|
reason: "cluster state including cluster_uuid at the top level is new in v6.4.0 and higher"
|
||||||
|
|
||||||
|
- do:
|
||||||
|
cluster.state:
|
||||||
|
metric: [ master_node, version, metadata ]
|
||||||
|
|
||||||
|
- is_true: cluster_uuid
|
||||||
|
- is_true: master_node
|
||||||
|
- is_true: version
|
||||||
|
- is_true: state_uuid
|
||||||
|
- is_true: metadata
|
||||||
|
|
|
@ -326,6 +326,9 @@ public class ClusterState implements ToXContentFragment, Diffable<ClusterState>
|
||||||
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
|
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
|
||||||
EnumSet<Metric> metrics = Metric.parseString(params.param("metric", "_all"), true);
|
EnumSet<Metric> metrics = Metric.parseString(params.param("metric", "_all"), true);
|
||||||
|
|
||||||
|
// always provide the cluster_uuid as part of the top-level response (also part of the metadata response)
|
||||||
|
builder.field("cluster_uuid", metaData().clusterUUID());
|
||||||
|
|
||||||
if (metrics.contains(Metric.VERSION)) {
|
if (metrics.contains(Metric.VERSION)) {
|
||||||
builder.field("version", version);
|
builder.field("version", version);
|
||||||
builder.field("state_uuid", stateUUID);
|
builder.field("state_uuid", stateUUID);
|
||||||
|
|
|
@ -69,6 +69,7 @@ public class ClusterRerouteResponseTests extends ESTestCase {
|
||||||
assertEquals("{\n" +
|
assertEquals("{\n" +
|
||||||
" \"acknowledged\" : true,\n" +
|
" \"acknowledged\" : true,\n" +
|
||||||
" \"state\" : {\n" +
|
" \"state\" : {\n" +
|
||||||
|
" \"cluster_uuid\" : \"_na_\",\n" +
|
||||||
" \"version\" : 0,\n" +
|
" \"version\" : 0,\n" +
|
||||||
" \"state_uuid\" : \"" + clusterState.stateUUID() + "\",\n" +
|
" \"state_uuid\" : \"" + clusterState.stateUUID() + "\",\n" +
|
||||||
" \"master_node\" : \"node0\",\n" +
|
" \"master_node\" : \"node0\",\n" +
|
||||||
|
@ -136,6 +137,7 @@ public class ClusterRerouteResponseTests extends ESTestCase {
|
||||||
assertEquals("{\n" +
|
assertEquals("{\n" +
|
||||||
" \"acknowledged\" : true,\n" +
|
" \"acknowledged\" : true,\n" +
|
||||||
" \"state\" : {\n" +
|
" \"state\" : {\n" +
|
||||||
|
" \"cluster_uuid\" : \"_na_\",\n" +
|
||||||
" \"version\" : 0,\n" +
|
" \"version\" : 0,\n" +
|
||||||
" \"state_uuid\" : \"" + clusterState.stateUUID() + "\",\n" +
|
" \"state_uuid\" : \"" + clusterState.stateUUID() + "\",\n" +
|
||||||
" \"master_node\" : \"node0\"\n" +
|
" \"master_node\" : \"node0\"\n" +
|
||||||
|
@ -168,6 +170,7 @@ public class ClusterRerouteResponseTests extends ESTestCase {
|
||||||
assertEquals("{\n" +
|
assertEquals("{\n" +
|
||||||
" \"acknowledged\" : true,\n" +
|
" \"acknowledged\" : true,\n" +
|
||||||
" \"state\" : {\n" +
|
" \"state\" : {\n" +
|
||||||
|
" \"cluster_uuid\" : \"_na_\",\n" +
|
||||||
" \"metadata\" : {\n" +
|
" \"metadata\" : {\n" +
|
||||||
" \"cluster_uuid\" : \"_na_\",\n" +
|
" \"cluster_uuid\" : \"_na_\",\n" +
|
||||||
" \"templates\" : { },\n" +
|
" \"templates\" : { },\n" +
|
||||||
|
|
|
@ -17,6 +17,7 @@ import org.elasticsearch.action.admin.indices.stats.ShardStats;
|
||||||
import org.elasticsearch.cluster.ClusterName;
|
import org.elasticsearch.cluster.ClusterName;
|
||||||
import org.elasticsearch.cluster.ClusterState;
|
import org.elasticsearch.cluster.ClusterState;
|
||||||
import org.elasticsearch.cluster.health.ClusterHealthStatus;
|
import org.elasticsearch.cluster.health.ClusterHealthStatus;
|
||||||
|
import org.elasticsearch.cluster.metadata.MetaData;
|
||||||
import org.elasticsearch.cluster.node.DiscoveryNode;
|
import org.elasticsearch.cluster.node.DiscoveryNode;
|
||||||
import org.elasticsearch.cluster.node.DiscoveryNodes;
|
import org.elasticsearch.cluster.node.DiscoveryNodes;
|
||||||
import org.elasticsearch.cluster.routing.ShardRouting;
|
import org.elasticsearch.cluster.routing.ShardRouting;
|
||||||
|
@ -188,6 +189,7 @@ public class ClusterStatsMonitoringDocTests extends BaseMonitoringDocTestCase<Cl
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void testToXContent() throws IOException {
|
public void testToXContent() throws IOException {
|
||||||
|
final String clusterUuid = "_cluster";
|
||||||
final ClusterName clusterName = new ClusterName("_cluster_name");
|
final ClusterName clusterName = new ClusterName("_cluster_name");
|
||||||
final TransportAddress transportAddress = new TransportAddress(TransportAddress.META_ADDRESS, 9300);
|
final TransportAddress transportAddress = new TransportAddress(TransportAddress.META_ADDRESS, 9300);
|
||||||
final DiscoveryNode discoveryNode = new DiscoveryNode("_node_name",
|
final DiscoveryNode discoveryNode = new DiscoveryNode("_node_name",
|
||||||
|
@ -201,6 +203,7 @@ public class ClusterStatsMonitoringDocTests extends BaseMonitoringDocTestCase<Cl
|
||||||
Version.V_6_0_0_beta1);
|
Version.V_6_0_0_beta1);
|
||||||
|
|
||||||
final ClusterState clusterState = ClusterState.builder(clusterName)
|
final ClusterState clusterState = ClusterState.builder(clusterName)
|
||||||
|
.metaData(MetaData.builder().clusterUUID(clusterUuid).build())
|
||||||
.stateUUID("_state_uuid")
|
.stateUUID("_state_uuid")
|
||||||
.version(12L)
|
.version(12L)
|
||||||
.nodes(DiscoveryNodes.builder()
|
.nodes(DiscoveryNodes.builder()
|
||||||
|
@ -500,6 +503,7 @@ public class ClusterStatsMonitoringDocTests extends BaseMonitoringDocTestCase<Cl
|
||||||
+ "\"cluster_state\":{"
|
+ "\"cluster_state\":{"
|
||||||
+ "\"nodes_hash\":1314980060,"
|
+ "\"nodes_hash\":1314980060,"
|
||||||
+ "\"status\":\"green\","
|
+ "\"status\":\"green\","
|
||||||
|
+ "\"cluster_uuid\":\"_cluster\","
|
||||||
+ "\"version\":12,"
|
+ "\"version\":12,"
|
||||||
+ "\"state_uuid\":\"_state_uuid\","
|
+ "\"state_uuid\":\"_state_uuid\","
|
||||||
+ "\"master_node\":\"_node\","
|
+ "\"master_node\":\"_node\","
|
||||||
|
|
Loading…
Reference in New Issue