chore: Buffer first eval action to fix race condition with setup worker (#34891)
## Description Check the issue description for the actual problem. Solution: To mitigate the race condition; instead of using `take` post setup worker an `actionChannel` is used to create a queue to detect any first eval action dispatched while the code path completes the worker setup. This queue is then picked by and the action is processed and the `actionChannel` is closed. The baseline theory of the solution is to create a queue of any first eval action dispatch throughout the lifecycle of the setup process but act only when the setup is complete The problem is not that evident in applications but in packages it's highly reproducible as there are less api fetches to start eval Fixes https://github.com/appsmithorg/appsmith/issues/34890 ## Automation /ok-to-test tags="@tag.All" ### 🔍 Cypress test results <!-- This is an auto-generated comment: Cypress test results --> > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: <https://github.com/appsmithorg/appsmith/actions/runs/9903341349> > Commit: 999f677e9af9c1d90201fcf124d1246ecfd79ef2 > <a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=9903341349&attempt=1" target="_blank">Cypress dashboard</a>. > Tags: `@tag.All` > Spec: > <hr>Fri, 12 Jul 2024 07:07:30 UTC <!-- end of auto-generated comment: Cypress test results --> ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Bug Fixes** - Improved reliability and performance of evaluation change listener by optimizing action handling. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
parent
70f8777afd
commit
81d738d1de
|
|
@ -646,6 +646,7 @@ function* evalAndLintingHandler(
|
|||
}
|
||||
|
||||
function* evaluationChangeListenerSaga(): any {
|
||||
const firstEvalActionChannel = yield actionChannel(FIRST_EVAL_REDUX_ACTIONS);
|
||||
// Explicitly shutdown old worker if present
|
||||
yield all([call(evalWorker.shutdown), call(lintWorker.shutdown)]);
|
||||
const [evalWorkerListenerChannel] = yield all([
|
||||
|
|
@ -669,8 +670,9 @@ function* evaluationChangeListenerSaga(): any {
|
|||
yield spawn(handleEvalWorkerRequestSaga, evalWorkerListenerChannel);
|
||||
|
||||
const initAction: EvaluationReduxAction<unknown> = yield take(
|
||||
FIRST_EVAL_REDUX_ACTIONS,
|
||||
firstEvalActionChannel,
|
||||
);
|
||||
firstEvalActionChannel.close();
|
||||
|
||||
// Wait for widget config build to complete before starting evaluation only if the current editor is not a workflow
|
||||
const isCurrentEditorWorkflowType = yield select(
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user