[
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.1)
2.2
> 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.2
>
>
> 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.4.14#64029)