Isolate busy work-order rows instead of aborting the VISUAL apply #65

Open
opened 2026-11-05 12:09:29 +00:00 by spencerm · 0 comments
Owner

Priority: medium.

The feed applies a transaction-wide five-second lock timeout (server/packetstation/feed/apply.py:662), but work-order updates in _wo_gone, _wo_back and _observe sit outside run.guarded savepoints: server/packetstation/feed/apply.py:953, server/packetstation/feed/apply.py:995, server/packetstation/feed/apply.py:1060.

Reproduce in PostgreSQL: hold a conflicting packet_work_orders row lock in a separate transaction for over five seconds while the apply reaches one of these updates. The lock error escapes and rolls back the entire apply, including unrelated packet/project/close changes. Change-order approval is one possible lock holder; its real duration was not measured.

Acceptance criteria:

  • Isolate these operations with suitable savepoints or lock-skipping behavior.
  • Count/report busy work rather than discard unrelated updates.
  • Keep work-order counters, flags and observed statuses internally consistent when skipping.
  • Add deterministic two-connection tests for each affected path and verify a later run catches up.

Validation: static control-flow inspection; no timed DB reproduction. Source: Grok.

Reviewed revision: 18333600b55b70971877c1a0c72d1d61b6ce9c69. Raised from the November 2026 independent project reviews and parent verification. No production system was tested.

Priority: medium. The feed applies a transaction-wide five-second lock timeout ([server/packetstation/feed/apply.py:662](https://gt.pescoinc.biz/spencerm/PacketStation/src/commit/18333600b55b70971877c1a0c72d1d61b6ce9c69/server/packetstation/feed/apply.py#L662)), but work-order updates in _wo_gone, _wo_back and _observe sit outside run.guarded savepoints: [server/packetstation/feed/apply.py:953](https://gt.pescoinc.biz/spencerm/PacketStation/src/commit/18333600b55b70971877c1a0c72d1d61b6ce9c69/server/packetstation/feed/apply.py#L953), [server/packetstation/feed/apply.py:995](https://gt.pescoinc.biz/spencerm/PacketStation/src/commit/18333600b55b70971877c1a0c72d1d61b6ce9c69/server/packetstation/feed/apply.py#L995), [server/packetstation/feed/apply.py:1060](https://gt.pescoinc.biz/spencerm/PacketStation/src/commit/18333600b55b70971877c1a0c72d1d61b6ce9c69/server/packetstation/feed/apply.py#L1060). Reproduce in PostgreSQL: hold a conflicting packet_work_orders row lock in a separate transaction for over five seconds while the apply reaches one of these updates. The lock error escapes and rolls back the entire apply, including unrelated packet/project/close changes. Change-order approval is one possible lock holder; its real duration was not measured. Acceptance criteria: - Isolate these operations with suitable savepoints or lock-skipping behavior. - Count/report busy work rather than discard unrelated updates. - Keep work-order counters, flags and observed statuses internally consistent when skipping. - Add deterministic two-connection tests for each affected path and verify a later run catches up. Validation: static control-flow inspection; no timed DB reproduction. Source: Grok. Reviewed revision: `18333600b55b70971877c1a0c72d1d61b6ce9c69`. Raised from the November 2026 independent project reviews and parent verification. No production system was tested.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: spencerm/PacketStation#65