Skip to content

Commit 93dae08

Browse files
authored
Minor fixes to improve SystemIndexDescriptor (#113278) (#116205)
Closes #112946
1 parent fde97e3 commit 93dae08

File tree

5 files changed

+29
-15
lines changed

5 files changed

+29
-15
lines changed

server/src/main/java/org/elasticsearch/action/admin/indices/create/AutoCreateAction.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -304,11 +304,14 @@ ClusterState execute(
304304
final CreateIndexClusterStateUpdateRequest updateRequest;
305305

306306
if (isManagedSystemIndex) {
307-
final SystemIndexDescriptor descriptor = mainDescriptor.getDescriptorCompatibleWith(
308-
currentState.getMinSystemIndexMappingVersions().get(mainDescriptor.getPrimaryIndex())
309-
);
307+
final var requiredMinimumMappingVersion = currentState.getMinSystemIndexMappingVersions()
308+
.get(mainDescriptor.getPrimaryIndex());
309+
final SystemIndexDescriptor descriptor = mainDescriptor.getDescriptorCompatibleWith(requiredMinimumMappingVersion);
310310
if (descriptor == null) {
311-
final String message = mainDescriptor.getMinimumMappingsVersionMessage("auto-create index");
311+
final String message = mainDescriptor.getMinimumMappingsVersionMessage(
312+
"auto-create index",
313+
requiredMinimumMappingVersion
314+
);
312315
logger.warn(message);
313316
throw new IllegalStateException(message);
314317
}

server/src/main/java/org/elasticsearch/action/admin/indices/create/TransportCreateIndexAction.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,10 @@ protected void masterOperation(
134134
// We check this via the request's origin. Eventually, `SystemIndexManager` will reconfigure
135135
// the index to the latest settings.
136136
if (isManagedSystemIndex && Strings.isNullOrEmpty(request.origin())) {
137-
final SystemIndexDescriptor descriptor = mainDescriptor.getDescriptorCompatibleWith(
138-
state.getMinSystemIndexMappingVersions().get(mainDescriptor.getPrimaryIndex())
139-
);
137+
final var requiredMinimumMappingVersion = state.getMinSystemIndexMappingVersions().get(mainDescriptor.getPrimaryIndex());
138+
final SystemIndexDescriptor descriptor = mainDescriptor.getDescriptorCompatibleWith(requiredMinimumMappingVersion);
140139
if (descriptor == null) {
141-
final String message = mainDescriptor.getMinimumMappingsVersionMessage("create index");
140+
final String message = mainDescriptor.getMinimumMappingsVersionMessage("create index", requiredMinimumMappingVersion);
142141
logger.warn(message);
143142
listener.onFailure(new IllegalStateException(message));
144143
return;

server/src/main/java/org/elasticsearch/indices/SystemIndexDescriptor.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ protected SystemIndexDescriptor(
334334
if (prior.primaryIndex.equals(primaryIndex) == false) {
335335
throw new IllegalArgumentException("primary index must be the same");
336336
}
337-
if (prior.aliasName.equals(aliasName) == false) {
337+
if (Objects.equals(prior.aliasName, aliasName) == false) {
338338
throw new IllegalArgumentException("alias name must be the same");
339339
}
340340
}
@@ -554,16 +554,21 @@ public MappingsVersion getMappingsVersion() {
554554
* @param cause the action being attempted that triggered the check. Used in the error message.
555555
* @return the standardized error message
556556
*/
557-
public String getMinimumMappingsVersionMessage(String cause) {
557+
public String getMinimumMappingsVersionMessage(String cause, MappingsVersion requiredMinimumMappingVersion) {
558558
Objects.requireNonNull(cause);
559559
final MappingsVersion actualMinimumMappingsVersion = priorSystemIndexDescriptors.isEmpty()
560560
? getMappingsVersion()
561561
: priorSystemIndexDescriptors.get(priorSystemIndexDescriptors.size() - 1).mappingsVersion;
562562
return Strings.format(
563-
"[%s] failed - system index [%s] requires all data and master nodes to have mappings versions at least of version [%s]",
563+
"[%s] failed - requested creation of system index [%s] with version [%s], while this cluster minimum supported version is "
564+
+ "[%s]. For the cluster to support version [%s], ensure that the system index descriptor for [%s] includes a prior "
565+
+ "definition for that version.",
564566
cause,
565567
this.getPrimaryIndex(),
566-
actualMinimumMappingsVersion
568+
requiredMinimumMappingVersion,
569+
actualMinimumMappingsVersion,
570+
requiredMinimumMappingVersion,
571+
this.getPrimaryIndex()
567572
);
568573
}
569574

x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/support/SecurityIndexManager.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,10 @@ public void prepareIndexIfNeededThenExecute(final Consumer<Exception> consumer,
507507
);
508508

509509
if (descriptorForVersion == null) {
510-
final String error = systemIndexDescriptor.getMinimumMappingsVersionMessage("create index");
510+
final String error = systemIndexDescriptor.getMinimumMappingsVersionMessage(
511+
"create index",
512+
state.minClusterMappingVersion
513+
);
511514
consumer.accept(new IllegalStateException(error));
512515
} else {
513516
logger.info(
@@ -558,7 +561,10 @@ public void onFailure(Exception e) {
558561
);
559562

560563
if (descriptorForVersion == null) {
561-
final String error = systemIndexDescriptor.getMinimumMappingsVersionMessage("updating mapping");
564+
final String error = systemIndexDescriptor.getMinimumMappingsVersionMessage(
565+
"updating mapping",
566+
state.minClusterMappingVersion
567+
);
562568
consumer.accept(new IllegalStateException(error));
563569
} else {
564570
logger.info(

x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/support/SecurityIndexManagerTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
import static org.hamcrest.Matchers.not;
7777
import static org.hamcrest.Matchers.notNullValue;
7878
import static org.hamcrest.Matchers.nullValue;
79+
import static org.mockito.ArgumentMatchers.any;
7980
import static org.mockito.ArgumentMatchers.anyString;
8081
import static org.mockito.ArgumentMatchers.eq;
8182
import static org.mockito.Mockito.doReturn;
@@ -428,7 +429,7 @@ public void testCannotUpdateIndexMappingsWhenMinMappingVersionTooLow() {
428429
final AtomicReference<Exception> prepareException = new AtomicReference<>(null);
429430

430431
// Hard-code a failure here.
431-
doReturn("Nope").when(descriptorSpy).getMinimumMappingsVersionMessage(anyString());
432+
doReturn("Nope").when(descriptorSpy).getMinimumMappingsVersionMessage(anyString(), any());
432433
doReturn(null).when(descriptorSpy)
433434
.getDescriptorCompatibleWith(eq(new SystemIndexDescriptor.MappingsVersion(SecurityMainIndexMappingVersion.latest().id(), 0)));
434435

0 commit comments

Comments
 (0)