Skip to content

Commit

Permalink
[8.x] [data.search] Clean up code around ES preference usage (#204076) (
Browse files Browse the repository at this point in the history
#205661)

# Backport

This will backport the following commits from `main` to `8.x`:
- [[data.search] Clean up code around ES preference usage
(#204076)](#204076)

<!--- Backport version: 9.4.3 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)

<!--BACKPORT [{"author":{"name":"Lukas
Olson","email":"[email protected]"},"sourceCommit":{"committedDate":"2025-01-06T22:02:48Z","message":"[data.search]
Clean up code around ES preference usage (#204076)\n\n##
Summary\r\n\r\nWhile refreshing my memory on how we are using the
Elasticsearch\r\n`preference` parameter, I noticed we had a method
`getEsPreference` that\r\nwas exported but not used. We then had an
additional method\r\n`getPreference` that was being used to actually set
the parameter. I\r\nconsolidated these into one place and moved the
tests so that we can\r\nutilize it when ES|QL supports this
parameter.\r\n\r\n### Checklist\r\n\r\n- [x] [Unit or
functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere
updated or added to match the most common
scenarios\r\n\r\n---------\r\n\r\nCo-authored-by: Marco Vettorello
<[email protected]>","sha":"df3665fbf59295dfbd664dfc280658b5232498d9","branchLabelMapping":{"^v9.0.0$":"main","^v8.18.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["Feature:Search","release_note:skip","v9.0.0","Team:DataDiscovery","backport:prev-minor"],"title":"[data.search]
Clean up code around ES preference
usage","number":204076,"url":"https://github.com/elastic/kibana/pull/204076","mergeCommit":{"message":"[data.search]
Clean up code around ES preference usage (#204076)\n\n##
Summary\r\n\r\nWhile refreshing my memory on how we are using the
Elasticsearch\r\n`preference` parameter, I noticed we had a method
`getEsPreference` that\r\nwas exported but not used. We then had an
additional method\r\n`getPreference` that was being used to actually set
the parameter. I\r\nconsolidated these into one place and moved the
tests so that we can\r\nutilize it when ES|QL supports this
parameter.\r\n\r\n### Checklist\r\n\r\n- [x] [Unit or
functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere
updated or added to match the most common
scenarios\r\n\r\n---------\r\n\r\nCo-authored-by: Marco Vettorello
<[email protected]>","sha":"df3665fbf59295dfbd664dfc280658b5232498d9"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v9.0.0","branchLabelMappingKey":"^v9.0.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/204076","number":204076,"mergeCommit":{"message":"[data.search]
Clean up code around ES preference usage (#204076)\n\n##
Summary\r\n\r\nWhile refreshing my memory on how we are using the
Elasticsearch\r\n`preference` parameter, I noticed we had a method
`getEsPreference` that\r\nwas exported but not used. We then had an
additional method\r\n`getPreference` that was being used to actually set
the parameter. I\r\nconsolidated these into one place and moved the
tests so that we can\r\nutilize it when ES|QL supports this
parameter.\r\n\r\n### Checklist\r\n\r\n- [x] [Unit or
functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere
updated or added to match the most common
scenarios\r\n\r\n---------\r\n\r\nCo-authored-by: Marco Vettorello
<[email protected]>","sha":"df3665fbf59295dfbd664dfc280658b5232498d9"}}]}]
BACKPORT-->

Co-authored-by: Lukas Olson <[email protected]>
  • Loading branch information
kibanamachine and lukasolson authored Jan 7, 2025
1 parent 8c93503 commit b74ac18
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 98 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

import { UI_SETTINGS } from '../../../constants';
import { GetConfigFn } from '../../../types';
import { getSearchParams, getSearchParamsFromRequest } from './get_search_params';
import { getSearchParamsFromRequest, getEsPreference } from './get_search_params';
import { createStubDataView } from '@kbn/data-views-plugin/common/data_views/data_view.stub';

function getConfigStub(config: any = {}): GetConfigFn {
Expand All @@ -18,11 +18,11 @@ function getConfigStub(config: any = {}): GetConfigFn {

describe('getSearchParams', () => {
test('includes custom preference', () => {
const config = getConfigStub({
const getConfig = getConfigStub({
[UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE]: 'custom',
[UI_SETTINGS.COURIER_CUSTOM_REQUEST_PREFERENCE]: 'aaa',
});
const searchParams = getSearchParams(config);
const searchParams = getSearchParamsFromRequest({ index: 'abc', body: {} }, { getConfig });
expect(searchParams.preference).toBe('aaa');
});

Expand Down Expand Up @@ -94,4 +94,39 @@ describe('getSearchParams', () => {
);
expect(searchParams).not.toHaveProperty('expand_wildcards', 'all');
});

describe('getEsPreference', () => {
const mockConfigGet = jest.fn();

beforeEach(() => {
mockConfigGet.mockClear();
});

test('returns the session ID if set to sessionId', () => {
mockConfigGet.mockImplementation((key: string) => {
if (key === UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE) return 'sessionId';
if (key === UI_SETTINGS.COURIER_CUSTOM_REQUEST_PREFERENCE) return 'foobar';
});
const preference = getEsPreference(mockConfigGet, 'my_session_id');
expect(preference).toBe('my_session_id');
});

test('returns the custom preference if set to custom', () => {
mockConfigGet.mockImplementation((key: string) => {
if (key === UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE) return 'custom';
if (key === UI_SETTINGS.COURIER_CUSTOM_REQUEST_PREFERENCE) return 'foobar';
});
const preference = getEsPreference(mockConfigGet);
expect(preference).toBe('foobar');
});

test('returns undefined if set to none', () => {
mockConfigGet.mockImplementation((key: string) => {
if (key === UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE) return 'none';
if (key === UI_SETTINGS.COURIER_CUSTOM_REQUEST_PREFERENCE) return 'foobar';
});
const preference = getEsPreference(mockConfigGet);
expect(preference).toBe(undefined);
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,16 @@ import { UI_SETTINGS } from '../../../constants';
import { GetConfigFn } from '../../../types';
import type { SearchRequest } from './types';

const sessionId = Date.now();
const defaultSessionId = `${Date.now()}`;

export function getSearchParams(getConfig: GetConfigFn) {
return {
preference: getPreference(getConfig),
};
}

export function getPreference(getConfig: GetConfigFn) {
const setRequestPreference = getConfig(UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE);
if (setRequestPreference === 'sessionId') return sessionId;
return setRequestPreference === 'custom'
? getConfig(UI_SETTINGS.COURIER_CUSTOM_REQUEST_PREFERENCE)
: undefined;
export function getEsPreference(
getConfigFn: GetConfigFn,
sessionId = defaultSessionId
): SearchRequest['preference'] {
const setPreference = getConfigFn<string>(UI_SETTINGS.COURIER_SET_REQUEST_PREFERENCE);
if (setPreference === 'sessionId') return sessionId;
const customPreference = getConfigFn<string>(UI_SETTINGS.COURIER_CUSTOM_REQUEST_PREFERENCE);
return setPreference === 'custom' ? customPreference : undefined;
}

/** @public */
Expand All @@ -36,7 +32,7 @@ export function getSearchParamsFromRequest(
dependencies: { getConfig: GetConfigFn }
): ISearchRequestParams {
const { getConfig } = dependencies;
const searchParams = getSearchParams(getConfig);
const searchParams = { preference: getEsPreference(getConfig) };
// eslint-disable-next-line @typescript-eslint/naming-convention
const { track_total_hits, ...body } = searchRequest.body;
const dataView = typeof searchRequest.index !== 'string' ? searchRequest.index : undefined;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
* License v3.0 only", or the "Server Side Public License, v 1".
*/

export { getSearchParams, getSearchParamsFromRequest, getPreference } from './get_search_params';
export { getSearchParamsFromRequest, getEsPreference } from './get_search_params';
export { RequestFailure } from './request_error';
export * from './types';
49 changes: 0 additions & 49 deletions src/plugins/data/public/search/es_search/get_es_preference.test.ts

This file was deleted.

20 changes: 0 additions & 20 deletions src/plugins/data/public/search/es_search/get_es_preference.ts

This file was deleted.

10 changes: 0 additions & 10 deletions src/plugins/data/public/search/es_search/index.ts

This file was deleted.

1 change: 0 additions & 1 deletion src/plugins/data/public/search/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ export {
SEARCH_SESSIONS_MANAGEMENT_ID,
waitUntilNextSessionCompletes$,
} from './session';
export { getEsPreference } from './es_search';

export type { SearchInterceptorDeps } from './search_interceptor';
export { SearchInterceptor } from './search_interceptor';
Expand Down

0 comments on commit b74ac18

Please sign in to comment.