From 6a596af934d296f9cc65ead1c3d91ff8cb357cf9 Mon Sep 17 00:00:00 2001 From: jaymode Date: Thu, 12 Dec 2019 22:54:12 -0700 Subject: [PATCH 01/26] Basic working version of hidden indices --- .../cluster/health/ClusterHealthRequest.java | 2 +- .../action/support/IndicesOptions.java | 131 +++++++++++------- .../cluster/metadata/IndexMetaData.java | 7 + .../metadata/IndexNameExpressionResolver.java | 75 ++++++---- .../cluster/metadata/MetaData.java | 66 +++++++-- .../common/settings/IndexScopedSettings.java | 1 + .../action/support/IndicesOptionsTests.java | 25 ---- .../elasticsearch/index/HiddenIndexIT.java | 64 +++++++++ .../org/elasticsearch/test/TestCluster.java | 5 +- 9 files changed, 259 insertions(+), 117 deletions(-) create mode 100644 server/src/test/java/org/elasticsearch/index/HiddenIndexIT.java diff --git a/server/src/main/java/org/elasticsearch/action/admin/cluster/health/ClusterHealthRequest.java b/server/src/main/java/org/elasticsearch/action/admin/cluster/health/ClusterHealthRequest.java index 9bea7b68caf0b..bbe24d7c0443f 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/cluster/health/ClusterHealthRequest.java +++ b/server/src/main/java/org/elasticsearch/action/admin/cluster/health/ClusterHealthRequest.java @@ -39,7 +39,7 @@ public class ClusterHealthRequest extends MasterNodeReadRequest implements IndicesRequest.Replaceable { private String[] indices; - private IndicesOptions indicesOptions = IndicesOptions.lenientExpand(); + private IndicesOptions indicesOptions = IndicesOptions.lenientExpandHidden(); private TimeValue timeout = new TimeValue(30, TimeUnit.SECONDS); private ClusterHealthStatus waitForStatus; private boolean waitForNoRelocatingShards = false; diff --git a/server/src/main/java/org/elasticsearch/action/support/IndicesOptions.java b/server/src/main/java/org/elasticsearch/action/support/IndicesOptions.java index 25e7a25335d66..cfc4585194de7 100644 --- a/server/src/main/java/org/elasticsearch/action/support/IndicesOptions.java +++ b/server/src/main/java/org/elasticsearch/action/support/IndicesOptions.java @@ -19,6 +19,7 @@ package org.elasticsearch.action.support; +import org.elasticsearch.Version; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.xcontent.ToXContent; @@ -45,7 +46,8 @@ public class IndicesOptions implements ToXContentFragment { public enum WildcardStates { OPEN, - CLOSED; + CLOSED, + HIDDEN; public static final EnumSet NONE = EnumSet.noneOf(WildcardStates.class); @@ -56,18 +58,24 @@ public static EnumSet parseParameter(Object value, EnumSet states = new HashSet<>(); String[] wildcards = nodeStringArrayValue(value); + // TODO why do we let patterns like "none,all" or "open,none,closed" get used. The location of 'none' in the array changes the + // meaning of the resulting value for (String wildcard : wildcards) { - if ("open".equals(wildcard)) { - states.add(OPEN); - } else if ("closed".equals(wildcard)) { - states.add(CLOSED); - } else if ("none".equals(wildcard)) { - states.clear(); - } else if ("all".equals(wildcard)) { - states.add(OPEN); - states.add(CLOSED); - } else { - throw new IllegalArgumentException("No valid expand wildcard value [" + wildcard + "]"); + switch (wildcard) { + case "open": + states.add(OPEN); + break; + case "closed": + states.add(CLOSED); + break; + case "none": + states.clear(); + break; + case "all": + states.addAll(EnumSet.allOf(WildcardStates.class)); + break; + default: + throw new IllegalArgumentException("No valid expand wildcard value [" + wildcard + "]"); } } @@ -91,9 +99,15 @@ public enum Option { public static final IndicesOptions LENIENT_EXPAND_OPEN = new IndicesOptions(EnumSet.of(Option.ALLOW_NO_INDICES, Option.IGNORE_UNAVAILABLE), EnumSet.of(WildcardStates.OPEN)); + public static final IndicesOptions LENIENT_EXPAND_OPEN_HIDDEN = + new IndicesOptions(EnumSet.of(Option.ALLOW_NO_INDICES, Option.IGNORE_UNAVAILABLE), + EnumSet.of(WildcardStates.OPEN, WildcardStates.HIDDEN)); public static final IndicesOptions LENIENT_EXPAND_OPEN_CLOSED = new IndicesOptions(EnumSet.of(Option.ALLOW_NO_INDICES, Option.IGNORE_UNAVAILABLE), EnumSet.of(WildcardStates.OPEN, WildcardStates.CLOSED)); + public static final IndicesOptions LENIENT_EXPAND_OPEN_CLOSED_HIDDEN = + new IndicesOptions(EnumSet.of(Option.ALLOW_NO_INDICES, Option.IGNORE_UNAVAILABLE), + EnumSet.of(WildcardStates.OPEN, WildcardStates.CLOSED, WildcardStates.HIDDEN)); public static final IndicesOptions STRICT_EXPAND_OPEN_CLOSED = new IndicesOptions(EnumSet.of(Option.ALLOW_NO_INDICES), EnumSet.of(WildcardStates.OPEN, WildcardStates.CLOSED)); public static final IndicesOptions STRICT_EXPAND_OPEN_FORBID_CLOSED = @@ -118,42 +132,6 @@ private IndicesOptions(Collection