kibana/packages/core/saved-objects/core-saved-objects-api-server-internal
Christiane (Tina) Heiligers 727929683e
[SOR] implement downward compatible update (#161822)
Part of https://github.com/elastic/kibana/issues/152807

## Summary

Change the way the `update` API of the savedObjects repository works, to
stop using ES `update` and perform the update manually instead by
fetching the document, applying the update and then re-indexing the
whole document.

This is required for BWC and version cohabitation reasons, to allow us
converting the document to the last known version before applying the
update.

The retry on conflict behavior is manually performed too, by detecting
conflict errors during the `index` calls and performing the whole loop
(fetch->migrate->update->index) again.

Upserts are done in a similar way, by checking the document's existence
first, and then using the `create` API.

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: pgayvallet <pierre.gayvallet@elastic.co>
2023-09-01 10:27:17 +02:00
..
src [SOR] implement downward compatible update (#161822) 2023-09-01 10:27:17 +02:00
index.ts Migrate remaining parts of server-side SO domain to packages (#139305) 2022-08-26 01:53:37 -07:00
jest.config.js Migrate remaining parts of server-side SO domain to packages (#139305) 2022-08-26 01:53:37 -07:00
kibana.jsonc Transpile packages on demand, validate all TS projects (#146212) 2022-12-22 19:00:29 -06:00
package.json Transpile packages on demand, validate all TS projects (#146212) 2022-12-22 19:00:29 -06:00
README.md SavedObjectsRepository code cleanup (#157154) 2023-05-11 00:25:27 -07:00
tsconfig.json SavedObjectsRepository code cleanup (#157154) 2023-05-11 00:25:27 -07:00

@kbn/core-saved-objects-api-server-internal

This package contains the internal implementation of core's server-side savedObjects client and repository.

Structure of the package

@kbn/core-saved-objects-api-server-internal
- /src/lib
  - repository.ts
  - /apis
    - create.ts
    - delete.ts
    - ....
    - /helpers
    - /utils
    - /internals

lib/apis/utils

Base utility functions, receiving (mostly) parameters from a given API call's option (e.g the type or id of a document, but not the type registry).

lib/apis/helpers

'Stateful' helpers. These helpers were mostly here to receive the utility functions that were extracted from the SOR. They are instantiated with the SOR's context (e.g type registry, mappings and so on), to avoid the caller to such helpers to have to pass all the parameters again.

lib/apis/internals

I would call them 'utilities with business logic'. These are the 'big' chunks of logic called by the APIs. E.g preflightCheckForCreate, internalBulkResolve and so on.