Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Documents saved objects bulk delete API #141164

Merged
merged 3 commits into from
Sep 22, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions docs/api/saved-objects.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ The following saved objects APIs are available:

* <<saved-objects-api-delete, Delete object API>> to remove {kib} saved objects

* <<saved-objects-api-bulk-delete, Bulk delete objects API>> to remove multiple {kib} saved objects

* <<saved-objects-api-export, Export objects API>> to retrieve sets of saved objects that you want to import into {kib}

* <<saved-objects-api-import, Import objects API>> to create sets of {kib} saved objects from a file created by the export API
Expand All @@ -46,6 +48,7 @@ include::saved-objects/bulk_create.asciidoc[]
include::saved-objects/update.asciidoc[]
include::saved-objects/bulk_update.asciidoc[]
include::saved-objects/delete.asciidoc[]
include::saved-objects/bulk_delete.asciidoc[]
include::saved-objects/export.asciidoc[]
include::saved-objects/import.asciidoc[]
include::saved-objects/resolve_import_errors.asciidoc[]
Expand Down
107 changes: 107 additions & 0 deletions docs/api/saved-objects/bulk_delete.asciidoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
[[saved-objects-api-bulk-delete]]
=== Bulk delete object API
++++
<titleabbrev>Bulk delete objects</titleabbrev>
++++

experimental[] Remove multiple {kib} saved objects.

WARNING: Once you delete a saved object, _it cannot be recovered_.

==== Request

`POST <kibana host>:<port>/api/saved_objects/_bulk_delete`

`POST <kibana host>:<port>/s/<space_id>/api/saved_objects/_bulk_delete`

==== Path parameters

`space_id`::
(Optional, string) An identifier for the space. If `space_id` is not provided in the URL, the default space is used.

==== Request body

`type`::
(Required, string) Valid options include `visualization`, `dashboard`, `search`, `index-pattern`, `config`.

`id`::
(Required, string) The object ID to remove.

==== Query parameters

`force`::
(Optional, boolean) When true, force delete objects that exist in multiple namespaces. Note that the option applies the whole request. Use the <<saved-objects-api-delete, delete object>> to specify per-object delete behavior.
TinaHeiligers marked this conversation as resolved.
Show resolved Hide resolved
+
TIP: Use this if you attempted to delete objects and received an HTTP 400 error with the following message: _"Unable to delete saved object that exists in multiple namespaces, use the `force` option to delete it anyway"_
+
WARNING: When you bulk delete objects that exist in multiple namespaces, the API also deletes <<legacy-url-aliases, legacy url aliases>> that reference the object. These requests are batched to minimise the impact but they can place a heavy load on {kib}. Make sure you limit the number of objects that exist in multiple namespaces in a single bulk delete opertation.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not too sure how much detail to go into about potential performance issues but felt it better to add something as a warning.

Make sure you limit the number of objects that ...

I'm pretty sure folks are going to ask what limit we propose but we honestly cannot say. In this particular case, it's one of "It depends"(™)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

feels to me like this is sufficient, I suspect it's less likely that end-users using the APIs would delete thousands of SO's in batches.

TinaHeiligers marked this conversation as resolved.
Show resolved Hide resolved

==== Response code
`200`::
Indicates a successful call. Note, this HTTP response code indicates that the bulk operation succeeded. Errors pertaining to individual
objects will be returned in the response body. Refer to the example below for details.

==== Response body

`statuses`::
(array) Top-level property that contains objects that represent the response for each of the requested objects. The order of the objects in the response is identical to the order of the objects in the request.

Saved objects that cannot be removed will include an error object.

==== Example

Delete three saved objects, where one of them does not exist and one exists in multiple namespaces:

[source,sh]
--------------------------------------------------
$ curl -X POST api/saved_objects/_bulk_delete
[
{
type: 'visualization',
id: 'not an id',
},
{
type: 'dashboard',
id: 'be3733a0-9efe-11e7-acb3-3dab96693fab',
{
type: 'index-pattern',
id: 'd3d7af60-4c81-11e8-b3d7-01146121b73d',
}
]
--------------------------------------------------
// KIBANA

The API returns the following:

[source,sh]
--------------------------------------------------
{
"statuses": [
{
"success": false,
"id": "not an id",
"type": "visualization",
"error": {
"statusCode": 404,
"error": "Not Found",
"message": "Saved object [visualization/not an id] not found",
},
},
{
"success": true,
"id": "be3733a0-9efe-11e7-acb3-3dab96693fab",
"type": "dashboard",
},
{
"success": false,
"id": "d3d7af60-4c81-11e8-b3d7-01146121b73d",
"type": "index-pattern",
"error": {
"statusCode": 400,
"error": "Bad Request",
"message": "Unable to delete saved object id: d3d7af60-4c81-11e8-b3d7-01146121b73d, type: index-pattern that exists in multiple namespaces, use the \"force\" option to delete all saved objects: Bad Request",
},
}
]
}
--------------------------------------------------