incremental delivery with deduplication + concurrent execution
At a glance
- Identifier: #1034
- Stage: RFCX: Closed 2023-11-07T10:07:26Z
- Champion: @yaacovCR
- PR: incremental delivery with deduplication + concurrent execution
Timeline
- Commit pushed: use identifiers instead of records when possible on 2023-09-28 by @yaacovCR
- Commit pushed: scattered fixes, streamlining on 2023-09-26 by @yaacovCR
- Spec PR created on 2023-07-12 by yaacovCR
- Commit pushed: incremental delivery with deduplication, concurrent delivery, and ear… on 2023-05-21 by @yaacovCR
- Commit pushed: CollectFields does not require path or asyncRecord (#11) on 2023-01-16 by @yaacovCR
- Commit pushed: replace server with service on 2023-01-15 by @robrichard
- Commit pushed: fix typo on 2022-12-05 by @robrichard
- Commit pushed: fix parentRecord argument in ExecuteStreamField (#7) on 2022-11-29 by @yaacovCR
- Commit pushed: clarify label is not required on 2022-11-23 by @robrichard
- 2 commits pushed on 2022-11-22:
- Commit pushed: Add error handling for stream iterators (#5) on 2022-11-21 by @yaacovCR
- Commit pushed: fix typos (#6) on 2022-11-18 by @yaacovCR
- Commit pushed: remove ResolveFIeldGenerator (#4) on 2022-11-16 by @yaacovCR
- Commit pushed: small fixes (#3) on 2022-11-07 by @yaacovCR
- Commit pushed: update on hasNext on 2022-11-01 by @robrichard
- Commit pushed: link to note on should on 2022-10-12 by @robrichard
- 3 commits pushed on 2022-09-09:
- 11 commits pushed on 2022-09-08:
- Add error boundary behavior by @robrichard
- defer/stream response => payload by @robrichard
- event stream => response stream by @robrichard
- link to path section by @robrichard
- use case no dash by @robrichard
- remove "or null" by @robrichard
- add detailed incremental example by @robrichard
- update label validation rule by @robrichard
- clarify hasNext on incremental example by @robrichard
- clarify canceling of subsequent payloads by @robrichard
- Add examples for non-null cases by @robrichard
- Commit pushed: clarify null behavior of if on 2022-08-24 by @robrichard
- 2 commits pushed on 2022-08-23:
- 7 commits pushed on 2022-08-18:
- Introduce @defer and @stream. by @robrichard
- Raise a field error if initialCount is less than zero by @robrichard
- wait for parent async record to ensure correct order of payloads by @robrichard
- spec updates to reflect latest discussions by @robrichard
- Note about mutation execution order by @robrichard
- minor change for uniqueness by @robrichard
- fix typos by @robrichard
- Commit pushed: Align deferred fragment field collection with reference implementation on 2022-08-03 by @robrichard
- 3 commits pushed on 2022-06-09:
- 2 commits pushed on 2022-03-23:
- Commit pushed: Clarification on labels on 2022-03-08 by @robrichard
- Commit pushed: add validation “Defer And Stream Directive Labels Are Unique” on 2022-03-07 by @robrichard
- 2 commits pushed on 2022-02-07:
- Commit pushed: deferDirective and visitedFragments on 2022-02-02 by @robrichard
- Commit pushed: fix typo on 2022-01-21 by @robrichard
- Commit pushed: add isCompletedIterator to AsyncPayloadRecord to track completed iter… on 2021-12-30 by @robrichard
- 2 commits pushed on 2021-12-20:
- 2 commits pushed on 2021-12-06:
- Commit pushed: fix typo on 2021-11-26 by @robrichard
- Commit pushed: allow extensions only subsequent payloads on 2021-11-25 by @robrichard
- Commit pushed: clarify negative values of initialCount on 2021-11-20 by @robrichard
- Commit pushed: clarification on defer/stream requirement on 2021-11-19 by @robrichard
- Commit pushed: Update Section 3 -- Type System.md on 2021-05-15 by @robrichard
- 3 commits pushed on 2021-02-17:
supersedes #1026
This version sets up an Incremental Publisher Record that includes: (a) an Execution Event Queue input stream on the and (b) a Subsequent Result output stream.
No mutations happen outside the algorithms that define any records.
With the following caveats:
- The event queue is not considered to be "mutated" when different sub-algorithms push events into it.
- The
CreateIncrementalPublisher()
algorithm is where the magic happens, a long algorithm where the Execution Event Handler and lazily executed Subsequent Result stream are managed concurrently. To increase readability, several subprocedures/macros/inner functions are defined that have access to the variables defined within the entire algorithm.