Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions src/firebolt/model/engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,9 @@ def update(
parameters are set to None, old engine parameter values remain.
"""

if not any((name, scale, spec, auto_stop, warmup, engine_type)):
if not any(
x is not None for x in (name, scale, spec, auto_stop, warmup, engine_type)
):
# Nothing to be updated
return self

Expand All @@ -231,7 +233,7 @@ def update(
self.ALTER_PARAMETER_NAMES,
(scale, spec, auto_stop, name, warmup, engine_type),
):
if value:
if value is not None:
sql += f"{param} = ? "
parameters.append(str(value))

Expand Down
6 changes: 4 additions & 2 deletions src/firebolt/service/engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,13 +156,15 @@ def create(
("" if fail_if_exists else self.IF_NOT_EXISTS_SQL), name
)
parameters = []
if any((region, engine_type, spec, scale, auto_stop, warmup)):
if any(
x is not None for x in (region, engine_type, spec, scale, auto_stop, warmup)
):
sql += self.CREATE_WITH_SQL
for param, value in zip(
self.CREATE_PARAMETER_NAMES,
(region, engine_type, spec, scale, auto_stop, warmup),
):
if value:
if value is not None:
sql += f"{param} = ? "
parameters.append(str(value))
with self._connection.cursor() as c:
Expand Down
1 change: 1 addition & 0 deletions src/firebolt/service/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ class EngineStatus(Enum):
STOPPED = "Stopped"
DROPPING = "Dropping"
REPAIRING = "Repairing"
FAILED = "Failed"

def __str__(self) -> str:
return self.value
Expand Down
7 changes: 7 additions & 0 deletions tests/unit/service/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -307,12 +307,18 @@ def updated_engine_type() -> EngineType:
return EngineType.DATA_ANALYTICS


@fixture
def updated_auto_stop() -> EngineType:
return 0


@fixture
def update_engine_callback(
system_engine_no_db_query_url: str,
mock_engine: Engine,
updated_engine_scale: int,
updated_engine_type: EngineType,
updated_auto_stop: int,
) -> Callable:
def do_mock(
request: httpx.Request = None,
Expand All @@ -321,6 +327,7 @@ def do_mock(
assert request.url == system_engine_no_db_query_url
mock_engine.scale = updated_engine_scale
mock_engine.type = updated_engine_type
mock_engine.auto_stop = updated_auto_stop
return Response(
status_code=httpx.codes.OK,
json=empty_response,
Expand Down
29 changes: 29 additions & 0 deletions tests/unit/service/test_engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,3 +149,32 @@ def test_engine_update(

assert mock_engine.scale == updated_engine_scale
assert mock_engine.type == updated_engine_type

mock_engine.update(scale=updated_engine_scale, engine_type=updated_engine_type)

assert mock_engine.scale == updated_engine_scale
assert mock_engine.type == updated_engine_type


def test_engine_update_auto_stop_zero(
httpx_mock: HTTPXMock,
resource_manager: ResourceManager,
instance_type_callback: Callable,
instance_type_url: str,
mock_engine: Engine,
get_engine_callback: Callable,
update_engine_callback: Callable,
system_engine_no_db_query_url: str,
updated_auto_stop: int,
):
httpx_mock.add_callback(instance_type_callback, url=instance_type_url)
httpx_mock.add_callback(get_engine_callback, url=system_engine_no_db_query_url)
httpx_mock.add_callback(update_engine_callback, url=system_engine_no_db_query_url)
httpx_mock.add_callback(get_engine_callback, url=system_engine_no_db_query_url)

mock_engine.auto_stop = updated_auto_stop + 100
# auto_stop = 0 is not considered an empty parameter value
mock_engine._service = resource_manager.engines
mock_engine.update(auto_stop=0)

assert mock_engine.auto_stop == updated_auto_stop