[ 
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)

Reply via email to