[
https://issues.apache.org/jira/browse/IGNITE-21848?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Roman Puchkovskiy updated IGNITE-21848:
---------------------------------------
Description:
Public APIs that return CompletableFuture instances need protection that would
not allow users to execute their code in Ignite internal threads (in which the
futures get completed). This is done by switching to an 'async continuation
executor' upon completion of such futures (by default the common FJP is used as
such an executor).
But when we use the same public APIs internally, we don't need this protection
(Thin client handler is an example). So we need a separate 'entry' to use the
same APIs without this protection.
This can be achieved easily by moving the anti-hijack logic to wrappers (aka
decorators) that are only applied when going through the public APIs. The
internal components can use under-the-hood implementations directly, thus
bypassing the wrappers.
was:
Public APIs that return CompletableFuture instances need protection that would
not allow users to execute their code in Ignite internal threads (in which the
futures get completed). This is done by switching to an 'async continuation
executor' upon completion of such futures (by default the common FJP is used as
such an executor).
But when we use the same public APIs internally, we don't need this protection
(Thin client handler is an example). So we need a separate 'entry' to use the
same APIs without this protection.
> Move thread hijack protection to wrappers
> -----------------------------------------
>
> Key: IGNITE-21848
> URL: https://issues.apache.org/jira/browse/IGNITE-21848
> Project: Ignite
> Issue Type: Improvement
> Reporter: Roman Puchkovskiy
> Assignee: Roman Puchkovskiy
> Priority: Major
> Labels: ignite-3
> Time Spent: 10m
> Remaining Estimate: 0h
>
> Public APIs that return CompletableFuture instances need protection that
> would not allow users to execute their code in Ignite internal threads (in
> which the futures get completed). This is done by switching to an 'async
> continuation executor' upon completion of such futures (by default the common
> FJP is used as such an executor).
> But when we use the same public APIs internally, we don't need this
> protection (Thin client handler is an example). So we need a separate 'entry'
> to use the same APIs without this protection.
> This can be achieved easily by moving the anti-hijack logic to wrappers (aka
> decorators) that are only applied when going through the public APIs. The
> internal components can use under-the-hood implementations directly, thus
> bypassing the wrappers.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)