anton-vinogradov opened a new pull request, #13454:
URL: https://github.com/apache/ignite/pull/13454

   The stream receiver in `DataStreamerRequest` was marshalled by hand: 
`DataStreamerImpl`
   produced the blob while building the request, and `DataStreamProcessor` 
unmarshalled it
   with a class loader it had just built.
   
   ### Why this matters
   
   A field that marshals itself picks its own marshaller, so it stays outside 
whatever the
   transport decides. The generated marshaller is the single place where that 
decision can
   be made, which is what IGNITE-28940 needs. `updaterBytes` was the last such 
blob on this
   path.
   
   ### Change
   
   * `updater` / `updaterBytes` become an `@Marshalled("updaterBytes")` pair, 
so the
     generated marshaller owns both directions. The request now carries the 
receiver itself;
     the streamer no longer marshals or caches the bytes.
   * The class is marked `@UseBinaryMarshaller`. The receiver is a user class, 
and the
     hand-written call used `ctx.marshaller()` — the same schema-aware 
marshaller the
     annotation selects. The wire format is unchanged: `updaterBytes` keeps 
`@Order(3)`.
   * `DataStreamProcessor` reads the message through 
`MessageMarshalling.unmarshal` and drops
     its own `Marshaller` field.
   
   ### Why the read stays with the consumer
   
   The message remains a `DeferredUnmarshalMessage`. Its class loader does not 
follow from a
   carried deployment alone: with forced local deployment it is the grid class 
loader, and
   otherwise it comes from the global deployment of the sender. The processor 
passes the
   loader explicitly and keeps the read inside its existing `try`, so a missing 
deployment is
   still reported back to the sender rather than leaving it waiting for a 
timeout.
   
   One consequence worth naming: the receiver is now marshalled per request 
instead of once
   per streamer. For the default `IsolatedUpdater` and a full batch this is 
noise, but a
   receiver with heavy state pays it on every batch.
   
   ### Verified
   
   `MessageProcessorTest`, the whole `processors.datastreamer` package
   (`DataStreamProcessorSelfTest`, `DataStreamProcessorPersistenceSelfTest`,
   `DataStreamerImplSelfTest`, `DataStreamerMultiThreadedSelfTest`, 
`DataStreamerTimeoutTest`,
   `DataStreamerClientReconnectAfterClusterRestartTest`, 
`DataStreamerUpdateAfterLoadTest`,
   `DataStreamerCommunicationSpiExceptionTest`, `DataStreamerStopCacheTest`,
   `DataStreamerMultinodeCreateCacheTest` — 58 tests, 
`IgniteDataStreamerPerformanceTest`
   excluded, it is an endless benchmark that always times out), 
`P2PStreamingClassLoaderTest`,
   `GridP2PContinuousDeploymentSelfTest`, `ClassLoadingProblemExceptionTest`,
   `MessageMarshalOnceTest`, `IgniteCoreMessagesSerializationTest`,
   `DirectMarshallingMessagesTest`, and `mvn checkstyle:check -Pcheckstyle -pl 
modules/core`.
   
   🤖 Generated with [Claude Code](https://claude.com/claude-code)


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to