Skip to content

Commit 75a0d89

Browse files
authored
fix: add implicit transaction_mode to query settings (#1240)
1 parent cf5e090 commit 75a0d89

File tree

19 files changed

+102
-76
lines changed

19 files changed

+102
-76
lines changed

src/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettings.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import type {QuerySettings} from '../../../../../types/store/query';
22
import {
3-
ISOLATION_LEVELS,
43
QUERY_MODES,
54
STATISTICS_MODES,
65
TRACING_LEVELS,
6+
TRANSACTION_MODES,
77
} from '../../../../../utils/query';
88

99
const DEFAULT_QUERY_SETTINGS: QuerySettings = {
1010
queryMode: QUERY_MODES.query,
11-
isolationLevel: ISOLATION_LEVELS.serializable,
11+
transactionMode: TRANSACTION_MODES.implicit,
1212
timeout: '60',
1313
statisticsMode: STATISTICS_MODES.none,
1414
tracingLevel: TRACING_LEVELS.detailed,
@@ -36,15 +36,15 @@ describe('getChangedQueryExecutionSettings', () => {
3636
it('should return all keys if all settings have changed', () => {
3737
const currentSettings: QuerySettings = {
3838
queryMode: QUERY_MODES.data,
39-
isolationLevel: ISOLATION_LEVELS.onlinero,
39+
transactionMode: TRANSACTION_MODES.onlinero,
4040
timeout: '90',
4141
statisticsMode: STATISTICS_MODES.basic,
4242
tracingLevel: TRACING_LEVELS.basic,
4343
};
4444
const result = getChangedQueryExecutionSettings(currentSettings, DEFAULT_QUERY_SETTINGS);
4545
expect(result).toEqual([
4646
'queryMode',
47-
'isolationLevel',
47+
'transactionMode',
4848
'timeout',
4949
'statisticsMode',
5050
'tracingLevel',

src/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettingsDescription.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
import type {QuerySettings} from '../../../../../types/store/query';
22
import {
3-
ISOLATION_LEVELS,
4-
ISOLATION_LEVELS_TITLES,
53
QUERY_MODES,
64
QUERY_MODES_TITLES,
75
STATISTICS_MODES,
86
STATISTICS_MODES_TITLES,
97
TRACING_LEVELS,
108
TRACING_LEVELS_TITLES,
9+
TRANSACTION_MODES,
10+
TRANSACTION_MODES_TITLES,
1111
} from '../../../../../utils/query';
1212
import {QUERY_SETTINGS_FIELD_SETTINGS} from '../../QuerySettingsDialog/constants';
1313

1414
import getChangedQueryExecutionSettingsDescription from './getChangedQueryExecutionSettingsDescription';
1515

1616
const DEFAULT_QUERY_SETTINGS: QuerySettings = {
1717
queryMode: QUERY_MODES.query,
18-
isolationLevel: ISOLATION_LEVELS.serializable,
18+
transactionMode: TRANSACTION_MODES.implicit,
1919
timeout: '60',
2020
statisticsMode: STATISTICS_MODES.none,
2121
tracingLevel: TRACING_LEVELS.detailed,
@@ -57,7 +57,7 @@ describe('getChangedQueryExecutionSettingsDescription', () => {
5757
it('should return the correct description for all changed settings', () => {
5858
const currentSettings: QuerySettings = {
5959
queryMode: QUERY_MODES.data,
60-
isolationLevel: ISOLATION_LEVELS.snapshot,
60+
transactionMode: TRANSACTION_MODES.snapshot,
6161
timeout: '120',
6262
statisticsMode: STATISTICS_MODES.profile,
6363
tracingLevel: TRACING_LEVELS.diagnostic,
@@ -70,8 +70,8 @@ describe('getChangedQueryExecutionSettingsDescription', () => {
7070

7171
expect(result).toEqual({
7272
[QUERY_SETTINGS_FIELD_SETTINGS.queryMode.title]: QUERY_MODES_TITLES.data,
73-
[QUERY_SETTINGS_FIELD_SETTINGS.isolationLevel.title]:
74-
ISOLATION_LEVELS_TITLES['snapshot-read-only'],
73+
[QUERY_SETTINGS_FIELD_SETTINGS.transactionMode.title]:
74+
TRANSACTION_MODES_TITLES['snapshot-read-only'],
7575
[QUERY_SETTINGS_FIELD_SETTINGS.timeout.title]: '120',
7676
[QUERY_SETTINGS_FIELD_SETTINGS.statisticsMode.title]: STATISTICS_MODES_TITLES.profile,
7777
[QUERY_SETTINGS_FIELD_SETTINGS.tracingLevel.title]: TRACING_LEVELS_TITLES.diagnostic,

src/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,19 +140,19 @@ function QuerySettingsForm({initialValues, onSubmit, onClose}: QuerySettingsForm
140140
</Flex>
141141
)}
142142
<Flex direction="row" alignItems="flex-start" className={b('dialog-row')}>
143-
<label htmlFor="isolationLevel" className={b('field-title')}>
144-
{QUERY_SETTINGS_FIELD_SETTINGS.isolationLevel.title}
143+
<label htmlFor="transactionMode" className={b('field-title')}>
144+
{QUERY_SETTINGS_FIELD_SETTINGS.transactionMode.title}
145145
</label>
146-
<div className={b('control-wrapper', {isolationLevel: true})}>
146+
<div className={b('control-wrapper', {transactionMode: true})}>
147147
<Controller
148-
name="isolationLevel"
148+
name="transactionMode"
149149
control={control}
150150
render={({field}) => (
151151
<QuerySettingsSelect
152152
setting={field.value}
153153
onUpdateSetting={field.onChange}
154154
settingOptions={
155-
QUERY_SETTINGS_FIELD_SETTINGS.isolationLevel.options
155+
QUERY_SETTINGS_FIELD_SETTINGS.transactionMode.options
156156
}
157157
/>
158158
)}

src/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsSelect.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ import type {SelectOption} from '@gravity-ui/uikit';
22
import {Select} from '@gravity-ui/uikit';
33

44
import type {
5-
IsolationLevel,
65
QueryMode,
76
StatisticsMode,
87
TracingLevel,
8+
TransactionMode,
99
} from '../../../../types/store/query';
1010
import {cn} from '../../../../utils/cn';
1111

@@ -19,7 +19,7 @@ export const getOptionHeight = () => -1;
1919

2020
const b = cn('ydb-query-settings-select');
2121

22-
type SelectType = QueryMode | IsolationLevel | StatisticsMode | TracingLevel;
22+
type SelectType = QueryMode | TransactionMode | StatisticsMode | TracingLevel;
2323
type QuerySettingSelectOption<T> = SelectOption<T> & {isDefault?: boolean};
2424

2525
interface QuerySettingsSelectProps<T extends SelectType> {

src/containers/Tenant/Query/QuerySettingsDialog/constants.ts

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,43 @@
11
import {
2-
ISOLATION_LEVELS,
3-
ISOLATION_LEVELS_TITLES,
42
QUERY_MODES,
53
QUERY_MODES_TITLES,
64
STATISTICS_MODES,
75
STATISTICS_MODES_TITLES,
86
TRACING_LEVELS,
97
TRACING_LEVELS_TITLES,
8+
TRANSACTION_MODES,
9+
TRANSACTION_MODES_TITLES,
1010
} from '../../../../utils/query';
1111
import i18n from '../i18n';
1212

1313
import formI18n from './i18n';
1414

15-
export const ISOLATION_LEVEL_SELECT_OPTIONS = [
15+
export const TRANSACTION_MODE_SELECT_OPTIONS = [
1616
{
17-
value: ISOLATION_LEVELS.serializable,
18-
content: ISOLATION_LEVELS_TITLES[ISOLATION_LEVELS.serializable],
19-
text: i18n('isolation-level-description.serializable'),
17+
value: TRANSACTION_MODES.implicit,
18+
content: TRANSACTION_MODES_TITLES[TRANSACTION_MODES.implicit],
19+
text: i18n('transaction-mode-description.implicit'),
2020
isDefault: true,
2121
},
2222
{
23-
value: ISOLATION_LEVELS.onlinero,
24-
content: ISOLATION_LEVELS_TITLES[ISOLATION_LEVELS.onlinero],
25-
text: i18n('isolation-level-description.onlinero'),
23+
value: TRANSACTION_MODES.serializable,
24+
content: TRANSACTION_MODES_TITLES[TRANSACTION_MODES.serializable],
25+
text: i18n('transaction-mode-description.serializable'),
2626
},
2727
{
28-
value: ISOLATION_LEVELS.stalero,
29-
content: ISOLATION_LEVELS_TITLES[ISOLATION_LEVELS.stalero],
30-
text: i18n('isolation-level-description.stalero'),
28+
value: TRANSACTION_MODES.onlinero,
29+
content: TRANSACTION_MODES_TITLES[TRANSACTION_MODES.onlinero],
30+
text: i18n('transaction-mode-description.onlinero'),
3131
},
3232
{
33-
value: ISOLATION_LEVELS.snapshot,
34-
content: ISOLATION_LEVELS_TITLES[ISOLATION_LEVELS.snapshot],
35-
text: i18n('isolation-level-description.snapshot'),
33+
value: TRANSACTION_MODES.stalero,
34+
content: TRANSACTION_MODES_TITLES[TRANSACTION_MODES.stalero],
35+
text: i18n('transaction-mode-description.stalero'),
36+
},
37+
{
38+
value: TRANSACTION_MODES.snapshot,
39+
content: TRANSACTION_MODES_TITLES[TRANSACTION_MODES.snapshot],
40+
text: i18n('transaction-mode-description.snapshot'),
3641
},
3742
];
3843

@@ -124,9 +129,9 @@ export const TRACING_LEVEL_SELECT_OPTIONS = [
124129
];
125130

126131
export const QUERY_SETTINGS_FIELD_SETTINGS = {
127-
isolationLevel: {
128-
title: formI18n('form.isolation-level'),
129-
options: ISOLATION_LEVEL_SELECT_OPTIONS,
132+
transactionMode: {
133+
title: formI18n('form.transaction-mode'),
134+
options: TRANSACTION_MODE_SELECT_OPTIONS,
130135
},
131136
queryMode: {
132137
title: formI18n('form.query-mode'),

src/containers/Tenant/Query/QuerySettingsDialog/i18n/en.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"action.settings": "Query settings",
33
"form.query-mode": "Query type",
44
"form.timeout": "Timeout",
5-
"form.isolation-level": "Isolation level",
5+
"form.transaction-mode": "Transaction mode",
66
"form.statistics-mode": "Statistics collection mode",
77
"form.tracing-level": "Tracing level",
88
"button-done": "Save",

src/containers/Tenant/Query/QuerySettingsDialog/i18n/ru.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"action.settings": "Настройки запроса",
33
"form.query-mode": "Тип запроса",
44
"form.timeout": "Таймаут",
5-
"form.isolation-level": "Уровень изоляции",
5+
"form.transaction-mode": "Уровень изоляции",
66
"form.statistics-mode": "Режим сбора статистики",
77
"form.tracing-level": "Tracing level",
88
"button-done": "Готово",

src/containers/Tenant/Query/i18n/en.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@
2424
"method-description.query": "Any query. An experimental API call supposed to replace all existing methods.\nAPI Call: query.ExecuteScript",
2525
"method-description.pg": "Queries in postgresql syntax.\nAPI call: query.ExecuteScript",
2626

27-
"isolation-level-description.serializable": "Provides the strictest isolation level for custom transactions",
28-
"isolation-level-description.onlinero": "Each read operation in the transaction is reading the data that is most recent at execution time",
29-
"isolation-level-description.stalero": "Read operations within a transaction may return results that are slightly out-of-date (lagging by fractions of a second)",
30-
"isolation-level-description.snapshot": "All the read operations within a transaction access the database snapshot. All the data reads are consistent",
27+
"transaction-mode-description.serializable": "Provides the strictest isolation level for custom transactions",
28+
"transaction-mode-description.onlinero": "Each read operation in the transaction is reading the data that is most recent at execution time",
29+
"transaction-mode-description.stalero": "Read operations within a transaction may return results that are slightly out-of-date (lagging by fractions of a second)",
30+
"transaction-mode-description.snapshot": "All the read operations within a transaction access the database snapshot. All the data reads are consistent",
31+
"transaction-mode-description.implicit": "No transaction",
3132

3233
"tracing-level-description.basic": "Spans of main component operations",
3334
"tracing-level-description.detailed": "Highest detail applicable for diagnosing problems in production",

src/services/api.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import type {
2929
Stats,
3030
Timeout,
3131
TracingLevel,
32-
TransactionMode,
3332
} from '../types/api/query';
3433
import type {JsonRenderRequestParams, JsonRenderResponse} from '../types/api/render';
3534
import type {TEvDescribeSchemeResult} from '../types/api/schema';
@@ -45,7 +44,7 @@ import type {TTenantInfo, TTenants} from '../types/api/tenant';
4544
import type {DescribeTopicResult} from '../types/api/topic';
4645
import type {TEvVDiskStateResponse} from '../types/api/vdisk';
4746
import type {TUserToken} from '../types/api/whoami';
48-
import type {QuerySyntax} from '../types/store/query';
47+
import type {QuerySyntax, TransactionMode} from '../types/store/query';
4948
import {
5049
BINARY_DATA_IN_PLAIN_TEXT_DISPLAY,
5150
DEV_ENABLE_TRACING_FOR_ALL_REQUESTS,

src/store/reducers/executeQuery.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,10 @@ export const executeQueryApi = api.injectEndpoints({
226226
querySettings.tracingLevel && enableTracingLevel
227227
? TracingLevelNumber[querySettings.tracingLevel]
228228
: undefined,
229-
transaction_mode: querySettings.isolationLevel,
229+
transaction_mode:
230+
querySettings.transactionMode === 'implicit'
231+
? undefined
232+
: querySettings.transactionMode,
230233
timeout: isNumeric(querySettings.timeout)
231234
? Number(querySettings.timeout) * 1000
232235
: undefined,

0 commit comments

Comments
 (0)