Skip to content

Commit 1792888

Browse files
committed
Revert "Delete doesn't need reloading 🤦 removing it"
This reverts commit 9c8e0b6.
1 parent ea07420 commit 1792888

File tree

8 files changed

+101
-22
lines changed

8 files changed

+101
-22
lines changed

rest-api-spec/src/main/resources/rest-api-spec/api/synonyms.delete_synonym_rule.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@
3333
}
3434
}
3535
]
36+
},
37+
"params": {
38+
"refresh": {
39+
"type": "boolean",
40+
"description": "Refresh search analyzers to update synonyms"
41+
}
3642
}
3743
}
3844
}

rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/synonyms/70_synonym_rule_delete.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,27 @@ setup:
4444
- synonyms: "test => check"
4545
id: "test-id-3"
4646

47+
---
48+
"Refresh can be specified":
49+
50+
- requires:
51+
test_runner_features: [ capabilities ]
52+
capabilities:
53+
- method: PUT
54+
path: /_synonyms/{rule_id}
55+
capabilities: [ synonyms_refresh_param ]
56+
reason: "synonyms refresh param capability needed"
57+
58+
- do:
59+
synonyms.delete_synonym_rule:
60+
set_id: test-synonyms
61+
rule_id: test-id-2
62+
refresh: false
63+
64+
- match: { result: "deleted" }
65+
# Reload analyzers info is not included
66+
- not_exists: reload_analyzers_details
67+
4768
---
4869
"Delete synonym rule - missing synonym set":
4970
- do:

server/src/internalClusterTest/java/org/elasticsearch/synonyms/SynonymsManagementAPIServiceIT.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,25 @@ public void onFailure(Exception e) {
366366

367367
updateLatch.await(5, TimeUnit.SECONDS);
368368

369+
// Delete a rule fails
370+
CountDownLatch deleteLatch = new CountDownLatch(1);
371+
synonymsManagementAPIService.deleteSynonymRule(synonymSetId, synonymRuleId, true, new ActionListener<>() {
372+
@Override
373+
public void onResponse(SynonymsManagementAPIService.SynonymsReloadResult synonymsReloadResult) {
374+
fail("Shouldn't have been able to delete a synonym rule with refresh in synonyms index health");
375+
}
376+
377+
@Override
378+
public void onFailure(Exception e) {
379+
// Expected
380+
assertTrue(e instanceof IndexCreationException);
381+
assertTrue(e.getMessage().contains("synonyms index [.synonyms] is not searchable"));
382+
updateLatch.countDown();
383+
}
384+
});
385+
386+
deleteLatch.await(5, TimeUnit.SECONDS);
387+
369388
// But, we can still create a synonyms set without refresh
370389
CountDownLatch putNoRefreshLatch = new CountDownLatch(1);
371390
synonymsManagementAPIService.putSynonymsSet(synonymSetId, randomSynonymsSet(1, 1), false, new ActionListener<>() {
@@ -399,5 +418,21 @@ public void onFailure(Exception e) {
399418
});
400419

401420
putRuleNoRefreshLatch.await(5, TimeUnit.SECONDS);
421+
422+
// Same for delete
423+
CountDownLatch deleteNoRefreshLatch = new CountDownLatch(1);
424+
synonymsManagementAPIService.deleteSynonymRule(synonymSetId, synonymRuleId, false, new ActionListener<>() {
425+
@Override
426+
public void onResponse(SynonymsManagementAPIService.SynonymsReloadResult synonymsReloadResult) {
427+
deleteNoRefreshLatch.countDown();
428+
}
429+
430+
@Override
431+
public void onFailure(Exception e) {
432+
fail(e);
433+
}
434+
});
435+
436+
deleteNoRefreshLatch.await(5, TimeUnit.SECONDS);
402437
}
403438
}

server/src/main/java/org/elasticsearch/action/synonyms/DeleteSynonymRuleAction.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
package org.elasticsearch.action.synonyms;
1111

12+
import org.elasticsearch.TransportVersions;
1213
import org.elasticsearch.action.ActionRequest;
1314
import org.elasticsearch.action.ActionRequestValidationException;
1415
import org.elasticsearch.action.ActionType;
@@ -31,18 +32,24 @@ public DeleteSynonymRuleAction() {
3132

3233
public static class Request extends ActionRequest {
3334
private final String synonymsSetId;
34-
3535
private final String synonymRuleId;
36+
private final boolean refresh;
3637

3738
public Request(StreamInput in) throws IOException {
3839
super(in);
3940
this.synonymsSetId = in.readString();
4041
this.synonymRuleId = in.readString();
42+
if (in.getTransportVersion().onOrAfter(TransportVersions.SYNONYMS_REFRESH_PARAM)) {
43+
this.refresh = in.readBoolean();
44+
} else {
45+
this.refresh = true;
46+
}
4147
}
4248

43-
public Request(String synonymsSetId, String synonymRuleId) {
49+
public Request(String synonymsSetId, String synonymRuleId, boolean refresh) {
4450
this.synonymsSetId = synonymsSetId;
4551
this.synonymRuleId = synonymRuleId;
52+
this.refresh = refresh;
4653
}
4754

4855
@Override
@@ -63,6 +70,9 @@ public void writeTo(StreamOutput out) throws IOException {
6370
super.writeTo(out);
6471
out.writeString(synonymsSetId);
6572
out.writeString(synonymRuleId);
73+
if (out.getTransportVersion().onOrAfter(TransportVersions.SYNONYMS_REFRESH_PARAM)) {
74+
out.writeBoolean(refresh);
75+
}
6676
}
6777

6878
public String synonymsSetId() {
@@ -73,6 +83,10 @@ public String synonymRuleId() {
7383
return synonymRuleId;
7484
}
7585

86+
public boolean refresh() {
87+
return refresh;
88+
}
89+
7690
@Override
7791
public boolean equals(Object o) {
7892
if (this == o) return true;

server/src/main/java/org/elasticsearch/action/synonyms/TransportDeleteSynonymRuleAction.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ protected void doExecute(Task task, DeleteSynonymRuleAction.Request request, Act
4141
synonymsManagementAPIService.deleteSynonymRule(
4242
request.synonymsSetId(),
4343
request.synonymRuleId(),
44+
request.refresh(),
4445
listener.map(SynonymUpdateResponse::new)
4546
);
4647
}

server/src/main/java/org/elasticsearch/rest/action/synonyms/RestDeleteSynonymRuleAction.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ public List<Route> routes() {
4040
protected RestChannelConsumer prepareRequest(RestRequest restRequest, NodeClient client) throws IOException {
4141
DeleteSynonymRuleAction.Request request = new DeleteSynonymRuleAction.Request(
4242
restRequest.param("synonymsSet"),
43-
restRequest.param("synonymRuleId")
43+
restRequest.param("synonymRuleId"),
44+
restRequest.paramAsBoolean("refresh", true)
4445
);
4546
return channel -> client.execute(DeleteSynonymRuleAction.INSTANCE, request, new RestToXContentListener<>(channel));
4647
}

server/src/main/java/org/elasticsearch/synonyms/SynonymsManagementAPIService.java

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ public void putSynonymsSet(
354354
? UpdateSynonymsResultStatus.CREATED
355355
: UpdateSynonymsResultStatus.UPDATED;
356356

357-
checkIndexSearchableAndReloadAnalyzers(synonymSetId, refresh, false, updateSynonymsResultStatus, bulkInsertResponseListener);
357+
maybeReloadAnalyzers(synonymSetId, refresh, false, updateSynonymsResultStatus, bulkInsertResponseListener);
358358
})
359359
);
360360
}));
@@ -424,7 +424,7 @@ private void indexSynonymRule(
424424
? UpdateSynonymsResultStatus.CREATED
425425
: UpdateSynonymsResultStatus.UPDATED;
426426

427-
checkIndexSearchableAndReloadAnalyzers(synonymsSetId, refresh, false, updateStatus, l2);
427+
maybeReloadAnalyzers(synonymsSetId, refresh, false, updateStatus, l2);
428428
}));
429429
}
430430

@@ -444,7 +444,12 @@ public void getSynonymRule(String synonymSetId, String synonymRuleId, ActionList
444444
);
445445
}
446446

447-
public void deleteSynonymRule(String synonymsSetId, String synonymRuleId, ActionListener<SynonymsReloadResult> listener) {
447+
public void deleteSynonymRule(
448+
String synonymsSetId,
449+
String synonymRuleId,
450+
boolean refresh,
451+
ActionListener<SynonymsReloadResult> listener
452+
) {
448453
client.prepareDelete(SYNONYMS_ALIAS_NAME, internalSynonymRuleId(synonymsSetId, synonymRuleId))
449454
.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
450455
.execute(new DelegatingIndexNotFoundActionListener<>(synonymsSetId, listener, (l, deleteResponse) -> {
@@ -463,7 +468,7 @@ public void deleteSynonymRule(String synonymsSetId, String synonymRuleId, Action
463468
return;
464469
}
465470

466-
reloadAnalyzers(synonymsSetId, false, UpdateSynonymsResultStatus.DELETED, listener);
471+
maybeReloadAnalyzers(synonymsSetId, refresh, false, UpdateSynonymsResultStatus.DELETED, listener);
467472
}));
468473
}
469474

@@ -520,8 +525,8 @@ private void deleteSynonymsSetObjects(String synonymSetId, ActionListener<BulkBy
520525

521526
public void deleteSynonymsSet(String synonymSetId, ActionListener<AcknowledgedResponse> listener) {
522527

523-
// Previews reloading the resource to understand its usage on indices. It's OK to reload as we're doing preview mode
524-
reloadAnalyzers(synonymSetId, true, null, listener.delegateFailure((reloadListener, reloadResult) -> {
528+
// Previews reloading the resource to understand its usage on indices
529+
maybeReloadAnalyzers(synonymSetId, true, true, null, listener.delegateFailure((reloadListener, reloadResult) -> {
525530
Map<String, ReloadAnalyzersResponse.ReloadDetails> reloadDetails = reloadResult.reloadAnalyzersResponse.getReloadDetails();
526531
if (reloadDetails.isEmpty() == false) {
527532
Set<String> indices = reloadDetails.entrySet()
@@ -561,7 +566,7 @@ public void deleteSynonymsSet(String synonymSetId, ActionListener<AcknowledgedRe
561566
}));
562567
}
563568

564-
private <T> void checkIndexSearchableAndReloadAnalyzers(
569+
private <T> void maybeReloadAnalyzers(
565570
String synonymSetId,
566571
boolean refresh,
567572
boolean preview,
@@ -591,20 +596,16 @@ private <T> void checkIndexSearchableAndReloadAnalyzers(
591596
return;
592597
}
593598

594-
reloadAnalyzers(synonymSetId, preview, synonymsOperationResult, listener);
599+
// auto-reload all reloadable analyzers (currently only those that use updateable synonym or keyword_marker filters)
600+
ReloadAnalyzersRequest reloadAnalyzersRequest = new ReloadAnalyzersRequest(synonymSetId, preview, "*");
601+
client.execute(
602+
TransportReloadAnalyzersAction.TYPE,
603+
reloadAnalyzersRequest,
604+
listener.safeMap(reloadResponse -> new SynonymsReloadResult(synonymsOperationResult, reloadResponse))
605+
);
595606
}));
596607
}
597608

598-
private void reloadAnalyzers(String synonymSetId, boolean preview, UpdateSynonymsResultStatus synonymsOperationResult, ActionListener<SynonymsReloadResult> listener) {
599-
// auto-reload all reloadable analyzers (currently only those that use updateable synonym or keyword_marker filters)
600-
ReloadAnalyzersRequest reloadAnalyzersRequest = new ReloadAnalyzersRequest(synonymSetId, preview, "*");
601-
client.execute(
602-
TransportReloadAnalyzersAction.TYPE,
603-
reloadAnalyzersRequest,
604-
listener.safeMap(reloadResponse -> new SynonymsReloadResult(synonymsOperationResult, reloadResponse))
605-
);
606-
}
607-
608609
// Allows checking failures in tests
609610
void checkSynonymsIndexHealth(ActionListener<ClusterHealthResponse> listener) {
610611
ClusterHealthRequest healthRequest = new ClusterHealthRequest(

server/src/test/java/org/elasticsearch/action/synonyms/DeleteSynonymRuleActionRequestSerializingTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ protected Writeable.Reader<DeleteSynonymRuleAction.Request> instanceReader() {
2323

2424
@Override
2525
protected DeleteSynonymRuleAction.Request createTestInstance() {
26-
return new DeleteSynonymRuleAction.Request(randomIdentifier(), randomIdentifier());
26+
return new DeleteSynonymRuleAction.Request(randomIdentifier(), randomIdentifier(), randomBoolean());
2727
}
2828

2929
@Override

0 commit comments

Comments
 (0)