From e2f5d6573c45086c5dc1bbca045228590e35fa0b Mon Sep 17 00:00:00 2001
From: Joe Portner <5295965+jportner@users.noreply.github.com>
Date: Mon, 6 Apr 2020 12:53:49 -0400
Subject: [PATCH] Address remaining items from fifth round of PR review
feedback
---
docs/api/saved-objects/bulk_create.asciidoc | 2 +-
....savedobjectsrepository.addtonamespaces.md | 2 ++
...dobjectsrepository.deletefromnamespaces.md | 2 ++
...ugin-core-server.savedobjectsrepository.md | 4 ++--
.../saved_objects/service/lib/repository.ts | 24 +++++++++++++------
src/core/server/server.api.md | 2 --
6 files changed, 24 insertions(+), 12 deletions(-)
diff --git a/docs/api/saved-objects/bulk_create.asciidoc b/docs/api/saved-objects/bulk_create.asciidoc
index 9daba224b317c..fbd4c6e77f8bf 100644
--- a/docs/api/saved-objects/bulk_create.asciidoc
+++ b/docs/api/saved-objects/bulk_create.asciidoc
@@ -104,7 +104,7 @@ The API returns the following:
"type": "dashboard",
"error": {
"statusCode": 409,
- "message": "version conflict, document already exists"
+ "message": "Saved object [dashboard/be3733a0-9efe-11e7-acb3-3dab96693fab] conflict"
}
}
]
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.addtonamespaces.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.addtonamespaces.md
index 23ef21c1e8db7..bbb20d2bc3b96 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.addtonamespaces.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.addtonamespaces.md
@@ -4,6 +4,8 @@
## SavedObjectsRepository.addToNamespaces() method
+Adds one or more namespaces to a given multi-namespace saved object. This method and \[`deleteFromNamespaces`\][SavedObjectsRepository.deleteFromNamespaces()](./kibana-plugin-core-server.savedobjectsrepository.deletefromnamespaces.md) are the only ways to change which Spaces a multi-namespace saved object is shared to.
+
Signature:
```typescript
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.deletefromnamespaces.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.deletefromnamespaces.md
index d97f734ca04b6..471c3e3c5092d 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.deletefromnamespaces.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.deletefromnamespaces.md
@@ -4,6 +4,8 @@
## SavedObjectsRepository.deleteFromNamespaces() method
+Removes one or more namespaces from a given multi-namespace saved object. If no namespaces remain, the saved object is deleted entirely. This method and \[`addToNamespaces`\][SavedObjectsRepository.addToNamespaces()](./kibana-plugin-core-server.savedobjectsrepository.addtonamespaces.md) are the only ways to change which Spaces a multi-namespace saved object is shared to.
+
Signature:
```typescript
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.md
index 0d932d8899bc4..bd86ff3abbe9b 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.md
@@ -15,14 +15,14 @@ export declare class SavedObjectsRepository
| Method | Modifiers | Description |
| --- | --- | --- |
-| [addToNamespaces(type, id, namespaces, options)](./kibana-plugin-core-server.savedobjectsrepository.addtonamespaces.md) | | |
+| [addToNamespaces(type, id, namespaces, options)](./kibana-plugin-core-server.savedobjectsrepository.addtonamespaces.md) | | Adds one or more namespaces to a given multi-namespace saved object. This method and \[deleteFromNamespaces
\][SavedObjectsRepository.deleteFromNamespaces()](./kibana-plugin-core-server.savedobjectsrepository.deletefromnamespaces.md) are the only ways to change which Spaces a multi-namespace saved object is shared to. |
| [bulkCreate(objects, options)](./kibana-plugin-core-server.savedobjectsrepository.bulkcreate.md) | | Creates multiple documents at once |
| [bulkGet(objects, options)](./kibana-plugin-core-server.savedobjectsrepository.bulkget.md) | | Returns an array of objects by id |
| [bulkUpdate(objects, options)](./kibana-plugin-core-server.savedobjectsrepository.bulkupdate.md) | | Updates multiple objects in bulk |
| [create(type, attributes, options)](./kibana-plugin-core-server.savedobjectsrepository.create.md) | | Persists an object |
| [delete(type, id, options)](./kibana-plugin-core-server.savedobjectsrepository.delete.md) | | Deletes an object |
| [deleteByNamespace(namespace, options)](./kibana-plugin-core-server.savedobjectsrepository.deletebynamespace.md) | | Deletes all objects from the provided namespace. |
-| [deleteFromNamespaces(type, id, namespaces, options)](./kibana-plugin-core-server.savedobjectsrepository.deletefromnamespaces.md) | | |
+| [deleteFromNamespaces(type, id, namespaces, options)](./kibana-plugin-core-server.savedobjectsrepository.deletefromnamespaces.md) | | Removes one or more namespaces from a given multi-namespace saved object. If no namespaces remain, the saved object is deleted entirely. This method and \[addToNamespaces
\][SavedObjectsRepository.addToNamespaces()](./kibana-plugin-core-server.savedobjectsrepository.addtonamespaces.md) are the only ways to change which Spaces a multi-namespace saved object is shared to. |
| [find({ search, defaultSearchOperator, searchFields, hasReference, page, perPage, sortField, sortOrder, fields, namespace, type, filter, })](./kibana-plugin-core-server.savedobjectsrepository.find.md) | | |
| [get(type, id, options)](./kibana-plugin-core-server.savedobjectsrepository.get.md) | | Gets a single object |
| [incrementCounter(type, id, counterFieldName, options)](./kibana-plugin-core-server.savedobjectsrepository.incrementcounter.md) | | Increases a counter field by one. Creates the document if one doesn't exist for the given id. |
diff --git a/src/core/server/saved_objects/service/lib/repository.ts b/src/core/server/saved_objects/service/lib/repository.ts
index 158b5f4df2d1b..10a41995409f8 100644
--- a/src/core/server/saved_objects/service/lib/repository.ts
+++ b/src/core/server/saved_objects/service/lib/repository.ts
@@ -349,7 +349,7 @@ export class SavedObjectsRepository {
const indexFound = bulkGetResponse.status !== 404;
const actualResult = indexFound ? bulkGetResponse.docs[esRequestIndex] : undefined;
const docFound = indexFound && actualResult.found === true;
- if (docFound && !this._rawInNamespaces(actualResult, namespace)) {
+ if (docFound && !this.rawDocExistsInNamespace(actualResult, namespace)) {
const { id, type } = object;
return {
tag: 'Left' as 'Left',
@@ -768,7 +768,7 @@ export class SavedObjectsRepository {
const { type, id, esRequestIndex } = expectedResult.value;
const doc = bulkGetResponse.docs[esRequestIndex];
- if (!doc.found || !this._rawInNamespaces(doc, namespace)) {
+ if (!doc.found || !this.rawDocExistsInNamespace(doc, namespace)) {
return ({
id,
type,
@@ -819,7 +819,7 @@ export class SavedObjectsRepository {
const docNotFound = response.found === false;
const indexNotFound = response.status === 404;
- if (docNotFound || indexNotFound || !this._rawInNamespaces(response, namespace)) {
+ if (docNotFound || indexNotFound || !this.rawDocExistsInNamespace(response, namespace)) {
// see "404s from missing index" above
throw SavedObjectsErrorHelpers.createGenericNotFoundError(type, id);
}
@@ -904,6 +904,11 @@ export class SavedObjectsRepository {
};
}
+ /**
+ * Adds one or more namespaces to a given multi-namespace saved object. This method and
+ * [`deleteFromNamespaces`]{@link SavedObjectsRepository.deleteFromNamespaces} are the only ways to change which Spaces a multi-namespace
+ * saved object is shared to.
+ */
async addToNamespaces(
type: string,
id: string,
@@ -957,6 +962,11 @@ export class SavedObjectsRepository {
return {};
}
+ /**
+ * Removes one or more namespaces from a given multi-namespace saved object. If no namespaces remain, the saved object is deleted
+ * entirely. This method and [`addToNamespaces`]{@link SavedObjectsRepository.addToNamespaces} are the only ways to change which Spaces a
+ * multi-namespace saved object is shared to.
+ */
async deleteFromNamespaces(
type: string,
id: string,
@@ -1127,7 +1137,7 @@ export class SavedObjectsRepository {
const indexFound = bulkGetResponse.status !== 404;
const actualResult = indexFound ? bulkGetResponse.docs[esRequestIndex] : undefined;
const docFound = indexFound && actualResult.found === true;
- if (!docFound || !this._rawInNamespaces(actualResult, namespace)) {
+ if (!docFound || !this.rawDocExistsInNamespace(actualResult, namespace)) {
return {
tag: 'Left' as 'Left',
error: {
@@ -1344,7 +1354,7 @@ export class SavedObjectsRepository {
return omit(savedObject, 'namespace');
}
- private _rawInNamespaces(raw: SavedObjectsRawDoc, namespace?: string) {
+ private rawDocExistsInNamespace(raw: SavedObjectsRawDoc, namespace?: string) {
const rawDocType = raw._source.type as string;
// if the type is namespace isolated, or namespace agnostic, we can continue to rely on the guarantees
@@ -1383,7 +1393,7 @@ export class SavedObjectsRepository {
const indexFound = response.status !== 404;
const docFound = indexFound && response.found === true;
if (docFound) {
- if (!this._rawInNamespaces(response, namespace)) {
+ if (!this.rawDocExistsInNamespace(response, namespace)) {
throw SavedObjectsErrorHelpers.createConflictError(type, id);
}
return getSavedObjectNamespaces(namespace, response);
@@ -1415,7 +1425,7 @@ export class SavedObjectsRepository {
const indexFound = response.status !== 404;
const docFound = indexFound && response.found === true;
- if (!docFound || !this._rawInNamespaces(response, namespace)) {
+ if (!docFound || !this.rawDocExistsInNamespace(response, namespace)) {
throw SavedObjectsErrorHelpers.createGenericNotFoundError(type, id);
}
return response as SavedObjectsRawDoc;
diff --git a/src/core/server/server.api.md b/src/core/server/server.api.md
index 7ead33de73de4..c8fde53a1e15b 100644
--- a/src/core/server/server.api.md
+++ b/src/core/server/server.api.md
@@ -2111,7 +2111,6 @@ export interface SavedObjectsRawDoc {
// @public (undocumented)
export class SavedObjectsRepository {
- // (undocumented)
addToNamespaces(type: string, id: string, namespaces: string[], options?: SavedObjectsAddToNamespacesOptions): Promise<{}>;
bulkCreate(objects: Array>, options?: SavedObjectsCreateOptions): Promise>;
bulkGet(objects?: SavedObjectsBulkGetObject[], options?: SavedObjectsBaseOptions): Promise>;
@@ -2123,7 +2122,6 @@ export class SavedObjectsRepository {
static createRepository(migrator: KibanaMigrator, typeRegistry: SavedObjectTypeRegistry, indexName: string, callCluster: APICaller, extraTypes?: string[], injectedConstructor?: any): ISavedObjectsRepository;
delete(type: string, id: string, options?: SavedObjectsDeleteOptions): Promise<{}>;
deleteByNamespace(namespace: string, options?: SavedObjectsDeleteByNamespaceOptions): Promise;
- // (undocumented)
deleteFromNamespaces(type: string, id: string, namespaces: string[], options?: SavedObjectsDeleteFromNamespacesOptions): Promise<{}>;
// (undocumented)
find({ search, defaultSearchOperator, searchFields, hasReference, page, perPage, sortField, sortOrder, fields, namespace, type, filter, }: SavedObjectsFindOptions): Promise>;