You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ignite.apache.org by "Vladimir Ozerov (JIRA)" <ji...@apache.org> on 2016/11/17 08:30:58 UTC

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

Vladimir Ozerov created IGNITE-4240:
---------------------------------------

             Summary: 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.0


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.4#6332)