@@ -58,7 +58,7 @@ use temporal_sdk_core_protos::{
58
58
TestHistoryBuilder , DEFAULT_WORKFLOW_TYPE ,
59
59
} ;
60
60
use temporal_sdk_core_test_utils:: { fanout_tasks, start_timer_cmd, TestWorker } ;
61
- use tokio:: { sync:: Barrier , time:: sleep} ;
61
+ use tokio:: { join , sync:: Barrier , time:: sleep} ;
62
62
use tokio_util:: sync:: CancellationToken ;
63
63
64
64
fn three_tasks ( ) -> VecDeque < PollActivityTaskQueueResponse > {
@@ -288,7 +288,7 @@ async fn activity_cancel_interrupts_poll() {
288
288
// Perform first poll to get the activity registered
289
289
let act = core. poll_activity_task ( ) . await . unwrap ( ) ;
290
290
// Poll should block until heartbeat is sent, issuing the cancel, and interrupting the poll
291
- tokio :: join! {
291
+ join ! {
292
292
async {
293
293
core. record_activity_heartbeat( ActivityHeartbeat {
294
294
task_token: act. task_token,
@@ -984,7 +984,7 @@ async fn activity_tasks_from_completion_reserve_slots() {
984
984
// This wf poll should *not* set the flag that it wants tasks back since both slots are
985
985
// occupied
986
986
let run_fut = async { worker. run_until_done ( ) . await . unwrap ( ) } ;
987
- tokio :: join!( run_fut, act_completer) ;
987
+ join ! ( run_fut, act_completer) ;
988
988
}
989
989
990
990
#[ tokio:: test]
@@ -1052,9 +1052,11 @@ async fn cant_complete_activity_with_unset_result_payload() {
1052
1052
)
1053
1053
}
1054
1054
1055
+ #[ rstest:: rstest]
1055
1056
#[ tokio:: test]
1056
- async fn graceful_shutdown ( ) {
1057
+ async fn graceful_shutdown ( # [ values ( true , false ) ] at_max_outstanding : bool ) {
1057
1058
let _task_q = "q" ;
1059
+ let grace_period = Duration :: from_millis ( 200 ) ;
1058
1060
let mut tasks = three_tasks ( ) ;
1059
1061
let mut mock_client = mock_workflow_client ( ) ;
1060
1062
mock_client
@@ -1067,15 +1069,21 @@ async fn graceful_shutdown() {
1067
1069
. times ( 3 )
1068
1070
. returning ( |_, _| Ok ( Default :: default ( ) ) ) ;
1069
1071
1072
+ let max_outstanding = if at_max_outstanding { 3_usize } else { 100 } ;
1070
1073
let worker = Worker :: new_test (
1071
1074
test_worker_cfg ( )
1072
- . graceful_shutdown_period ( Duration :: from_millis ( 500 ) )
1075
+ . graceful_shutdown_period ( grace_period)
1076
+ . max_outstanding_activities ( max_outstanding)
1073
1077
. build ( )
1074
1078
. unwrap ( ) ,
1075
1079
mock_client,
1076
1080
) ;
1077
1081
1078
1082
let _1 = worker. poll_activity_task ( ) . await . unwrap ( ) ;
1083
+
1084
+ // Wait at least the grace period after one poll - ensuring it doesn't trigger prematurely
1085
+ tokio:: time:: sleep ( grace_period. mul_f32 ( 1.1 ) ) . await ;
1086
+
1079
1087
let _2 = worker. poll_activity_task ( ) . await . unwrap ( ) ;
1080
1088
let _3 = worker. poll_activity_task ( ) . await . unwrap ( ) ;
1081
1089
0 commit comments