olabusayoT commented on code in PR #1717:
URL: https://github.com/apache/daffodil/pull/1717#discussion_r3866911670
##########
daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/SuspensionTracker.scala:
##########
@@ -65,17 +82,58 @@ class SuspensionTracker(suspensionWaitYoung: Int,
suspensionWaitOld: Int) {
}
}
- /**
- * Evaluates all suspensions until either they are all evaluated or a
- * deadlock is detected. This moves all young suspensions to the old queue,
- * and evaluates all old suspensions. If the old queue is non-empty, that
- * means some suspensions are blocked, likely due to a circular deadlock, and
- * we output diagnostics.
- */
- def requireFinal(): Unit = {
+ // Some suspensions only ever resolve through a real, unconditional
+ // retry rather than their own registered wake-up actually firing (a
+ // length that only becomes computable through the DOS-splitting
+ // machinery's cumulative progress, not one identifiable event). This
+ // bounds how long such a suspension waits to requireFinal.
Review Comment:
I think we can try to close the gap and add more suspension waiter to reduce
the number of suspension that rely on this fallback mechanism. But I think that
might be better in a followup PR?
Across the full 4700-test corpus, evalParkedSuspensions fired twice,
touching 88 parked suspensions total, and all 88 were resolved by the fallback
mech. We currently only park a small subset of suspension waiters (length state
and variable instance), but there's so many more that we'd need to add to avoid
this fallback sweep.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]