@@ -5,10 +5,13 @@ const createValidator = require("~/vars/create-validator")
55const FoundernetesPlayPostCheckError = require ( "~/error/play-post-check" )
66const FoundernetesPlayRunError = require ( "~/error/play-run" )
77const FoundernetesValidateVarsError = require ( "~/error/validate-vars" )
8+ const FoundernetesStopError = require ( "~/error/stop" )
89
910const getPluginName = require ( "~/std/get-plugin-name" )
1011const castRetry = require ( "~/lib/cast-retry" )
1112
13+ const isAbortError = require ( "~/utils/is-abort-error" )
14+
1215const ctx = require ( "~/ctx" )
1316
1417module . exports = async ( definition ) => {
@@ -72,12 +75,16 @@ module.exports = async (definition) => {
7275
7376 const retryerCreate =
7477 ( { type, retry, retryOnFalse, catchErrorAsFalse, func } ) =>
75- async ( ) => {
76- const operation = yaRetry . operation ( retry )
77- events . on ( "stop" , ( ) => {
78- operation . stop ( )
79- } )
80- return new Promise ( ( resolve , reject ) => {
78+ async ( ) =>
79+ new Promise ( ( resolve , reject ) => {
80+ const operation = yaRetry . operation ( retry )
81+ const stopSignal = ( ) => {
82+ // const logger = ctx.require("logger")
83+ // logger.debug(`${type} cancel next try`)
84+ operation . stop ( )
85+ reject ( new FoundernetesStopError ( ) )
86+ }
87+ events . on ( "stop" , stopSignal )
8188 operation . attempt ( async ( currentAttempt ) => {
8289 let results
8390 const logger = ctx . require ( "logger" )
@@ -90,11 +97,15 @@ module.exports = async (definition) => {
9097 results = await func ( )
9198 hasError = false
9299 } catch ( err ) {
100+ if ( isAbortError ( err ) ) {
101+ throw err
102+ }
93103 if ( catchErrorAsFalse ) {
94104 hasError = true
95105 results = false
96106 logger . warn ( err )
97107 } else {
108+ events . off ( "stop" , stopSignal )
98109 reject ( err )
99110 return
100111 }
@@ -107,15 +118,15 @@ module.exports = async (definition) => {
107118 }
108119 if ( operation . retry ( err ) ) {
109120 if ( abortSignal . aborted ) {
121+ events . off ( "stop" , stopSignal )
110122 operation . stop ( )
111123 }
112124 return
113125 }
114-
126+ events . off ( "stop" , stopSignal )
115127 resolve ( results )
116128 } )
117129 } )
118- }
119130
120131 const retry = castRetry ( definition . retry , "run" )
121132 const checkRetry = castRetry ( definition . checkRetry , "check" )
@@ -153,6 +164,9 @@ module.exports = async (definition) => {
153164 } )
154165 preCheckResult = await preCheckRetryer ( )
155166 } catch ( error ) {
167+ if ( isAbortError ( error ) ) {
168+ throw error
169+ }
156170 if ( catchCheckErrorAsFalse ) {
157171 preCheckResult = false
158172 const logger = ctx . require ( "logger" )
@@ -187,6 +201,9 @@ module.exports = async (definition) => {
187201 } )
188202 postCheckResult = await postCheckRetryer ( )
189203 } catch ( error ) {
204+ if ( isAbortError ( error ) ) {
205+ throw error
206+ }
190207 if ( catchCheckErrorAsFalse ) {
191208 postCheckResult = false
192209 const logger = ctx . require ( "logger" )
0 commit comments