Skip to content

Commit fbb0769

Browse files
authored
Don't subscribe with Transient local QoS when there are volatile publishers (#1023)
* fix: incompatible QoS settings for subs for reliability, if any subscribed topic has a non-reliable policy, we set reliability to best effort. for durability, if if any subscribed topic has a non-transient-local policy, we set durability to volatile. * fix: define variables * fix: lint and remove default publisher qos durability setting * fix: default durability policy for tests * fix: code fixed according to recommendation * fix: lint * fix: added recommended changes * fix: reverted test changes * fix: check if there are any publisher. * fix: lint * fix: qos settings * fix: requested changes
1 parent fde7509 commit fbb0769

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

rosbridge_library/src/rosbridge_library/internal/subscribers.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,10 @@ def __init__(self, topic, client_id, callback, node_handle, msg_type=None, raw=F
120120
)
121121

122122
infos = node_handle.get_publishers_info_by_topic(topic)
123-
if any(pub.qos_profile.durability == DurabilityPolicy.TRANSIENT_LOCAL for pub in infos):
123+
124+
if len(infos) > 0 and all(
125+
pub.qos_profile.durability == DurabilityPolicy.TRANSIENT_LOCAL for pub in infos
126+
):
124127
qos.durability = DurabilityPolicy.TRANSIENT_LOCAL
125128
qos.reliability = ReliabilityPolicy.RELIABLE
126129
if any(pub.qos_profile.reliability == ReliabilityPolicy.BEST_EFFORT for pub in infos):
@@ -182,10 +185,14 @@ def subscribe(self, client_id, callback):
182185
# which adds the new callback to the subscriptions dictionary.
183186
self.new_subscriptions.update({client_id: callback})
184187
infos = self.node_handle.get_publishers_info_by_topic(self.topic)
185-
if any(pub.qos_profile.durability == DurabilityPolicy.TRANSIENT_LOCAL for pub in infos):
188+
189+
if len(infos) > 0 and all(
190+
pub.qos_profile.durability == DurabilityPolicy.TRANSIENT_LOCAL for pub in infos
191+
):
186192
self.qos.durability = DurabilityPolicy.TRANSIENT_LOCAL
187193
if any(pub.qos_profile.reliability == ReliabilityPolicy.BEST_EFFORT for pub in infos):
188194
self.qos.reliability = ReliabilityPolicy.BEST_EFFORT
195+
189196
if self.new_subscriber is None:
190197
self.new_subscriber = self.node_handle.create_subscription(
191198
self.msg_class,

0 commit comments

Comments
 (0)