Repository navigation
·
2 commits
to master
since this release
This release changes how messages are stamped, and it removes the notificator and the operators that read a time off a capability.
Idle workers poll before they park, and progress tracking does less work on hot paths.
Breaking changes
- Message stamps are sets of times. A message's stamp is now a multiset of timestamps instead of one time.
Singleton stamps behave as before.
An empty stamp makes no progress claims. (#813) InputCapability::time()is nowleast(). It exists only forTotalOrderand returnsOption<&T>.
It returnsNonewhen no capabilities stamped the message.
retain(port)is nowretain_least(port), and theDereftoTis gone.
Partially ordered times should usestamp()andretain_stamp(). (#817)- The notificator is removed.
Notificator,FrontierNotificator,unary_notify, andbinary_notifyare gone.
To wait for a time, hold capabilities in a map keyed by time, and check them against the input frontiers. (#819) - Operators that read a time off the capability are removed. This covers
delay,delay_batch,delay_total,count,accumulate,aggregate,state_machine,branch,branch_when, andreclock.
It also covers the flow-controllediterator_sourceandResultStream.
For the container-generic form, useok_errincore. (#818) - Stamp deserialization requires
T: Ord. Deserialization sorts the elements, because the bytes need not come from a validStamp.
The bound applies toStamp,Event,Message'sBytesableimpl, andEventReader'sEventIteratorimpl. (#823) SharedProgresshas a new field,pushed. Code that builds it with a struct literal must set the field. (#832)
Added
CapabilitySetcan serve as a session capability.
InputCapability::stamp()andretain_stamp()expose the full stamp. (#813)timely::scheduling::currentreports the identifier of the operator scheduled on this thread.
A host can callcurrent::enterto charge outside work to an operator. (#831)WorkerConfig::idle_spin, set with--idle-spin MICROS, sets how long an idle worker polls before it parks.
The default is 10 µs. (#816)
Fixed
- Counting pushers track a dirty bit explicitly.
This fixes a missed flush reported in #824. (#825) - Feedback edges drop messages with empty stamps.
Those messages could circulate a loop without progress tracking seeing them. (#823)
Performance
- Workers poll before they park, signal peers less often, and serialize broadcasts once. (#816)
- Records that enter or leave a nested scope schedule their recipients in the same pass that moves them.
This means fewer progress batches and less latency. (#832) - Frontier updates skip a rebuild when a positive count cannot change the frontier.
In one instrumented Differential BFS run, this avoided 9,808 of 71,806 rebuilds. (#829) - Lazy progress reporting skips count scans it does not need. (#830)