Commit e786a42
authored
feat(scheduler): Enforce concurrency_limit for CONCURRENT overlap policy in scheduler (#8024)
<!-- If you are new to contributing or want a refresher, please read
./pull_request_guidance.md -->
**What changed?**
- Implement SchedulePolicies.concurrency_limit for CONCURRENT by
tracking multiple in-flight target runs and enforcing the cap in
processScheduleFireActivity
**Why?**
- SchedulePolicies.ConcurrencyLimit was defined in the IDL but is not
used— CONCURRENT always allowed unlimited parallel runs. We need a way
to cap how many instances of a target workflow run simultaneously
- **Why RunningWorkflows?** Unlike LastStartedWorkflow (which tracks
only the the last started workflow), bounded CONCURRENT must track all
in-flight workflows. On each fire, the activity describes every tracked
workflow, prunes completed entries, and compares the surviving count
against the cap. RunningWorkflows is the state that carries this set
across fires and across ContinueAsNew.
- **Why MaxConcurrencyLimitSystemLimit = 1000** ? RunningWorkflows is
serialized into the ContinueAsNew payload. An unbounded user-configured
limit could grow this slice enough to breach Cadence's 2MB
BlobSizeLimitError, which causes the workflow to fail with no graceful
recovery. This is mirroring the existing MaxBufferedFiresSystemLimit
pattern for the BUFFER policy.
- **Why handleUpdate cleanup**? When a schedule switches away from
bounded CONCURRENT to different policy, or limit set to 0, the tracked
list becomes meaningless. handleUpdate clears it to avoid carrying stale
entries.
**How did you test it?**
- Unit tests for processScheduleFireActivity: at-capacity skip,
room-available start, completed-workflow pruning, describe error
propagation, and AlreadyStartedError handling
- Metrics tests: bounded-CONCURRENT skip emits
SchedulerFireSkippedCountPerDomain with the correct overlap-policy tag
- handleUpdate tests: RunningWorkflows is cleared when leaving bounded
CONCURRENT (policy change or limit → 0), and preserved when only the
limit changes between positive values
**Potential risks**
- ConcurrencyLimit flag is missing from CLI command. A user running
cadence schedule create --help sees no mention of concurrency_limit at
all.
- Early return guard in schedule_commands silently lost the value.
https://github.com/cadence-workflow/cadence/blob/95a7d9d56a25988b7bbfd7143f68597dbfe3fbcd/tools/cli/schedule_commands.go#L371
**Release notes**
N/A
**Documentation Changes**
- consider adding an operator note that ConcurrencyLimit should be kept
below a certain threshold to avoid workflow-state size concerns
---------
Signed-off-by: YaweiZhang-930 <yawei930@gmail.com>1 parent fd93219 commit e786a42
5 files changed
Lines changed: 383 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
75 | 75 | | |
76 | 76 | | |
77 | 77 | | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
78 | 104 | | |
79 | 105 | | |
80 | 106 | | |
| |||
135 | 161 | | |
136 | 162 | | |
137 | 163 | | |
138 | | - | |
139 | | - | |
| 164 | + | |
140 | 165 | | |
141 | 166 | | |
142 | 167 | | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
143 | 173 | | |
144 | 174 | | |
145 | 175 | | |
| |||
155 | 185 | | |
156 | 186 | | |
157 | 187 | | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
158 | 191 | | |
159 | 192 | | |
160 | 193 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
383 | 383 | | |
384 | 384 | | |
385 | 385 | | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
386 | 555 | | |
387 | 556 | | |
388 | 557 | | |
| |||
648 | 817 | | |
649 | 818 | | |
650 | 819 | | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
| 823 | + | |
| 824 | + | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
| 829 | + | |
| 830 | + | |
| 831 | + | |
| 832 | + | |
| 833 | + | |
| 834 | + | |
| 835 | + | |
| 836 | + | |
| 837 | + | |
| 838 | + | |
| 839 | + | |
| 840 | + | |
| 841 | + | |
| 842 | + | |
| 843 | + | |
| 844 | + | |
| 845 | + | |
651 | 846 | | |
652 | 847 | | |
653 | 848 | | |
| |||
819 | 1014 | | |
820 | 1015 | | |
821 | 1016 | | |
| 1017 | + | |
| 1018 | + | |
| 1019 | + | |
| 1020 | + | |
| 1021 | + | |
| 1022 | + | |
| 1023 | + | |
| 1024 | + | |
| 1025 | + | |
| 1026 | + | |
| 1027 | + | |
| 1028 | + | |
| 1029 | + | |
| 1030 | + | |
| 1031 | + | |
| 1032 | + | |
| 1033 | + | |
| 1034 | + | |
| 1035 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
75 | 75 | | |
76 | 76 | | |
77 | 77 | | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
78 | 86 | | |
79 | 87 | | |
80 | 88 | | |
| |||
152 | 160 | | |
153 | 161 | | |
154 | 162 | | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
155 | 166 | | |
156 | 167 | | |
157 | 168 | | |
| |||
259 | 270 | | |
260 | 271 | | |
261 | 272 | | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
262 | 278 | | |
263 | 279 | | |
264 | 280 | | |
| |||
272 | 288 | | |
273 | 289 | | |
274 | 290 | | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
275 | 294 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
422 | 422 | | |
423 | 423 | | |
424 | 424 | | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
425 | 439 | | |
426 | 440 | | |
427 | 441 | | |
| |||
533 | 547 | | |
534 | 548 | | |
535 | 549 | | |
| 550 | + | |
| 551 | + | |
536 | 552 | | |
537 | 553 | | |
538 | 554 | | |
| |||
554 | 570 | | |
555 | 571 | | |
556 | 572 | | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
557 | 576 | | |
558 | 577 | | |
559 | 578 | | |
| |||
612 | 631 | | |
613 | 632 | | |
614 | 633 | | |
| 634 | + | |
| 635 | + | |
| 636 | + | |
| 637 | + | |
| 638 | + | |
| 639 | + | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
615 | 646 | | |
616 | 647 | | |
617 | 648 | | |
| |||
0 commit comments