11import { ServerApp } from '../server' ;
2- import { INTERNAL_RUN_COMPLETE } from '../events' ;
2+ import { INTERNAL_CLAIM_COMPLETE , INTERNAL_RUN_COMPLETE } from '../events' ;
33
44import type { Logger } from '@openfn/logger' ;
55
@@ -15,7 +15,6 @@ const destroy = async (app: ServerApp, logger: Logger) => {
1515
1616 // Immediately stop asking for more work
1717 app . workloop ?. stop ( 'server closed' ) ;
18- app . queueChannel ?. leave ( ) ;
1918
2019 // Shut down the HTTP server
2120 app . server . close ( async ( ) => {
@@ -24,8 +23,9 @@ const destroy = async (app: ServerApp, logger: Logger) => {
2423 } ) ,
2524 new Promise < void > ( async ( resolve ) => {
2625 // Let any active runs complete
27- await waitForRuns ( app , logger ) ;
26+ await waitForRunsAndClaims ( app , logger ) ;
2827
28+ app . queueChannel ?. leave ( ) ;
2929 // Kill the engine and socket
3030 await app . engine . destroy ( ) ;
3131 app . socket ?. disconnect ( ) ;
@@ -37,27 +37,38 @@ const destroy = async (app: ServerApp, logger: Logger) => {
3737 logger . success ( 'Server closed' ) ;
3838} ;
3939
40- const waitForRuns = ( app : ServerApp , logger : Logger ) =>
40+ const waitForRunsAndClaims = ( app : ServerApp , logger : Logger ) =>
4141 new Promise < void > ( ( resolve ) => {
4242 const log = ( ) => {
4343 logger . debug (
44- `Waiting for ${ Object . keys ( app . workflows ) . length } runs to complete...`
44+ `Waiting for ${ Object . keys ( app . workflows ) . length } runs and ${
45+ Object . keys ( app . openClaims ) . length
46+ } claims to complete...`
4547 ) ;
4648 } ;
4749
48- const onRunComplete = ( ) => {
49- if ( Object . keys ( app . workflows ) . length === 0 ) {
50+ const checkAllClear = ( ) => {
51+ if (
52+ Object . keys ( app . workflows ) . length +
53+ Object . keys ( app . openClaims ) . length ===
54+ 0
55+ ) {
5056 logger . debug ( 'All runs completed!' ) ;
51- app . events . off ( INTERNAL_RUN_COMPLETE , onRunComplete ) ;
57+ app . events . off ( INTERNAL_RUN_COMPLETE , checkAllClear ) ;
58+ app . events . off ( INTERNAL_CLAIM_COMPLETE , checkAllClear ) ;
5259 resolve ( ) ;
5360 } else {
5461 log ( ) ;
5562 }
5663 } ;
5764
58- if ( Object . keys ( app . workflows ) . length ) {
65+ if (
66+ Object . keys ( app . workflows ) . length ||
67+ Object . keys ( app . openClaims ) . length
68+ ) {
5969 log ( ) ;
60- app . events . on ( INTERNAL_RUN_COMPLETE , onRunComplete ) ;
70+ app . events . on ( INTERNAL_RUN_COMPLETE , checkAllClear ) ;
71+ app . events . on ( INTERNAL_CLAIM_COMPLETE , checkAllClear ) ;
6172 } else {
6273 logger . debug ( 'No active runs detected, closing immediately' ) ;
6374 resolve ( ) ;
0 commit comments