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