From 4265155e5a4408c5b0f222fc12f79b9033df5e2f Mon Sep 17 00:00:00 2001 From: Vladimir Steshin Date: Wed, 11 Mar 2026 18:02:26 +0300 Subject: [PATCH 1/4] impl --- .../org/apache/ignite/internal/GridTopic.java | 35 ++------- .../communication/GridIoMessageFactory.java | 3 + .../GridDeploymentCommunication.java | 22 ++---- .../deployment/GridDeploymentRequest.java | 69 ++++++------------ .../managers/deployment/T1TopicMessage.java | 72 +++++++++++++++++++ ...ntRequestOfUnknownClassProcessingTest.java | 14 ++-- 6 files changed, 114 insertions(+), 101 deletions(-) create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/T1TopicMessage.java diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java b/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java index eab5c01c28c6e..b3f8adffb944a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java @@ -24,6 +24,7 @@ import java.io.Serializable; import java.nio.charset.Charset; import java.util.UUID; +import org.apache.ignite.internal.managers.deployment.T1TopicMessage; import org.apache.ignite.internal.util.distributed.DistributedProcess; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; @@ -177,7 +178,7 @@ public enum GridTopic { * @param id Topic ID. * @return Grid message topic with specified ID. */ - public Object topic(IgniteUuid id) { + public T1 topic(IgniteUuid id) { return new T1(this, id); } @@ -253,16 +254,7 @@ public Object topic(String id1, UUID id2, int id3, long id4) { /** * */ - private static class T1 implements Externalizable { - /** */ - private static final long serialVersionUID = 0L; - - /** */ - private GridTopic topic; - - /** */ - private IgniteUuid id; - + public static class T1 extends T1TopicMessage { /** * No-arg constructor needed for {@link Serializable}. */ @@ -274,14 +266,13 @@ public T1() { * @param topic Topic. * @param id ID. */ - private T1(GridTopic topic, IgniteUuid id) { - this.topic = topic; - this.id = id; + public T1(GridTopic topic, IgniteUuid id) { + super(topic, id); } /** {@inheritDoc} */ @Override public int hashCode() { - return topic.ordinal() + id.hashCode(); + return topic().ordinal() + id().hashCode(); } /** {@inheritDoc} */ @@ -289,24 +280,12 @@ private T1(GridTopic topic, IgniteUuid id) { if (obj.getClass() == T1.class) { T1 that = (T1)obj; - return topic == that.topic && id.equals(that.id); + return topic() == that.topic() && id().equals(that.id()); } return false; } - /** {@inheritDoc} */ - @Override public void writeExternal(ObjectOutput out) throws IOException { - out.writeByte(topic.ordinal()); - U.writeIgniteUuid(out, id); - } - - /** {@inheritDoc} */ - @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { - topic = fromOrdinal(in.readByte()); - id = U.readIgniteUuid(in); - } - /** {@inheritDoc} */ @Override public String toString() { return S.toString(T1.class, this); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java index 6baea4e7684bb..eece14f28e87a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java @@ -57,6 +57,8 @@ import org.apache.ignite.internal.managers.deployment.GridDeploymentRequestSerializer; import org.apache.ignite.internal.managers.deployment.GridDeploymentResponse; import org.apache.ignite.internal.managers.deployment.GridDeploymentResponseSerializer; +import org.apache.ignite.internal.managers.deployment.T1TopicMessage; +import org.apache.ignite.internal.managers.deployment.T1TopicMessageSerializer; import org.apache.ignite.internal.managers.encryption.GenerateEncryptionKeyRequest; import org.apache.ignite.internal.managers.encryption.GenerateEncryptionKeyRequestSerializer; import org.apache.ignite.internal.managers.encryption.GenerateEncryptionKeyResponse; @@ -355,6 +357,7 @@ public class GridIoMessageFactory implements MessageFactoryProvider { // -54 is reserved for SQL. // We don't use the code‑generated serializer for CompressedMessage - serialization is highly customized. factory.register(CompressedMessage.TYPE_CODE, CompressedMessage::new); + factory.register((short)-67, T1TopicMessage::new, new T1TopicMessageSerializer()); factory.register((short)-66, ErrorMessage::new, new ErrorMessageSerializer()); factory.register((short)-65, TxInfo::new, new TxInfoSerializer()); factory.register((short)-64, TxEntriesInfo::new, new TxEntriesInfoSerializer()); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentCommunication.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentCommunication.java index 6de75ab20899c..692394f23f9b4 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentCommunication.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentCommunication.java @@ -29,6 +29,7 @@ import org.apache.ignite.events.DiscoveryEvent; import org.apache.ignite.events.Event; import org.apache.ignite.internal.GridKernalContext; +import org.apache.ignite.internal.GridTopic; import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException; import org.apache.ignite.internal.managers.communication.GridIoPolicy; import org.apache.ignite.internal.managers.communication.GridMessageListener; @@ -186,18 +187,6 @@ private void processResourceRequest(UUID nodeId, GridDeploymentRequest req) { if (log.isDebugEnabled()) log.debug("Received peer class/resource loading request [originatingNodeId=" + nodeId + ", req=" + req + ']'); - if (req.responseTopic() == null) { - try { - req.finishUnmarshal(marsh, U.resolveClassLoader(ctx.config())); - } - catch (IgniteCheckedException e) { - U.error(log, "Failed to process deployment request (will ignore) [" + - "originatingNodeId=" + nodeId + ", req=" + req + ']', e); - - return; - } - } - GridDeploymentResponse res = new GridDeploymentResponse(); GridDeployment dep = ctx.deploy().getDeployment(req.classLoaderId()); @@ -361,7 +350,7 @@ void sendUndeployRequest(String rsrcName, Collection rmtNodes) thro ctx.io().sendToGridTopic( rmtNodes, TOPIC_CLASSLOAD, - new GridDeploymentRequest(null, null, rsrcName, true), + new GridDeploymentRequest(rsrcName), GridIoPolicy.P2P_POOL); } } @@ -393,9 +382,9 @@ GridDeploymentResponse sendResourceRequest(final String rsrcName, IgniteUuid cls ", requesters=" + nodeIds + ']'); } - Object resTopic = TOPIC_CLASSLOAD.topic(IgniteUuid.fromUuid(ctx.localNodeId())); + GridTopic.T1 resTopic = TOPIC_CLASSLOAD.topic(IgniteUuid.fromUuid(ctx.localNodeId())); - GridDeploymentRequest req = new GridDeploymentRequest(resTopic, clsLdrId, rsrcName, false); + GridDeploymentRequest req = new GridDeploymentRequest(resTopic, clsLdrId, rsrcName); // Send node IDs chain with request. req.nodeIds(nodeIds); @@ -417,9 +406,6 @@ GridDeploymentResponse sendResourceRequest(final String rsrcName, IgniteUuid cls long start = U.currentTimeMillis(); - if (req.responseTopic() != null && !ctx.localNodeId().equals(dstNode.id())) - req.prepareMarshal(marsh); - ctx.io().sendToGridTopic(dstNode, TOPIC_CLASSLOAD, req, GridIoPolicy.P2P_POOL); if (log.isDebugEnabled()) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentRequest.java index 00890882e0590..905eb3f8083ae 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentRequest.java @@ -19,25 +19,21 @@ import java.util.Collection; import java.util.UUID; -import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.GridTopic; import org.apache.ignite.internal.Order; import org.apache.ignite.internal.util.tostring.GridToStringInclude; import org.apache.ignite.internal.util.typedef.internal.S; -import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lang.IgniteUuid; -import org.apache.ignite.marshaller.Marshaller; import org.apache.ignite.plugin.extensions.communication.Message; +import org.jetbrains.annotations.Nullable; /** * Deployment request. */ public class GridDeploymentRequest implements Message { /** Response topic. Response should be sent back to this topic. */ - private Object resTopic; - - /** Serialized topic. */ @Order(0) - byte[] resTopicBytes; + @Nullable T1TopicMessage topicMsg; /** Requested class name. */ @Order(1) @@ -45,14 +41,10 @@ public class GridDeploymentRequest implements Message { /** Class loader ID. */ @Order(2) - IgniteUuid ldrId; - - /** Undeploy flag. */ - @Order(3) - boolean isUndeploy; + @Nullable IgniteUuid ldrId; /** Nodes participating in request (chain). */ - @Order(4) + @Order(3) @GridToStringInclude Collection nodeIds; @@ -64,22 +56,25 @@ public GridDeploymentRequest() { } /** - * Creates new request. + * Creates deploy request. * - * @param resTopic Response topic. + * @param topic Response topic. * @param ldrId Class loader ID. * @param rsrcName Resource name that should be found and sent back. - * @param isUndeploy Undeploy property. */ - GridDeploymentRequest(Object resTopic, IgniteUuid ldrId, String rsrcName, boolean isUndeploy) { - assert isUndeploy || resTopic != null; - assert isUndeploy || ldrId != null; - assert rsrcName != null; - - this.resTopic = resTopic; + GridDeploymentRequest(GridTopic.T1 topic, IgniteUuid ldrId, String rsrcName) { + topicMsg = new T1TopicMessage(topic.topic(), topic.id()); this.ldrId = ldrId; this.rsrcName = rsrcName; - this.isUndeploy = isUndeploy; + } + + /** + * Creates undeploy request. + * + * @param rsrcName Resource name that should be found and sent back. + */ + GridDeploymentRequest(String rsrcName) { + this.rsrcName = rsrcName; } /** @@ -87,8 +82,8 @@ public GridDeploymentRequest() { * * @return Response topic name. */ - Object responseTopic() { - return resTopic; + @Nullable GridTopic.T1 responseTopic() { + return topicMsg == null ? null : new GridTopic.T1(topicMsg.topic, topicMsg.id); } /** @@ -105,7 +100,7 @@ public String resourceName() { * * @return Property class loader ID. */ - public IgniteUuid classLoaderId() { + public @Nullable IgniteUuid classLoaderId() { return ldrId; } @@ -115,7 +110,7 @@ public IgniteUuid classLoaderId() { * @return Property undeploy. */ public boolean isUndeploy() { - return isUndeploy; + return topicMsg == null; } /** @@ -134,26 +129,6 @@ public void nodeIds(Collection nodeIds) { this.nodeIds = nodeIds; } - /** - * @param marsh Marshaller. - */ - public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { - if (resTopic != null && resTopicBytes == null) - resTopicBytes = U.marshal(marsh, resTopic); - } - - /** - * @param marsh Marshaller. - * @param ldr Class loader. - */ - public void finishUnmarshal(Marshaller marsh, ClassLoader ldr) throws IgniteCheckedException { - if (resTopicBytes != null && resTopic == null) { - resTopic = U.unmarshal(marsh, resTopicBytes, ldr); - - resTopicBytes = null; - } - } - /** {@inheritDoc} */ @Override public short directType() { return 11; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/T1TopicMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/T1TopicMessage.java new file mode 100644 index 0000000000000..0eb5caf53cdcf --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/T1TopicMessage.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.internal.managers.deployment; + +import org.apache.ignite.internal.GridTopic; +import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.managers.communication.GridIoMessageFactory; +import org.apache.ignite.internal.util.typedef.internal.S; +import org.apache.ignite.lang.IgniteUuid; +import org.apache.ignite.plugin.extensions.communication.Message; + +/** + * Deployment request. + */ +public class T1TopicMessage implements Message { + /** */ + @Order(0) + GridTopic topic; + + /** */ + @Order(1) + IgniteUuid id; + + /** + * Default constructor for {@link GridIoMessageFactory}. + */ + public T1TopicMessage() { + // No-op. + } + + /** */ + public T1TopicMessage(GridTopic topic, IgniteUuid id) { + this.topic = topic; + this.id = id; + } + + /** */ + public GridTopic topic() { + return topic; + } + + /** */ + public IgniteUuid id() { + return id; + } + + /** {@inheritDoc} */ + @Override public short directType() { + return -67; + } + + + /** {@inheritDoc} */ + @Override public String toString() { + return S.toString(T1TopicMessage.class, this); + } +} diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/deployment/DeploymentRequestOfUnknownClassProcessingTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/deployment/DeploymentRequestOfUnknownClassProcessingTest.java index 356e81477b3de..6abf93cd8fcca 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/managers/deployment/DeploymentRequestOfUnknownClassProcessingTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/deployment/DeploymentRequestOfUnknownClassProcessingTest.java @@ -21,10 +21,12 @@ import java.util.UUID; import java.util.concurrent.TimeUnit; import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.internal.GridTopic; import org.apache.ignite.internal.IgniteEx; import org.apache.ignite.internal.managers.communication.GridIoPolicy; import org.apache.ignite.internal.managers.communication.GridMessageListener; import org.apache.ignite.internal.util.future.GridFutureAdapter; +import org.apache.ignite.lang.IgniteUuid; import org.apache.ignite.testframework.GridTestExternalClassLoader; import org.apache.ignite.testframework.ListeningTestLogger; import org.apache.ignite.testframework.LogListener; @@ -38,9 +40,6 @@ * Tests the processing of deployment request with an attempt to load a class with an unknown class name. */ public class DeploymentRequestOfUnknownClassProcessingTest extends GridCommonAbstractTest { - /** */ - private static final String TEST_TOPIC_NAME = "TEST_TOPIC_NAME"; - /** */ private static final String UNKNOWN_CLASS_NAME = "unknown.UnknownClassName"; @@ -100,7 +99,9 @@ public void testResponseReceivingOnDeploymentRequestOfUnknownClass() throws Exce remNodeLog.registerListener(remNodeLogLsnr); - locNode.context().io().addMessageListener(TEST_TOPIC_NAME, new GridMessageListener() { + GridTopic.T1 topic = TOPIC_CLASSLOAD.topic(IgniteUuid.fromUuid(locNode.localNode().id())); + + locNode.context().io().addMessageListener(topic, new GridMessageListener() { @Override public void onMessage(UUID nodeId, Object msg, byte plc) { try { assertTrue(msg instanceof GridDeploymentResponse); @@ -124,10 +125,7 @@ public void testResponseReceivingOnDeploymentRequestOfUnknownClass() throws Exce } }); - GridDeploymentRequest req = new GridDeploymentRequest(TEST_TOPIC_NAME, locDep.classLoaderId(), - UNKNOWN_CLASS_NAME, false); - - req.prepareMarshal(locNode.context().marshaller()); + GridDeploymentRequest req = new GridDeploymentRequest(topic, locDep.classLoaderId(), UNKNOWN_CLASS_NAME); locNode.context().io().sendToGridTopic(remNode.localNode(), TOPIC_CLASSLOAD, req, GridIoPolicy.P2P_POOL); From 2674b93f8996ebbeed3b851b188a6b91dd3dc31a Mon Sep 17 00:00:00 2001 From: Vladimir Steshin Date: Wed, 11 Mar 2026 18:24:19 +0300 Subject: [PATCH 2/4] reimpl --- .../org/apache/ignite/internal/GridTopic.java | 35 +++++---- .../communication/GridIoMessageFactory.java | 3 - .../GridDeploymentCommunication.java | 2 +- .../deployment/GridDeploymentRequest.java | 26 ++++--- .../managers/deployment/T1TopicMessage.java | 72 ------------------- 5 files changed, 40 insertions(+), 98 deletions(-) delete mode 100644 modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/T1TopicMessage.java diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java b/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java index b3f8adffb944a..0795b0865b59f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/GridTopic.java @@ -24,7 +24,6 @@ import java.io.Serializable; import java.nio.charset.Charset; import java.util.UUID; -import org.apache.ignite.internal.managers.deployment.T1TopicMessage; import org.apache.ignite.internal.util.distributed.DistributedProcess; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; @@ -251,28 +250,36 @@ public Object topic(String id1, UUID id2, int id3, long id4) { return new T7(this, UUID.nameUUIDFromBytes(id1.getBytes(DFLT_CHARSET)), id2, id3, id4); } - /** - * - */ - public static class T1 extends T1TopicMessage { - /** - * No-arg constructor needed for {@link Serializable}. - */ - public T1() { - // No-op. - } + /** */ + public static class T1 { + /** */ + private GridTopic topic; + + /** */ + private IgniteUuid id; /** * @param topic Topic. * @param id ID. */ public T1(GridTopic topic, IgniteUuid id) { - super(topic, id); + this.topic = topic; + this.id = id; + } + + /** */ + public GridTopic topic() { + return topic; + } + + /** */ + public IgniteUuid id() { + return id; } /** {@inheritDoc} */ @Override public int hashCode() { - return topic().ordinal() + id().hashCode(); + return topic.ordinal() + id.hashCode(); } /** {@inheritDoc} */ @@ -280,7 +287,7 @@ public T1(GridTopic topic, IgniteUuid id) { if (obj.getClass() == T1.class) { T1 that = (T1)obj; - return topic() == that.topic() && id().equals(that.id()); + return topic == that.topic && id.equals(that.id); } return false; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java index eece14f28e87a..6baea4e7684bb 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java @@ -57,8 +57,6 @@ import org.apache.ignite.internal.managers.deployment.GridDeploymentRequestSerializer; import org.apache.ignite.internal.managers.deployment.GridDeploymentResponse; import org.apache.ignite.internal.managers.deployment.GridDeploymentResponseSerializer; -import org.apache.ignite.internal.managers.deployment.T1TopicMessage; -import org.apache.ignite.internal.managers.deployment.T1TopicMessageSerializer; import org.apache.ignite.internal.managers.encryption.GenerateEncryptionKeyRequest; import org.apache.ignite.internal.managers.encryption.GenerateEncryptionKeyRequestSerializer; import org.apache.ignite.internal.managers.encryption.GenerateEncryptionKeyResponse; @@ -357,7 +355,6 @@ public class GridIoMessageFactory implements MessageFactoryProvider { // -54 is reserved for SQL. // We don't use the code‑generated serializer for CompressedMessage - serialization is highly customized. factory.register(CompressedMessage.TYPE_CODE, CompressedMessage::new); - factory.register((short)-67, T1TopicMessage::new, new T1TopicMessageSerializer()); factory.register((short)-66, ErrorMessage::new, new ErrorMessageSerializer()); factory.register((short)-65, TxInfo::new, new TxInfoSerializer()); factory.register((short)-64, TxEntriesInfo::new, new TxEntriesInfoSerializer()); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentCommunication.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentCommunication.java index 692394f23f9b4..c83d39e4bf90d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentCommunication.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentCommunication.java @@ -138,7 +138,7 @@ private void processDeploymentRequest(UUID nodeId, Object msg) { try { GridDeploymentRequest req = (GridDeploymentRequest)msg; - if (req.isUndeploy()) + if (req.undeploy()) processUndeployRequest(nodeId, req); else { assert activeReqNodeIds.get() == null; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentRequest.java index 905eb3f8083ae..31484637bed7e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentRequest.java @@ -32,19 +32,24 @@ */ public class GridDeploymentRequest implements Message { /** Response topic. Response should be sent back to this topic. */ + /** */ @Order(0) - @Nullable T1TopicMessage topicMsg; + @Nullable GridTopic topic; - /** Requested class name. */ + /** */ @Order(1) + @Nullable IgniteUuid topicId; + + /** Requested class name. */ + @Order(2) String rsrcName; /** Class loader ID. */ - @Order(2) + @Order(3) @Nullable IgniteUuid ldrId; /** Nodes participating in request (chain). */ - @Order(3) + @Order(4) @GridToStringInclude Collection nodeIds; @@ -63,7 +68,8 @@ public GridDeploymentRequest() { * @param rsrcName Resource name that should be found and sent back. */ GridDeploymentRequest(GridTopic.T1 topic, IgniteUuid ldrId, String rsrcName) { - topicMsg = new T1TopicMessage(topic.topic(), topic.id()); + this.topic = topic.topic(); + topicId = topic.id(); this.ldrId = ldrId; this.rsrcName = rsrcName; } @@ -83,7 +89,9 @@ public GridDeploymentRequest() { * @return Response topic name. */ @Nullable GridTopic.T1 responseTopic() { - return topicMsg == null ? null : new GridTopic.T1(topicMsg.topic, topicMsg.id); + assert topic == null && topicId == null || topic != null && topicId != null; + + return topic == null ? null : new GridTopic.T1(topic, topicId); } /** @@ -109,8 +117,10 @@ public String resourceName() { * * @return Property undeploy. */ - public boolean isUndeploy() { - return topicMsg == null; + public boolean undeploy() { + assert topic == null && topicId == null || topic != null && topicId != null; + + return topic == null; } /** diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/T1TopicMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/T1TopicMessage.java deleted file mode 100644 index 0eb5caf53cdcf..0000000000000 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/T1TopicMessage.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.ignite.internal.managers.deployment; - -import org.apache.ignite.internal.GridTopic; -import org.apache.ignite.internal.Order; -import org.apache.ignite.internal.managers.communication.GridIoMessageFactory; -import org.apache.ignite.internal.util.typedef.internal.S; -import org.apache.ignite.lang.IgniteUuid; -import org.apache.ignite.plugin.extensions.communication.Message; - -/** - * Deployment request. - */ -public class T1TopicMessage implements Message { - /** */ - @Order(0) - GridTopic topic; - - /** */ - @Order(1) - IgniteUuid id; - - /** - * Default constructor for {@link GridIoMessageFactory}. - */ - public T1TopicMessage() { - // No-op. - } - - /** */ - public T1TopicMessage(GridTopic topic, IgniteUuid id) { - this.topic = topic; - this.id = id; - } - - /** */ - public GridTopic topic() { - return topic; - } - - /** */ - public IgniteUuid id() { - return id; - } - - /** {@inheritDoc} */ - @Override public short directType() { - return -67; - } - - - /** {@inheritDoc} */ - @Override public String toString() { - return S.toString(T1TopicMessage.class, this); - } -} From 72f6b18fff60b27aed7c131279a07722d29cdcbf Mon Sep 17 00:00:00 2001 From: Vladimir Steshin Date: Fri, 13 Mar 2026 21:33:09 +0300 Subject: [PATCH 3/4] fix --- modules/core/src/main/resources/META-INF/classnames.properties | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/core/src/main/resources/META-INF/classnames.properties b/modules/core/src/main/resources/META-INF/classnames.properties index 501daa170d1fd..bda798f48b0cd 100644 --- a/modules/core/src/main/resources/META-INF/classnames.properties +++ b/modules/core/src/main/resources/META-INF/classnames.properties @@ -232,7 +232,6 @@ org.apache.ignite.internal.GridTaskCancelRequest org.apache.ignite.internal.GridTaskNameHashKey org.apache.ignite.internal.GridTaskSessionRequest org.apache.ignite.internal.GridTopic -org.apache.ignite.internal.GridTopic$T1 org.apache.ignite.internal.GridTopic$T2 org.apache.ignite.internal.GridTopic$T3 org.apache.ignite.internal.GridTopic$T4 From 89b5ac8b1f9f721ed36df8bfe0506c6bf2607343 Mon Sep 17 00:00:00 2001 From: Vladimir Steshin Date: Fri, 13 Mar 2026 22:29:01 +0300 Subject: [PATCH 4/4] fix --- .../ignite/internal/GridTopicExternalizableSelfTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/GridTopicExternalizableSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/GridTopicExternalizableSelfTest.java index d34f1461c1ad4..41d69815aa568 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/GridTopicExternalizableSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/GridTopicExternalizableSelfTest.java @@ -53,9 +53,11 @@ public void testSerializationTopicCreatedByIgniteUuid() throws Exception { info("Test GridTopic externalization [marshaller=" + marsh + ']'); for (GridTopic topic : GridTopic.values()) { - Externalizable msgOut = (Externalizable)topic.topic(A_IGNITE_UUID); + if (topic.topic(A_IGNITE_UUID) instanceof Externalizable) { + Externalizable msgOut = (Externalizable)topic.topic(A_IGNITE_UUID); - assertEquals(msgOut, GridTestIoUtils.externalize(msgOut, marsh)); + assertEquals(msgOut, GridTestIoUtils.externalize(msgOut, marsh)); + } } } }