feat: verify bounded simultaneous schedule execution

This commit is contained in:
2026-09-20 13:56:44 +08:00
parent 71c33eae18
commit 29734596a3
21 changed files with 2371 additions and 2 deletions

View File

@@ -0,0 +1,10 @@
{
"mysql": "8.4.10",
"tasks": 158,
"schedules": 38,
"occurrences": 158,
"succeeded_tasks": 154,
"foreign_key_count": 0,
"unpaused_schedules": 0,
"duplicate_tasks_in_occurrences": 0
}

View File

@@ -0,0 +1,110 @@
{
"run_id": "abd51b013ef637e214f3b868d73d1e3c",
"go_version": "go1.25.14",
"goos": "linux",
"goarch": "arm64",
"started_at": "2026-09-20T05:52:03.516120763Z",
"finished_at": "2026-09-20T05:52:08.536435043Z",
"requests_per_schedule": 12,
"schedules": 2,
"expected_occurrences": 24,
"workers": 2,
"capacity_per_worker": 2,
"interval_ms": 1000,
"start_delay_ms": 1000,
"run_timeout_ms": 5000,
"poll_interval_ms": 100,
"http_timeout_ms": 5000,
"queue": {
"max_unfinished_tasks": 100000,
"unfinished_tasks": "0",
"id": "17f6a89f5d68895600d3bb2185fbadb4",
"namespace_id": "65aefc4c4d7c0441cda02794632c7408",
"name": "schedule",
"paused": false,
"max_concurrency": 4,
"rate_per_second": 10,
"revision": "1"
},
"schedule_start": "2026-09-20T05:52:04.517253Z",
"schedule_end": "2026-09-20T05:52:16.517253Z",
"plans": [
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:52:03.517994Z",
"index": 0,
"id": "c7d2bc3caea7b7e5ea7403783e98306a",
"create_key": "schedule-abd51b013ef637e214f3b868d73d1e3c-00-create",
"resume_key": "schedule-abd51b013ef637e214f3b868d73d1e3c-00-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": false,
"pause_key": "schedule-abd51b013ef637e214f3b868d73d1e3c-00-pause-0",
"pause_revision": "4",
"pause_confirmed": true,
"occurrences": 3,
"fired": 3,
"verified_success": 1
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:52:03.521008Z",
"index": 1,
"id": "f86e04e63a42f805d5c146b2594d4d0f",
"create_key": "schedule-abd51b013ef637e214f3b868d73d1e3c-01-create",
"resume_key": "schedule-abd51b013ef637e214f3b868d73d1e3c-01-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": false,
"pause_key": "schedule-abd51b013ef637e214f3b868d73d1e3c-01-pause-0",
"pause_revision": "4",
"pause_confirmed": true,
"occurrences": 3,
"fired": 3,
"verified_success": 1
}
],
"occurrences": 6,
"fired": 6,
"verified_success": 2,
"unobserved": 18,
"unverified": 4,
"handler_calls": 2,
"duplicate_invocations": 0,
"unconfirmed_invocations": 0,
"worker_started": 2,
"worker_reconnects": 0,
"worker_renewals_confirmed": 0,
"trigger_lag": {
"count": 2,
"p50_ms": 504.563,
"p95_ms": 515.272,
"p99_ms": 515.272,
"max_ms": 515.272
},
"queue_wait": {
"count": 2,
"p50_ms": 1530.163,
"p95_ms": 1535.71,
"p99_ms": 1535.71,
"max_ms": 1535.71
},
"authorized_execution": {
"count": 2,
"p50_ms": 9.803,
"p95_ms": 20.264,
"p99_ms": 20.264,
"max_ms": 20.264
},
"completion": {
"count": 2,
"p50_ms": 2055.238,
"p95_ms": 2060.537,
"p99_ms": 2060.537,
"max_ms": 2060.537
},
"errors": {
"RUN_TIMEOUT": 1
},
"complete": false
}

View File

@@ -0,0 +1,113 @@
{
"date_local": "2026-09-20",
"timezone": "Asia/Shanghai",
"source_base_commit": "71c33ea",
"declared_go": "1.27.1",
"test_go": "go1.25.14",
"temporary_modfile": true,
"mysql": "8.4.10",
"architecture": "arm64",
"docker_vm_cpus": 12,
"docker_vm_memory_bytes": 12529274880,
"orbit_processes": 1,
"mysql_nodes": 1,
"worker_processes": 1,
"worker_connections": 2,
"queue_max_concurrency": 4,
"queue_rate_per_second": 10,
"metrics_enabled": false,
"network": "Go runner shares disposable MySQL container network namespace; loopback HTTP/WS/MySQL; no host port",
"dedicated_cpu_memory_limits": false,
"fresh_disposable_database": true,
"cleanup": "Test-created containers stopped and removed; no existing databases used",
"sdk_checks": [
"go test -race ./...",
"go vet ./...",
"go build ./...",
"go list -deps ./...; no database/server dependencies"
],
"modfile_note": "All Go commands use GOWORK=off and temporary sdk.mod/root.mod changing only declared Go version for available toolchain; repository go.mod unchanged",
"sample_commands": [
[
"-schedules",
"4",
"-requests",
"6",
"-workers",
"2",
"-capacity",
"4",
"-start-delay",
"5s",
"-run-timeout",
"90s",
"-poll-interval",
"100ms"
],
[
"-schedules",
"32",
"-requests",
"4",
"-workers",
"2",
"-capacity",
"4",
"-start-delay",
"5s",
"-run-timeout",
"90s",
"-poll-interval",
"100ms"
],
[
"-schedules",
"2",
"-requests",
"12",
"-workers",
"2",
"-capacity",
"2",
"-start-delay",
"1s",
"-run-timeout",
"5s",
"-poll-interval",
"100ms"
]
],
"exit_codes": [
0,
0,
1
],
"schema_verification": {
"schema_version": 28,
"migration_count": 28,
"foreign_key_count": 0,
"required_index_count": 6,
"complete": true
},
"source_sha256": {
"sdk/go/cmd/orbit-schedule-load/handler.go": "560426c5eaaad08cce386b304d0b4673757c1d82978d39557b6a72c8b00f12f8",
"sdk/go/cmd/orbit-schedule-load/main.go": "2378bc59bde8e219618848206f5e4aa3e5158fdb0f419b1b8c286754e5e74136",
"sdk/go/cmd/orbit-schedule-load/measure.go": "93bf30957af66631acc202fb65bab81dab2ea6c40259ad1d619eb47d23935832",
"sdk/go/cmd/orbit-schedule-load/measure_test.go": "bd5cf497c427678edf29d6b48af9e95c410d656470f2c7340de19dc5705e9772",
"sdk/go/cmd/orbit-schedule-load/observe.go": "50d43aa8b4b4690ceac976f3d65135a79fcf17530f5263ff5af5453074ad9e90",
"sdk/go/cmd/orbit-schedule-load/report.go": "5a949c2904c21116d19f219d18a2e81a1153f578d4b2d7907b43bbd522f09b32"
},
"binary_sha256": {
"orbit": "6290b47a74459cdc9f45c4288df7e0cf16ed67c1bfff7acb4e6e9fd4b636c9d7",
"orbit-admin": "9325990fdedbc5faeb351b1333fd33b27ea35d2d0ee6b59b425deb30e973b396",
"orbit-migrate": "56be44ae4e5d387aa13a6d0cd2e22a533a2ca6d4845b45548e7feac8f0c56635",
"orbit-schedule-load": "67cf4d0ee141e2669744dcce33b032ab8ffd8c463d41662c647840e8ae1510db"
},
"artifacts_sha256": {
"database.json": "462a9ea2921c1960bf0a4d97d846129af7eb7ba37784acad55b2bfb07cd1c35d",
"deadline-24.json": "035696ab376dae1b5f8bcfa94033a94690d99d38c2bbc4d191299c7d1786457e",
"sample-128.json": "bdfe818a94cfcb6184ca3fc0e057802f7f3cb8c223af43bca4a44488ba444fe5",
"sample-24.json": "af78f339c497f5ddca02560005ece49354a98a1343bd08b3dac25c3fcbbbf3ae",
"schema.json": "9ee118dd4306cddde44582b8d3983f2cd25331148d993672fd70cca86dc06d0a"
}
}

View File

@@ -0,0 +1,618 @@
{
"run_id": "7056d28993e47c01647892a53952c7b1",
"go_version": "go1.25.14",
"goos": "linux",
"goarch": "arm64",
"started_at": "2026-09-20T05:51:38.180345251Z",
"finished_at": "2026-09-20T05:52:03.51048843Z",
"requests_per_schedule": 4,
"schedules": 32,
"expected_occurrences": 128,
"workers": 2,
"capacity_per_worker": 4,
"interval_ms": 1000,
"start_delay_ms": 5000,
"run_timeout_ms": 90000,
"poll_interval_ms": 100,
"http_timeout_ms": 5000,
"queue": {
"max_unfinished_tasks": 100000,
"unfinished_tasks": "0",
"id": "17f6a89f5d68895600d3bb2185fbadb4",
"namespace_id": "65aefc4c4d7c0441cda02794632c7408",
"name": "schedule",
"paused": false,
"max_concurrency": 4,
"rate_per_second": 10,
"revision": "1"
},
"schedule_start": "2026-09-20T05:51:43.181786Z",
"schedule_end": "2026-09-20T05:51:47.181786Z",
"plans": [
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.182744Z",
"index": 0,
"id": "fcdd4ba396d4eaa0ee0fa972c699b051",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-00-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-00-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-00-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.185432Z",
"index": 1,
"id": "983feafac5dbdb69bb39c7e8b89517b7",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-01-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-01-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-01-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.187835Z",
"index": 2,
"id": "51f0d54d467cef5325122ecda038ce78",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-02-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-02-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-02-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.190392Z",
"index": 3,
"id": "f01d813f12e16b4b47929fe927f1bc4a",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-03-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-03-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-03-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.193883Z",
"index": 4,
"id": "0b498972511743f1c735a26da75a29d7",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-04-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-04-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-04-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.196309Z",
"index": 5,
"id": "97000fdccd6ae61fbebeaec477151714",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-05-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-05-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-05-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.198861Z",
"index": 6,
"id": "4d369519d8fe46cf787f6d1018cb4253",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-06-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-06-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-06-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.203173Z",
"index": 7,
"id": "c834d23a6ec817df44cea6794c6f6639",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-07-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-07-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-07-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.205847Z",
"index": 8,
"id": "8a58343f784b63bc915d11041712b4f2",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-08-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-08-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-08-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.20941Z",
"index": 9,
"id": "c7212dab959cffb639fe39798bf20385",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-09-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-09-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-09-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.211796Z",
"index": 10,
"id": "1c2ae5b9d1583d0607b34fe0ade46621",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-10-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-10-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-10-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.213893Z",
"index": 11,
"id": "cb44442045923c5fe2687f8840c9fb37",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-11-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-11-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-11-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.219422Z",
"index": 12,
"id": "2f2c444436c2ee51d0eefc2e78a2e799",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-12-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-12-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-12-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.222664Z",
"index": 13,
"id": "5a49395323073eff76470d378cc2bc01",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-13-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-13-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-13-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.225018Z",
"index": 14,
"id": "6fe18947edcbd95aa4288b1ef2611124",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-14-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-14-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-14-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.22847Z",
"index": 15,
"id": "582591eb99f06745e3fa07ea54b54006",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-15-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-15-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-15-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.231576Z",
"index": 16,
"id": "829e2428e144ab924715b255091c3757",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-16-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-16-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-16-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.234664Z",
"index": 17,
"id": "3204baf132a3cb7954d59c5a84896504",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-17-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-17-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-17-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.239704Z",
"index": 18,
"id": "85a944a2dbf10940e30e306eeb6207c1",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-18-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-18-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-18-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.242679Z",
"index": 19,
"id": "754ea55797e8574625385c4762fdb346",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-19-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-19-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-19-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.245641Z",
"index": 20,
"id": "b54c4a596e4c900fc915e8845d351e67",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-20-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-20-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-20-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.248371Z",
"index": 21,
"id": "9b6c85c9a8b6a290ce7ff6dd458638eb",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-21-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-21-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-21-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.251722Z",
"index": 22,
"id": "25171ecf0b2b5aa5ac96abd06de41ba0",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-22-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-22-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-22-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.25387Z",
"index": 23,
"id": "902b9ad707391d67f76ba6e70cffcb3f",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-23-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-23-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-23-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.256482Z",
"index": 24,
"id": "4214b53489a8cdb75202b639ee574427",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-24-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-24-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-24-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.258774Z",
"index": 25,
"id": "4d4c51d538861102eac9fa76f4d90df4",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-25-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-25-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-25-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.261484Z",
"index": 26,
"id": "351abd4c1b1cccb07ec1f988c199c2f0",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-26-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-26-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-26-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.263584Z",
"index": 27,
"id": "c3e19c402d45239b04b20a7adc526141",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-27-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-27-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-27-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.26587Z",
"index": 28,
"id": "5652ed089f0834abaad62311c898007f",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-28-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-28-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-28-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.27058Z",
"index": 29,
"id": "2cbab1577b43ae69bf308687f3d67785",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-29-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-29-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-29-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.27287Z",
"index": 30,
"id": "8d3c0d2151c69e4c50dcd476c6737eee",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-30-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-30-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-30-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:38.275023Z",
"index": 31,
"id": "0b90d1c46cd178c49d63e7dfb5125057",
"create_key": "schedule-7056d28993e47c01647892a53952c7b1-31-create",
"resume_key": "schedule-7056d28993e47c01647892a53952c7b1-31-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-7056d28993e47c01647892a53952c7b1-31-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 4,
"fired": 4,
"verified_success": 4
}
],
"occurrences": 128,
"fired": 128,
"verified_success": 128,
"unobserved": 0,
"unverified": 0,
"handler_calls": 128,
"duplicate_invocations": 0,
"unconfirmed_invocations": 0,
"worker_started": 128,
"worker_reconnects": 0,
"worker_renewals_confirmed": 0,
"trigger_lag": {
"count": 128,
"p50_ms": 992.747,
"p95_ms": 1964.089,
"p99_ms": 1985.97,
"max_ms": 1992.747
},
"queue_wait": {
"count": 128,
"p50_ms": 8192.259,
"p95_ms": 14277.183,
"p99_ms": 15230.422,
"max_ms": 15232.355
},
"authorized_execution": {
"count": 128,
"p50_ms": 8.856,
"p95_ms": 20.414,
"p99_ms": 25.195,
"max_ms": 34.262
},
"completion": {
"count": 128,
"p50_ms": 9191.23,
"p95_ms": 16200.649,
"p99_ms": 17172.61,
"max_ms": 17175.759
},
"errors": {},
"complete": true
}

View File

@@ -0,0 +1,142 @@
{
"run_id": "278555409a9d68e7de5b635087c73d04",
"go_version": "go1.25.14",
"goos": "linux",
"goarch": "arm64",
"started_at": "2026-09-20T05:51:25.035193676Z",
"finished_at": "2026-09-20T05:51:38.173794626Z",
"requests_per_schedule": 6,
"schedules": 4,
"expected_occurrences": 24,
"workers": 2,
"capacity_per_worker": 4,
"interval_ms": 1000,
"start_delay_ms": 5000,
"run_timeout_ms": 90000,
"poll_interval_ms": 100,
"http_timeout_ms": 5000,
"queue": {
"max_unfinished_tasks": 100000,
"unfinished_tasks": "0",
"id": "17f6a89f5d68895600d3bb2185fbadb4",
"namespace_id": "65aefc4c4d7c0441cda02794632c7408",
"name": "schedule",
"paused": false,
"max_concurrency": 4,
"rate_per_second": 10,
"revision": "1"
},
"schedule_start": "2026-09-20T05:51:30.039771Z",
"schedule_end": "2026-09-20T05:51:36.039771Z",
"plans": [
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:25.043209Z",
"index": 0,
"id": "713696f120e328bcedd8b307432745ec",
"create_key": "schedule-278555409a9d68e7de5b635087c73d04-00-create",
"resume_key": "schedule-278555409a9d68e7de5b635087c73d04-00-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-278555409a9d68e7de5b635087c73d04-00-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 6,
"fired": 6,
"verified_success": 6
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:25.05288Z",
"index": 1,
"id": "2c7cc5f7278677e48c1fcb594f762a99",
"create_key": "schedule-278555409a9d68e7de5b635087c73d04-01-create",
"resume_key": "schedule-278555409a9d68e7de5b635087c73d04-01-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-278555409a9d68e7de5b635087c73d04-01-pause-0",
"pause_revision": "6",
"pause_confirmed": true,
"occurrences": 6,
"fired": 6,
"verified_success": 6
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:25.057968Z",
"index": 2,
"id": "147de621f4e54d96d1a0c90fae9bb3ca",
"create_key": "schedule-278555409a9d68e7de5b635087c73d04-02-create",
"resume_key": "schedule-278555409a9d68e7de5b635087c73d04-02-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-278555409a9d68e7de5b635087c73d04-02-pause-0",
"pause_revision": "6",
"pause_confirmed": true,
"occurrences": 6,
"fired": 6,
"verified_success": 6
},
{
"calendar_version": "go1.27.1-b2d18a7c8fa8",
"effective_at": "2026-09-20T05:51:25.063146Z",
"index": 3,
"id": "93272d0b600756362052ec09dac56f7f",
"create_key": "schedule-278555409a9d68e7de5b635087c73d04-03-create",
"resume_key": "schedule-278555409a9d68e7de5b635087c73d04-03-resume",
"resume_revision": "1",
"resumed": true,
"exhausted": true,
"pause_key": "schedule-278555409a9d68e7de5b635087c73d04-03-pause-0",
"pause_revision": "5",
"pause_confirmed": true,
"occurrences": 6,
"fired": 6,
"verified_success": 6
}
],
"occurrences": 24,
"fired": 24,
"verified_success": 24,
"unobserved": 0,
"unverified": 0,
"handler_calls": 24,
"duplicate_invocations": 0,
"unconfirmed_invocations": 0,
"worker_started": 24,
"worker_reconnects": 0,
"worker_renewals_confirmed": 0,
"trigger_lag": {
"count": 24,
"p50_ms": 999.646,
"p95_ms": 2005.396,
"p99_ms": 2015.96,
"max_ms": 2015.96
},
"queue_wait": {
"count": 24,
"p50_ms": 1111.19,
"p95_ms": 2126.701,
"p99_ms": 2130.041,
"max_ms": 2130.041
},
"authorized_execution": {
"count": 24,
"p50_ms": 10.082,
"p95_ms": 21.111,
"p99_ms": 27.578,
"max_ms": 27.578
},
"completion": {
"count": 24,
"p50_ms": 3059.006,
"p95_ms": 4067.032,
"p99_ms": 4094.876,
"max_ms": 4094.876
},
"errors": {},
"complete": true
}

View File

@@ -0,0 +1,7 @@
{
"schema_version": 28,
"migration_count": 28,
"foreign_key_count": 0,
"required_index_count": 6,
"complete": true
}

View File

@@ -0,0 +1,30 @@
ok git.yuntuo.hk/k2safe/orbit/sdk/go (cached)
ok git.yuntuo.hk/k2safe/orbit/sdk/go/cmd/orbit-exec-load (cached)
ok git.yuntuo.hk/k2safe/orbit/sdk/go/cmd/orbit-load (cached)
ok git.yuntuo.hk/k2safe/orbit/sdk/go/cmd/orbit-schedule-load (cached)
ok git.yuntuo.hk/k2safe/orbit/sdk/go/cmd/orbit-workflow-load (cached)
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/application-resources [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/batch [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/cancellation [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/delayed-task [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/event-protocol [no test files]
ok git.yuntuo.hk/k2safe/orbit/sdk/go/examples/file-conversion (cached)
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/health [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/history [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/internal/flowdemo [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/keyed-concurrency [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/priority [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/recovery [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/resources [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/retry [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/schedules [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/subscriptions [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/task-query [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/tasks [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/worker [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/worker-protocol [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/workflow [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/workflow-definition [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/workflow-poll [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/workflow-query [no test files]
? git.yuntuo.hk/k2safe/orbit/sdk/go/examples/workflow-recovery [no test files]

View File

@@ -0,0 +1,42 @@
# P6 定时集中触发测量
日期:2026-09-20。本批新增独立 SDK 命令 `orbit-schedule-load`,完成多个固定间隔计划同一时刻触发、真实 Worker 执行和持久结果核验。P6/P7 仍进行中;样本不作为生产容量或高可用结论。
## 已实现与实际检查
计划先暂停创建再恢复,固定起止/间隔、版本 1、UTC 时区快照、CATCH_UP/PARALLEL;每任务只有一次尝试。工具核对预期时间槽、触发唯一性、任务身份/模板/结果、成功尝试和时间顺序、固定来源及本地单次调用,并等待计划耗尽。所有退出路径执行有限 Worker 收尾和计划暂停;传输不明不换键重试,保留原操作身份。
初次真实连接发现工具误把 API `v1` 当成时区快照标识,修正为保存服务端返回的具体标识和版本生效时间,后续读取核对不变。下表和原始文件全部来自修正后**重新构建并运行**的二进制;首次失败的创建发生在另一已清理的一次性数据库,不计入最终样本。
SDK 全模块 `go test -race ./...`、`go vet ./...`、`go build ./...` 通过,完整依赖图没有服务端或 MySQL 驱动依赖。新增单测覆盖等待不算成功、重复轮询不重复计数、错配输入/来源/历史/时间、跨计划重复任务、本地并发重复调用、暂停明确冲突与传输不明的处理差异、原时区快照/生效时间不变及部分分母。标准 `scripts/test-mysql.sh` 已接入工具编译和 2×3 触发样本,脚本语法检查通过;本批没有重新跑整份标准集成脚本。
## 环境与结果
一次性 MySQL 8.4.10,1 个 Orbit 进程,1 个测量进程中 2 个 Worker 连接。共享本机 Docker VM,12 个 CPU、12,529,274,880 字节内存,无独占资源额度;其他工作负载可能影响结果。队列并发上限 4、每秒开始授权上限 10,工具未修改配置;指标监听关闭。Go/MySQL 容器共享网络命名空间,仅本机回环通信,无宿主机发布端口。
实际工具链是 **Go 1.25.14 Linux arm64**,通过临时 modfile 使用,仓库声明的 Go 1.27.1 未改。本批不能替代正式工具链全量验收。精确配置、源码/二进制哈希、退出码和原始文件哈希见[环境清单](data/phase-6-schedule-load/environment.json),SDK 输出见[检查日志](data/phase-6-schedule-load/sdk-check.log)。
| 样本 | 预期触发 | 已观察/生成任务 | 已核验成功 | 本地调用/重复 | 结果 |
| --- | ---: | ---: | ---: | ---: | --- |
| 4计划×6次,1秒间隔 | 24 | 24/24 | 24 | 24/0 | `complete=true`,退出0 |
| 32计划×4次,1秒间隔 | 128 | 128/128 | 128 | 128/0 | `complete=true`,退出0 |
| 2计划×12次,1秒间隔,整次仅5秒 | 24 | 6/6 | 2 | 2/0 | `RUN_TIMEOUT`,`complete=false`,退出1 |
原始结果:[24次](data/phase-6-schedule-load/sample-24.json)、[128次](data/phase-6-schedule-load/sample-128.json)、[截止负例](data/phase-6-schedule-load/deadline-24.json)。正常组各有两个 Worker,每个容量4;负例每个容量2。正常组预留5秒设置,整体截止90秒;负例预留1秒设置,整体截止5秒。每次HTTP截止5秒,轮询100毫秒。
| 正常样本 | 触发延迟P95 | 排队至授权P95 | 授权执行P95 | 计划时间至完成P95 |
| --- | ---: | ---: | ---: | ---: |
| 24次 | 2005.396ms | 2126.701ms | 21.111ms | 4067.032ms |
| 128次 | 1964.089ms | 14277.183ms | 20.414ms | 16200.649ms |
32 个同时触发的计划在现有并发/速率限制下形成排队,上表记录这次现象;未做控制变量或持续资源采样,不能据此判定瓶颈或推导生产吞吐。耗时分布均由持久时间计算,分母分别为24和128,只包含已核验成功任务。
负例保留18个未观察到的计划触发点、4个已经触发但未核验成功的任务,没有把超时隐藏为成功。`pause_confirmed` 在全部计划中为真;暂停不取消已生成任务。测量后独立数据库回读共有38个计划且全部暂停、158个触发记录、158个任务,其中154个成功,触发记录间重复任务数0;其余4个任务没有被该样本核验为成功,不能推测为已撤销或最终失败。见[数据库快照](data/phase-6-schedule-load/database.json)。
`orbit-admin verify` 独立确认 schema version28、28条迁移记录、6个必需索引和**实际外键0**,见[结构核验](data/phase-6-schedule-load/schema.json)。本批未修改数据库模型或迁移;不可变旧迁移仍保留历史外键及其前向清理记录。
## 复现与下一步
按[工具手册](../api/schedule-load.md)创建隔离命名空间/队列,签发 Worker 与计划权限,依次运行环境清单中的三组参数;前两组应退出0,第三组应退出1并报告剩余分母。使用新创建的一次性MySQL、当前源码构建的服务端和测量工具,最终执行 `orbit-admin verify`。校验时不得把源码修改后的哈希附到之前构建的二进制结果。
当前只验证同节点、固定间隔、有限计划数的集中触发和超时收尾。Cron/DST及其他策略的功能测试已有独立记录,本批未做这些场景的容量测量。下一步继续长期积压、资源曲线、生产采集/通知、目标数据库拓扑与正式工具链/版本兼容门禁。

View File

@@ -20,6 +20,8 @@
| 真实Worker执行测量 | `orbit-exec-load`;最终短/混合/中长及截止不足四组,环境及原始JSON见[测量报告](phase-6-execution-load.md) | 96+96+6项全部逐项核验,长任务18次续租;24项截止负例按预期非零退出。SDK全模块竞态/vet/build通过,生产容量未验收 |
| 真实Weave流程测量 | `orbit-workflow-load`;24实例、固定版本双分支并行,原始JSON见[流程测量报告](phase-6-workflow-load.md) | 24/24实例成功,48/48任务尝试与来源、输出逐项核验,重复调用0;生产容量未验收 |
| 真实定时集中触发测量 | `orbit-schedule-load`;4×6及32×4触发,2×12截止负例,见[定时测量报告](phase-6-schedule-load.md) | 正常152项逐项核验;负例18个未观察点、4个未核验任务,非零退出;38个计划均暂停,实际库外键0。SDK全模块竞态/vet/build通过;生产容量未验收 |
## 当前环境仍未覆盖
此前使用容器网络别名运行存储集成时,两组 COMMIT 故障测试曾因自身 `127.0.0.1` 明文连接前置条件被拒绝;本轮已改用共享网络命名空间单独复跑并通过,因此不再把它们列为未验证场景。共享网络命名空间只解决测试进程的 loopback 观察条件,不改变生产部署约束。