Skip to content

Commit 8d55154

Browse files
author
ikemilian-lewis
committed
fix: remove resource_mapping
1 parent 20424c3 commit 8d55154

2 files changed

Lines changed: 18 additions & 23 deletions

File tree

src/orb/application/services/machine_sync_service.py

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -71,23 +71,16 @@ async def fetch_provider_machines(
7171
# machines being returned — not resource-level discovery which returns all
7272
# ASG/fleet instances including unrelated ones.
7373
if request.request_type.value == "return" and request.machine_ids:
74-
resource_mapping = self._build_return_resource_mapping(request, db_machines)
75-
resource_ids = {
76-
resource_id
77-
for resource_id, _ordinal in resource_mapping.values()
78-
if resource_id not in (None, "")
79-
}
74+
resource_id = self._resolve_return_resource_id(request, db_machines)
8075
operation_type = ProviderOperationType.GET_INSTANCE_STATUS
8176
parameters = {
8277
"instance_ids": request.machine_ids,
8378
"provider_api": request.provider_api,
8479
"template_id": request.template_id,
8580
"request_metadata": self._build_request_metadata(request),
8681
}
87-
if resource_mapping:
88-
parameters["resource_mapping"] = resource_mapping
89-
if len(resource_ids) == 1:
90-
parameters["resource_id"] = next(iter(resource_ids))
82+
if resource_id:
83+
parameters["resource_id"] = resource_id
9184
# Use resource-level discovery for acquire requests (handles scaling/replacement)
9285
elif request.resource_ids:
9386
operation_type = ProviderOperationType.DESCRIBE_RESOURCE_INSTANCES
@@ -212,27 +205,28 @@ def _resolve_instance_resource_id(
212205
return str(resource_id)
213206
return ""
214207

215-
def _build_return_resource_mapping(
208+
def _resolve_return_resource_id(
216209
self,
217210
request: Request,
218211
db_machines: list[Machine],
219-
) -> dict[str, tuple[str, int]]:
220-
"""Map return-request machine IDs to resource IDs using DB state and follow-up context."""
221-
mapping: dict[str, tuple[str, int]] = {}
212+
) -> str:
213+
"""Resolve the single resource ID for a return status request."""
214+
resource_ids: set[str] = set()
215+
requested_ids = {str(machine_id) for machine_id in request.machine_ids}
222216

223217
for machine in db_machines:
224218
resource_id = machine.resource_id
225219
machine_id = machine.machine_id.value
226220
if resource_id in (None, "") or machine_id in (None, ""):
227221
continue
228-
mapping[str(machine_id)] = (str(resource_id), 1)
222+
if str(machine_id) in requested_ids:
223+
resource_ids.add(str(resource_id))
229224

230225
request_metadata = self._build_request_metadata(request)
231226
termination_requests = request_metadata.get("termination_requests")
232227
if not isinstance(termination_requests, list):
233-
return mapping
228+
return next(iter(resource_ids)) if len(resource_ids) == 1 else ""
234229

235-
requested_ids = {str(machine_id) for machine_id in request.machine_ids}
236230
for termination_request in termination_requests:
237231
if not isinstance(termination_request, dict):
238232
continue
@@ -251,9 +245,9 @@ def _build_return_resource_mapping(
251245
for machine_id in pending_machine_ids:
252246
machine_id_str = str(machine_id)
253247
if machine_id_str and machine_id_str in requested_ids:
254-
mapping.setdefault(machine_id_str, (str(resource_id), 1))
248+
resource_ids.add(str(resource_id))
255249

256-
return mapping
250+
return next(iter(resource_ids)) if len(resource_ids) == 1 else ""
257251

258252
def _create_machine_from_processed_data(
259253
self, processed_data: dict, request: Request

tests/unit/application/services/test_machine_sync_service.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ async def test_fetch_provider_machines_replays_persisted_request_metadata():
6464
@pytest.mark.unit
6565
@pytest.mark.application
6666
@pytest.mark.asyncio
67-
async def test_fetch_provider_machines_for_return_forwards_azure_resource_mapping():
67+
async def test_fetch_provider_machines_for_return_forwards_resource_id():
6868
command_bus = MagicMock()
6969
uow_factory = MagicMock()
7070
config_port = MagicMock()
@@ -105,14 +105,14 @@ async def test_fetch_provider_machines_for_return_forwards_azure_resource_mappin
105105
assert operation.operation_type == OperationType.GET_INSTANCE_STATUS
106106
assert operation.parameters["provider_api"] == "VMSS"
107107
assert operation.parameters["resource_id"] == "vmss-demo"
108-
assert operation.parameters["resource_mapping"] == {"vmss-demo_000001": ("vmss-demo", 1)}
108+
assert "resource_mapping" not in operation.parameters
109109
assert operation.parameters["request_metadata"]["resource_group"] == "orb-test-rg"
110110

111111

112112
@pytest.mark.unit
113113
@pytest.mark.application
114114
@pytest.mark.asyncio
115-
async def test_fetch_provider_machines_for_return_rebuilds_vmss_mapping_from_follow_up_context():
115+
async def test_fetch_provider_machines_for_return_resolves_resource_id_from_follow_up_context():
116116
command_bus = MagicMock()
117117
uow_factory = MagicMock()
118118
config_port = MagicMock()
@@ -163,9 +163,10 @@ async def test_fetch_provider_machines_for_return_rebuilds_vmss_mapping_from_fol
163163
assert operation.operation_type == OperationType.GET_INSTANCE_STATUS
164164
assert operation.parameters["provider_api"] == "VMSS"
165165
assert operation.parameters["resource_id"] == "vmss-demo"
166-
assert operation.parameters["resource_mapping"] == {"vmss-demo_000001": ("vmss-demo", 1)}
166+
assert "resource_mapping" not in operation.parameters
167167
assert operation.parameters["request_metadata"]["resource_group"] == "orb-test-rg"
168168

169+
169170
@pytest.mark.unit
170171
@pytest.mark.application
171172
@pytest.mark.asyncio

0 commit comments

Comments
 (0)