|
104 | 104 | from dstack._internal.server.services.runner import client as runner_client |
105 | 105 | from dstack._internal.server.services.runner.client import HealthStatus |
106 | 106 | from dstack._internal.server.services.runner.ssh import runner_ssh_tunnel |
107 | | -from dstack._internal.utils.common import get_current_datetime, run_async |
| 107 | +from dstack._internal.utils.common import ( |
| 108 | + get_current_datetime, |
| 109 | + run_async, |
| 110 | +) |
108 | 111 | from dstack._internal.utils.logging import get_logger |
109 | 112 | from dstack._internal.utils.network import get_ip_from_network, is_ip_among_addresses |
110 | 113 | from dstack._internal.utils.ssh import ( |
@@ -149,7 +152,7 @@ async def _process_next_instance(): |
149 | 152 | ), |
150 | 153 | InstanceModel.id.not_in(lockset), |
151 | 154 | InstanceModel.last_processed_at |
152 | | - < get_current_datetime().replace(tzinfo=None) - MIN_PROCESSING_INTERVAL, |
| 155 | + < get_current_datetime() - MIN_PROCESSING_INTERVAL, |
153 | 156 | ) |
154 | 157 | .options(lazyload(InstanceModel.jobs)) |
155 | 158 | .order_by(InstanceModel.last_processed_at.asc()) |
@@ -461,7 +464,7 @@ def _deploy_instance( |
461 | 464 |
|
462 | 465 | async def _create_instance(session: AsyncSession, instance: InstanceModel) -> None: |
463 | 466 | if instance.last_retry_at is not None: |
464 | | - last_retry = instance.last_retry_at.replace(tzinfo=datetime.timezone.utc) |
| 467 | + last_retry = instance.last_retry_at |
465 | 468 | if get_current_datetime() < last_retry + timedelta(minutes=1): |
466 | 469 | return |
467 | 470 |
|
@@ -801,7 +804,7 @@ async def _check_instance(instance: InstanceModel) -> None: |
801 | 804 | instance.name, |
802 | 805 | extra={"instance_name": instance.name}, |
803 | 806 | ) |
804 | | - deadline = instance.termination_deadline.replace(tzinfo=datetime.timezone.utc) |
| 807 | + deadline = instance.termination_deadline |
805 | 808 | if get_current_datetime() > deadline: |
806 | 809 | instance.status = InstanceStatus.TERMINATING |
807 | 810 | instance.termination_reason = "Termination deadline" |
@@ -956,18 +959,12 @@ async def _terminate(instance: InstanceModel) -> None: |
956 | 959 |
|
957 | 960 | def _next_termination_retry_at(instance: InstanceModel) -> datetime.datetime: |
958 | 961 | assert instance.last_termination_retry_at is not None |
959 | | - return ( |
960 | | - instance.last_termination_retry_at.replace(tzinfo=datetime.timezone.utc) |
961 | | - + TERMINATION_RETRY_TIMEOUT |
962 | | - ) |
| 962 | + return instance.last_termination_retry_at + TERMINATION_RETRY_TIMEOUT |
963 | 963 |
|
964 | 964 |
|
965 | 965 | def _get_termination_deadline(instance: InstanceModel) -> datetime.datetime: |
966 | 966 | assert instance.first_termination_retry_at is not None |
967 | | - return ( |
968 | | - instance.first_termination_retry_at.replace(tzinfo=datetime.timezone.utc) |
969 | | - + TERMINATION_RETRY_MAX_DURATION |
970 | | - ) |
| 967 | + return instance.first_termination_retry_at + TERMINATION_RETRY_MAX_DURATION |
971 | 968 |
|
972 | 969 |
|
973 | 970 | def _need_to_wait_fleet_provisioning(instance: InstanceModel) -> bool: |
@@ -1102,27 +1099,26 @@ async def _create_placement_group( |
1102 | 1099 |
|
1103 | 1100 |
|
1104 | 1101 | def _get_instance_idle_duration(instance: InstanceModel) -> datetime.timedelta: |
1105 | | - last_time = instance.created_at.replace(tzinfo=datetime.timezone.utc) |
| 1102 | + last_time = instance.created_at |
1106 | 1103 | if instance.last_job_processed_at is not None: |
1107 | | - last_time = instance.last_job_processed_at.replace(tzinfo=datetime.timezone.utc) |
| 1104 | + last_time = instance.last_job_processed_at |
1108 | 1105 | return get_current_datetime() - last_time |
1109 | 1106 |
|
1110 | 1107 |
|
1111 | 1108 | def _get_retry_duration_deadline(instance: InstanceModel, retry: Retry) -> datetime.datetime: |
1112 | | - return instance.created_at.replace(tzinfo=datetime.timezone.utc) + timedelta( |
1113 | | - seconds=retry.duration |
1114 | | - ) |
| 1109 | + return instance.created_at + timedelta(seconds=retry.duration) |
1115 | 1110 |
|
1116 | 1111 |
|
1117 | 1112 | def _get_provisioning_deadline( |
1118 | 1113 | instance: InstanceModel, |
1119 | 1114 | job_provisioning_data: JobProvisioningData, |
1120 | 1115 | ) -> datetime.datetime: |
| 1116 | + assert instance.started_at is not None |
1121 | 1117 | timeout_interval = get_provisioning_timeout( |
1122 | 1118 | backend_type=job_provisioning_data.get_base_backend(), |
1123 | 1119 | instance_type_name=job_provisioning_data.instance_type.name, |
1124 | 1120 | ) |
1125 | | - return instance.started_at.replace(tzinfo=datetime.timezone.utc) + timeout_interval |
| 1121 | + return instance.started_at + timeout_interval |
1126 | 1122 |
|
1127 | 1123 |
|
1128 | 1124 | def _ssh_keys_to_pkeys(ssh_keys: list[SSHKey]) -> list[PKey]: |
|
0 commit comments