[
https://issues.apache.org/jira/browse/IGNITE-28667?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ilya Shishkov updated IGNITE-28667:
-----------------------------------
Description:
Currently, {{IgniteKernal#initMessageFactory}} misses to call {{#initProvider}}
for message factory providers, obtained from extension registry.
{code}
private void initMessageFactory() throws IgniteCheckedException {
>>> MessageFactoryProvider[] msgs =
ctx.plugins().extensions(MessageFactoryProvider.class); <<<
List<MessageFactoryProvider> compMsgs = new ArrayList<>();
ClassLoader resolvedClsLdr = U.resolveClassLoader(ctx.config());
compMsgs.add(new
CoreMessagesProvider(ctx.marshallerContext().jdkMarshaller(), ctx.marshaller(),
resolvedClsLdr));
for (IgniteComponentType compType : IgniteComponentType.values()) {
MessageFactoryProvider f = compType.messageFactory();
if (f != null) {
>>> initProvider(f, resolvedClsLdr); <<<
compMsgs.add(f);
}
}
DiscoverySpi discoSpi = ctx.config().getDiscoverySpi();
if (discoSpi instanceof IgniteDiscoverySpi) {
MessageFactoryProvider discoMsgs =
((IgniteDiscoverySpi)discoSpi).messageFactoryProvider();
if (discoMsgs != null) {
>>> initProvider(discoMsgs, resolvedClsLdr); <<<
compMsgs.add(discoMsgs);
}
}
if (!compMsgs.isEmpty())
msgs = F.concat(msgs, compMsgs.toArray(new
MessageFactoryProvider[compMsgs.size()]));
msgFactory = new IgniteMessageFactoryImpl(msgs);
}
{code}
was:
{{DiscoveryDataBag}} for joining node data:
# Stores it in {{#joiningNodeData}} map of type {{Map<Integer, Serializable>}}
# Uses {{JoiningNodeDiscoveryData#joiningNodeData}} with return type
{{Serializable}} to provide it to Ignite components.
*For the RU purposes:*
# {{Serializable}} should be replaced by {{Message}} for joining node data in
{{DiscoveryDataBag}}, {{DiscoveryDataPacket}} and corresponing Ignite
components.
# Corresponding data classes should implement {{Message}} as much as possible.
Eg., {{NodeEncryptionKeys}}, {{GroupKeyEncrypted}} can be easely refactored to
become messages.
# For generic objects like consistent id, node attributes extra message wrapper
can be used, eg.:
{code}
public class ObjectData implements MarshallableMessage {
private Serializable data;
@Order(0)
byte[] dataBytes;
...
}
{code}
> Initialize message factory provider for extensions
> --------------------------------------------------
>
> Key: IGNITE-28667
> URL: https://issues.apache.org/jira/browse/IGNITE-28667
> Project: Ignite
> Issue Type: Task
> Reporter: Ilya Shishkov
> Assignee: Ilya Shishkov
> Priority: Major
> Labels: IEP-132, ise
> Fix For: 2.19
>
>
> Currently, {{IgniteKernal#initMessageFactory}} misses to call
> {{#initProvider}} for message factory providers, obtained from extension
> registry.
> {code}
> private void initMessageFactory() throws IgniteCheckedException {
> >>> MessageFactoryProvider[] msgs =
> ctx.plugins().extensions(MessageFactoryProvider.class); <<<
> List<MessageFactoryProvider> compMsgs = new ArrayList<>();
> ClassLoader resolvedClsLdr = U.resolveClassLoader(ctx.config());
> compMsgs.add(new
> CoreMessagesProvider(ctx.marshallerContext().jdkMarshaller(),
> ctx.marshaller(), resolvedClsLdr));
> for (IgniteComponentType compType : IgniteComponentType.values()) {
> MessageFactoryProvider f = compType.messageFactory();
> if (f != null) {
> >>> initProvider(f, resolvedClsLdr); <<<
> compMsgs.add(f);
> }
> }
> DiscoverySpi discoSpi = ctx.config().getDiscoverySpi();
> if (discoSpi instanceof IgniteDiscoverySpi) {
> MessageFactoryProvider discoMsgs =
> ((IgniteDiscoverySpi)discoSpi).messageFactoryProvider();
> if (discoMsgs != null) {
> >>> initProvider(discoMsgs, resolvedClsLdr); <<<
> compMsgs.add(discoMsgs);
> }
> }
> if (!compMsgs.isEmpty())
> msgs = F.concat(msgs, compMsgs.toArray(new
> MessageFactoryProvider[compMsgs.size()]));
> msgFactory = new IgniteMessageFactoryImpl(msgs);
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)