From b019d9808e7893d9a47561df4442b659c5690e66 Mon Sep 17 00:00:00 2001 From: elianalf <62831776+elianalf@users.noreply.github.com> Date: Fri, 17 May 2024 17:21:30 +0200 Subject: [PATCH] New `max_message_size` property to limit output datagrams size (#770) * Refs #20849: Add max_message_size property policy docs Signed-off-by: elianalf <62831776+elianalf@users.noreply.github.com> * Refs 20849: Apply suggestions Signed-off-by: elianalf <62831776+elianalf@users.noreply.github.com> * Refs #20849: Apply suggestions Signed-off-by: elianalf <62831776+elianalf@users.noreply.github.com> --------- Signed-off-by: elianalf <62831776+elianalf@users.noreply.github.com> (cherry picked from commit 91d96b831ccdf47888e5aec86c079ee6071284ed) # Conflicts: # code/DDSCodeTester.cpp # docs/fastdds/property_policies/non_consolidated_qos.rst --- code/DDSCodeTester.cpp | 22 ++++++ code/XMLTester.xml | 36 +++++++++ .../non_consolidated_qos.rst | 79 +++++++++++++++++++ 3 files changed, 137 insertions(+) diff --git a/code/DDSCodeTester.cpp b/code/DDSCodeTester.cpp index 4f3240f03..0a36bb4d1 100644 --- a/code/DDSCodeTester.cpp +++ b/code/DDSCodeTester.cpp @@ -880,6 +880,28 @@ void dds_domain_examples() "fastdds.tcp_transport.non_blocking_send", "true"); //!-- + } + + { + // MAX_MESSAGE_SIZE_PROPERTY_PARTICIPANT + DomainParticipantQos pqos; + + // Set maximum number of bytes of the datagram to be sent + pqos.properties().properties().emplace_back( + "fastdds.max_message_size", + "1200"); + //!-- + } + + { + // MAX_MESSAGE_SIZE_PROPERTY_WRITER + DataWriterQos wqos; + + // Set maximum number of bytes of the datagram to be sent + wqos.properties().properties().emplace_back( + "fastdds.max_message_size", + "1200"); + //!-- } } diff --git a/code/XMLTester.xml b/code/XMLTester.xml index c6281d54f..f714885fb 100644 --- a/code/XMLTester.xml +++ b/code/XMLTester.xml @@ -2790,6 +2790,42 @@ --> <--> +MAX_MESSAGE_SIZE_PROPERTY_PARTICIPANT<--> + + + + + + + + fastdds.max_message_size + 1200 + + + + + +<--> + +MAX_MESSAGE_SIZE_PROPERTY_WRITER<--> + + + + + + + fastdds.max_message_size + 1200 + + + + +<--> + FASTDDS_STATISTICS_MODULE<--> diff --git a/docs/fastdds/property_policies/non_consolidated_qos.rst b/docs/fastdds/property_policies/non_consolidated_qos.rst index 9858014d1..c9a84e85a 100644 --- a/docs/fastdds/property_policies/non_consolidated_qos.rst +++ b/docs/fastdds/property_policies/non_consolidated_qos.rst @@ -395,3 +395,82 @@ packet. :language: xml :start-after: XML-TCP-NON-BLOCKING-SEND :end-before: <--> + +.. _property_max_message_size: + +Maximum Message Size +^^^^^^^^^^^^^^^^^^^^ + +One common requirement is the differentiation between the maximum size of received and sent datagrams. +This capability is especially important in scenarios where a system might need to handle large incoming +data sizes but should restrict the size of the data it sends to prevent overwhelming network resources +or complying with network traffic policies. +The primary attribute for controlling datagram size is `maxMessageSize`, which sets the upper limit +for both the size of datagrams that can be received and those that can be sent. +Property ``fastdds.max_message_size`` allows restricting the size of outgoing datagrams without +changing the size of incoming ones. +This property allows for the specific configuration of the maximum number of bytes for datagrams that +are sent. +By configuring this property to a value lower than the smallest `maxMessageSize` across all transports, +applications can achieve a lower sending limit while maintaining the ability to receive larger datagrams. + +.. list-table:: + :header-rows: 1 + :align: left + + * - PropertyPolicyQos name + - PropertyPolicyQos value + - Default value + * - ``"fastdds.max_message_size"`` + - ``uint32_t`` + - ``"4294967295"`` + +.. note:: + An invalid value of ``fastdds.max_message_size`` would log an error, + and the default value will be used. + +.. _setting_max_message_size_participant: + +Setting ``fastdds.max_message_size`` At Participant Level +""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +.. tabs:: + + .. tab:: C++ + + .. literalinclude:: /../code/DDSCodeTester.cpp + :language: c++ + :start-after: // MAX_MESSAGE_SIZE_PROPERTY_PARTICIPANT + :end-before: //!-- + :dedent: 6 + + .. tab:: XML + + .. literalinclude:: /../code/XMLTester.xml + :language: xml + :start-after: MAX_MESSAGE_SIZE_PROPERTY_PARTICIPANT<--> + :end-before: <--> + :lines: 2,4-16 + +.. _setting_max_message_size_writer: + +Setting ``fastdds.max_message_size`` At Writer Level +"""""""""""""""""""""""""""""""""""""""""""""""""""" + +.. tabs:: + + .. tab:: C++ + + .. literalinclude:: /../code/DDSCodeTester.cpp + :language: c++ + :start-after: // MAX_MESSAGE_SIZE_PROPERTY_WRITER + :end-before: //!-- + :dedent: 6 + + .. tab:: XML + + .. literalinclude:: /../code/XMLTester.xml + :language: xml + :start-after: MAX_MESSAGE_SIZE_PROPERTY_WRITER<--> + :end-before: <--> + :lines: 2,4-14