Skip to content

Commit 82d21f3

Browse files
authored
Minor fixes to improve SystemIndexDescriptor (#113278)
Closes #112946
1 parent 6911227 commit 82d21f3

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
@@ -316,7 +316,7 @@ protected SystemIndexDescriptor(
316316
if (prior.primaryIndex.equals(primaryIndex) == false) {
317317
throw new IllegalArgumentException("primary index must be the same");
318318
}
319-
if (prior.aliasName.equals(aliasName) == false) {
319+
if (Objects.equals(prior.aliasName, aliasName) == false) {
320320
throw new IllegalArgumentException("alias name must be the same");
321321
}
322322
}
@@ -512,16 +512,21 @@ public MappingsVersion getMappingsVersion() {
512512
* @param cause the action being attempted that triggered the check. Used in the error message.
513513
* @return the standardized error message
514514
*/
515-
public String getMinimumMappingsVersionMessage(String cause) {
515+
public String getMinimumMappingsVersionMessage(String cause, MappingsVersion requiredMinimumMappingVersion) {
516516
Objects.requireNonNull(cause);
517517
final MappingsVersion actualMinimumMappingsVersion = priorSystemIndexDescriptors.isEmpty()
518518
? getMappingsVersion()
519519
: priorSystemIndexDescriptors.get(priorSystemIndexDescriptors.size() - 1).mappingsVersion;
520520
return Strings.format(
521-
"[%s] failed - system index [%s] requires all data and master nodes to have mappings versions at least of version [%s]",
521+
"[%s] failed - requested creation of system index [%s] with version [%s], while this cluster minimum supported version is "
522+
+ "[%s]. For the cluster to support version [%s], ensure that the system index descriptor for [%s] includes a prior "
523+
+ "definition for that version.",
522524
cause,
523525
this.getPrimaryIndex(),
524-
actualMinimumMappingsVersion
526+
requiredMinimumMappingVersion,
527+
actualMinimumMappingsVersion,
528+
requiredMinimumMappingVersion,
529+
this.getPrimaryIndex()
525530
);
526531
}
527532

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
@@ -652,7 +652,10 @@ public void prepareIndexIfNeededThenExecute(final Consumer<Exception> consumer,
652652
);
653653

654654
if (descriptorForVersion == null) {
655-
final String error = systemIndexDescriptor.getMinimumMappingsVersionMessage("create index");
655+
final String error = systemIndexDescriptor.getMinimumMappingsVersionMessage(
656+
"create index",
657+
state.minClusterMappingVersion
658+
);
656659
consumer.accept(new IllegalStateException(error));
657660
} else {
658661
logger.info(
@@ -703,7 +706,10 @@ public void onFailure(Exception e) {
703706
);
704707

705708
if (descriptorForVersion == null) {
706-
final String error = systemIndexDescriptor.getMinimumMappingsVersionMessage("updating mapping");
709+
final String error = systemIndexDescriptor.getMinimumMappingsVersionMessage(
710+
"updating mapping",
711+
state.minClusterMappingVersion
712+
);
707713
consumer.accept(new IllegalStateException(error));
708714
} else {
709715
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)