diff --git a/datadog/dogstatsd/base.py b/datadog/dogstatsd/base.py index ebb22618e..e8d0da2dd 100644 --- a/datadog/dogstatsd/base.py +++ b/datadog/dogstatsd/base.py @@ -319,20 +319,16 @@ def __init__( self._enabled = False # Connection - self._max_payload_size = max_buffer_len + self._max_buffer_len = max_buffer_len self.socket_timeout = socket_timeout if socket_path is not None: self.socket_path = socket_path # type: Optional[text] self.host = None self.port = None - if not self._max_payload_size: - self._max_payload_size = UDS_OPTIMAL_PAYLOAD_LENGTH else: self.socket_path = None self.host = self.resolve_host(host, use_default_route) self.port = int(port) - if not self._max_payload_size: - self._max_payload_size = UDP_OPTIMAL_PAYLOAD_LENGTH self.telemetry_socket_path = telemetry_socket_path self.telemetry_host = None @@ -420,8 +416,14 @@ def socket_path(self): @socket_path.setter def socket_path(self, path): - self._socket_path = path - self._transport = "udp" if path is None else "uds" + with self._socket_lock: + self._socket_path = path + if path is None: + self._transport = "udp" + self._max_payload_size = self._max_buffer_len or UDP_OPTIMAL_PAYLOAD_LENGTH + else: + self._transport = "uds" + self._max_payload_size = self._max_buffer_len or UDS_OPTIMAL_PAYLOAD_LENGTH def enable_background_sender(self, sender_queue_size=0, sender_queue_timeout=0): """ diff --git a/tests/unit/dogstatsd/test_statsd.py b/tests/unit/dogstatsd/test_statsd.py index 8ba0c854a..69160c153 100644 --- a/tests/unit/dogstatsd/test_statsd.py +++ b/tests/unit/dogstatsd/test_statsd.py @@ -1951,3 +1951,9 @@ def test_telemetry_api(self): self.assertEqual(statsd.packets_dropped, 0) self.assertEqual(statsd.packets_dropped_queue, 0) self.assertEqual(statsd.packets_dropped_writer, 0) + + def test_max_payload_size(self): + statsd = DogStatsd(socket_path=None, port=8125) + self.assertEqual(statsd._max_payload_size, UDP_OPTIMAL_PAYLOAD_LENGTH) + statsd.socket_path = "/foo" + self.assertEqual(statsd._max_payload_size, UDS_OPTIMAL_PAYLOAD_LENGTH)