You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Vladimir Ozerov (JIRA)" <ji...@apache.org> on 2017/04/06 10:50:41 UTC

[jira] [Updated] (IGNITE-4240) Review GridInternal usages.

     [ https://issues.apache.org/jira/browse/IGNITE-4240?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Vladimir Ozerov updated IGNITE-4240:
------------------------------------
    Fix Version/s:     (was: 2.0)
                   2.1

> Review GridInternal usages.
> ---------------------------
>
>                 Key: IGNITE-4240
>                 URL: https://issues.apache.org/jira/browse/IGNITE-4240
>             Project: Ignite
>          Issue Type: Task
>          Components: compute
>    Affects Versions: 1.7, 1.8
>            Reporter: Vladimir Ozerov
>             Fix For: 2.1
>
>
> We have {{@GridInternal}} annotation which manages which thread will execute particular job - public pool or management pool. This annotation is applied to some internal Ignite jobs.
> There is strong evidence that it doesn't work in all places where we set it:
> 1) Some annotation is set on tasks and this is where everything appears to be ok.
> 2) Some annotation is set on jobs. E.g {{GridCacheAdapter.SizeJob}}. In this case annotation was ignored by parent {{GridCacheAdapter.SizeTask}} what caused starvation described in IGNITE-4239. There are more places where we do that.
> 3) Sometimes it is set on closures or jobs which are passed to {{GridClosureProcessor}}. E.g. looks at {{GridAffinityUtils.AffinityJob}}. It is passed to {{GridClosureProcessor.callAsyncNoFailover}} where execution is forced to happen in system pool (sick!).
> To summarize: {{@GridInternal}} jobs and closures are expected to be executed in management pool only, but in reality they can be executed in system, public or management pool. 
> We need unified solution for this problem, so that any task, job, or closure with this annotation is processed properly. Suggested solution:
> 1) If task is marked internal, all it's jobs must be executed in management pool.
> 2) If certain job is marked internal, it must be executed in management pool.
> 3) If closure is marked internal, it must be executed in management pool.
> 4) All methods (~10) having {{boolean sys}} argument in {{GridClosureProcessor}} must be reviewed as follows:
> - If there are not public usages outside that class or all such usages have {{system = false}}, then remove methods with flags and delegate decision to task processor;
> - If there are public usages ({{runLocalSafe}}, {{callLocalSafe}}), split every such methods in two. First will always execute in system pool, second will make decision based on annotation. This way we will not make mistakes in future.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)