Skip to content
This repository has been archived by the owner on Mar 31, 2024. It is now read-only.

Commit

Permalink
[7.x] [kbn/es] only make one attempt in tests to avoid timeout (elast…
Browse files Browse the repository at this point in the history
…ic#69197) (elastic#69298)

Co-authored-by: spalger <[email protected]>
Co-authored-by: Elastic Machine <[email protected]>

Co-authored-by: spalger <[email protected]>
Co-authored-by: Elastic Machine <[email protected]>
  • Loading branch information
3 people authored Jun 16, 2020
1 parent a202e49 commit 632836f
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 19 deletions.
30 changes: 16 additions & 14 deletions packages/kbn-es/src/utils/native_realm.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,8 @@ exports.NativeRealm = class NativeRealm {
this._log = log;
}

async setPassword(username, password = this._elasticPassword, { attempt = 1 } = {}) {
await this._autoRetry(async () => {
this._log.info(
(attempt > 1 ? `attempt ${attempt}: ` : '') +
`setting ${chalk.bold(username)} password to ${chalk.bold(password)}`
);

async setPassword(username, password = this._elasticPassword, retryOpts = {}) {
await this._autoRetry(retryOpts, async () => {
try {
await this._client.security.changePassword({
username,
Expand Down Expand Up @@ -83,8 +78,8 @@ exports.NativeRealm = class NativeRealm {
);
}

async getReservedUsers() {
return await this._autoRetry(async () => {
async getReservedUsers(retryOpts = {}) {
return await this._autoRetry(retryOpts, async () => {
const resp = await this._client.security.getUser();
const usernames = Object.keys(resp.body).filter(
(user) => resp.body[user].metadata._reserved === true
Expand All @@ -98,9 +93,9 @@ exports.NativeRealm = class NativeRealm {
});
}

async isSecurityEnabled() {
async isSecurityEnabled(retryOpts = {}) {
try {
return await this._autoRetry(async () => {
return await this._autoRetry(retryOpts, async () => {
const {
body: { features },
} = await this._client.xpack.info({ categories: 'features' });
Expand All @@ -115,18 +110,25 @@ exports.NativeRealm = class NativeRealm {
}
}

async _autoRetry(fn, attempt = 1) {
async _autoRetry(opts, fn) {
const { attempt = 1, maxAttempts = 3 } = opts;

try {
return await fn(attempt);
} catch (error) {
if (attempt >= 3) {
if (attempt >= maxAttempts) {
throw error;
}

const sec = 1.5 * attempt;
this._log.warning(`assuming ES isn't initialized completely, trying again in ${sec} seconds`);
await new Promise((resolve) => setTimeout(resolve, sec * 1000));
return await this._autoRetry(fn, attempt + 1);

const nextOpts = {
...opts,
attempt: attempt + 1,
};
return await this._autoRetry(nextOpts, fn);
}
}
};
10 changes: 5 additions & 5 deletions packages/kbn-es/src/utils/native_realm.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ describe('isSecurityEnabled', () => {
throw error;
});

expect(await nativeRealm.isSecurityEnabled()).toBe(false);
expect(await nativeRealm.isSecurityEnabled({ maxAttempts: 1 })).toBe(false);
});

test('rejects if unexpected error is thrown', async () => {
Expand All @@ -97,9 +97,9 @@ describe('isSecurityEnabled', () => {
throw error;
});

await expect(nativeRealm.isSecurityEnabled()).rejects.toThrowErrorMatchingInlineSnapshot(
`"ResponseError"`
);
await expect(
nativeRealm.isSecurityEnabled({ maxAttempts: 1 })
).rejects.toThrowErrorMatchingInlineSnapshot(`"ResponseError"`);
});
});

Expand Down Expand Up @@ -226,7 +226,7 @@ describe('setPassword', () => {
});

await expect(
nativeRealm.setPassword('kibana_system', 'foo')
nativeRealm.setPassword('kibana_system', 'foo', { maxAttempts: 1 })
).rejects.toThrowErrorMatchingInlineSnapshot(`"SomeError"`);
});
});

0 comments on commit 632836f

Please sign in to comment.