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;