Skip to content

Commit 16a1277

Browse files
authored
Minor fixes to improve SystemIndexDescriptor (#113278) (#116206)
Closes #112946
1 parent c10310a commit 16a1277

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
@@ -305,11 +305,14 @@ ClusterState execute(
305305
final CreateIndexClusterStateUpdateRequest updateRequest;
306306

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

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
@@ -135,11 +135,10 @@ protected void masterOperation(
135135
// We check this via the request's origin. Eventually, `SystemIndexManager` will reconfigure
136136
// the index to the latest settings.
137137
if (isManagedSystemIndex && Strings.isNullOrEmpty(request.origin())) {
138-
final SystemIndexDescriptor descriptor = mainDescriptor.getDescriptorCompatibleWith(
139-
state.getMinSystemIndexMappingVersions().get(mainDescriptor.getPrimaryIndex())
140-
);
138+
final var requiredMinimumMappingVersion = state.getMinSystemIndexMappingVersions().get(mainDescriptor.getPrimaryIndex());
139+
final SystemIndexDescriptor descriptor = mainDescriptor.getDescriptorCompatibleWith(requiredMinimumMappingVersion);
141140
if (descriptor == null) {
142-
final String message = mainDescriptor.getMinimumMappingsVersionMessage("create index");
141+
final String message = mainDescriptor.getMinimumMappingsVersionMessage("create index", requiredMinimumMappingVersion);
143142
logger.warn(message);
144143
listener.onFailure(new IllegalStateException(message));
145144
return;

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

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

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
@@ -616,7 +616,10 @@ public void prepareIndexIfNeededThenExecute(final Consumer<Exception> consumer,
616616
);
617617

618618
if (descriptorForVersion == null) {
619-
final String error = systemIndexDescriptor.getMinimumMappingsVersionMessage("create index");
619+
final String error = systemIndexDescriptor.getMinimumMappingsVersionMessage(
620+
"create index",
621+
state.minClusterMappingVersion
622+
);
620623
consumer.accept(new IllegalStateException(error));
621624
} else {
622625
logger.info(
@@ -667,7 +670,10 @@ public void onFailure(Exception e) {
667670
);
668671

669672
if (descriptorForVersion == null) {
670-
final String error = systemIndexDescriptor.getMinimumMappingsVersionMessage("updating mapping");
673+
final String error = systemIndexDescriptor.getMinimumMappingsVersionMessage(
674+
"updating mapping",
675+
state.minClusterMappingVersion
676+
);
671677
consumer.accept(new IllegalStateException(error));
672678
} else {
673679
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
@@ -82,6 +82,7 @@
8282
import static org.hamcrest.Matchers.not;
8383
import static org.hamcrest.Matchers.notNullValue;
8484
import static org.hamcrest.Matchers.nullValue;
85+
import static org.mockito.ArgumentMatchers.any;
8586
import static org.mockito.ArgumentMatchers.anyString;
8687
import static org.mockito.ArgumentMatchers.eq;
8788
import static org.mockito.Mockito.doReturn;
@@ -434,7 +435,7 @@ public void testCannotUpdateIndexMappingsWhenMinMappingVersionTooLow() {
434435
final AtomicReference<Exception> prepareException = new AtomicReference<>(null);
435436

436437
// Hard-code a failure here.
437-
doReturn("Nope").when(descriptorSpy).getMinimumMappingsVersionMessage(anyString());
438+
doReturn("Nope").when(descriptorSpy).getMinimumMappingsVersionMessage(anyString(), any());
438439
doReturn(null).when(descriptorSpy)
439440
.getDescriptorCompatibleWith(eq(new SystemIndexDescriptor.MappingsVersion(SecurityMainIndexMappingVersion.latest().id(), 0)));
440441

0 commit comments

Comments
 (0)