Skip to content

Commit 442a6f7

Browse files
author
jaserud
authored
Merge pull request #38 from overture-stack/rc/2.3.0
Rc/2.3.0
2 parents a711d2f + 563d80d commit 442a6f7

File tree

4 files changed

+42
-32
lines changed

4 files changed

+42
-32
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
<groupId>bio.overture</groupId>
2525
<artifactId>rollcall</artifactId>
26-
<version>2.2.0</version>
26+
<version>2.3.0</version>
2727
<packaging>jar</packaging>
2828

2929
<name>rollcall</name>

src/main/java/bio/overture/rollcall/repository/IndexRepository.java

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.springframework.beans.factory.annotation.Autowired;
3838
import org.springframework.stereotype.Repository;
3939

40+
import java.util.Collections;
4041
import java.util.List;
4142

4243
import static java.util.stream.Collectors.toUnmodifiableList;
@@ -76,27 +77,35 @@ public ImmutableOpenMap<String, List<AliasMetaData>> getAliasState() {
7677

7778
@SneakyThrows
7879
public boolean removeAlias(@NonNull String alias, @NonNull List<String> indices) {
80+
return updateIndicesAliases(alias, Collections.emptyList(), indices);
81+
}
82+
83+
@SneakyThrows
84+
public boolean addAlias(@NonNull String alias, @NonNull List<String> indices) {
85+
return updateIndicesAliases(alias, indices, Collections.emptyList());
86+
}
87+
88+
@SneakyThrows
89+
public boolean updateIndicesAliases(@NonNull String alias, @NonNull List<String> indicesToAddToAlias, @NonNull List<String> indicesToRemoveFromAlias) {
7990
val req = new IndicesAliasesRequest();
80-
indices.forEach(i -> req.addAliasAction(remove().alias(alias).index(i)));
91+
92+
indicesToRemoveFromAlias.forEach(i -> req.addAliasAction(remove().alias(alias).index(i)));
93+
94+
indicesToAddToAlias.forEach(i -> req.addAliasAction(add().alias(alias).index(i)));
8195

8296
if (req.getAliasActions().isEmpty()) {
8397
return true;
8498
}
99+
85100
return client.indices().updateAliases(req, RequestOptions.DEFAULT).isAcknowledged();
86101
}
87102

88103
@SneakyThrows
89-
public boolean makeReadonlyThenAddAlias(@NonNull String alias, @NonNull List<String> indices) {
90-
// make indices readonly
104+
public boolean makeIndicesReadOnly(@NonNull List<String> indices) {
91105
final String disableWriteSetting = "{ \"index.blocks.write\": true }";
92-
val updateSettingsReq = new UpdateSettingsRequest(indices.toArray(String[]::new)).settings(disableWriteSetting, XContentType.JSON);
93-
val updatedSettings = client.indices().putSettings(updateSettingsReq, RequestOptions.DEFAULT).isAcknowledged();
94-
95-
if (!updatedSettings) return false;
96-
97-
val req = new IndicesAliasesRequest();
98-
indices.forEach(i -> req.addAliasAction(add().alias(alias).index(i)));
99-
return client.indices().updateAliases(req, RequestOptions.DEFAULT).isAcknowledged();
106+
val updateSettingsReq = new UpdateSettingsRequest(indices.toArray(String[]::new))
107+
.settings(disableWriteSetting, XContentType.JSON);
108+
return client.indices().putSettings(updateSettingsReq, RequestOptions.DEFAULT).isAcknowledged();
100109
}
101110

102111
@SneakyThrows

src/main/java/bio/overture/rollcall/service/AliasService.java

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -87,25 +87,25 @@ public AliasCandidates getRelevantCandidates(String alias) {
8787

8888
public boolean release(@NonNull AliasRequest aliasRequest) {
8989
val alias = aliasRequest.getAlias();
90+
val releases = getReleasesFromRequest(aliasRequest);
91+
val shards = getShardsFromRequest(aliasRequest);
9092

9193
// First identify candidates and check existence of at least one.
92-
val candidates = this.getRelevantCandidates(alias);
94+
val candidates = getRelevantCandidates(alias);
9395

9496
// Now do a pre-flight check to see if target indices exist and resolve correctly before continuing.
95-
val indicesToRelease = getIndicesForRelease(candidates, aliasRequest.getRelease().toLowerCase().split("_"), getShardsFromRequest(aliasRequest));
97+
val indicesToRelease = getIndicesForRelease(candidates, releases, shards);
9698
if (indicesToRelease.size() != aliasRequest.getShards().size()) {
9799
throw new ReleaseIntegrityException(aliasRequest.getRelease(), aliasRequest.getShards(), indicesToRelease);
98100
}
99101

100-
val removed = remove(aliasRequest);
101-
if (!removed) {
102-
throw new IllegalStateException("Failed to remove alias");
103-
}
102+
val indicesToRemoveFromAlias = getIndicesToRemoveFromAlias(aliasRequest);
104103

105-
return addAliasToIndices(aliasRequest, candidates);
104+
repository.makeIndicesReadOnly(indicesToRelease);
105+
return repository.updateIndicesAliases(alias, indicesToRelease, indicesToRemoveFromAlias);
106106
}
107107

108-
public boolean remove(@NonNull AliasRequest aliasRequest) {
108+
public List<String> getIndicesToRemoveFromAlias(@NonNull AliasRequest aliasRequest) {
109109
val alias = aliasRequest.getAlias();
110110
val shards = getShardsFromRequest(aliasRequest);
111111

@@ -120,6 +120,12 @@ public boolean remove(@NonNull AliasRequest aliasRequest) {
120120
.map(ResolvedIndex::getIndexName)
121121
.collect(toList());
122122

123+
return indices;
124+
}
125+
126+
public boolean remove(@NonNull AliasRequest aliasRequest) {
127+
val alias = aliasRequest.getAlias();
128+
val indices = getIndicesToRemoveFromAlias(aliasRequest);
123129
return repository.removeAlias(alias, indices);
124130
}
125131

@@ -128,15 +134,6 @@ public boolean removeAliasFromAllIndices(@NonNull String alias) {
128134
return repository.removeAlias(alias, existing);
129135
}
130136

131-
private boolean addAliasToIndices(AliasRequest aliasRequest, AliasCandidates candidates) {
132-
val release = aliasRequest.getRelease().toLowerCase().split("_");
133-
val shards = getShardsFromRequest(aliasRequest);
134-
135-
val indices = getIndicesForRelease(candidates, release, shards);
136-
137-
return repository.makeReadonlyThenAddAlias(aliasRequest.getAlias(), indices);
138-
}
139-
140137
private static List<Shard> getShardsFromRequest(AliasRequest aliasRequest) {
141138
return aliasRequest.getShards().stream()
142139
.map(String::toLowerCase)
@@ -145,6 +142,10 @@ private static List<Shard> getShardsFromRequest(AliasRequest aliasRequest) {
145142
.collect(toList());
146143
}
147144

145+
private static String[] getReleasesFromRequest(AliasRequest aliasRequest) {
146+
return aliasRequest.getRelease().toLowerCase().split("_");
147+
}
148+
148149
private List<String> getIndicesWithAlias(String alias) {
149150
val state = repository.getAliasState();
150151

src/test/java/bio/overture/rollcall/repository/IndexRepositoryTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public void getStateTestNoAlias() {
9292
public void releaseAndRemoveTest() {
9393
val list = Lists.list(INDEX1,INDEX2,INDEX3);
9494

95-
val added = repository.makeReadonlyThenAddAlias("file_centric", list);
95+
val added = repository.addAlias("file_centric", list);
9696

9797
assertThat(added).isTrue();
9898

@@ -110,10 +110,10 @@ public void releaseAndRemoveTest() {
110110

111111
@Test
112112
@SneakyThrows
113-
public void readonlyAfterRelease() {
113+
public void makeReadonly() {
114114
val indices = Lists.list(INDEX1,INDEX2,INDEX3);
115115

116-
val added = repository.makeReadonlyThenAddAlias("file_centric", indices);
116+
val added = repository.makeIndicesReadOnly(indices);
117117
assertThat(added).isTrue();
118118

119119
// check indices are now readonly

0 commit comments

Comments
 (0)