Skip to content

Commit 750a0ab

Browse files
jedrazbelasticmachinetimgrein
authored
[Connector API] Support soft-deletes of connectors (#118669)
* [Connector API] Add interface for soft-deletes * Define connector deleted system index * Got soft-delete logic working * Add unit tests * Add yaml e2e test and attempt to update permissions * Fix permissions * Update docs * Fix docs * Update docs/changelog/118282.yaml * Change logic * Fix tests * Remove unnecessary privilege from yaml rest test * Update changelog * Update docs/changelog/118669.yaml * Adapt yaml tests * Undo changes to muted-tests.yml * Fix compilation issue after other PR got merged * Exclude soft-deleted connector from checks about index_name already in use * Update docs/reference/connector/apis/get-connector-api.asciidoc Co-authored-by: Tim Grein <[email protected]> * Update rest-api-spec/src/main/resources/rest-api-spec/api/connector.list.json Co-authored-by: Tim Grein <[email protected]> * Adapt comments, add connector wire serializing test * Introduce new transport versions for passing the delete flag * Get rid of wire serialisation, use include_deleted instead of deleted flag * Remove unused import * Final tweaks * Adapt variable name in rest layer --------- Co-authored-by: Elastic Machine <[email protected]> Co-authored-by: Tim Grein <[email protected]>
1 parent 39c2dd8 commit 750a0ab

28 files changed

+444
-401
lines changed

docs/changelog/118669.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 118669
2+
summary: "[Connector API] Support soft-deletes of connectors"
3+
area: Extract&Transform
4+
type: feature
5+
issues: []

docs/reference/connector/apis/delete-connector-api.asciidoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66

77
beta::[]
88

9+
910
.New API reference
1011
[sidebar]
1112
--
1213
For the most up-to-date API details, refer to {api-es}/group/endpoint-connector[Connector APIs].
1314
--
1415

15-
Removes a connector and associated sync jobs.
16-
This is a destructive action that is not recoverable.
16+
Soft-deletes a connector and removes associated sync jobs.
1717

1818
Note: this action doesn't delete any API key, ingest pipeline or data index associated with the connector. These need to be removed manually.
1919

docs/reference/connector/apis/get-connector-api.asciidoc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ To get started with Connector APIs, check out <<es-connectors-tutorial-api, our
3333
`<connector_id>`::
3434
(Required, string)
3535

36+
`include_deleted`::
37+
(Optional, boolean) A flag indicating whether to also return connectors that have been soft-deleted. Defaults to `false`.
38+
3639
[[get-connector-api-response-codes]]
3740
==== {api-response-codes-title}
3841

docs/reference/connector/apis/list-connectors-api.asciidoc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ To get started with Connector APIs, check out <<es-connectors-tutorial-api, our
4747
`service_type`::
4848
(Optional, string) A comma-separated list of connector service types, used to filter search results.
4949

50+
`include_deleted`::
51+
(Optional, boolean) A flag indicating whether to also return connectors that have been soft-deleted. Defaults to `false`.
52+
5053
[[list-connector-api-example]]
5154
==== {api-examples-title}
5255

rest-api-spec/src/main/resources/rest-api-spec/api/connector.get.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@
2626
}
2727
}
2828
]
29+
},
30+
"params": {
31+
"include_deleted": {
32+
"type": "boolean",
33+
"default": false,
34+
"description": "A flag indicating whether to return connectors that have been soft-deleted."
35+
}
2936
}
3037
}
3138
}

rest-api-spec/src/main/resources/rest-api-spec/api/connector.list.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@
4747
"query": {
4848
"type": "string",
4949
"description": "A search string for querying connectors, filtering results by matching against connector names, descriptions, and index names"
50+
},
51+
"include_deleted": {
52+
"type": "boolean",
53+
"default": false,
54+
"description": "A flag indicating whether to return connectors that have been soft-deleted."
5055
}
5156
}
5257
}

x-pack/plugin/core/template-resources/src/main/resources/entsearch/connector/elastic-connectors-mappings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,9 @@
302302
},
303303
"sync_now": {
304304
"type": "boolean"
305+
},
306+
"deleted": {
307+
"type": "boolean"
305308
}
306309
}
307310
}

x-pack/plugin/ent-search/qa/rest/src/yamlRestTest/resources/rest-api-spec/test/entsearch/connector/10_connector_put.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,30 @@ setup:
218218
body:
219219
index_name: search-test
220220

221+
---
222+
'Create Connector - Index name used by deleted connector':
223+
- do:
224+
connector.put:
225+
connector_id: test-connector-1
226+
body:
227+
index_name: search-test
228+
229+
- match: { result: 'created' }
230+
231+
- do:
232+
connector.delete:
233+
connector_id: test-connector-1
234+
235+
- match: { acknowledged: true }
236+
237+
- do:
238+
connector.put:
239+
connector_id: test-connector-2
240+
body:
241+
index_name: search-test
242+
243+
- match: { result: 'created' }
244+
221245
---
222246
'Create Connector - Without index attached':
223247
- do:

x-pack/plugin/ent-search/qa/rest/src/yamlRestTest/resources/rest-api-spec/test/entsearch/connector/20_connector_list.yml

Lines changed: 142 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ setup:
7171
- match: { results.1.language: "nl" }
7272

7373
---
74-
"List Connector- with size":
74+
"List Connector - with size":
7575
- do:
7676
connector.list:
7777
size: 2
@@ -106,7 +106,6 @@ setup:
106106

107107
- match: { count: 0 }
108108

109-
110109
---
111110
"List Connector - filter by index names":
112111
- do:
@@ -279,4 +278,145 @@ setup:
279278
connector.list: { }
280279

281280

281+
---
282+
"List Connectors - Soft deleted connectors / no deleted":
283+
- requires:
284+
cluster_features: ["connector_soft_deletes"]
285+
reason: Soft deletes were introduced in 9.0 release
286+
287+
- do:
288+
connector.list:
289+
include_deleted: true
290+
291+
- match: { count: 3 }
292+
293+
294+
---
295+
"List Connectors - Single soft deleted connector":
296+
- requires:
297+
cluster_features: ["connector_soft_deletes"]
298+
reason: Soft deletes were introduced in 9.0 release
299+
300+
- do:
301+
connector.delete:
302+
connector_id: connector-a
303+
304+
- do:
305+
connector.list: {}
306+
307+
- match: { count: 2 }
308+
309+
- do:
310+
connector.list:
311+
include_deleted: true
312+
313+
- match: { count: 3 }
314+
315+
---
316+
"List Connectors - Soft deleted connectors":
317+
- requires:
318+
cluster_features: ["connector_soft_deletes"]
319+
reason: Soft deletes were introduced in 9.0 release
320+
321+
- do:
322+
connector.delete:
323+
connector_id: connector-a
324+
- do:
325+
connector.delete:
326+
connector_id: connector-b
327+
- do:
328+
connector.delete:
329+
connector_id: connector-c
330+
331+
- do:
332+
connector.list:
333+
include_deleted: true
334+
335+
- match: { count: 3 }
336+
337+
# Alphabetical order by index_name for results
338+
- match: { results.0.id: "connector-b" }
339+
- match: { results.0.index_name: "content-search-2-test" }
340+
- match: { results.0.language: "en" }
341+
- match: { results.0.deleted: true }
342+
343+
- match: { results.1.id: "connector-a" }
344+
- match: { results.1.index_name: "search-1-test" }
345+
- match: { results.1.language: "pl" }
346+
- match: { results.1.deleted: true }
347+
348+
- match: { results.2.id: "connector-c" }
349+
- match: { results.2.index_name: "search-3-test" }
350+
- match: { results.2.language: "nl" }
351+
- match: { results.2.deleted: true }
352+
353+
354+
---
355+
"List Connectors - Soft deleted with from":
356+
- requires:
357+
cluster_features: ["connector_soft_deletes"]
358+
reason: Soft deletes were introduced in 9.0 release
359+
360+
- do:
361+
connector.delete:
362+
connector_id: connector-a
363+
- do:
364+
connector.delete:
365+
connector_id: connector-b
366+
- do:
367+
connector.delete:
368+
connector_id: connector-c
369+
370+
- do:
371+
connector.list:
372+
from: 1
373+
include_deleted: true
374+
375+
- match: { count: 3 }
376+
377+
# Alphabetical order by index_name for results
378+
- match: { results.0.id: "connector-a" }
379+
- match: { results.0.index_name: "search-1-test" }
380+
- match: { results.0.language: "pl" }
381+
- match: { results.0.deleted: true }
382+
383+
- match: { results.1.id: "connector-c" }
384+
- match: { results.1.index_name: "search-3-test" }
385+
- match: { results.1.language: "nl" }
386+
- match: { results.0.deleted: true }
387+
388+
---
389+
"List Connector - Soft deleted with size":
390+
- requires:
391+
cluster_features: ["connector_soft_deletes"]
392+
reason: Soft deletes were introduced in 9.0 release
393+
394+
- do:
395+
connector.delete:
396+
connector_id: connector-a
397+
- do:
398+
connector.delete:
399+
connector_id: connector-b
400+
- do:
401+
connector.delete:
402+
connector_id: connector-c
403+
404+
- do:
405+
connector.list:
406+
size: 2
407+
include_deleted: true
408+
409+
- match: { count: 3 }
410+
411+
# Alphabetical order by index_name for results
412+
- match: { results.0.id: "connector-b" }
413+
- match: { results.0.index_name: "content-search-2-test" }
414+
- match: { results.0.language: "en" }
415+
- match: { results.0.deleted: true }
416+
417+
- match: { results.1.id: "connector-a" }
418+
- match: { results.1.index_name: "search-1-test" }
419+
- match: { results.1.language: "pl" }
420+
- match: { results.1.deleted: true }
421+
282422

x-pack/plugin/ent-search/qa/rest/src/yamlRestTest/resources/rest-api-spec/test/entsearch/connector/30_connector_delete.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,33 @@ setup:
108108
connector_id: test-nonexistent-connector
109109

110110

111+
---
112+
"Delete Connector - Supports soft deletes":
113+
- requires:
114+
cluster_features: ["connector_soft_deletes"]
115+
reason: Soft deletes were introduced in 9.0 release
116+
117+
- do:
118+
connector.delete:
119+
connector_id: test-connector-to-delete
120+
121+
- match: { acknowledged: true }
122+
123+
- do:
124+
catch: "missing"
125+
connector.get:
126+
connector_id: test-connector-to-delete
127+
128+
- do:
129+
connector.get:
130+
connector_id: test-connector-to-delete
131+
include_deleted: true
132+
133+
- match: { id: test-connector-to-delete }
134+
- match: { index_name: search-1-test }
135+
- match: { service_type: super-connector }
136+
- match: { name: my-connector }
137+
111138
---
112139
"Delete connector fails for unprivileged user":
113140
- skip:

0 commit comments

Comments
 (0)