Skip to content

Finite lifespan expires the history that durability should replay

Rule 6 · applies to the publisher · Back to all rules

Breaks a guarantee. Stored samples can expire before a late joiner arrives, so there is nothing left to replay.

If you set Durability = TRANSIENT_LOCAL or stronger together with Lifespan set to a finite duration
Breaks a guarantee
  • Settings involved: Lifespan and Durability
  • What QoS Guard checks: [DURABL ≥ TRAN_LOCAL] ∧ [LFSPAN.duration ≠ ∞]

Example

A latched config topic has Lifespan 2 s. A node that joins 3 s later receives nothing, because the retained sample already expired.

How to fix it

Use an infinite Lifespan, or one longer than your worst-case late-join gap, when you rely on durability for late joiners.

Why this rule is flagged

What the DDS specification says

The DDS specification does not settle this case on its own, so the rule rests on direct measurement.


What the engine source code shows

This page grounds the rule in the measurement below rather than a separate source trace.


What the measurements show

Item Value
Dataset Download CSV
Fixed QoS setting RELIAB = RELIABLE, DURABL = TRANSIENT_LOCAL
Tested variable LIFESPAN.duration
Tested values LIFESPAN.duration ∈ {-1 ms, 100 ms, 150 ms, 200 ms, 300 ms, 450 ms, 600 ms}
Rule-relevant case finite LIFESPAN.duration under DURABL = TRANSIENT_LOCAL
Tested engines / versions Fast DDS 2.14.6 (Jazzy), Cyclone DDS 0.10.5
Network setting RTT = 50 ms, loss ∈ {0%, 20%}, PP = 10 ms, message size = 1024 B

Measurement result

Rule 6 Cyclone DDS heatmap

Rule 6 Fast DDS heatmap

The heatmaps show average delivery ratio under DURABL = TRANSIENT_LOCAL across the tested lifespan values.