Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SingleThreadedScheduler should fallback execution upon offloading failure #1936

Merged

Conversation

chemicL
Copy link
Contributor

@chemicL chemicL commented Nov 4, 2021

Motivation:

When the Executor provided by the user fails to accept the task
executed by the SingleThreadedScheduler, the exception is ignored and
the scheduler is no longer usable. The exceptions from the user land
should not surface to the global scheduler and the implementation should
do its' best to run the task even at the cost of skipping offloading.

Modification:

DefaultExecutor.SingleThreadedScheduler#schedule is guarded against
rejections from the user's offloadExecutor and triest to fallback
and execute the task on its' own thread.

Result:

User error does not prevent the SingleThreadedScheduler from executing
future tasks.

…ailure

Motivation:

When the `Executor` provided by the user fails to accept the task
executed by the `SingleThreadedScheduler`, the exception is ignored and
the scheduler is no longer usable. The exceptions from the user land
should not surface to the global scheduler and the implementation should
do its' best to run the task even at the cost of skipping offloading.

Modification:

`DefaultExecutor.SingleThreadedScheduler#schedule` is guarded against
rejections from the user's `offloadExecutor` and triest to fallback
and execute the task on its' own thread.

Result:

User error does not prevent the `SingleThreadedScheduler` from executing
future tasks.
}
}, delay, unit);
// Schedulers are only used to generate a tick and should not execute any user code (unless the
// offloadExecutor throws). This means they will never run any blocking code and hence it does not matter
Copy link
Member

@idelpivnitskiy idelpivnitskiy Nov 4, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this is not ideal that we can run a blocking code on this thread, but should be ok as a workaround for now. In future, we probably need to expend schedule API to also take a consumer of an error.

@idelpivnitskiy idelpivnitskiy merged commit 12373a7 into apple:main Nov 4, 2021
idelpivnitskiy added a commit that referenced this pull request Nov 4, 2021
…ailure (#1936)

Motivation:

When the `Executor` provided by the user fails to accept the task
executed by the `SingleThreadedScheduler`, the exception is ignored and
the scheduler is no longer usable. The exceptions from the user land
should not surface to the global scheduler and the implementation should
do its' best to run the task even at the cost of skipping offloading.

Modification:

`DefaultExecutor.SingleThreadedScheduler#schedule` is guarded against
rejections from the user's `offloadExecutor` and triest to fallback
and execute the task on its' own thread.

Result:

User error does not prevent the `SingleThreadedScheduler` from executing
future tasks.

Co-authored-by: Idel Pivnitskiy <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants