Skip to content

Commit dec19bb

Browse files
committed
fix svc2svc request cleanup issue and E2E test
Signed-off-by: Lance Drane <[email protected]>
1 parent 03d138b commit dec19bb

File tree

3 files changed

+18
-14
lines changed

3 files changed

+18
-14
lines changed

examples/4_service_to_service/example_client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ def event_callback(
3535
payload: Value of the response from the Service.
3636
"""
3737
print(payload)
38+
# break out of pubsub loop
39+
raise Exception
3840

3941

4042
if __name__ == '__main__':

src/intersect_sdk/service.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ def __init__(
125125
self.got_valid_response: bool = False
126126
self.response_fn = response_handler
127127
self.waiting: bool = False
128+
self.cleanup_req = False
129+
"""When this flag is set to True, mark this request for GC deletion."""
128130

129131
def __init__(
130132
self,
@@ -507,14 +509,6 @@ def create_external_request(
507509
self._external_requests_lock.release_lock()
508510
return request_uuid
509511

510-
def _delete_external_request(self, req_id: UUID) -> None:
511-
req_id_str = str(req_id)
512-
if req_id_str in self._external_requests:
513-
self._external_requests_lock.acquire_lock(blocking=True)
514-
req: IntersectService._ExternalRequest = self._external_requests.pop(req_id_str)
515-
del req
516-
self._external_requests_lock.release_lock()
517-
518512
def _get_external_request(self, req_id: UUID) -> IntersectService._ExternalRequest | None:
519513
req_id_str = str(req_id)
520514
if req_id_str in self._external_requests:
@@ -524,14 +518,25 @@ def _get_external_request(self, req_id: UUID) -> IntersectService._ExternalReque
524518

525519
def _process_external_requests(self) -> None:
526520
self._external_requests_lock.acquire_lock(blocking=True)
521+
522+
# process requests
527523
for extreq in self._external_requests.values():
528524
if not extreq.processed:
529525
self._process_external_request(extreq)
526+
# delete requests
527+
cleanup_list = [
528+
str(extreq.request_id)
529+
for extreq in self._external_requests.values()
530+
if extreq.cleanup_req
531+
]
532+
for extreq_id in cleanup_list:
533+
extreq = self._external_requests.pop(extreq_id)
534+
del extreq
535+
530536
self._external_requests_lock.release_lock()
531537

532538
def _process_external_request(self, extreq: IntersectService._ExternalRequest) -> None:
533539
response = None
534-
cleanup_req = False
535540

536541
now = datetime.now(timezone.utc)
537542
logger.debug(f'Processing external request {extreq.request_id} @ {now}')
@@ -555,7 +560,7 @@ def _process_external_request(self, extreq: IntersectService._ExternalRequest) -
555560
logger.warning(
556561
f'External service request encountered an error: {error_msg}'
557562
)
558-
cleanup_req = True
563+
extreq.cleanup_req = True
559564
else:
560565
logger.debug('Request wait timed-out!')
561566
extreq.waiting = False
@@ -570,9 +575,6 @@ def _process_external_request(self, extreq: IntersectService._ExternalRequest) -
570575
):
571576
extreq.response_fn(response)
572577

573-
if cleanup_req:
574-
self._delete_external_request(extreq.request_id)
575-
576578
def _handle_service_message_raw(self, raw: bytes) -> None:
577579
"""Main broker callback function.
578580

tests/e2e/test_examples.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,5 +137,5 @@ def test_example_3_ping_pong_events_amqp():
137137
def test_example_4_service_to_service():
138138
assert (
139139
run_example_test('4_service_to_service')
140-
== 'Received Response from Service 2: Acknowledging service one text -> Kicking off the example!'
140+
== 'Received Response from Service 2: Acknowledging service one text -> Kicking off the example!\n'
141141
)

0 commit comments

Comments
 (0)