Skip to content

Commit a61fa8d

Browse files
authored
Add a scenario test for altering tiering config (#7636)
1 parent 767ff64 commit a61fa8d

File tree

6 files changed

+521
-6
lines changed

6 files changed

+521
-6
lines changed

ydb/tests/olap/scenario/conftest.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ def get_suite_name(cls):
1919

2020
@classmethod
2121
def setup_class(cls):
22-
ScenarioTestHelper(None).remove_path(cls.get_suite_name())
22+
if not external_param_is_true('reuse-tables'):
23+
ScenarioTestHelper(None).remove_path(cls.get_suite_name())
2324

2425
@classmethod
2526
def teardown_class(cls):

ydb/tests/olap/scenario/helpers/data_generators.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,30 @@ def next_row(self) -> None:
4242
pass
4343

4444

45-
class ColumnValueGeneratorNull(IColumnValueGenerator):
46-
"""NULL column value generator.
45+
class ColumnValueGeneratorConst(IColumnValueGenerator):
46+
"""Const column value generator.
4747
48-
Allways generate NULL value."""
48+
Allways generate specified value."""
49+
50+
def __init__(self, value: Any) -> None:
51+
"""Constructor.
52+
53+
Args:
54+
value: Value to generate.
55+
Example:
56+
DataGeneratorPerColumn(
57+
self.schema2, 10,
58+
ColumnValueGeneratorDefault(init_value=10))
59+
.with_column('not_level', ColumnValueGeneratorConst(42)
60+
)
61+
"""
62+
63+
super().__init__()
64+
self._value = value
4965

5066
@override
51-
def generate_value(column: ScenarioTestHelper.Column) -> Any:
52-
return None
67+
def generate_value(self, column: ScenarioTestHelper.Column) -> Any:
68+
return self._value
5369

5470

5571
class ColumnValueGeneratorRandom(IColumnValueGenerator):

ydb/tests/olap/scenario/helpers/table_helper.py

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,69 @@ def title(self) -> str:
218218
return f'drop column `{self._column}`'
219219

220220

221+
class SetSetting(AlterTableAction):
222+
"""Set a setting value for a table-like object.
223+
224+
Table-like objects are Tables and TableStore.
225+
See {AlterTableLikeObject}.
226+
227+
Example:
228+
sth = ScenarioTestHelper(ctx)
229+
sth.execute_scheme_query(
230+
AlterTable('testTable').action(SetSetting('TIERING', 'tiering1))
231+
)
232+
"""
233+
234+
def __init__(self, setting: str, value_literal: str) -> None:
235+
"""Constructor.
236+
237+
Args:
238+
column: Name of the column to be deleted."""
239+
240+
super().__init__()
241+
self._setting = setting
242+
self._value = value_literal
243+
244+
@override
245+
def to_yql(self) -> str:
246+
return f'SET {self._setting} {self._value}'
247+
248+
@override
249+
def title(self) -> str:
250+
return f'set {self._setting} = {self._value}'
251+
252+
253+
class ResetSetting(AlterTableAction):
254+
"""Reset value of a setting for a table-like object.
255+
256+
Table-like objects are Tables and TableStore.
257+
See {AlterTableLikeObject}.
258+
259+
Example:
260+
sth = ScenarioTestHelper(ctx)
261+
sth.execute_scheme_query(
262+
AlterTable('testTable').action(ResetSetting('TIERING'))
263+
)
264+
"""
265+
266+
def __init__(self, setting: str) -> None:
267+
"""Constructor.
268+
269+
Args:
270+
setting: Name of altered setting."""
271+
272+
super().__init__()
273+
self._setting = setting
274+
275+
@override
276+
def to_yql(self) -> str:
277+
return f'RESET ({self._setting})'
278+
279+
@override
280+
def title(self) -> str:
281+
return f'reset {self._setting}'
282+
283+
221284
class AlterTableLikeObject(ScenarioTestHelper.IYqlble):
222285
"""The base class for all requests to change table-like objects.
223286
@@ -277,6 +340,42 @@ def drop_column(self, column: str) -> AlterTableLikeObject:
277340

278341
return self(DropColumn(column))
279342

343+
def set_tiering(self, tiering_rule: str) -> AlterTableLikeObject:
344+
"""Set a tiering policy.
345+
346+
The method is similar to calling {AlterTableLikeObject.action} with a {SetSetting} instance.
347+
348+
Args:
349+
tiering_rule: Name of a TIERING_RULE object.
350+
351+
Returns:
352+
self."""
353+
354+
return self(SetSetting('TIERING', f'"{tiering_rule}"'))
355+
356+
def reset_tiering(self) -> AlterTableLikeObject:
357+
"""Remove a tiering policy.
358+
359+
The method is similar to calling {AlterTableLikeObject.action} with a {SetSetting} instance.
360+
361+
Returns:
362+
self."""
363+
364+
return self(ResetSetting('TIERING'))
365+
366+
def set_ttl(self, interval: str, column: str) -> AlterTableLikeObject:
367+
"""Set TTL for rows.
368+
369+
The method is similar to calling {AlterTableLikeObject.action} with a {SetSetting} instance.
370+
371+
Args:
372+
tiering_rule: Name of a TIERING_RULE object.
373+
374+
Returns:
375+
self."""
376+
377+
return self(SetSetting('TTL', f'Interval("{interval}") ON `{column}`'))
378+
280379
@override
281380
def params(self) -> Dict[str, str]:
282381
return {self._type(): self._name, 'actions': ', '.join([a.title() for a in self._actions])}

0 commit comments

Comments
 (0)