QoS Conflict Rules
Every rule below is one QoS setting combination that breaks or silently degrades ROS 2 communication, and QoS Guard checks your publishers and subscribers against all 40 of them. Search or filter to find the ones that match your setup, then open a rule to see a concrete example, how to fix it, and the evidence behind it.
Each rule leads to one of three outcomes.
If you set History = KEEP_LAST with depth D together with Resource Limits max_samples_per_instance smaller than D.
If you set Resource Limits max_samples = N together with max_samples_per_instance greater than N.
If you set Reliability = BEST_EFFORT together with Durability = TRANSIENT_LOCAL or stronger.
If you set Reliability = BEST_EFFORT together with Ownership = EXCLUSIVE.
If you set Reliability = BEST_EFFORT together with Liveliness = MANUAL_BY_TOPIC.
If you set Durability = TRANSIENT_LOCAL or stronger together with Lifespan set to a finite duration.
If you set Lifespan duration L together with Deadline period longer than L.
If you set Destination Order = BY_SOURCE_TIMESTAMP together with History = KEEP_LAST with depth 1.
If you set Destination Order = BY_SOURCE_TIMESTAMP with KEEP_ALL together with Resource Limits max_samples_per_instance = 1.
If you set Ownership = EXCLUSIVE together with Deadline period = infinite.
If you set Ownership = EXCLUSIVE together with Liveliness lease_duration = infinite.
If you set Reader autopurge_no_writer_samples_delay is finite together with Liveliness lease_duration = infinite.
If you set Durability = TRANSIENT or stronger together with Reader autopurge_disposed_samples_delay is finite.
If you set Deadline period is finite together with Partition names are set (non-empty).
If you set Liveliness = MANUAL_BY_TOPIC together with Partition names are set (non-empty).
If you set Ownership = EXCLUSIVE together with Writer autodispose_unregistered_instances = true.
If you set History = KEEP_LAST with depth D together with Lifespan longer than D publish periods.
If you set History = KEEP_ALL bounded by max_samples_per_instance M together with Lifespan longer than M publish periods.
If you set Entity Factory autoenable_created_entities = false together with Durability = VOLATILE.
If you set Durability = TRANSIENT_LOCAL or stronger together with Partition names are set (non-empty).
If you set a Writer partition set together with a Reader partition set that does not overlap it.
If you set Reader Reliability = RELIABLE together with Writer Reliability = BEST_EFFORT.
If you set Reader Durability = TRANSIENT_LOCAL or stronger together with Writer Durability = VOLATILE (weaker).
If you set Writer Deadline period P together with Reader Deadline period smaller than P.
If you set a Reader that requests a strong liveliness kind or short lease together with a Writer that offers a weaker kind or a longer lease.
If you set a Writer Ownership kind together with a Reader Ownership kind that differs from it.
If you set Reader Destination Order = BY_SOURCE_TIMESTAMP together with Writer Destination Order = BY_RECEPTION_TIMESTAMP (weaker).
If you set Writer autodispose_unregistered_instances = false together with Reader autopurge_no_writer_samples_delay = 0.
If you set Writer autodispose_unregistered_instances = false together with Reader autopurge_disposed_samples_delay is finite.
If you set Writer autodispose_unregistered_instances = false together with Reader autopurge_no_writer_samples_delay = infinite.
If you set Reliability = RELIABLE with KEEP_LAST depth D together with a depth smaller than one round-trip of samples.
If you set Reliability = RELIABLE with KEEP_ALL together with max_samples_per_instance smaller than one round-trip of samples.
If you set Reliability = RELIABLE together with Lifespan shorter than one publish period plus a round-trip.
If you set Writer autodispose_unregistered_instances = true together with Reliability = BEST_EFFORT.
If you set Reliability = BEST_EFFORT together with Deadline period is finite.
If you set Deadline period is finite together with Liveliness lease_duration shorter than the deadline.
If you set Durability = TRANSIENT_LOCAL with History = KEEP_ALL together with large or default resource limits.
If you set Ownership = EXCLUSIVE together with Deadline shorter than one publish period plus a round-trip.
If you set Ownership = EXCLUSIVE together with Liveliness lease shorter than one publish period plus a round-trip.
If you set Durability = TRANSIENT_LOCAL or stronger together with Deadline period is finite.