fix: remove watchdog force-reset to prevent concurrent cycle overlap (N3)#101
fix: remove watchdog force-reset to prevent concurrent cycle overlap (N3)#1010x-SquidSol wants to merge 1 commit intodcccrypto:mainfrom
Conversation
…(N3) All three service watchdogs (crank, liquidation, ADL) detected hung cycles by resetting the _cycling/_scanning flag to false. But the old async operation continued running — it was never cancelled. The next interval tick started a NEW cycle, so two cycles ran concurrently, mutating shared state (market maps, counters, sending duplicate txs). The force-reset was actively harmful. Individual RPC calls already have 15s timeouts (withTimeout), so cycles finish naturally. The watchdog now logs + alerts but does NOT reset the flag, preventing concurrent cycles entirely. Affected services: - CrankService: _cycling flag (crank.ts) - LiquidationService: _scanning flag (liquidation.ts) - AdlService: _cycling flag (adl.ts) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Warning Rate limit exceeded
Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 6 minutes and 53 seconds. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (4)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary
All three service watchdogs detected hung cycles by resetting the
_cycling/_scanningflag. But the old async operation continued running — it was never cancelled. The next interval tick started a new cycle, so two cycles ran concurrently:finallyblock eventually cleared the flag mid-way through a newer cycle, potentially enabling a third concurrent cycleFix
Remove
this._cycling = false/this._scanning = falsefrom all three watchdog branches. The watchdog now logs + alerts but does NOT reset the flag. Cycles finish naturally via RPC timeouts (15s per call viawithTimeout).Affected services:
CrankService—crank.tsLiquidationService—liquidation.tsAdlService—adl.tsTest plan
_cycling = true(flag preserved) while still verifying alert is sent🤖 Generated with Claude Code