Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a9a8751

Browse files
committed
Implement cache cleanup
1 parent 1505465 commit a9a8751

File tree

4 files changed

+40
-13
lines changed

4 files changed

+40
-13
lines changed

packages/test/src/test-worker-lifecycle.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Most tests use a mocked core, some tests run serially because they emit signals to the process
44
*/
55
import test from 'ava';
6+
import Long from 'long';
67
import { Worker } from '@temporalio/worker';
78
import { sleep } from '@temporalio/worker/lib/utils';
89
import { Worker as MockedWorker } from './mock-native-worker';
@@ -67,9 +68,23 @@ test('Mocked worker suspends and resumes', async (t) => {
6768
t.is(worker.getState(), 'RUNNING');
6869
worker.suspendPolling();
6970
t.is(worker.getState(), 'SUSPENDED');
71+
72+
const activation = {
73+
runId: 'abc',
74+
jobs: [
75+
{
76+
startWorkflow: {
77+
workflowId: 'wfid',
78+
arguments: [],
79+
workflowType: 'not-found',
80+
randomnessSeed: new Long(3),
81+
},
82+
},
83+
],
84+
};
7085
// Worker finishes its polling before suspension
71-
await worker.native.runWorkflowActivation({ runId: 'abc' });
72-
const completion = worker.native.runWorkflowActivation({ runId: 'abc' });
86+
await worker.native.runWorkflowActivation(activation);
87+
const completion = worker.native.runWorkflowActivation(activation);
7388
await t.throwsAsync(
7489
Promise.race([
7590
sleep(10).then(() => {

packages/worker/native/src/lib.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,8 +320,7 @@ fn worker_new(mut cx: FunctionContext) -> JsResult<JsUndefined> {
320320
start_bridge_loop(
321321
CoreInitOptions {
322322
gateway_opts,
323-
// TODO: Fix evictions not being sent back to lang and set to true
324-
evict_after_pending_cleared: false,
323+
evict_after_pending_cleared: true,
325324
max_outstanding_workflow_tasks,
326325
max_outstanding_activities,
327326
},

packages/worker/src/worker.ts

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { ActivityOptions } from '@temporalio/workflow';
2222
import { Info as ActivityInfo } from '@temporalio/activity';
2323
import { errorToUserCodeFailure } from '@temporalio/workflow/commonjs/common';
2424
import { tsToMs } from '@temporalio/workflow/commonjs/time';
25+
import { IllegalStateError } from '@temporalio/workflow/commonjs/errors';
2526
import {
2627
arrayFromPayloads,
2728
DataConverter,
@@ -599,8 +600,22 @@ export class Worker {
599600
mergeMap((group$) => {
600601
return group$.pipe(
601602
takeUntil(this.stateSubject.pipe(filter((value) => value === 'STOPPED'))),
602-
mergeMapWithState(async (workflow: Workflow | undefined, task) => {
603+
mergeMapWithState(async (workflow: Workflow | undefined, task): Promise<{
604+
state: Workflow | undefined;
605+
output: { arr?: Uint8Array; close: boolean };
606+
}> => {
603607
const taskToken = formatTaskToken(task.taskToken);
608+
const jobs = task.jobs.filter(({ removeFromCache }) => !removeFromCache);
609+
// Found a removeFromCache job
610+
const close = jobs.length < task.jobs.length;
611+
task.jobs = jobs;
612+
if (jobs.length === 0) {
613+
if (!close) {
614+
throw new IllegalStateError('Got a Workflow activation with no jobs');
615+
}
616+
return { state: undefined, output: { close, arr: undefined } };
617+
}
618+
604619
if (workflow === undefined) {
605620
try {
606621
// Find a workflow start job in the activation jobs list
@@ -660,19 +675,15 @@ export class Worker {
660675
}
661676
}
662677

663-
const jobs = task.jobs.filter(({ removeFromCache }) => !removeFromCache);
664-
// Found a removeFromCache job
665-
const close = jobs.length < task.jobs.length;
666-
task.jobs = jobs;
667-
668-
// TODO: single param
669678
const arr = await workflow.activate(task.taskToken, task);
679+
670680
return { state: workflow, output: { close, arr } };
671681
}, undefined),
672682
tap(({ close }) => void close && group$.close())
673683
);
674684
}),
675-
map(({ arr }) => arr)
685+
map(({ arr }) => arr),
686+
filter((arr): arr is Uint8Array => arr !== undefined)
676687
);
677688
}
678689

packages/workflow/src/errors.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,9 @@ export class CancellationError extends Error {
5252
}
5353
}
5454

55-
/// Used in different parts of the project to signal to the user that they've done something wrong
55+
/**
56+
* Used in different parts of the project to signal that something unexpected has happened
57+
*/
5658
export class IllegalStateError extends Error {
5759
public readonly name: string = 'IllegalStateError';
5860
}

0 commit comments

Comments
 (0)