[uiSettings] use refresh: false instead of default refresh: 'wait_for' in create and update (#160278)

## Summary

Close https://github.com/elastic/kibana/issues/159662

See explanation [here](https://github.com/elastic/kibana/issues/159662)
This commit is contained in:
Anton Dosov 2023-07-25 13:21:28 +02:00 committed by GitHub
parent 95702ac644
commit c76b185323
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 63 additions and 21 deletions

View file

@ -64,7 +64,12 @@ describe('ui settings', () => {
await uiSettings.setMany({ one: 'value' });
expect(savedObjectsClient.update).toHaveBeenCalledTimes(1);
expect(savedObjectsClient.update).toHaveBeenCalledWith(TYPE, ID, { one: 'value' });
expect(savedObjectsClient.update).toHaveBeenCalledWith(
TYPE,
ID,
{ one: 'value' },
{ refresh: false }
);
});
it('updates several values in one operation', async () => {
@ -72,10 +77,15 @@ describe('ui settings', () => {
await uiSettings.setMany({ one: 'value', another: 'val' });
expect(savedObjectsClient.update).toHaveBeenCalledTimes(1);
expect(savedObjectsClient.update).toHaveBeenCalledWith(TYPE, ID, {
one: 'value',
another: 'val',
});
expect(savedObjectsClient.update).toHaveBeenCalledWith(
TYPE,
ID,
{
one: 'value',
another: 'val',
},
{ refresh: false }
);
});
it('automatically creates the savedConfig if it is missing', async () => {
@ -159,9 +169,14 @@ describe('ui settings', () => {
await uiSettings.set('one', 'value');
expect(savedObjectsClient.update).toHaveBeenCalledTimes(1);
expect(savedObjectsClient.update).toHaveBeenCalledWith(TYPE, ID, {
one: 'value',
});
expect(savedObjectsClient.update).toHaveBeenCalledWith(
TYPE,
ID,
{
one: 'value',
},
{ refresh: false }
);
});
it('validates value if a schema presents', async () => {
@ -202,7 +217,12 @@ describe('ui settings', () => {
await uiSettings.remove('one');
expect(savedObjectsClient.update).toHaveBeenCalledTimes(1);
expect(savedObjectsClient.update).toHaveBeenCalledWith(TYPE, ID, { one: null });
expect(savedObjectsClient.update).toHaveBeenCalledWith(
TYPE,
ID,
{ one: null },
{ refresh: false }
);
});
it('does not fail validation', async () => {
@ -246,7 +266,12 @@ describe('ui settings', () => {
await uiSettings.removeMany(['one']);
expect(savedObjectsClient.update).toHaveBeenCalledTimes(1);
expect(savedObjectsClient.update).toHaveBeenCalledWith(TYPE, ID, { one: null });
expect(savedObjectsClient.update).toHaveBeenCalledWith(
TYPE,
ID,
{ one: null },
{ refresh: false }
);
});
it('updates several values in one operation', async () => {
@ -254,11 +279,16 @@ describe('ui settings', () => {
await uiSettings.removeMany(['one', 'two', 'three']);
expect(savedObjectsClient.update).toHaveBeenCalledTimes(1);
expect(savedObjectsClient.update).toHaveBeenCalledWith(TYPE, ID, {
one: null,
two: null,
three: null,
});
expect(savedObjectsClient.update).toHaveBeenCalledWith(
TYPE,
ID,
{
one: null,
two: null,
three: null,
},
{ refresh: false }
);
});
it('does not fail validation', async () => {

View file

@ -129,7 +129,7 @@ export abstract class UiSettingsClientCommon extends BaseUiSettingsClient {
autoCreateOrUpgradeIfMissing?: boolean;
}) {
try {
await this.savedObjectsClient.update(this.type, this.id, changes);
await this.savedObjectsClient.update(this.type, this.id, changes, { refresh: false });
} catch (error) {
if (!SavedObjectsErrorHelpers.isNotFoundError(error) || !autoCreateOrUpgradeIfMissing) {
throw error;

View file

@ -86,9 +86,14 @@ describe('ui settings global client', () => {
const { uiSettingsClient, savedObjectsClient } = setup();
await uiSettingsClient.set('settingA', 'cde');
expect(savedObjectsClient.update).toHaveBeenCalledTimes(1);
expect(savedObjectsClient.update).toHaveBeenCalledWith(TYPE, ID, {
settingA: 'cde',
});
expect(savedObjectsClient.update).toHaveBeenCalledWith(
TYPE,
ID,
{
settingA: 'cde',
},
{ refresh: false }
);
});
});

View file

@ -79,6 +79,7 @@ describe('uiSettings/createOrUpgradeSavedConfig', function () {
},
{
id: version,
refresh: false,
}
);
});
@ -110,6 +111,7 @@ describe('uiSettings/createOrUpgradeSavedConfig', function () {
},
{
id: version,
refresh: false,
}
);
});
@ -140,7 +142,7 @@ describe('uiSettings/createOrUpgradeSavedConfig', function () {
defaultIndex: 'another-index',
isDefaultIndexMigrated: true,
},
{ id: version }
{ id: version, refresh: false }
);
});
@ -282,6 +284,7 @@ describe('uiSettings/createOrUpgradeSavedConfig', function () {
},
{
id: version,
refresh: false,
}
);
});
@ -313,6 +316,7 @@ describe('uiSettings/createOrUpgradeSavedConfig', function () {
},
{
id: version,
refresh: false,
}
);
});

View file

@ -63,7 +63,7 @@ export async function createOrUpgradeSavedConfig(
try {
// create the new SavedConfig
await savedObjectsClient.create(type, attributes, { id: version });
await savedObjectsClient.create(type, attributes, { id: version, refresh: false });
} catch (error) {
if (handleWriteErrors) {
if (SavedObjectsErrorHelpers.isConflictError(error)) {

View file

@ -26,6 +26,7 @@ export async function emptyKibanaIndexAction({
await cleanSavedObjectIndices({ client, stats, log });
await migrateSavedObjectIndices(kbnClient);
await client.indices.refresh({ index: ALL_SAVED_OBJECT_INDICES });
ALL_SAVED_OBJECT_INDICES.forEach((indexPattern) => stats.createdIndex(indexPattern));
return stats.toJSON();
}

View file

@ -13,6 +13,8 @@ export const docMissingSuite = (savedObjectsIndex: string) => () => {
beforeEach(async () => {
const { esClient } = getServices();
await esClient.indices.refresh({ index: savedObjectsIndex });
// delete all docs from kibana index to ensure savedConfig is not found
await esClient.deleteByQuery({
index: savedObjectsIndex,