Skip to content

Commit

Permalink
Fixes issue elastic#9680 (wrong name in message box when overwriting …
Browse files Browse the repository at this point in the history
…saved object)
  • Loading branch information
friol committed Aug 28, 2019
1 parent 9bc0ec0 commit cce7814
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 16 deletions.
20 changes: 17 additions & 3 deletions src/core/server/saved_objects/import/extract_errors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,14 @@
* specific language governing permissions and limitations
* under the License.
*/
import { SavedObjectsClientContract } from 'src/core/server';
import { SavedObject } from '../types';
import { SavedObjectsImportError } from './types';

export function extractErrors(
export async function extractErrors(
savedObjectResults: SavedObject[],
savedObjectsToImport: SavedObject[]
savedObjectsToImport: SavedObject[],
savedObjectsClient?: SavedObjectsClientContract
) {
const errors: SavedObjectsImportError[] = [];
const originalSavedObjectsMap = new Map<string, SavedObject>();
Expand All @@ -37,11 +39,23 @@ export function extractErrors(
originalSavedObject &&
originalSavedObject.attributes &&
originalSavedObject.attributes.title;

if (savedObject.error.statusCode === 409) {
// find the correct title of the saved object that conflicts, in order to use it in the message box
let realTitle = title;

if (savedObjectsClient) {
try {
const resp = await savedObjectsClient.get(savedObject.type, savedObject.id);
realTitle = resp.attributes.title;
} catch (e) {
// if something goes wrong, just use the "title" (new title of the object that is going to be imported)
}
}
errors.push({
id: savedObject.id,
type: savedObject.type,
title,
title: realTitle,
error: {
type: 'conflict',
},
Expand Down
11 changes: 6 additions & 5 deletions src/core/server/saved_objects/import/import_saved_objects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,12 @@ export async function importSavedObjects({
overwrite,
namespace,
});
errorAccumulator = [
...errorAccumulator,
...extractErrors(bulkCreateResult.saved_objects, filteredObjects),
];

const soErrors = await extractErrors(
bulkCreateResult.saved_objects,
filteredObjects,
savedObjectsClient
);
errorAccumulator = [...errorAccumulator, ...soErrors];
return {
success: errorAccumulator.length === 0,
successCount: bulkCreateResult.saved_objects.filter(obj => !obj.error).length,
Expand Down
14 changes: 6 additions & 8 deletions src/core/server/saved_objects/import/resolve_import_errors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,20 +89,18 @@ export async function resolveImportErrors({
overwrite: true,
namespace,
});
errorAccumulator = [
...errorAccumulator,
...extractErrors(bulkCreateResult.saved_objects, objectsToOverwrite),
];

const extractErrs = await extractErrors(bulkCreateResult.saved_objects, objectsToOverwrite);
errorAccumulator = [...errorAccumulator, ...extractErrs];
successCount += bulkCreateResult.saved_objects.filter(obj => !obj.error).length;
}
if (objectsToNotOverwrite.length) {
const bulkCreateResult = await savedObjectsClient.bulkCreate(objectsToNotOverwrite, {
namespace,
});
errorAccumulator = [
...errorAccumulator,
...extractErrors(bulkCreateResult.saved_objects, objectsToNotOverwrite),
];

const extractErrs = await extractErrors(bulkCreateResult.saved_objects, objectsToNotOverwrite);
errorAccumulator = [...errorAccumulator, ...extractErrs];
successCount += bulkCreateResult.saved_objects.filter(obj => !obj.error).length;
}

Expand Down

0 comments on commit cce7814

Please sign in to comment.