Hi Zhenya,

I don't understand your proposal without a patch.
I see that you want to mark as @Depricate three methods in IgniteCompute
interface, but what will you give instead of?

It seems to me, this interface can invoke some job without contains a class
locally.
How will this be supported in your mind?

On Thu, Jan 28, 2021 at 6:58 PM Ilya Kasnacheev <ilya.kasnach...@gmail.com>
wrote:

> Hello!
>
> Please publish it. I don't see why not.
>
> Regards,
> --
> Ilya Kasnacheev
>
>
> чт, 28 янв. 2021 г. в 14:28, Zhenya Stanilovsky <arzamas...@mail.ru.invalid
> >:
>
> >
> >
> > Hi Ilya , of course it contains in my PR (i don`t know if it shout be
> > published before this discussion will be finished).
> > Little changes from single thread into multiple, for example here [1]
> will
> > highlight a problem, or i can just publish my PR.
> >
> > [1]
> >
> https://github.com/apache/ignite/blob/master/modules/core/src/test/java/org/apache/ignite/internal/IgniteExplicitImplicitDeploymentSelfTest.java#L221
> >
> > >
> > >>
> > >>>Hello!
> > >>>
> > >>>Do you have some kind of reproducer which demonstrates the issue?
> > >>>
> > >>>Regards,
> > >>>--
> > >>>Ilya Kasnacheev
> > >>>
> > >>>
> > >>>чт, 28 янв. 2021 г. в 10:32, Zhenya Stanilovsky <
> > arzamas...@mail.ru.invalid
> > >>>>:
> > >>>
> > >>>>
> > >>>> Hello Igniters !
> > >>>> In the process of Ignite usage i found that some part of Compute
> > >>>> functionality are thread unsafe and seems was designed with such
> > >>>> limitations initially.
> > >>>> Example : one (client, but it doesn`t matter at all) instance is
> > >>>> shared between numerous of fabric, all of them calls something like
> :
> > >>>> IgniteCompute#execute(ComputeTask<T,R>, T)
> > >>>> or
> > >>>> IgniteCompute#execute(java.lang.Class<? extends ComputeTask<T,R>>,
> T)
> > >>>> and appropriate «async» methods — what kind of instance will be
> > called is
> > >>>> nondeterministic for now and as a confirmation of my words — i found
> > no
> > >>>> tests covered multi thread usage of Computing i also found nothing
> on
> > >>>> documentation page [1].
> > >>>> We have all necessary info for correct processing of such cases:
> > >>>> from initiator (ignite.compute(...) starter) side we have Class or
> it
> > >>>> instance and appropriate class loader which will be wired by class
> > loader
> > >>>> id from execution side.
> > >>>> I create a fix and seems all work perfectly well besides one place,
> > this
> > >>>> functionality :
> > >>>> /**
> > >>>> * Executes given task within the cluster group. For step-by-step
> > >>>> explanation of task execution process
> > >>>> * refer to {@link ComputeTask} documentation.
> > >>>> * <p>
> > >>>> * If task for given name has not been deployed yet, then {@code
> > taskName}
> > >>>> will be
> > >>>> * used as task class name to auto-deploy the task (see {@link
> > >>>> #localDeployTask(Class, ClassLoader)} method).
> > >>>> */
> > >>>> public <T, R> R execute(String taskName, T arg) throws
> > IgniteException;
> > >>>> and attendant
> > >>>> /**
> > >>>> * Finds class loader for the given class.
> > >>>> *
> > >>>> * @param rsrcName Class name or class alias to find class loader
> for.
> > >>>> * @return Deployed class loader, or {@code null} if not deployed.
> > >>>> */
> > >>>> public DeploymentResource findResource(String rsrcName);
> > >>>> is thread unsafe by default, no guarantee that concurrent call of
> > >>>> localDeployTask and execute will bring expected result.
> > >>>> My proposal is to deprecate (or probably annotate [2], as a minimal
> > >>>> — additionally document it) this methods and to append additional :
> > >>>> public DeploymentResource findResource(String rsrcName, ClassLoader
> > >>>> clsLdr);
> > >>>> Only one problem i can observe here, if someone creates new class
> > loaders
> > >>>> and appropriate class instances in loop (i don`t know the purpose)
> and
> > >>>> doesn`t undeploy them then he will get possibly OOM here.
> > >>>>
> > >>>> Such approach will give a possibility to use compute in concurrent
> > >>>> scenario. If there is no objections here i will mark this methods
> and
> > >>>> publish my PR, of course with additional tests.
> > >>>>
> > >>>> What do you think ?
> > >>>>
> > >>>>
> > >>>> [1]
> > >>>>
> > https://ignite.apache.org/docs/latest/code-deployment/peer-class-loading
> > >>>> [2]
> > >>>>
> > https://jcip.net/annotations/doc/net/jcip/annotations/NotThreadSafe.html
> > >>>>
> > >>>>
> > >>
> > >>
> > >>
> > >>
>


-- 
Vladislav Pyatkov

Reply via email to