[OpenNMS/opennms] da1ad4: NMS-6400: Make ordered delivery opt-in rather than...
Marshall Massengill via opennms-cvs <[email protected]>
| Newsgroups | gmane.network.opennms.cvs |
|---|---|
| Message-ID | <OpenNMS/opennms/push/refs/heads/mm/NMS-6400-smoke/[email protected]> |
Branch: refs/heads/mm/NMS-6400-smoke
Home: https://github.com/OpenNMS/opennms
Commit: da1ad43f0f7d79ac3317a5ed183ac9964122362b
https://github.com/OpenNMS/opennms/commit/da1ad43f0f7d79ac3317a5ed183ac9964122362b
Author: Marshall Massengill <[email protected]>
Date: 2026-08-26 (Wed, 26 Aug 2026)
Changed paths:
M docs/modules/operation/pages/deep-dive/events/sources/syslog.adoc
M features/events/syslog/blueprint-syslog-listener-camel-netty.xml
M features/events/syslog/blueprint-syslog-listener-javanet.xml
M features/events/syslog/src/main/java/org/opennms/netmgt/syslogd/SyslogTcpListener.java
M features/events/syslog/src/test/java/org/opennms/netmgt/syslogd/SyslogTcpListenerDispatchIT.java
M features/events/syslog/src/test/java/org/opennms/netmgt/syslogd/SyslogdMultiListenerIT.java
M features/events/syslog/src/test/java/org/opennms/netmgt/syslogd/SyslogdReceiverNettyTcpIT.java
M opennms-base-assembly/src/main/filtered/etc/syslogd-configuration.xml
M opennms-config-model/src/main/java/org/opennms/netmgt/config/syslogd/SyslogTcpConfig.java
M opennms-config-model/src/main/resources/xsds/syslog.xsd
M opennms-config-model/src/test/java/org/opennms/netmgt/config/syslogd/SyslogdConfigurationTest.java
M opennms-container/minion/CONFD_README.md
Log Message:
-----------
NMS-6400: Make ordered delivery opt-in rather than the default
Holding one message per connection at the sink and waiting for it to be confirmed
was measured at roughly 53 messages a second per connection against the shipped
batch-size, where not waiting measured roughly 21500. A batch that does not fill
waits out batch-interval, and every message pays that.
What the wait buys is real. Aggregator.aggregate() appends under a non-fair striped
lock keyed on the source address, so two of the dispatcher's drain threads can
invert a pair whatever order they took them off the queue, and syslog has no
sequence number to repair it with. One message in flight keeps a connection out of
that race.
But that is the same dispatcher, drain pool and aggregator the UDP listener uses,
and both transports share one AsyncDispatcher, so syslog over UDP has always had
the same exposure and nothing compensates for it. TCP was the only path paying two
orders of magnitude for a guarantee nothing else offers.
So ordered is now an attribute on the tcp element, off by default, and
dispatch-timeout only applies when it is set. Unordered resumes reading when the
sink accepts a message and only watches the future to log a failure, which also
makes it immune to the reloaded-Minion case where the sink completes the wrong
futures.
No test can fail for want of ordering, because the race is a lock race that does
not reproduce on demand: the two 200 message ordering tests passed in both modes,
so they were never protecting it. The mechanism is pinned instead. Ordered never
leaves two of a connection's messages unconfirmed at the sink, the default does,
and the default carries a burst through a sink that never confirms anything.
Also adds the first test to leave batch-size at its default. Every other one sets
it to 1, which makes each message its own batch and is why none of this surfaced.
To unsubscribe from these emails, change your notification settings at https://github.com/OpenNMS/opennms/settings/notifications
_______________________________________________
Please read the OpenNMS Mailing List FAQ:
http://www.opennms.org/wiki/index.php?page=MailingListFaq
opennms-cvs mailing list
To *unsubscribe* or change your subscription options, see the bottom of this page:
https://lists.sourceforge.net/lists/listinfo/opennms-cvs