[
https://issues.apache.org/jira/browse/IGNITE-28528?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18102097#comment-18102097
]
Anton Vinogradov commented on IGNITE-28528:
-------------------------------------------
Blocked by IGNITE-28940, and there is a second obstacle worth writing down.
*The marshaller would change.* Both blobs are written with the node marshaller
today:
{code:java}
hndBytes = U.marshal(ctx.marshaller(), hnd);
nodeFilterBytes = U.marshal(ctx.marshaller(), nodeFilter);
{code}
which is {{BinaryMarshaller}} by default, while {{StartRequestData}} carries no
{{@UseBinaryMarshaller}}, so its generated marshaller gets {{JdkMarshaller}}.
Moving the fields to {{@Marshalled}} would silently switch the marshaller of a
user {{IgnitePredicate}} and a user {{GridContinuousHandler}}. Same trap as in
IGNITE-27977.
*Two class loaders in one message.* The hand-written
{{unmarshal(GridKernalContext, UUID)}} does three things the generated code
cannot:
# {{nodeFilter}} is unmarshalled with the deployment class loader, resolved
from the fields of this very message plus the sender id - while {{hnd}} right
below is unmarshalled with the configuration class loader. Two fields of one
message need different class loaders, and {{DeferredUnmarshalMessage}} offers a
single deferred pass;
# {{hnd.p2pUnmarshal(sndId, ctx)}} is a second unmarshalling step inside the
handler;
# {{keepBinary}} is applied afterwards, with a cast to
{{CacheContinuousQueryHandler}}.
So this needs IGNITE-28940 first, and then a way to say "this field waits for
the deployment loader, that one does not".
> Revise marshalling of the node filter in StartRequestData
> ---------------------------------------------------------
>
> Key: IGNITE-28528
> URL: https://issues.apache.org/jira/browse/IGNITE-28528
> Project: Ignite
> Issue Type: Improvement
> Reporter: Vladimir Steshin
> Priority: Major
> Labels: IEP-132, ise, wire-format
> Fix For: 2.19
>
>
> See
> {code:java}
> StartRequestData#nodeFilterBytes {code}
> can _StartRequestData_ be a
> {code:java}
> MarshallableMessage
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)