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

Reply via email to