Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
6bfa294
Deployment descriptor: resolve by the descriptor itself
anton-vinogradov Aug 5, 2026
4814601
Deployment descriptor: carry it whole in the event request
anton-vinogradov Aug 5, 2026
bc30742
Deployment descriptor: carry it whole in the user message
anton-vinogradov Aug 5, 2026
6e50b15
Deployment descriptor: carry it whole in the streamer request
anton-vinogradov Aug 5, 2026
69cdb79
Deployment descriptor: carry it whole in the job request
anton-vinogradov Aug 5, 2026
2a2839e
IGNITE-28528 Resolve the deployment class loader in generated marshal…
anton-vinogradov Aug 6, 2026
1c04395
IGNITE-28528 Self-review fixes
anton-vinogradov Aug 6, 2026
9f69ae4
IGNITE-28528 Keep the node filter off the socket-reading thread
anton-vinogradov Aug 6, 2026
166f25b
IGNITE-28528 Let the discovery layer defer unmarshalling
anton-vinogradov Aug 6, 2026
ed22879
IGNITE-28528 Keep the start request in the form it arrived
anton-vinogradov Aug 6, 2026
66c9d94
IGNITE-28528 State that the start request is passed on
anton-vinogradov Aug 6, 2026
23aca18
IGNITE-28528 Drop the forwarded-message marker
anton-vinogradov Aug 6, 2026
5e87345
Merge remote-tracking branch 'origin/master' into ignite-deployment-d…
anton-vinogradov Aug 8, 2026
58a3d33
IGNITE-28528 Self-review fixes
anton-vinogradov Aug 8, 2026
4b2985b
IGNITE-28528 Indent the generated loader resolution through the gener…
anton-vinogradov Aug 8, 2026
528b04f
IGNITE-28528 Rename GridDeploymentInfoBean to GridDeploymentInfoMessage
anton-vinogradov Aug 8, 2026
556ca2d
IGNITE-28528 Resolve the deployment loader regardless of what the cal…
anton-vinogradov Aug 8, 2026
7454525
Checkstyle autofix by Ignite PR Checker (requested via PR command)
anton-vinogradov Aug 8, 2026
e77db5c
IGNITE-28528 Keep the start request off the generated marshaller
anton-vinogradov Aug 9, 2026
a5154b8
Merge remote-tracking branch 'own/ignite-deployment-descriptor' into …
anton-vinogradov Aug 9, 2026
4f87ac3
IGNITE-28528 Fix the DeploymentAware javadoc
anton-vinogradov Aug 9, 2026
e906052
IGNITE-28528 Review: drop the unused sender node id, name the invariant
anton-vinogradov Aug 9, 2026
6150890
IGNITE-28528 Pass the sending node to the deployment resolution
anton-vinogradov Aug 9, 2026
a0b9e9b
IGNITE-28528 Let the deployment resolution take no deployment
anton-vinogradov Aug 9, 2026
057f5cc
Merge remote-tracking branch 'origin/master' into ignite-deployment-d…
anton-vinogradov Aug 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
import org.apache.ignite.internal.managers.communication.IgniteIoTestMessage;
import org.apache.ignite.internal.managers.communication.IgniteMessageFactory;
import org.apache.ignite.internal.managers.communication.SessionChannelMessage;
import org.apache.ignite.internal.managers.deployment.GridDeploymentInfoBean;
import org.apache.ignite.internal.managers.deployment.GridDeploymentInfoMessage;
import org.apache.ignite.internal.managers.deployment.GridDeploymentRequest;
import org.apache.ignite.internal.managers.deployment.GridDeploymentResponse;
import org.apache.ignite.internal.managers.encryption.ChangeCacheEncryptionRequest;
Expand Down Expand Up @@ -686,7 +686,7 @@ public CoreMessagesProvider(Marshaller dfltMarsh, Marshaller schemaAwareMarsh) {

// [12200 - 12300]: Binary, classloading and marshalling messages.
msgIdx = 12200;
register(GridDeploymentInfoBean.class);
register(GridDeploymentInfoMessage.class);
register(GridDeploymentRequest.class);
register(GridDeploymentResponse.class);
register(MissingMappingRequestMessage.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
import org.apache.ignite.internal.managers.deployment.GridDeployment;
import org.apache.ignite.internal.managers.deployment.GridDeploymentInfo;
import org.apache.ignite.internal.managers.deployment.GridDeploymentInfoBean;
import org.apache.ignite.internal.managers.deployment.GridDeploymentInfoMessage;
import org.apache.ignite.internal.managers.deployment.P2PClassLoadingIssues;
import org.apache.ignite.internal.managers.eventstorage.GridLocalEventListener;
import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
Expand Down Expand Up @@ -403,7 +403,7 @@ private boolean filterDropsEvent(Event evt) {
if (dep == null)
throw new IgniteDeploymentCheckedException("Failed to deploy event filter: " + filter);

depInfo = new GridDeploymentInfoBean(dep);
depInfo = new GridDeploymentInfoMessage(dep);

filterBytes = U.marshal(ctx.marshaller(), filter);
}
Expand All @@ -417,11 +417,7 @@ private boolean filterDropsEvent(Event evt) {

if (filterBytes != null) {
try {
GridDeployment dep = ctx.deploy().getGlobalDeployment(depInfo.deployMode(), clsName, clsName,
depInfo.userVersion(), nodeId, depInfo.classLoaderId(), depInfo.participants(), null);

if (dep == null)
throw new IgniteDeploymentCheckedException("Failed to obtain deployment for class: " + clsName);
GridDeployment dep = ctx.deploy().globalDeployment(depInfo, clsName, nodeId);

filter = U.unmarshal(ctx, filterBytes, U.resolveClassLoader(dep.classLoader(), ctx.config()));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@
import org.apache.ignite.cluster.ClusterNode;
import org.apache.ignite.compute.ComputeJob;
import org.apache.ignite.compute.ComputeJobSibling;
import org.apache.ignite.configuration.DeploymentMode;
import org.apache.ignite.internal.managers.deployment.GridDeploymentInfo;
import org.apache.ignite.internal.managers.deployment.GridDeploymentInfoMessage;
import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
import org.apache.ignite.internal.util.tostring.GridToStringExclude;
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.IgnitePredicate;
Expand Down Expand Up @@ -70,22 +70,17 @@ public class GridJobExecuteRequest implements ExecutorAwareMessage, DeferredUnma
@Order(5)
String taskName;

/** */
/** Deployment of the task classes. */
@Order(6)
String userVer;
GridDeploymentInfoMessage depInfo;

/** */
@Order(7)
String taskClsName;

/** Node class loader participants. */
@GridToStringInclude
@Order(8)
Map<UUID, IgniteUuid> ldrParticipants;

/** */
@GridToStringExclude
@Order(9)
@Order(8)
byte[] sesAttrsBytes;

/** */
Expand All @@ -95,7 +90,7 @@ public class GridJobExecuteRequest implements ExecutorAwareMessage, DeferredUnma

/** */
@GridToStringExclude
@Order(10)
@Order(9)
byte[] jobAttrsBytes;

/** */
Expand All @@ -104,70 +99,62 @@ public class GridJobExecuteRequest implements ExecutorAwareMessage, DeferredUnma
Map<? extends Serializable, ? extends Serializable> jobAttrs;

/** Checkpoint SPI name. */
@Order(11)
@Order(10)
String cpSpi;

/** Left unset for a continuous task: such a job requests its siblings from the task node instead. */
@Marshalled("siblingsBytes")
Collection<ComputeJobSibling> siblings;

/** */
@Order(12)
@Order(11)
byte[] siblingsBytes;

/** Transient since needs to hold local creation time. */
private final long createTime = U.currentTimeMillis();

/** */
@Order(13)
IgniteUuid clsLdrId;

/** */
@Order(14)
DeploymentMode depMode;

/** */
@Order(15)
@Order(12)
boolean dynamicSiblings;

/** */
@Order(16)
@Order(13)
boolean forceLocDep;

/** */
@Order(17)
@Order(14)
boolean sesFullSup;

/** */
@Order(18)
@Order(15)
boolean internal;

/** */
@Order(19)
@Order(16)
Collection<UUID> top;

/** */
@Marshalled("topPredBytes")
IgnitePredicate<ClusterNode> topPred;

/** */
@Order(20)
@Order(17)
byte[] topPredBytes;

/** */
@Order(21)
@Order(18)
int[] cacheIds;

/** */
@Order(22)
@Order(19)
int part;

/** */
@Order(23)
@Order(20)
AffinityTopologyVersion topVer;

/** */
@Order(24)
@Order(21)
String execName;

/**
Expand All @@ -181,7 +168,7 @@ public GridJobExecuteRequest() {
* @param sesId Task session ID.
* @param jobId Job ID.
* @param taskName Task name.
* @param userVer Code version.
* @param depInfo Deployment of the task classes.
* @param taskClsName Fully qualified task name.
* @param job Job.
* @param startTaskTime Task execution start time.
Expand All @@ -192,10 +179,7 @@ public GridJobExecuteRequest() {
* @param sesAttrs Session attributes.
* @param jobAttrs Job attributes.
* @param cpSpi Collision SPI.
* @param clsLdrId Task local class loader id.
* @param depMode Task deployment mode.
* @param dynamicSiblings {@code True} if siblings are dynamic.
* @param ldrParticipants Other node class loader IDs that can also load classes.
* @param forceLocDep {@code True} If remote node should ignore deployment settings.
* @param sesFullSup {@code True} if session attributes are disabled.
* @param internal {@code True} if internal job.
Expand All @@ -208,7 +192,7 @@ public GridJobExecuteRequest(
IgniteUuid sesId,
IgniteUuid jobId,
String taskName,
String userVer,
GridDeploymentInfo depInfo,
String taskClsName,
ComputeJob job,
long startTaskTime,
Expand All @@ -219,10 +203,7 @@ public GridJobExecuteRequest(
Map<Object, Object> sesAttrs,
Map<? extends Serializable, ? extends Serializable> jobAttrs,
String cpSpi,
IgniteUuid clsLdrId,
DeploymentMode depMode,
boolean dynamicSiblings,
Map<UUID, IgniteUuid> ldrParticipants,
boolean forceLocDep,
boolean sesFullSup,
boolean internal,
Expand All @@ -238,14 +219,12 @@ public GridJobExecuteRequest(
assert sesAttrs != null || !sesFullSup;
assert jobAttrs != null;
assert top != null || topPred != null;
assert clsLdrId != null;
assert userVer != null;
assert depMode != null;
assert depInfo != null;

this.sesId = sesId;
this.jobId = jobId;
this.taskName = taskName;
this.userVer = userVer;
this.depInfo = new GridDeploymentInfoMessage(depInfo);
this.taskClsName = taskClsName;
this.job = job;
this.startTaskTime = startTaskTime;
Expand All @@ -256,10 +235,7 @@ public GridJobExecuteRequest(
this.siblings = dynamicSiblings ? null : siblings;
this.sesAttrs = sesAttrs;
this.jobAttrs = jobAttrs;
this.clsLdrId = clsLdrId;
this.depMode = depMode;
this.dynamicSiblings = dynamicSiblings;
this.ldrParticipants = ldrParticipants;
this.forceLocDep = forceLocDep;
this.sesFullSup = sesFullSup;
this.internal = internal;
Expand All @@ -285,6 +261,11 @@ public IgniteUuid jobId() {
return jobId;
}

/** @return Deployment of the task classes. */
public GridDeploymentInfo deploymentInfo() {
return depInfo;
}

/**
* @return Task class name.
*/
Expand All @@ -299,13 +280,6 @@ public String taskName() {
return taskName;
}

/**
* @return Task version.
*/
public String userVersion() {
return userVer;
}

/**
* @return Grid job.
*/
Expand Down Expand Up @@ -364,27 +338,6 @@ public String checkpointSpi() {
return cpSpi;
}

/**
* @return Task local class loader id.
*/
public IgniteUuid classLoaderId() {
return clsLdrId;
}

/**
* @return Deployment mode.
*/
public DeploymentMode deploymentMode() {
return depMode;
}

/**
* @return Node class loader participant map.
*/
public Map<UUID, IgniteUuid> loaderParticipants() {
return ldrParticipants;
}

/**
* @return Returns {@code true} if deployment should always be used.
*/
Expand Down Expand Up @@ -446,7 +399,6 @@ public AffinityTopologyVersion topologyVersion() {
return topVer;
}


/** {@inheritDoc} */
@Override public String toString() {
return S.toString(GridJobExecuteRequest.class, this);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteException;
import org.apache.ignite.internal.managers.deployment.GridDeployment;
import org.apache.ignite.internal.managers.deployment.GridDeploymentInfoBean;
import org.apache.ignite.internal.managers.deployment.GridDeploymentInfoMessage;
import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
import org.apache.ignite.internal.processors.continuous.GridContinuousBatch;
import org.apache.ignite.internal.processors.continuous.GridContinuousBatchAdapter;
Expand Down Expand Up @@ -64,7 +64,7 @@ public class GridMessageListenHandler implements GridContinuousHandler {
private String clsName;

/** */
private GridDeploymentInfoBean depInfo;
private GridDeploymentInfoMessage depInfo;

/** */
private boolean depEnabled;
Expand Down Expand Up @@ -166,7 +166,7 @@ public GridMessageListenHandler(@Nullable Object topic, IgniteBiPredicate<UUID,
if (dep == null)
throw new IgniteDeploymentCheckedException("Failed to deploy message listener.");

depInfo = new GridDeploymentInfoBean(dep);
depInfo = new GridDeploymentInfoMessage(dep);

depEnabled = true;
}
Expand All @@ -178,13 +178,7 @@ public GridMessageListenHandler(@Nullable Object topic, IgniteBiPredicate<UUID,
assert ctx.config().isPeerClassLoadingEnabled();

try {
GridDeployment dep = ctx.deploy().getGlobalDeployment(depInfo.deployMode(), clsName, clsName,
depInfo.userVersion(), nodeId, depInfo.classLoaderId(), depInfo.participants(), null);

if (dep == null)
throw new IgniteDeploymentCheckedException("Failed to obtain deployment for class: " + clsName);

ClassLoader ldr = dep.classLoader();
ClassLoader ldr = ctx.deploy().globalDeployment(depInfo, clsName, nodeId).classLoader();

if (topicBytes != null)
topic = U.unmarshal(ctx, topicBytes, U.resolveClassLoader(ldr, ctx.config()));
Expand Down Expand Up @@ -260,7 +254,7 @@ public GridMessageListenHandler(@Nullable Object topic, IgniteBiPredicate<UUID,
topicBytes = U.readByteArray(in);
predBytes = U.readByteArray(in);
clsName = U.readString(in);
depInfo = (GridDeploymentInfoBean)in.readObject();
depInfo = (GridDeploymentInfoMessage)in.readObject();
}
else {
topic = in.readObject();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2422,10 +2422,7 @@ public void sendUserMessage(Collection<? extends ClusterNode> nodes,
depClsName,
topic,
serTopic,
dep != null ? dep.classLoaderId() : null,
dep != null ? dep.deployMode() : null,
dep != null ? dep.userVersion() : null,
dep != null ? dep.participants() : null);
dep);

if (ordered)
sendOrderedMessageToGridTopic(nodes, TOPIC_COMM_USER, ioMsg, PUBLIC_POOL, timeout, true);
Expand Down Expand Up @@ -3635,21 +3632,15 @@ private class GridUserMessageListener implements GridMessageListener {

if (dep == null && ctx.config().isPeerClassLoadingEnabled() &&
ioMsg.deploymentClassName() != null) {
dep = ctx.deploy().getGlobalDeployment(
ioMsg.deploymentMode(),
ioMsg.deploymentClassName(),
ioMsg.deploymentClassName(),
ioMsg.userVersion(),
nodeId,
ioMsg.classLoaderId(),
ioMsg.loaderParticipants(),
null);
dep = ctx.deploy().globalDeployment(ioMsg.deploymentInfo(), ioMsg.deploymentClassName(),
ioMsg.deploymentClassName(), nodeId);

if (dep == null)
if (dep == null) {
throw new IgniteDeploymentCheckedException(
"Failed to obtain deployment information for user message. " +
"If you are using custom message or topic class, try implementing " +
"GridPeerDeployAware interface. [msg=" + ioMsg + ']');
}

ioMsg.deployment(dep); // Cache deployment.
}
Expand Down
Loading
Loading