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

namelchev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new e1354da273a IGNITE-28010 Use MessageSerializer for 
SecurityAwareCustomMessageWrapper (#12829)
e1354da273a is described below

commit e1354da273a3d501dbc5e1114732bb357c7ab584
Author: Nikita Amelchev <[email protected]>
AuthorDate: Mon Mar 2 12:43:23 2026 +0300

    IGNITE-28010 Use MessageSerializer for SecurityAwareCustomMessageWrapper 
(#12829)
---
 .../discovery/DiscoveryMessageFactory.java         |  1 +
 .../SecurityAwareCustomMessageWrapper.java         | 76 ++++++++++++++++++++--
 .../NodeSecurityContextPropagationTest.java        | 17 +----
 3 files changed, 72 insertions(+), 22 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java
index 8255abdc2a8..20edf130db4 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/DiscoveryMessageFactory.java
@@ -126,5 +126,6 @@ public class DiscoveryMessageFactory implements 
MessageFactoryProvider {
 
         // DiscoveryCustomMessage
         factory.register((short)500, CacheStatisticsModeChangeMessage::new, 
new CacheStatisticsModeChangeMessageSerializer());
+        factory.register((short)501, SecurityAwareCustomMessageWrapper::new, 
new SecurityAwareCustomMessageWrapperSerializer());
     }
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/SecurityAwareCustomMessageWrapper.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/SecurityAwareCustomMessageWrapper.java
index 1b1b8ce62f1..c186fe02a1a 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/SecurityAwareCustomMessageWrapper.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/SecurityAwareCustomMessageWrapper.java
@@ -18,24 +18,52 @@
 package org.apache.ignite.internal.managers.discovery;
 
 import java.util.UUID;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteException;
+import org.apache.ignite.internal.Order;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.plugin.extensions.communication.Message;
+import org.apache.ignite.plugin.extensions.communication.MessageFactory;
 import org.apache.ignite.spi.discovery.DiscoverySpiCustomMessage;
 import org.jetbrains.annotations.Nullable;
 
+import static org.apache.ignite.marshaller.Marshallers.jdk;
+
 /** Custom message wrapper with ID of security subject that initiated the 
current message. */
-public class SecurityAwareCustomMessageWrapper extends 
DiscoverySpiCustomMessage {
+public class SecurityAwareCustomMessageWrapper extends 
DiscoverySpiCustomMessage implements Message {
     /** */
     private static final long serialVersionUID = 0L;
 
     /** Security subject ID. */
-    private final UUID secSubjId;
+    @Order(0)
+    UUID secSubjId;
 
     /** Original message. */
-    private final DiscoveryCustomMessage delegate;
+    private DiscoveryCustomMessage delegate;
+
+    /** */
+    @Order(1)
+    // TODO: Should be removed in 
https://issues.apache.org/jira/browse/IGNITE-27627
+    Message msg;
+
+    /** Serialized message bytes. */
+    // TODO: Should be removed in 
https://issues.apache.org/jira/browse/IGNITE-27627
+    @Order(value = 2, method = "messageBytes")
+    byte[] msgBytes;
+
+    /** Default constructor for {@link MessageFactory}. */
+    public SecurityAwareCustomMessageWrapper() {
+        // No-op.
+    }
 
     /** */
     public SecurityAwareCustomMessageWrapper(DiscoveryCustomMessage delegate, 
UUID secSubjId) {
         this.delegate = delegate;
         this.secSubjId = secSubjId;
+
+        if (delegate instanceof Message)
+            msg = (Message)delegate;
     }
 
     /** Gets security Subject ID. */
@@ -45,25 +73,59 @@ public class SecurityAwareCustomMessageWrapper extends 
DiscoverySpiCustomMessage
 
     /** {@inheritDoc} */
     @Override public boolean isMutable() {
-        return delegate.isMutable();
+        return delegate().isMutable();
     }
 
     /** {@inheritDoc} */
     @Override public boolean stopProcess() {
-        return delegate.stopProcess();
+        return delegate().stopProcess();
     }
 
     /**
      * @return Delegate.
      */
     public DiscoveryCustomMessage delegate() {
-        return delegate;
+        return msg != null ? (DiscoveryCustomMessage)msg : delegate;
     }
 
     /** {@inheritDoc} */
     @Override public @Nullable DiscoveryCustomMessage ackMessage() {
-        DiscoveryCustomMessage ack = delegate.ackMessage();
+        DiscoveryCustomMessage ack = delegate().ackMessage();
 
         return ack == null ? null : new SecurityAwareCustomMessageWrapper(ack, 
secSubjId);
     }
+
+    /** */
+    public byte[] messageBytes() {
+        if (delegate instanceof Message)
+            return null;
+
+        if (msgBytes != null)
+            return msgBytes;
+
+        try {
+            return msgBytes = U.marshal(jdk(), delegate);
+        }
+        catch (IgniteCheckedException e) {
+            throw new IgniteException(e);
+        }
+    }
+
+    /** */
+    public void messageBytes(byte[] msgBytes) {
+        if (F.isEmpty(msgBytes))
+            return;
+
+        try {
+            delegate = U.unmarshal(jdk(), msgBytes, U.gridClassLoader());
+        }
+        catch (IgniteCheckedException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override public short directType() {
+        return 501;
+    }
 }
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/security/NodeSecurityContextPropagationTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/security/NodeSecurityContextPropagationTest.java
index 81ce3e4dc58..c2d9d2dc5fc 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/security/NodeSecurityContextPropagationTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/security/NodeSecurityContextPropagationTest.java
@@ -28,7 +28,6 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Predicate;
 import org.apache.commons.lang3.reflect.FieldUtils;
-import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.configuration.DataRegionConfiguration;
 import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
@@ -57,6 +56,7 @@ import org.junit.Test;
 import static org.apache.ignite.events.EventType.EVT_NODE_LEFT;
 import static 
org.apache.ignite.internal.IgniteNodeAttributes.ATTR_IGNITE_INSTANCE_NAME;
 import static 
org.apache.ignite.internal.events.DiscoveryCustomEvent.EVT_DISCOVERY_CUSTOM_EVT;
+import static org.apache.ignite.testframework.GridTestUtils.getFieldValue;
 import static org.apache.ignite.testframework.GridTestUtils.runAsync;
 import static org.apache.ignite.testframework.GridTestUtils.waitForCondition;
 
@@ -186,20 +186,7 @@ public class NodeSecurityContextPropagationTest extends 
GridCommonAbstractTest {
             Object unwrappedMsg = msg;
 
             if (msg instanceof TcpDiscoveryCustomEventMessage) {
-                DiscoveryCustomMessage customMsg = U.field(msg, "msg");
-
-                if (customMsg == null) {
-                    try {
-                        customMsg = U.unmarshal(
-                            
ignite.context().marshallerContext().jdkMarshaller(),
-                            (byte[])U.field(msg, "msgBytes"),
-                            U.resolveClassLoader(ignite.configuration())
-                        );
-                    }
-                    catch (IgniteCheckedException e) {
-                        fail(e.getMessage());
-                    }
-                }
+                DiscoveryCustomMessage customMsg = getFieldValue(msg, 
"serMsg");
 
                 assert customMsg instanceof SecurityAwareCustomMessageWrapper;
 

Reply via email to