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]