From 9e8bd8d694d82ec117c2c4a89c5d1aab2e52af94 Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Fri, 25 Sep 2026 14:30:27 +0000
Subject: [PATCH] [#1080] Give back the send-window permit of an update the writer drops, and count only what it sends (#1106)

---
 opendj-server-legacy/src/main/java/org/opends/server/replication/server/ServerWriter.java |   21 +++++++++++++++------
 1 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/replication/server/ServerWriter.java b/opendj-server-legacy/src/main/java/org/opends/server/replication/server/ServerWriter.java
index 9f68e4b..fb16ac6 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/replication/server/ServerWriter.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/replication/server/ServerWriter.java
@@ -115,21 +115,30 @@
            * ReplicationServerDomain.put() applied when it queued the message, so a peer RS can
            * be given a message this drops - the shutdown must stop waiting for a forward which
            * will never be reported.
+           * <p>
+           * The permit take() charged it is given back as well, whichever filter dropped it: the
+           * server never receives it, so no credit will ever come for it, and nor is it counted
+           * as sent (issue #1080).
            */
+          handler.releasePermitInSendWindow();
           if (updateMsg instanceof ReplicaOfflineMsg && !handler.isDataServer())
           {
             dsrsShutdownSync.replicaOfflineMsgNotForwarded(
                 replicationServerDomain.getBaseDN(), handler.getServerId());
           }
         }
-        else if (updateMsg instanceof ReplicaOfflineMsg && !handler.isDataServer())
-        {
-          forwardReplicaOfflineMsg((ReplicaOfflineMsg) updateMsg);
-        }
         else
         {
-          // Publish the update to the remote server using a protocol version it supports
-          session.publish(updateMsg);
+          handler.countSentUpdate(updateMsg);
+          if (updateMsg instanceof ReplicaOfflineMsg && !handler.isDataServer())
+          {
+            forwardReplicaOfflineMsg((ReplicaOfflineMsg) updateMsg);
+          }
+          else
+          {
+            // Publish the update to the remote server using a protocol version it supports
+            session.publish(updateMsg);
+          }
         }
       }
     }

--
Gitblit v1.10.0