Skip to content

Commit 2abacff

Browse files
committed
fixed tests
1 parent 7494359 commit 2abacff

File tree

4 files changed

+28
-21
lines changed

4 files changed

+28
-21
lines changed

services/autoscaling/src/simcore_service_autoscaling/core/errors.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ class TaskRequirementsAboveRequiredEC2InstanceTypeError(AutoscalingRuntimeError)
2828
)
2929

3030

31+
class TaskBestFittingInstanceNotFoundError(AutoscalingRuntimeError):
32+
msg_template: str = (
33+
"Task requires {resources} but no instance type fits the requirements. "
34+
"TIP: Ensure task resources requirements fit available instance types."
35+
)
36+
37+
3138
class Ec2InvalidDnsNameError(AutoscalingRuntimeError):
3239
msg_template: str = "Invalid EC2 private DNS name {aws_private_dns_name}"
3340

services/autoscaling/src/simcore_service_autoscaling/modules/auto_scaling_core.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,19 @@
1414
EC2Tags,
1515
Resources,
1616
)
17-
from aws_library.ec2._errors import (
18-
EC2InstanceNotFoundError,
19-
EC2InstanceTypeInvalidError,
20-
EC2TooManyInstancesError,
21-
)
17+
from aws_library.ec2._errors import EC2TooManyInstancesError
2218
from fastapi import FastAPI
2319
from models_library.generated_models.docker_rest_api import Node, NodeState
2420
from servicelib.logging_utils import log_catch, log_context
2521
from servicelib.utils_formatting import timedelta_as_minute_second
2622
from types_aiobotocore_ec2.literals import InstanceTypeType
2723

28-
from ..core.errors import Ec2InvalidDnsNameError
24+
from ..core.errors import (
25+
Ec2InvalidDnsNameError,
26+
TaskBestFittingInstanceNotFoundError,
27+
TaskRequirementsAboveRequiredEC2InstanceTypeError,
28+
TaskRequiresUnauthorizedEC2InstanceTypeError,
29+
)
2930
from ..core.settings import ApplicationSettings, get_application_settings
3031
from ..models import (
3132
AssignedTasksToInstanceType,
@@ -497,13 +498,12 @@ async def _find_needed_instances(
497498
- task_required_resources,
498499
)
499500
)
500-
except EC2InstanceNotFoundError:
501-
_logger.exception(
502-
"Task %s needs more resources than any EC2 instance "
503-
"can provide with the current configuration. Please check!",
504-
f"{task}",
505-
)
506-
except EC2InstanceTypeInvalidError:
501+
except TaskBestFittingInstanceNotFoundError:
502+
_logger.exception("Task %s needs more resources: ", f"{task}")
503+
except (
504+
TaskRequirementsAboveRequiredEC2InstanceTypeError,
505+
TaskRequiresUnauthorizedEC2InstanceTypeError,
506+
):
507507
_logger.exception("Unexpected error:")
508508

509509
_logger.info(

services/autoscaling/src/simcore_service_autoscaling/utils/utils_ec2.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,9 @@
99
from textwrap import dedent
1010

1111
from aws_library.ec2 import AWSTagKey, AWSTagValue, EC2InstanceType, EC2Tags, Resources
12-
from aws_library.ec2._errors import EC2InstanceNotFoundError
1312

1413
from .._meta import VERSION
15-
from ..core.errors import ConfigurationError
14+
from ..core.errors import ConfigurationError, TaskBestFittingInstanceNotFoundError
1615
from ..core.settings import ApplicationSettings
1716

1817
logger = logging.getLogger(__name__)
@@ -105,7 +104,6 @@ def find_best_fitting_ec2_instance(
105104

106105
score, instance = next(iter(score_to_ec2_candidate.items()))
107106
if score == 0:
108-
raise EC2InstanceNotFoundError(
109-
needed_resources=resources, msg="no adequate EC2 instance found!"
110-
)
107+
raise TaskBestFittingInstanceNotFoundError(needed_resources=resources)
108+
111109
return instance

services/autoscaling/tests/unit/test_utils_ec2.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55

66
import pytest
77
from aws_library.ec2 import EC2InstanceType, Resources
8-
from aws_library.ec2._errors import EC2InstanceNotFoundError
98
from faker import Faker
109
from pydantic import ByteSize
11-
from simcore_service_autoscaling.core.errors import ConfigurationError
10+
from simcore_service_autoscaling.core.errors import (
11+
ConfigurationError,
12+
TaskBestFittingInstanceNotFoundError,
13+
)
1214
from simcore_service_autoscaling.utils.utils_ec2 import (
1315
closest_instance_policy,
1416
compose_user_data,
@@ -28,7 +30,7 @@ async def test_find_best_fitting_ec2_instance_with_no_instances_raises():
2830
async def test_find_best_fitting_ec2_instance_closest_instance_policy_with_resource_0_raises(
2931
random_fake_available_instances: list[EC2InstanceType],
3032
):
31-
with pytest.raises(EC2InstanceNotFoundError):
33+
with pytest.raises(TaskBestFittingInstanceNotFoundError):
3234
find_best_fitting_ec2_instance(
3335
allowed_ec2_instances=random_fake_available_instances,
3436
resources=Resources(cpus=0, ram=ByteSize(0)),

0 commit comments

Comments
 (0)