From a3d51d494781faa610181f9061063353840f15c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BCl?= Date: Tue, 10 Mar 2026 10:27:49 +0100 Subject: [PATCH 01/15] Decouple process and send periods in Discovery Server MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Raül --- README.md | 2 +- code/DDSCodeTester.cpp | 8 ++++ code/XMLTester.xml | 19 ++++++++ docs/conf.py | 12 ++--- docs/fastdds/discovery/discovery_server.rst | 48 +++++++++++++++++-- .../xml_configuration/domainparticipant.rst | 8 +++- 6 files changed, 83 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 03192734f..4c69dc83b 100644 --- a/README.md +++ b/README.md @@ -185,7 +185,7 @@ When this variable is set to `True`, [conf.py](docs/conf.py) will clone Fast DDS 1. Try to checkout to the branch specified by environment variable `FASTDDS_BRANCH`. 1. If the variable is not set, or the branch does not exist, try to checkout to a branch with the same name as the current branch on this repository. -1. If the previous fails, fallback to `master`. +1. If the previous fails, fallback to `main`. Also Fast DDS Python bindings is cloned and follows a similar criteria: diff --git a/code/DDSCodeTester.cpp b/code/DDSCodeTester.cpp index cf472f97f..c0ba86231 100644 --- a/code/DDSCodeTester.cpp +++ b/code/DDSCodeTester.cpp @@ -1576,6 +1576,14 @@ void dds_discovery_examples() //!-- } + { + //CONF_SERVER_PROCESS_PERIOD + DomainParticipantQos participant_qos; + participant_qos.wire_protocol().builtin.discovery_config.discoveryServer_process_period = + Duration_t(0, 100000000); + //!-- + } + { DomainParticipant* client_or_server = DomainParticipantFactory::get_instance()->create_participant(0, PARTICIPANT_QOS_DEFAULT); diff --git a/code/XMLTester.xml b/code/XMLTester.xml index be156d0b7..25e180342 100644 --- a/code/XMLTester.xml +++ b/code/XMLTester.xml @@ -2941,6 +2941,25 @@ <--> +CONF-SERVER-PROCESS-PERIOD<--> + + + + + + + + 100000000 + + + + + +<--> + diff --git a/docs/conf.py b/docs/conf.py index e5910e14d..cee0af1a8 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -307,7 +307,7 @@ def configure_doxyfile( # - Fast DDS print("Cloning Fast DDS") fastdds = git.Repo.clone_from( - "https://github.com/eProsima/Fast-DDS.git", + "https://github.com/eProsima/Fast-DDS-Pro.git", fastdds_repo_name, ) @@ -320,7 +320,7 @@ def configure_doxyfile( # First try to checkout to ${FASTDDS_BRANCH} # Else try with current documentation branch - # Else checkout to master + # Else checkout to main if fastdds_branch and fastdds.refs.__contains__("origin/{}".format(fastdds_branch)): fastdds_branch = "origin/{}".format(fastdds_branch) elif docs_branch and fastdds.refs.__contains__("origin/{}".format(docs_branch)): @@ -331,7 +331,7 @@ def configure_doxyfile( fastdds_branch, docs_branch ) ) - fastdds_branch = "origin/master" + fastdds_branch = "origin/main" # Actual checkout print('Checking out Fast DDS branch "{}"'.format(fastdds_branch)) @@ -340,7 +340,7 @@ def configure_doxyfile( # - Fast DDS Python Bindings print("Cloning Fast DDS Python Bindings") fastdds_python = git.Repo.clone_from( - "https://github.com/eProsima/Fast-DDS-python.git", + "https://github.com/eProsima/Fast-DDS-Pro-Python.git", fastdds_python_repo_name, ) @@ -349,7 +349,7 @@ def configure_doxyfile( # First try to checkout to ${FASTDDS_PYTHON_BRANCH} # Else try with current documentation branch - # Else checkout to master + # Else checkout to main if fastdds_python_branch and fastdds_python.refs.__contains__( "origin/{}".format(fastdds_python_branch) ): @@ -364,7 +364,7 @@ def configure_doxyfile( fastdds_python_branch, docs_branch ) ) - fastdds_python_branch = "origin/master" + fastdds_python_branch = "origin/main" # Actual checkout print('Checking out Fast DDS Python branch "{}"'.format(fastdds_python_branch)) diff --git a/docs/fastdds/discovery/discovery_server.rst b/docs/fastdds/discovery/discovery_server.rst index dfb5b9ae1..d62000c9f 100644 --- a/docs/fastdds/discovery/discovery_server.rst +++ b/docs/fastdds/discovery/discovery_server.rst @@ -186,11 +186,19 @@ regular intervals until it is connected to the same amount of servers that has b Fine tuning discovery server handshake ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -As explained :ref:`above ` the *clients* send discovery messages to the *servers* at regular -intervals (ping period) until they receive as many message reception acknowledgement as remote locators -(server addresses) were specified. -Mind that this period also applies for those *servers* which connect to other *servers*. -The default value for this period is 450 ms, but it can be configured to a different value. +The ``discoveryServer_client_syncperiod`` parameter (XML: ````) controls +two related but distinct behaviours: + +- **Client side**: how often a *client* sends its participant announcement (``DATA(p)``) to + its configured *servers*. This continues until the *server* has acknowledged the announcement. + +- **Server side**: how often the *server* flushes accumulated discovery information to its connected + *clients* and peer *servers*. + A longer period causes the *server* to batch more changes together before sending, which reduces + network traffic when many participants join at the same time but increases the time until each + participant learns about the others. + +The default value for both is 450 ms. .. tab-set-code:: @@ -207,6 +215,36 @@ The default value for this period is 450 ms, but it can be configured to a diffe :lines: 2-3,5-16 :append: +.. _DS_process_period: + +Fine tuning the server processing interval +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The *server* periodically processes incoming discovery data: it ingests queued announcements, +updates the DiscoveryDataBase, and computes which changes need to be propagated to each participant. +This processing interval is independent from the send interval configured by +:ref:`clientAnnouncementPeriod `. + +A shorter processing interval reduces the latency between a client announcement arriving and the +server computing the resulting propagation. +A longer processing interval reduces CPU overhead on servers handling many clients. +The default value is 200 ms. + +.. tab-set-code:: + + .. literalinclude:: /../code/DDSCodeTester.cpp + :language: c++ + :start-after: //CONF_SERVER_PROCESS_PERIOD + :end-before: //!-- + :dedent: 8 + + .. literalinclude:: /../code/XMLTester.xml + :language: xml + :start-after: CONF-SERVER-PROCESS-PERIOD<--> + :end-before: <--> + :lines: 2-3,5-16 + :append: + .. _DS_guidPrefix: The GuidPrefix as an optional server unique identifier diff --git a/docs/fastdds/xml_configuration/domainparticipant.rst b/docs/fastdds/xml_configuration/domainparticipant.rst index be0f11553..838fa1b9e 100644 --- a/docs/fastdds/xml_configuration/domainparticipant.rst +++ b/docs/fastdds/xml_configuration/domainparticipant.rst @@ -416,8 +416,12 @@ configurable settings. | | See :ref:`Initial Announcements`. | | | +---------------------------------+------------------------------------------------+---------------------+-------------+ | ```` | The period for the DomainParticipant to | :ref:`DurationType` | 450 ms | -| | send its Discovery Message to its servers | | | -| | and check for EDP endpoints matching. | | | +| | send its Discovery Messages. | | | ++---------------------------------+------------------------------------------------+---------------------+-------------+ +| ```` | The period for the server to process incoming | :ref:`DurationType` | 200 ms | +| | discovery data and update the | | | +| | DiscoveryDataBase. Independent from | | | +| | ````. | | | +---------------------------------+------------------------------------------------+---------------------+-------------+ | ```` | The XML filename(s) with the static EDP | ``List `` | | | | configuration. Only necessary if | | | From 6e4bf743d9e275a411f937c054b4ba5b2759c9fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BCl?= Date: Tue, 10 Mar 2026 10:40:08 +0100 Subject: [PATCH 02/15] Add pro badge MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Raül --- docs/fastdds/discovery/discovery_server.rst | 4 ++-- docs/fastdds/xml_configuration/domainparticipant.rst | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/fastdds/discovery/discovery_server.rst b/docs/fastdds/discovery/discovery_server.rst index d62000c9f..7f88add50 100644 --- a/docs/fastdds/discovery/discovery_server.rst +++ b/docs/fastdds/discovery/discovery_server.rst @@ -217,8 +217,8 @@ The default value for both is 450 ms. .. _DS_process_period: -Fine tuning the server processing interval -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Fine tuning the server processing interval |Pro| +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The *server* periodically processes incoming discovery data: it ingests queued announcements, updates the DiscoveryDataBase, and computes which changes need to be propagated to each participant. diff --git a/docs/fastdds/xml_configuration/domainparticipant.rst b/docs/fastdds/xml_configuration/domainparticipant.rst index 838fa1b9e..672086c05 100644 --- a/docs/fastdds/xml_configuration/domainparticipant.rst +++ b/docs/fastdds/xml_configuration/domainparticipant.rst @@ -418,7 +418,7 @@ configurable settings. | ```` | The period for the DomainParticipant to | :ref:`DurationType` | 450 ms | | | send its Discovery Messages. | | | +---------------------------------+------------------------------------------------+---------------------+-------------+ -| ```` | The period for the server to process incoming | :ref:`DurationType` | 200 ms | +| ```` |Pro| | The period for the server to process incoming | :ref:`DurationType` | 200 ms | | | discovery data and update the | | | | | DiscoveryDataBase. Independent from | | | | | ````. | | | From 0642dd0cb7f209c383377051b14ee40eff8c1627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BCl?= Date: Tue, 10 Mar 2026 10:55:15 +0100 Subject: [PATCH 03/15] Rollback conf and readme changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Raül --- README.md | 2 +- docs/conf.py | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 4c69dc83b..03192734f 100644 --- a/README.md +++ b/README.md @@ -185,7 +185,7 @@ When this variable is set to `True`, [conf.py](docs/conf.py) will clone Fast DDS 1. Try to checkout to the branch specified by environment variable `FASTDDS_BRANCH`. 1. If the variable is not set, or the branch does not exist, try to checkout to a branch with the same name as the current branch on this repository. -1. If the previous fails, fallback to `main`. +1. If the previous fails, fallback to `master`. Also Fast DDS Python bindings is cloned and follows a similar criteria: diff --git a/docs/conf.py b/docs/conf.py index cee0af1a8..e5910e14d 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -307,7 +307,7 @@ def configure_doxyfile( # - Fast DDS print("Cloning Fast DDS") fastdds = git.Repo.clone_from( - "https://github.com/eProsima/Fast-DDS-Pro.git", + "https://github.com/eProsima/Fast-DDS.git", fastdds_repo_name, ) @@ -320,7 +320,7 @@ def configure_doxyfile( # First try to checkout to ${FASTDDS_BRANCH} # Else try with current documentation branch - # Else checkout to main + # Else checkout to master if fastdds_branch and fastdds.refs.__contains__("origin/{}".format(fastdds_branch)): fastdds_branch = "origin/{}".format(fastdds_branch) elif docs_branch and fastdds.refs.__contains__("origin/{}".format(docs_branch)): @@ -331,7 +331,7 @@ def configure_doxyfile( fastdds_branch, docs_branch ) ) - fastdds_branch = "origin/main" + fastdds_branch = "origin/master" # Actual checkout print('Checking out Fast DDS branch "{}"'.format(fastdds_branch)) @@ -340,7 +340,7 @@ def configure_doxyfile( # - Fast DDS Python Bindings print("Cloning Fast DDS Python Bindings") fastdds_python = git.Repo.clone_from( - "https://github.com/eProsima/Fast-DDS-Pro-Python.git", + "https://github.com/eProsima/Fast-DDS-python.git", fastdds_python_repo_name, ) @@ -349,7 +349,7 @@ def configure_doxyfile( # First try to checkout to ${FASTDDS_PYTHON_BRANCH} # Else try with current documentation branch - # Else checkout to main + # Else checkout to master if fastdds_python_branch and fastdds_python.refs.__contains__( "origin/{}".format(fastdds_python_branch) ): @@ -364,7 +364,7 @@ def configure_doxyfile( fastdds_python_branch, docs_branch ) ) - fastdds_python_branch = "origin/main" + fastdds_python_branch = "origin/master" # Actual checkout print('Checking out Fast DDS Python branch "{}"'.format(fastdds_python_branch)) From 9571018f14fc500cc1d4ab94467be895ea41707d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BCl?= Date: Tue, 10 Mar 2026 10:59:40 +0100 Subject: [PATCH 04/15] Remove code snippets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Raül --- code/DDSCodeTester.cpp | 8 -------- code/XMLTester.xml | 19 ------------------- docs/fastdds/discovery/discovery_server.rst | 15 --------------- 3 files changed, 42 deletions(-) diff --git a/code/DDSCodeTester.cpp b/code/DDSCodeTester.cpp index c0ba86231..cf472f97f 100644 --- a/code/DDSCodeTester.cpp +++ b/code/DDSCodeTester.cpp @@ -1576,14 +1576,6 @@ void dds_discovery_examples() //!-- } - { - //CONF_SERVER_PROCESS_PERIOD - DomainParticipantQos participant_qos; - participant_qos.wire_protocol().builtin.discovery_config.discoveryServer_process_period = - Duration_t(0, 100000000); - //!-- - } - { DomainParticipant* client_or_server = DomainParticipantFactory::get_instance()->create_participant(0, PARTICIPANT_QOS_DEFAULT); diff --git a/code/XMLTester.xml b/code/XMLTester.xml index 25e180342..be156d0b7 100644 --- a/code/XMLTester.xml +++ b/code/XMLTester.xml @@ -2941,25 +2941,6 @@ <--> -CONF-SERVER-PROCESS-PERIOD<--> - - - - - - - - 100000000 - - - - - -<--> - diff --git a/docs/fastdds/discovery/discovery_server.rst b/docs/fastdds/discovery/discovery_server.rst index 7f88add50..59bdc6b12 100644 --- a/docs/fastdds/discovery/discovery_server.rst +++ b/docs/fastdds/discovery/discovery_server.rst @@ -230,21 +230,6 @@ server computing the resulting propagation. A longer processing interval reduces CPU overhead on servers handling many clients. The default value is 200 ms. -.. tab-set-code:: - - .. literalinclude:: /../code/DDSCodeTester.cpp - :language: c++ - :start-after: //CONF_SERVER_PROCESS_PERIOD - :end-before: //!-- - :dedent: 8 - - .. literalinclude:: /../code/XMLTester.xml - :language: xml - :start-after: CONF-SERVER-PROCESS-PERIOD<--> - :end-before: <--> - :lines: 2-3,5-16 - :append: - .. _DS_guidPrefix: The GuidPrefix as an optional server unique identifier From f211e45ffe63df0501595ef0b22529dcc7fb013c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BCl?= Date: Wed, 11 Mar 2026 15:02:32 +0100 Subject: [PATCH 05/15] State better basic behaviour MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Raül --- docs/fastdds/discovery/discovery_server.rst | 40 ++++++++++++++----- .../xml_configuration/domainparticipant.rst | 9 ++++- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/docs/fastdds/discovery/discovery_server.rst b/docs/fastdds/discovery/discovery_server.rst index 59bdc6b12..da3f53d11 100644 --- a/docs/fastdds/discovery/discovery_server.rst +++ b/docs/fastdds/discovery/discovery_server.rst @@ -186,19 +186,37 @@ regular intervals until it is connected to the same amount of servers that has b Fine tuning discovery server handshake ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The ``discoveryServer_client_syncperiod`` parameter (XML: ````) controls -two related but distinct behaviours: +The ``discoveryServer_client_syncperiod`` parameter (XML: ````) can be +configured independently on each participant, so the *server* and each *client* can have different +values. It controls two related but distinct behaviours: + +- **Client side**: how often a *client* sends its participant announcement (``DATA(p)``) to its + configured *servers*. This repeats until the *server* has acknowledged the announcement. + The same period applies when a *server* connects to another *server*. + +- **Server side**: the period of the server's combined discovery routine, which processes incoming + announcements, updates the DiscoveryDataBase, and sends the resulting changes to all connected + participants, all in one step. + When a new client announcement arrives the server runs the routine **immediately**, regardless of + the configured period. Once the immediate run completes, the next run is scheduled at + ```` from that point. Any further announcements that arrive before + that deadline each trigger another immediate run, so no discovery event is ever delayed. + The period therefore governs the fallback re-check rate (e.g. waiting for outstanding + acknowledgements) and, in high-load scenarios where many participants join simultaneously, + naturally controls how much batching occurs: a longer period means more changes can accumulate + before the next run and are all sent together, reducing the number of partial sends. + +The default value is 450 ms. -- **Client side**: how often a *client* sends its participant announcement (``DATA(p)``) to - its configured *servers*. This continues until the *server* has acknowledged the announcement. - -- **Server side**: how often the *server* flushes accumulated discovery information to its connected - *clients* and peer *servers*. - A longer period causes the *server* to batch more changes together before sending, which reduces - network traffic when many participants join at the same time but increases the time until each - participant learns about the others. +.. note:: -The default value for both is 450 ms. + |Pro| *eProsima Fast DDS Pro* splits the server's combined routine into two independent timers + with separate periods: a *process timer* (````, default 200 ms) and a + *send timer* (````). The send timer becomes a true rate limiter: + even if many clients announce rapidly the server batches their changes and flushes them at most + once per ````, giving stronger and more predictable traffic control + than is possible with a single combined timer. + See the *Fast DDS Pro* documentation for details. .. tab-set-code:: diff --git a/docs/fastdds/xml_configuration/domainparticipant.rst b/docs/fastdds/xml_configuration/domainparticipant.rst index 672086c05..840942f11 100644 --- a/docs/fastdds/xml_configuration/domainparticipant.rst +++ b/docs/fastdds/xml_configuration/domainparticipant.rst @@ -416,7 +416,14 @@ configurable settings. | | See :ref:`Initial Announcements`. | | | +---------------------------------+------------------------------------------------+---------------------+-------------+ | ```` | The period for the DomainParticipant to | :ref:`DurationType` | 450 ms | -| | send its Discovery Messages. | | | +| | send its Discovery Messages to its servers | | | +| | and check for EDP endpoint matching. | | | +| | On the server side, controls the fallback | | | +| | re-check rate of the combined | | | +| | process-and-send routine. |Pro| Acts as a | | | +| | true send rate limiter independent of client | | | +| | announce rates. | | | +| | (see :ref:`DS_ping_period`). | | | +---------------------------------+------------------------------------------------+---------------------+-------------+ | ```` |Pro| | The period for the server to process incoming | :ref:`DurationType` | 200 ms | | | discovery data and update the | | | From b3244672606db56bafa147aee5089a1b0f1e5c02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BCl?= Date: Wed, 11 Mar 2026 15:31:15 +0100 Subject: [PATCH 06/15] Better documentation explanation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Raül --- docs/fastdds/discovery/discovery_server.rst | 22 +++++++++------------ 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/docs/fastdds/discovery/discovery_server.rst b/docs/fastdds/discovery/discovery_server.rst index da3f53d11..1266c67b8 100644 --- a/docs/fastdds/discovery/discovery_server.rst +++ b/docs/fastdds/discovery/discovery_server.rst @@ -194,17 +194,14 @@ values. It controls two related but distinct behaviours: configured *servers*. This repeats until the *server* has acknowledged the announcement. The same period applies when a *server* connects to another *server*. -- **Server side**: the period of the server's combined discovery routine, which processes incoming - announcements, updates the DiscoveryDataBase, and sends the resulting changes to all connected - participants, all in one step. - When a new client announcement arrives the server runs the routine **immediately**, regardless of - the configured period. Once the immediate run completes, the next run is scheduled at - ```` from that point. Any further announcements that arrive before - that deadline each trigger another immediate run, so no discovery event is ever delayed. - The period therefore governs the fallback re-check rate (e.g. waiting for outstanding - acknowledgements) and, in high-load scenarios where many participants join simultaneously, - naturally controls how much batching occurs: a longer period means more changes can accumulate - before the next run and are all sent together, reducing the number of partial sends. +- **Server side**: the server runs its combined discovery routine (process incoming announcements, + update the DiscoveryDataBase, and send the resulting changes) **immediately** whenever a new + announcement arrives. After each such run, the next re-check is scheduled at + ```` from that point. That re-check handles pending acknowledgements + and retransmissions: it calls into the writer histories and may trigger heartbeats or re-sends + to clients that have not yet acknowledged. A longer period therefore reduces the frequency of + those re-send operations, which is the primary source of traffic reduction when many clients + are connected. The default value is 450 ms. @@ -212,11 +209,10 @@ The default value is 450 ms. |Pro| *eProsima Fast DDS Pro* splits the server's combined routine into two independent timers with separate periods: a *process timer* (````, default 200 ms) and a - *send timer* (````). The send timer becomes a true rate limiter: + *send timer* (````). The send timer becomes a true rate limiter: even if many clients announce rapidly the server batches their changes and flushes them at most once per ````, giving stronger and more predictable traffic control than is possible with a single combined timer. - See the *Fast DDS Pro* documentation for details. .. tab-set-code:: From 63e54298b069d4f8aa7a52c6aee64e029054b755 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BCl?= Date: Tue, 17 Mar 2026 12:40:44 +0100 Subject: [PATCH 07/15] Documentation now references the send period of the rate limiter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Raül --- docs/fastdds/discovery/discovery_server.rst | 30 ++++++++++++++----- .../xml_configuration/domainparticipant.rst | 18 +++++------ 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/docs/fastdds/discovery/discovery_server.rst b/docs/fastdds/discovery/discovery_server.rst index 1266c67b8..c8a0d6c19 100644 --- a/docs/fastdds/discovery/discovery_server.rst +++ b/docs/fastdds/discovery/discovery_server.rst @@ -207,12 +207,12 @@ The default value is 450 ms. .. note:: - |Pro| *eProsima Fast DDS Pro* splits the server's combined routine into two independent timers - with separate periods: a *process timer* (````, default 200 ms) and a - *send timer* (````). The send timer becomes a true rate limiter: - even if many clients announce rapidly the server batches their changes and flushes them at most - once per ````, giving stronger and more predictable traffic control - than is possible with a single combined timer. + |Pro| *eProsima Fast DDS Pro* adds a ```` parameter that acts as a true + send rate limiter on the server. When configured, the server still processes incoming data + on every routine iteration, but defers flushing changes to writer histories until at least + ```` has elapsed since the last flush. This gives stronger and more + predictable traffic control than is possible by tuning ```` alone. + See :ref:`DS_send_period`. .. tab-set-code:: @@ -229,7 +229,23 @@ The default value is 450 ms. :lines: 2-3,5-16 :append: -.. _DS_process_period: +... _DS_send_period: + +Fine tuning the server send rate limiter |Pro| +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The ``discoveryServer_send_period`` parameter (XML: ````) controls the minimum +interval between consecutive flushes of accumulated discovery changes to the writer histories. +When set to a positive value, the server still processes incoming data immediately (via the +combined routine triggered by ````), but defers the send step +(``process_to_send_lists()``) until at least ```` has elapsed since the last +flush. All changes that accumulate in that window are sent together in one batch. + +This is useful in large-scale scenarios where many participants join simultaneously: a longer +send period lets changes accumulate and reduces writer starvation without slowing down the +processing of incoming announcements. + +The default value is 0 (disabled: sends happen every routine iteration, original behaviour). Fine tuning the server processing interval |Pro| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/docs/fastdds/xml_configuration/domainparticipant.rst b/docs/fastdds/xml_configuration/domainparticipant.rst index 840942f11..e3fa584b8 100644 --- a/docs/fastdds/xml_configuration/domainparticipant.rst +++ b/docs/fastdds/xml_configuration/domainparticipant.rst @@ -419,16 +419,16 @@ configurable settings. | | send its Discovery Messages to its servers | | | | | and check for EDP endpoint matching. | | | | | On the server side, controls the fallback | | | -| | re-check rate of the combined | | | -| | process-and-send routine. |Pro| Acts as a | | | -| | true send rate limiter independent of client | | | -| | announce rates. | | | -| | (see :ref:`DS_ping_period`). | | | +| | re-check rate of the discovery routine. | | | +| | |Pro| adds a separate ```` | | | +| | for true send rate limiting | | | +| | (see :ref:`DS_send_period`). | | | +---------------------------------+------------------------------------------------+---------------------+-------------+ -| ```` |Pro| | The period for the server to process incoming | :ref:`DurationType` | 200 ms | -| | discovery data and update the | | | -| | DiscoveryDataBase. Independent from | | | -| | ````. | | | +| ```` |Pro| | Minimum interval between consecutive flushes | :ref:`DurationType` | 0 (disabled)| +| | of accumulated discovery changes to writer | | | +| | histories. When set to a positive value, sends | | | +| | are rate-limited independently from the | | | +| | routine period (see :ref:`DS_send_period`). | | | +---------------------------------+------------------------------------------------+---------------------+-------------+ | ```` | The XML filename(s) with the static EDP | ``List `` | | | | configuration. Only necessary if | | | From d1af8c6f355d31a4fdf135c5d4a40cc99016b345 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BCl?= Date: Tue, 17 Mar 2026 12:57:59 +0100 Subject: [PATCH 08/15] No need to reference other rows in a row MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Raül --- docs/fastdds/xml_configuration/domainparticipant.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/fastdds/xml_configuration/domainparticipant.rst b/docs/fastdds/xml_configuration/domainparticipant.rst index e3fa584b8..7bd6eac79 100644 --- a/docs/fastdds/xml_configuration/domainparticipant.rst +++ b/docs/fastdds/xml_configuration/domainparticipant.rst @@ -420,9 +420,7 @@ configurable settings. | | and check for EDP endpoint matching. | | | | | On the server side, controls the fallback | | | | | re-check rate of the discovery routine. | | | -| | |Pro| adds a separate ```` | | | -| | for true send rate limiting | | | -| | (see :ref:`DS_send_period`). | | | +| | (see :ref:`DS_ping_period`). | | | +---------------------------------+------------------------------------------------+---------------------+-------------+ | ```` |Pro| | Minimum interval between consecutive flushes | :ref:`DurationType` | 0 (disabled)| | | of accumulated discovery changes to writer | | | From 4484f827ef11081b75460115bf4c9740d2a3ca2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BCl?= Date: Tue, 17 Mar 2026 14:29:26 +0100 Subject: [PATCH 09/15] Remove reference to internal code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Raül --- docs/fastdds/discovery/discovery_server.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/fastdds/discovery/discovery_server.rst b/docs/fastdds/discovery/discovery_server.rst index c8a0d6c19..343ba6b7d 100644 --- a/docs/fastdds/discovery/discovery_server.rst +++ b/docs/fastdds/discovery/discovery_server.rst @@ -237,9 +237,9 @@ Fine tuning the server send rate limiter |Pro| The ``discoveryServer_send_period`` parameter (XML: ````) controls the minimum interval between consecutive flushes of accumulated discovery changes to the writer histories. When set to a positive value, the server still processes incoming data immediately (via the -combined routine triggered by ````), but defers the send step -(``process_to_send_lists()``) until at least ```` has elapsed since the last -flush. All changes that accumulate in that window are sent together in one batch. +combined routine triggered by ````), but defers the send step until at +least ```` has elapsed since the last flush. +All changes that accumulate in that window are sent together in one batch. This is useful in large-scale scenarios where many participants join simultaneously: a longer send period lets changes accumulate and reduces writer starvation without slowing down the From 7ba73b796043f97e26b5242cb9e3972c30fca0e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BCl?= Date: Tue, 17 Mar 2026 14:37:23 +0100 Subject: [PATCH 10/15] Better explanation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Raül --- docs/fastdds/discovery/discovery_server.rst | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/fastdds/discovery/discovery_server.rst b/docs/fastdds/discovery/discovery_server.rst index 343ba6b7d..262b32c25 100644 --- a/docs/fastdds/discovery/discovery_server.rst +++ b/docs/fastdds/discovery/discovery_server.rst @@ -241,9 +241,11 @@ combined routine triggered by ````), but defers the se least ```` has elapsed since the last flush. All changes that accumulate in that window are sent together in one batch. -This is useful in large-scale scenarios where many participants join simultaneously: a longer -send period lets changes accumulate and reduces writer starvation without slowing down the -processing of incoming announcements. +This is useful in large-scale scenarios where many participants join simultaneously: without +rate limiting, the server sends partial discovery data before all endpoints of a participant +have been received, requiring redundant retransmissions once the remaining data arrives. +A longer send period lets changes accumulate so that sends contain more complete information, +reducing overall traffic. The default value is 0 (disabled: sends happen every routine iteration, original behaviour). From be1055ff0b97f7350b6508bf182b604d79acffdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BCl?= Date: Wed, 18 Mar 2026 10:35:04 +0100 Subject: [PATCH 11/15] Set server send period as property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Raül --- docs/fastdds/discovery/discovery_server.rst | 40 ++++++------------- .../xml_configuration/domainparticipant.rst | 8 +--- 2 files changed, 15 insertions(+), 33 deletions(-) diff --git a/docs/fastdds/discovery/discovery_server.rst b/docs/fastdds/discovery/discovery_server.rst index 262b32c25..d61fae3ac 100644 --- a/docs/fastdds/discovery/discovery_server.rst +++ b/docs/fastdds/discovery/discovery_server.rst @@ -207,12 +207,12 @@ The default value is 450 ms. .. note:: - |Pro| *eProsima Fast DDS Pro* adds a ```` parameter that acts as a true - send rate limiter on the server. When configured, the server still processes incoming data - on every routine iteration, but defers flushing changes to writer histories until at least - ```` has elapsed since the last flush. This gives stronger and more - predictable traffic control than is possible by tuning ```` alone. - See :ref:`DS_send_period`. + |Pro| adds a ``fastdds.discovery_server.send_period`` property that acts as a true send rate + limiter on the server. When set to a positive value (integer milliseconds), the server still + processes incoming data on every routine iteration, but defers flushing changes to writer + histories until at least that interval has elapsed since the last flush. This gives stronger + and more predictable traffic control than is possible by tuning ```` + alone. See :ref:`DS_send_period`. .. tab-set-code:: @@ -234,12 +234,13 @@ The default value is 450 ms. Fine tuning the server send rate limiter |Pro| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The ``discoveryServer_send_period`` parameter (XML: ````) controls the minimum -interval between consecutive flushes of accumulated discovery changes to the writer histories. -When set to a positive value, the server still processes incoming data immediately (via the -combined routine triggered by ````), but defers the send step until at -least ```` has elapsed since the last flush. -All changes that accumulate in that window are sent together in one batch. +The ``fastdds.discovery_server.send_period`` property controls the minimum interval (in +milliseconds) between consecutive flushes of accumulated discovery changes to the writer +histories. When set to a positive integer value (e.g. ``"1000"`` for one second), the server +still processes incoming data on every routine iteration (triggered by +````), but defers the send step until at least that many milliseconds +have elapsed since the last flush. All changes that accumulate in that window are sent together +in one batch. This is useful in large-scale scenarios where many participants join simultaneously: without rate limiting, the server sends partial discovery data before all endpoints of a participant @@ -247,21 +248,6 @@ have been received, requiring redundant retransmissions once the remaining data A longer send period lets changes accumulate so that sends contain more complete information, reducing overall traffic. -The default value is 0 (disabled: sends happen every routine iteration, original behaviour). - -Fine tuning the server processing interval |Pro| -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The *server* periodically processes incoming discovery data: it ingests queued announcements, -updates the DiscoveryDataBase, and computes which changes need to be propagated to each participant. -This processing interval is independent from the send interval configured by -:ref:`clientAnnouncementPeriod `. - -A shorter processing interval reduces the latency between a client announcement arriving and the -server computing the resulting propagation. -A longer processing interval reduces CPU overhead on servers handling many clients. -The default value is 200 ms. - .. _DS_guidPrefix: The GuidPrefix as an optional server unique identifier diff --git a/docs/fastdds/xml_configuration/domainparticipant.rst b/docs/fastdds/xml_configuration/domainparticipant.rst index 7bd6eac79..a80afa64f 100644 --- a/docs/fastdds/xml_configuration/domainparticipant.rst +++ b/docs/fastdds/xml_configuration/domainparticipant.rst @@ -421,12 +421,8 @@ configurable settings. | | On the server side, controls the fallback | | | | | re-check rate of the discovery routine. | | | | | (see :ref:`DS_ping_period`). | | | -+---------------------------------+------------------------------------------------+---------------------+-------------+ -| ```` |Pro| | Minimum interval between consecutive flushes | :ref:`DurationType` | 0 (disabled)| -| | of accumulated discovery changes to writer | | | -| | histories. When set to a positive value, sends | | | -| | are rate-limited independently from the | | | -| | routine period (see :ref:`DS_send_period`). | | | +| | |Pro| adds a property for true send rate | | | +| | limiting (see :ref:`DS_send_period`). | | | +---------------------------------+------------------------------------------------+---------------------+-------------+ | ```` | The XML filename(s) with the static EDP | ``List `` | | | | configuration. Only necessary if | | | From ddd302599220f66708c5c67cf6ffb87c8f366150 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BCl?= Date: Wed, 18 Mar 2026 10:49:48 +0100 Subject: [PATCH 12/15] Restore original documentation message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Raül --- docs/fastdds/discovery/discovery_server.rst | 32 ++++----------------- 1 file changed, 5 insertions(+), 27 deletions(-) diff --git a/docs/fastdds/discovery/discovery_server.rst b/docs/fastdds/discovery/discovery_server.rst index d61fae3ac..15e7dd966 100644 --- a/docs/fastdds/discovery/discovery_server.rst +++ b/docs/fastdds/discovery/discovery_server.rst @@ -186,33 +186,11 @@ regular intervals until it is connected to the same amount of servers that has b Fine tuning discovery server handshake ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The ``discoveryServer_client_syncperiod`` parameter (XML: ````) can be -configured independently on each participant, so the *server* and each *client* can have different -values. It controls two related but distinct behaviours: - -- **Client side**: how often a *client* sends its participant announcement (``DATA(p)``) to its - configured *servers*. This repeats until the *server* has acknowledged the announcement. - The same period applies when a *server* connects to another *server*. - -- **Server side**: the server runs its combined discovery routine (process incoming announcements, - update the DiscoveryDataBase, and send the resulting changes) **immediately** whenever a new - announcement arrives. After each such run, the next re-check is scheduled at - ```` from that point. That re-check handles pending acknowledgements - and retransmissions: it calls into the writer histories and may trigger heartbeats or re-sends - to clients that have not yet acknowledged. A longer period therefore reduces the frequency of - those re-send operations, which is the primary source of traffic reduction when many clients - are connected. - -The default value is 450 ms. - -.. note:: - - |Pro| adds a ``fastdds.discovery_server.send_period`` property that acts as a true send rate - limiter on the server. When set to a positive value (integer milliseconds), the server still - processes incoming data on every routine iteration, but defers flushing changes to writer - histories until at least that interval has elapsed since the last flush. This gives stronger - and more predictable traffic control than is possible by tuning ```` - alone. See :ref:`DS_send_period`. +As explained :ref:`above ` the *clients* send discovery messages to the *servers* at regular +intervals (ping period) until they receive as many message reception acknowledgement as remote locators +(server addresses) were specified. +Mind that this period also applies for those *servers* which connect to other *servers*. +The default value for this period is 450 ms, but it can be configured to a different value. .. tab-set-code:: From c3db68d7497c6b5e471e686935a3446d08b1cf16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BCl?= Date: Wed, 18 Mar 2026 10:52:04 +0100 Subject: [PATCH 13/15] Restore original doc table message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Raül --- docs/fastdds/xml_configuration/domainparticipant.rst | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/docs/fastdds/xml_configuration/domainparticipant.rst b/docs/fastdds/xml_configuration/domainparticipant.rst index a80afa64f..66bd51b86 100644 --- a/docs/fastdds/xml_configuration/domainparticipant.rst +++ b/docs/fastdds/xml_configuration/domainparticipant.rst @@ -416,11 +416,8 @@ configurable settings. | | See :ref:`Initial Announcements`. | | | +---------------------------------+------------------------------------------------+---------------------+-------------+ | ```` | The period for the DomainParticipant to | :ref:`DurationType` | 450 ms | -| | send its Discovery Messages to its servers | | | -| | and check for EDP endpoint matching. | | | -| | On the server side, controls the fallback | | | -| | re-check rate of the discovery routine. | | | -| | (see :ref:`DS_ping_period`). | | | +| | send its Discovery Message to its servers | | | +| | and check for EDP endpoints matching. | | | | | |Pro| adds a property for true send rate | | | | | limiting (see :ref:`DS_send_period`). | | | +---------------------------------+------------------------------------------------+---------------------+-------------+ From 682199b228cf184bb3ee0290013aa4a299549591 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BCl?= Date: Wed, 18 Mar 2026 12:14:27 +0100 Subject: [PATCH 14/15] Shorten paragraph MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Raül --- docs/fastdds/discovery/discovery_server.rst | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/fastdds/discovery/discovery_server.rst b/docs/fastdds/discovery/discovery_server.rst index 15e7dd966..5fb563926 100644 --- a/docs/fastdds/discovery/discovery_server.rst +++ b/docs/fastdds/discovery/discovery_server.rst @@ -215,10 +215,9 @@ Fine tuning the server send rate limiter |Pro| The ``fastdds.discovery_server.send_period`` property controls the minimum interval (in milliseconds) between consecutive flushes of accumulated discovery changes to the writer histories. When set to a positive integer value (e.g. ``"1000"`` for one second), the server -still processes incoming data on every routine iteration (triggered by -````), but defers the send step until at least that many milliseconds -have elapsed since the last flush. All changes that accumulate in that window are sent together -in one batch. +still processes incoming data on every routine iteration (triggered by ````), +but defers the send step until at least that many milliseconds have elapsed since the last flush. +All changes that accumulate in that window are sent together in one batch. This is useful in large-scale scenarios where many participants join simultaneously: without rate limiting, the server sends partial discovery data before all endpoints of a participant From 819080b98638b1cb31884d57868c3731c230166e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BCl?= Date: Wed, 18 Mar 2026 12:30:12 +0100 Subject: [PATCH 15/15] Fix link MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Raül --- docs/fastdds/discovery/discovery_server.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/fastdds/discovery/discovery_server.rst b/docs/fastdds/discovery/discovery_server.rst index 5fb563926..469276716 100644 --- a/docs/fastdds/discovery/discovery_server.rst +++ b/docs/fastdds/discovery/discovery_server.rst @@ -207,7 +207,7 @@ The default value for this period is 450 ms, but it can be configured to a diffe :lines: 2-3,5-16 :append: -... _DS_send_period: +.. _DS_send_period: Fine tuning the server send rate limiter |Pro| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^