This is an automated email from the ASF dual-hosted git repository.

clebertsuconic pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/main by this push:
     new 3101ac59e0 ARTEMIS-5107 using wrong value in 
ReplicationStartSyncMessage ctor
3101ac59e0 is described below

commit 3101ac59e09c8722f5afc378162a07f518fc7fe9
Author: Justin Bertram <[email protected]>
AuthorDate: Wed Jan 15 13:02:21 2025 -0600

    ARTEMIS-5107 using wrong value in ReplicationStartSyncMessage ctor
    
    The incorrect value has always been used for the `beforeTwoEighteen`
    variable. However, this is not actually a problem because the
    `beforeTwoEighteen` variable is not necessary. It's only job is to
    prevent newer versions from sending extra data to older versions.
    However, older version will simply ignore the extra data which means
    the `beforeTwoEighteen` variable can be removed completely.
    
    This same compatibility pattern is used in many places for the Core
    protocol.
    
    The tests added with the original fix successfully reproduced the
    original problem and those tests still pass even with this variable
    removed. Also, keep in mind that `decodeRest` is still checking the
    version so that it doesn't try to read data that doesn't exist from an
    older version.
---
 .../artemis/core/protocol/ServerPacketDecoder.java |  2 +-
 .../wireformat/ReplicationStartSyncMessage.java    | 31 +++++++---------------
 .../core/replication/ReplicationManager.java       |  6 ++---
 3 files changed, 13 insertions(+), 26 deletions(-)

diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/ServerPacketDecoder.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/ServerPacketDecoder.java
index ed418927d8..9475c4c491 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/ServerPacketDecoder.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/ServerPacketDecoder.java
@@ -224,7 +224,7 @@ public class ServerPacketDecoder extends 
ClientPacketDecoder {
             break;
          }
          case PacketImpl.REPLICATION_START_FINISH_SYNC: {
-            packet = new 
ReplicationStartSyncMessage(connection.isBeforeTwoEighteen());
+            packet = new ReplicationStartSyncMessage();
             break;
          }
          case PacketImpl.REPLICATION_SYNC_FILE: {
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/ReplicationStartSyncMessage.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/ReplicationStartSyncMessage.java
index a82b285a12..cd601bb840 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/ReplicationStartSyncMessage.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/ReplicationStartSyncMessage.java
@@ -40,10 +40,6 @@ public class ReplicationStartSyncMessage extends PacketImpl {
    private String nodeID;
    private boolean allowsAutoFailBack;
 
-   // this is for version compatibility
-   // certain versions will need to interrupt encoding and decoding after 
synchronizationIsFinished on the encoding depending on its value
-   private final boolean beforeTwoEighteen;
-
    public enum SyncDataType {
       
JournalBindings(AbstractJournalStorageManager.JournalContent.BINDINGS.typeByte),
       
JournalMessages(AbstractJournalStorageManager.JournalContent.MESSAGES.typeByte),
@@ -74,13 +70,12 @@ public class ReplicationStartSyncMessage extends PacketImpl 
{
       }
    }
 
-   public ReplicationStartSyncMessage(boolean beforeTwoEighteen) {
+   public ReplicationStartSyncMessage() {
       super(REPLICATION_START_FINISH_SYNC);
-      this.beforeTwoEighteen = synchronizationIsFinished;
    }
 
-   public ReplicationStartSyncMessage(boolean beforeTwoEighteen, List<Long> 
filenames) {
-      this(beforeTwoEighteen);
+   public ReplicationStartSyncMessage(List<Long> filenames) {
+      this();
       ids = new long[filenames.size()];
       for (int i = 0; i < filenames.size(); i++) {
          ids[i] = filenames.get(i);
@@ -90,24 +85,20 @@ public class ReplicationStartSyncMessage extends PacketImpl 
{
    }
 
 
-   public ReplicationStartSyncMessage(boolean beforeTwoEighteen, String 
nodeID, long nodeDataVersion) {
-      this(beforeTwoEighteen, nodeID);
+   public ReplicationStartSyncMessage(String nodeID, long nodeDataVersion) {
+      this();
+      synchronizationIsFinished = true;
+      this.nodeID = nodeID;
       ids = new long[1];
       ids[0] = nodeDataVersion;
       dataType = SyncDataType.ActivationSequence;
    }
 
-   public ReplicationStartSyncMessage(boolean beforeTwoEighteen, String 
nodeID) {
-      this(beforeTwoEighteen);
-      synchronizationIsFinished = true;
-      this.nodeID = nodeID;
-   }
-
-   public ReplicationStartSyncMessage(boolean beforeTwoEighteen, JournalFile[] 
datafiles,
+   public ReplicationStartSyncMessage(JournalFile[] datafiles,
                                       
AbstractJournalStorageManager.JournalContent contentType,
                                       String nodeID,
                                       boolean allowsAutoFailBack) {
-      this(beforeTwoEighteen);
+      this();
       this.nodeID = nodeID;
       this.allowsAutoFailBack = allowsAutoFailBack;
       synchronizationIsFinished = false;
@@ -148,10 +139,6 @@ public class ReplicationStartSyncMessage extends 
PacketImpl {
       buffer.writeBoolean(synchronizationIsFinished);
       buffer.writeBoolean(allowsAutoFailBack);
       buffer.writeString(nodeID);
-      if (beforeTwoEighteen && synchronizationIsFinished) {
-         // At this point, pre 2.18.0 servers don't expect any more data to 
come.
-         return;
-      }
       buffer.writeByte(dataType.code);
       buffer.writeInt(ids.length);
       for (long id : ids) {
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/replication/ReplicationManager.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/replication/ReplicationManager.java
index 2e97840d4c..5d61b35e8f 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/replication/ReplicationManager.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/replication/ReplicationManager.java
@@ -800,7 +800,7 @@ public final class ReplicationManager implements 
ActiveMQComponent {
                                     String nodeID,
                                     boolean allowsAutoFailBack) throws 
ActiveMQException {
       if (started)
-         sendReplicatePacket(new 
ReplicationStartSyncMessage(remotingConnection.isBeforeTwoEighteen(), 
datafiles, contentType, nodeID, allowsAutoFailBack));
+         sendReplicatePacket(new ReplicationStartSyncMessage(datafiles, 
contentType, nodeID, allowsAutoFailBack));
    }
 
    /**
@@ -819,7 +819,7 @@ public final class ReplicationManager implements 
ActiveMQComponent {
          }
 
          synchronizationIsFinishedAcknowledgement.countUp();
-         sendReplicatePacket(new 
ReplicationStartSyncMessage(remotingConnection.isBeforeTwoEighteen(), nodeID, 
server.getNodeManager().getNodeActivationSequence()));
+         sendReplicatePacket(new ReplicationStartSyncMessage(nodeID, 
server.getNodeManager().getNodeActivationSequence()));
          try {
             if 
(!synchronizationIsFinishedAcknowledgement.await(initialReplicationSyncTimeout))
 {
                ActiveMQReplicationTimeooutException exception = 
ActiveMQMessageBundle.BUNDLE.replicationSynchronizationTimeout(initialReplicationSyncTimeout);
@@ -864,7 +864,7 @@ public final class ReplicationManager implements 
ActiveMQComponent {
       idsToSend = new ArrayList<>(largeMessages.keySet());
 
       if (started)
-         sendReplicatePacket(new 
ReplicationStartSyncMessage(remotingConnection.isBeforeTwoEighteen(), 
idsToSend));
+         sendReplicatePacket(new ReplicationStartSyncMessage(idsToSend));
    }
 
    /**


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact


Reply via email to