@@ -149,13 +149,20 @@ impl ClientWorkerSetImpl {
149149 . map ( |opts| opts. version . build_id ) ;
150150 let task_types = worker. worker_task_types ( ) ;
151151
152- if !task_types. enable_workflows && !task_types. enable_activities && !task_types. enable_nexus
152+ if !task_types. enable_workflows
153+ && !task_types. enable_local_activities
154+ && !task_types. enable_remote_activities
155+ && !task_types. enable_nexus
153156 {
154157 bail ! (
155158 "Worker must have at least one capability enabled (workflows, activities, or nexus)"
156159 ) ;
157160 }
158161
162+ if !task_types. enable_workflows && task_types. enable_local_activities {
163+ bail ! ( "Local activities cannot be enabled without workflows" )
164+ }
165+
159166 if !skip_client_worker_set_check
160167 && let Some ( existing_workers) = self . slot_providers . get ( & slot_key)
161168 {
@@ -442,7 +449,8 @@ mod tests {
442449 . expect_worker_task_types ( )
443450 . return_const ( WorkerTaskTypes {
444451 enable_workflows : true ,
445- enable_activities : true ,
452+ enable_local_activities : true ,
453+ enable_remote_activities : true ,
446454 enable_nexus : true ,
447455 } ) ;
448456 mock_provider
@@ -486,7 +494,8 @@ mod tests {
486494 . expect_worker_task_types ( )
487495 . return_const ( WorkerTaskTypes {
488496 enable_workflows : true ,
489- enable_activities : true ,
497+ enable_local_activities : true ,
498+ enable_remote_activities : true ,
490499 enable_nexus : true ,
491500 } ) ;
492501
@@ -523,7 +532,8 @@ mod tests {
523532 . expect_worker_task_types ( )
524533 . return_const ( WorkerTaskTypes {
525534 enable_workflows : true ,
526- enable_activities : true ,
535+ enable_local_activities : true ,
536+ enable_remote_activities : true ,
527537 enable_nexus : true ,
528538 } ) ;
529539
@@ -584,7 +594,8 @@ mod tests {
584594 . expect_worker_task_types ( )
585595 . return_const ( WorkerTaskTypes {
586596 enable_workflows : true ,
587- enable_activities : true ,
597+ enable_local_activities : true ,
598+ enable_remote_activities : true ,
588599 enable_nexus : true ,
589600 } ) ;
590601
@@ -611,7 +622,8 @@ mod tests {
611622 . expect_worker_task_types ( )
612623 . return_const ( WorkerTaskTypes {
613624 enable_workflows : true ,
614- enable_activities : true ,
625+ enable_local_activities : true ,
626+ enable_remote_activities : true ,
615627 enable_nexus : true ,
616628 } ) ;
617629
@@ -776,7 +788,8 @@ mod tests {
776788 . expect_worker_task_types ( )
777789 . return_const ( WorkerTaskTypes {
778790 enable_workflows : true ,
779- enable_activities : true ,
791+ enable_local_activities : true ,
792+ enable_remote_activities : true ,
780793 enable_nexus : true ,
781794 } ) ;
782795
@@ -1063,7 +1076,8 @@ mod tests {
10631076 . expect_worker_task_types ( )
10641077 . return_const ( WorkerTaskTypes {
10651078 enable_workflows : true ,
1066- enable_activities : false ,
1079+ enable_local_activities : false ,
1080+ enable_remote_activities : false ,
10671081 enable_nexus : true ,
10681082 } ) ;
10691083
@@ -1087,7 +1101,8 @@ mod tests {
10871101 . expect_worker_task_types ( )
10881102 . return_const ( WorkerTaskTypes {
10891103 enable_workflows : false ,
1090- enable_activities : true ,
1104+ enable_local_activities : false ,
1105+ enable_remote_activities : true ,
10911106 enable_nexus : false ,
10921107 } ) ;
10931108 activity_worker. expect_try_reserve_wft_slot ( ) . times ( 0 ) ; // Should not be called for activity-only worker
@@ -1121,7 +1136,8 @@ mod tests {
11211136 . expect_worker_task_types ( )
11221137 . return_const ( WorkerTaskTypes {
11231138 enable_workflows : true ,
1124- enable_activities : true ,
1139+ enable_local_activities : true ,
1140+ enable_remote_activities : true ,
11251141 enable_nexus : false ,
11261142 } ) ;
11271143
@@ -1138,7 +1154,8 @@ mod tests {
11381154 . expect_worker_task_types ( )
11391155 . return_const ( WorkerTaskTypes {
11401156 enable_workflows : true ,
1141- enable_activities : true ,
1157+ enable_local_activities : true ,
1158+ enable_remote_activities : true ,
11421159 enable_nexus : false ,
11431160 } ) ;
11441161
@@ -1168,7 +1185,8 @@ mod tests {
11681185 . expect_worker_task_types ( )
11691186 . return_const ( WorkerTaskTypes {
11701187 enable_workflows : false ,
1171- enable_activities : true ,
1188+ enable_local_activities : false ,
1189+ enable_remote_activities : true ,
11721190 enable_nexus : false ,
11731191 } ) ;
11741192
@@ -1208,7 +1226,8 @@ mod tests {
12081226 . expect_worker_task_types ( )
12091227 . return_const ( WorkerTaskTypes {
12101228 enable_workflows : false ,
1211- enable_activities : true ,
1229+ enable_local_activities : false ,
1230+ enable_remote_activities : true ,
12121231 enable_nexus : false ,
12131232 } ) ;
12141233
@@ -1228,7 +1247,8 @@ mod tests {
12281247 . expect_worker_task_types ( )
12291248 . return_const ( WorkerTaskTypes {
12301249 enable_workflows : false ,
1231- enable_activities : false ,
1250+ enable_local_activities : false ,
1251+ enable_remote_activities : false ,
12321252 enable_nexus : true ,
12331253 } ) ;
12341254
@@ -1266,7 +1286,8 @@ mod tests {
12661286 . expect_worker_task_types ( )
12671287 . return_const ( WorkerTaskTypes {
12681288 enable_workflows : true ,
1269- enable_activities : false ,
1289+ enable_local_activities : true ,
1290+ enable_remote_activities : false ,
12701291 enable_nexus : false ,
12711292 } ) ;
12721293 workflow_worker
@@ -1286,9 +1307,10 @@ mod tests {
12861307 }
12871308
12881309 #[ test]
1289- fn worker_with_no_capabilities_rejected ( ) {
1310+ fn worker_invalid_type_config_rejected ( ) {
12901311 let manager = ClientWorkerSet :: new ( ) ;
12911312
1313+ // no types enabled
12921314 let mut worker = MockClientWorker :: new ( ) ;
12931315 worker
12941316 . expect_namespace ( )
@@ -1305,7 +1327,8 @@ mod tests {
13051327 . expect_worker_task_types ( )
13061328 . return_const ( WorkerTaskTypes {
13071329 enable_workflows : false ,
1308- enable_activities : false ,
1330+ enable_local_activities : false ,
1331+ enable_remote_activities : false ,
13091332 enable_nexus : false ,
13101333 } ) ;
13111334
@@ -1317,6 +1340,35 @@ mod tests {
13171340 . to_string( )
13181341 . contains( "must have at least one capability enabled" )
13191342 ) ;
1343+
1344+ // local activities enabled without workflows
1345+ let mut worker = MockClientWorker :: new ( ) ;
1346+ worker
1347+ . expect_namespace ( )
1348+ . return_const ( "test_namespace" . to_string ( ) ) ;
1349+ worker
1350+ . expect_task_queue ( )
1351+ . return_const ( "test_queue" . to_string ( ) ) ;
1352+ worker. expect_deployment_options ( ) . return_const ( None ) ;
1353+ worker
1354+ . expect_worker_instance_key ( )
1355+ . return_const ( Uuid :: new_v4 ( ) ) ;
1356+ worker. expect_heartbeat_enabled ( ) . return_const ( false ) ;
1357+ worker
1358+ . expect_worker_task_types ( )
1359+ . return_const ( WorkerTaskTypes {
1360+ enable_workflows : false ,
1361+ enable_local_activities : true ,
1362+ enable_remote_activities : true ,
1363+ enable_nexus : false ,
1364+ } ) ;
1365+
1366+ let result = manager. register_worker ( Arc :: new ( worker) , false ) ;
1367+ assert ! ( result. is_err( ) ) ;
1368+ assert_eq ! (
1369+ result. unwrap_err( ) . to_string( ) ,
1370+ "Local activities cannot be enabled without workflows" . to_string( )
1371+ ) ;
13201372 }
13211373
13221374 #[ test]
@@ -1347,7 +1399,8 @@ mod tests {
13471399 . expect_worker_task_types ( )
13481400 . return_const ( WorkerTaskTypes {
13491401 enable_workflows : true ,
1350- enable_activities : false ,
1402+ enable_local_activities : true ,
1403+ enable_remote_activities : false ,
13511404 enable_nexus : false ,
13521405 } ) ;
13531406 workflow_worker
@@ -1376,7 +1429,8 @@ mod tests {
13761429 . expect_worker_task_types ( )
13771430 . return_const ( WorkerTaskTypes {
13781431 enable_workflows : false ,
1379- enable_activities : true ,
1432+ enable_local_activities : false ,
1433+ enable_remote_activities : true ,
13801434 enable_nexus : false ,
13811435 } ) ;
13821436
0 commit comments