Skip to content

Commit 69844fc

Browse files
committed
Added environmental variable DEFAULT_RATE_LIMIT_PERCENTAGE to adjust percentage of using rate limits for messages to the platform
1 parent d6454f4 commit 69844fc

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

tb_device_mqtt.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from time import sleep
1919
from importlib import metadata
2020
from utils import install_package
21+
from os import environ
2122

2223
def check_tb_paho_mqtt_installed():
2324
try:
@@ -213,8 +214,18 @@ def get_remaining_tokens(self):
213214
return self.tokens
214215

215216

217+
DEFAULT_RATE_LIMIT_PERCENTAGE = environ.get('TB_DEFAULT_RATE_LIMIT_PERCENTAGE')
218+
if DEFAULT_RATE_LIMIT_PERCENTAGE is None:
219+
DEFAULT_RATE_LIMIT_PERCENTAGE = 80
220+
else:
221+
try:
222+
DEFAULT_RATE_LIMIT_PERCENTAGE = int(DEFAULT_RATE_LIMIT_PERCENTAGE)
223+
except ValueError:
224+
log.warning("Invalid value for TB_DEFAULT_RATE_LIMIT_PERCENTAGE, using default value of 80%%")
225+
DEFAULT_RATE_LIMIT_PERCENTAGE = 80
226+
216227
class RateLimit:
217-
def __init__(self, rate_limit, name=None, percentage=80):
228+
def __init__(self, rate_limit, name=None, percentage=DEFAULT_RATE_LIMIT_PERCENTAGE):
218229
self.__reached_limit_index = 0
219230
self.__reached_limit_index_time = 0
220231
self._no_limit = False
@@ -313,7 +324,7 @@ def get_minimal_timeout(self):
313324
def has_limit(self):
314325
return not self._no_limit
315326

316-
def set_limit(self, rate_limit, percentage=80):
327+
def set_limit(self, rate_limit, percentage=DEFAULT_RATE_LIMIT_PERCENTAGE):
317328
with self.__lock:
318329
self._minimal_timeout = DEFAULT_TIMEOUT
319330
self._minimal_limit = float("inf")
@@ -853,23 +864,23 @@ def on_service_configuration(self, _, response, *args, **kwargs):
853864
if use_messages_rate_limit_factor and use_telemetry_rate_limit_factor:
854865
max_inflight_messages = int(min(self._messages_rate_limit.get_minimal_limit(),
855866
self._telemetry_rate_limit.get_minimal_limit(),
856-
service_config_inflight_messages) * 80 / 100)
867+
service_config_inflight_messages) * DEFAULT_RATE_LIMIT_PERCENTAGE / 100)
857868
elif use_messages_rate_limit_factor:
858869
max_inflight_messages = int(min(self._messages_rate_limit.get_minimal_limit(),
859-
service_config_inflight_messages) * 80 / 100)
870+
service_config_inflight_messages) * DEFAULT_RATE_LIMIT_PERCENTAGE / 100)
860871
elif use_telemetry_rate_limit_factor:
861872
max_inflight_messages = int(min(self._telemetry_rate_limit.get_minimal_limit(),
862-
service_config_inflight_messages) * 80 / 100)
873+
service_config_inflight_messages) * DEFAULT_RATE_LIMIT_PERCENTAGE / 100)
863874
else:
864-
max_inflight_messages = int(service_config.get('maxInflightMessages', 100) * 80 / 100)
875+
max_inflight_messages = int(service_config.get('maxInflightMessages', 100) * DEFAULT_RATE_LIMIT_PERCENTAGE / 100)
865876
if max_inflight_messages == 0:
866877
max_inflight_messages = 10_000 # No limitation on device queue on transport level
867878
if max_inflight_messages < 1:
868879
max_inflight_messages = 1
869880
self.max_inflight_messages_set(max_inflight_messages)
870881
self.max_queued_messages_set(max_inflight_messages)
871882
if service_config.get('maxPayloadSize'):
872-
self.max_payload_size = int(int(service_config.get('maxPayloadSize')) * 80 / 100)
883+
self.max_payload_size = int(int(service_config.get('maxPayloadSize')) * DEFAULT_RATE_LIMIT_PERCENTAGE / 100)
873884
log.info("Service configuration was successfully retrieved and applied.")
874885
log.info("Current device limits: %r", service_config)
875886
self.rate_limits_received = True

0 commit comments

Comments
 (0)