Skip to content

Commit 57a7826

Browse files
committed
fix writeIndex evaluation for aliases (#31562)
AliasOrIndex.Alias#writeIndex was returning a write index when an alias was pointing to only one index, regardless whether `is_write_index` was set to `false`. This fixes that so that there is no write index in such a case that an alias points to only one index with `is_write_index=false`.
1 parent 28d62cd commit 57a7826

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

server/src/main/java/org/elasticsearch/cluster/metadata/AliasOrIndex.java

+7-3
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,13 @@ public void computeAndValidateWriteIndex() {
157157
List<IndexMetaData> writeIndices = referenceIndexMetaDatas.stream()
158158
.filter(idxMeta -> Boolean.TRUE.equals(idxMeta.getAliases().get(aliasName).writeIndex()))
159159
.collect(Collectors.toList());
160-
if (referenceIndexMetaDatas.size() == 1) {
161-
writeIndex.set(referenceIndexMetaDatas.get(0));
162-
} else if (writeIndices.size() == 1) {
160+
161+
if (writeIndices.isEmpty() && referenceIndexMetaDatas.size() == 1
162+
&& referenceIndexMetaDatas.get(0).getAliases().get(aliasName).writeIndex() == null) {
163+
writeIndices.add(referenceIndexMetaDatas.get(0));
164+
}
165+
166+
if (writeIndices.size() == 1) {
163167
writeIndex.set(writeIndices.get(0));
164168
} else if (writeIndices.size() > 1) {
165169
List<String> writeIndicesStrings = writeIndices.stream()

server/src/test/java/org/elasticsearch/cluster/metadata/MetaDataIndexAliasesServiceTests.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,7 @@ public void testAddWriteOnlyWithNoExistingAliases() {
136136
ClusterState after = service.innerExecute(before, Arrays.asList(
137137
new AliasAction.Add("test", "alias", null, null, null, false)));
138138
assertFalse(after.metaData().index("test").getAliases().get("alias").writeIndex());
139-
assertThat(((AliasOrIndex.Alias) after.metaData().getAliasAndIndexLookup().get("alias")).getWriteIndex(),
140-
equalTo(after.metaData().index("test")));
139+
assertNull(((AliasOrIndex.Alias) after.metaData().getAliasAndIndexLookup().get("alias")).getWriteIndex());
141140

142141
after = service.innerExecute(before, Arrays.asList(
143142
new AliasAction.Add("test", "alias", null, null, null, null)));

0 commit comments

Comments
 (0)