Skip to content

Commit 4db8502

Browse files
authored
Local Store: Complete tasks when resolving promises (#297)
* Local Store: Complete tasks when resolving promises * add uv lock * fix formatting * only complete invoke and resume tasks * first complete tasks. then callbacks * first complete tasks. then callbacks * complete notify tasks
1 parent 9f57f21 commit 4db8502

File tree

3 files changed

+91
-87
lines changed

3 files changed

+91
-87
lines changed

resonate/stores/local.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,12 @@ def transition(
523523
return promise, task, applied
524524

525525
if applied and promise.state in ("RESOLVED", "REJECTED", "REJECTED_CANCELED", "REJECTED_TIMEDOUT"):
526+
# complete all pending tasks for the same promise_id
527+
for task in self._store.tasks.scan():
528+
if task.root_promise_id == id and task.state in ("INIT", "ENQUEUED", "CLAIMED"):
529+
_, applied = self._store.tasks.transition(task.id, "COMPLETED", force=True)
530+
assert applied
531+
526532
# create resume and notify tasks
527533
for callback in promise.callbacks.values():
528534
_, applied = self._store.tasks.transition(
@@ -536,6 +542,8 @@ def transition(
536542
assert applied
537543
promise.callbacks.clear()
538544

545+
546+
539547
return promise, None, applied
540548

541549
def _transition(

resonate/stores/remote.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def call(self, req: PreparedRequest) -> Any:
8787
if delay is None or e.response.status_code != 500:
8888
mesg = error.get("message", "Unknown exception")
8989
code = error.get("code", 0)
90-
details = error.get("details", None)
90+
details = error.get("details")
9191
raise ResonateStoreError(mesg=mesg, code=code, details=details) from e
9292
except requests.exceptions.Timeout as e:
9393
if delay is None:

0 commit comments

Comments
 (0)