Bundles the fixes validated this session across ha.c/persist.c/worker.c: - raft-apply-decoupling Task 7.4: apply-pump O(N^2) throughput regression fixed via a segment-read cache. - bug-1416: boot-time TOCTOU race in persist_verify_apply_correctness() closed with a recovery-complete gate that closes at process-lifecycle start, not function entry. - bug-451: HOOK_DETAIL_JOB_RUSAGE_UPDATE now has its own persist hook arm instead of silently falling through the default job-state case. - bug-1426: trim_wal_segments() also caps its trim floor at the local apply pump's own progress, not just remote standby-acked positions. - bug-1427: persist_verify_apply_correctness() extended with a worker-count check mirroring the existing job-count check (count_jobmgr_entries and count_workermgr_entries now share one count_manager_entries(var) helper). - bug-1428: persist_register_pending_apply's critical section widened to close the actual race instead of patching a symptom. - bug-1472 (remainder): WORKER_DEAD replay in worker_from_capnp() now applies mark_worker_unavail()'s mutations via a shared apply_worker_dead_mutation() helper instead of duplicating them. - bug-1474 (angle-a): on_standby_connected's stale-duplicate detection fixed for promoted vote endpoints via a shared votes_idx_for_peer() index-scale converter. Each fix independently verified via TDD (RED before fix, GREEN after). Full ASAN rebuild + controller_unit_test: 1101 tests, 0 failures. Live single-node HA deployment validated Task 7.4 and bug-1416 across 5 restart/recovery cycles (45/45 job submissions, zero APPLY_DIVERGENT fences). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
271 lines
5.8 KiB
YAML
271 lines
5.8 KiB
YAML
---
|
|
resources:
|
|
# built-in: job slot count (consumed by running jobs, decreases as slots fill)
|
|
- name: slots
|
|
type: numeric
|
|
order: decrease
|
|
consumable: true
|
|
description: "job slot count (built-in)"
|
|
|
|
# built-in: dynamic memory load index reported by workers
|
|
- name: mem
|
|
type: numeric
|
|
interval: 60
|
|
consumable: true
|
|
order: decrease
|
|
description: "available memory in bytes (built-in dynamic load index; CLI display converts to a human-readable unit)"
|
|
|
|
# built-in: worker load indices registered by
|
|
# worker/src/resource_sync.c init_builtin_load_indices()
|
|
- name: r1m
|
|
type: numeric
|
|
interval: 60
|
|
consumable: false
|
|
order: increase
|
|
description: "1-minute load average (built-in dynamic load index)"
|
|
|
|
- name: r15m
|
|
type: numeric
|
|
interval: 60
|
|
consumable: false
|
|
order: increase
|
|
description: "15-minute load average (built-in dynamic load index)"
|
|
|
|
- name: r15s
|
|
type: numeric
|
|
interval: 60
|
|
consumable: false
|
|
order: increase
|
|
description: "15-second load average (built-in dynamic load index)"
|
|
|
|
- name: ut
|
|
type: numeric
|
|
interval: 60
|
|
consumable: false
|
|
order: increase
|
|
description: "cpu utilization"
|
|
|
|
- name: pg
|
|
type: numeric
|
|
interval: 60
|
|
consumable: false
|
|
order: increase
|
|
description: "page ratio"
|
|
|
|
- name: ls
|
|
type: numeric
|
|
interval: 60
|
|
consumable: false
|
|
order: increase
|
|
description: "login count"
|
|
|
|
- name: it
|
|
type: numeric
|
|
interval: 60
|
|
consumable: false
|
|
order: increase
|
|
description: "idle time"
|
|
|
|
- name: swp
|
|
type: numeric
|
|
interval: 60
|
|
consumable: true
|
|
order: decrease
|
|
description: "swap size"
|
|
|
|
- name: io
|
|
type: numeric
|
|
interval: 60
|
|
consumable: false
|
|
order: increase
|
|
description: "io rate"
|
|
|
|
- name: tmp
|
|
type: numeric
|
|
interval: 60
|
|
consumable: true
|
|
order: decrease
|
|
description: "available tmp disk space in bytes (built-in dynamic load index; CLI display converts to a human-readable unit)"
|
|
|
|
# built-in host attributes, registered per-worker by
|
|
# controller/worker.c add_hostattrs_resvals()
|
|
- name: type
|
|
type: string
|
|
description: "host OS/arch type (built-in host attribute)"
|
|
|
|
- name: model
|
|
type: string
|
|
description: "host hardware model (built-in host attribute)"
|
|
|
|
- name: cpuf
|
|
type: numeric
|
|
description: "CPU speed factor (built-in host attribute)"
|
|
|
|
- name: maxcpus
|
|
type: numeric
|
|
description: "max CPU count (built-in host attribute)"
|
|
|
|
- name: maxmem
|
|
type: numeric
|
|
description: "max memory in bytes (built-in host attribute; CLI display converts to a human-readable unit)"
|
|
|
|
- name: maxswap
|
|
type: numeric
|
|
description: "max swap in bytes (built-in host attribute; CLI display converts to a human-readable unit)"
|
|
|
|
- name: maxtmp
|
|
type: numeric
|
|
description: "max tmp disk space in bytes (built-in host attribute; CLI display converts to a human-readable unit)"
|
|
|
|
- name: ndisks
|
|
type: numeric
|
|
description: "disk count (built-in host attribute)"
|
|
|
|
# dynamic hostbased resource, external load index
|
|
- name: dynres1
|
|
type: numeric
|
|
interval: 60
|
|
order: decrease
|
|
consumable: true
|
|
release: true
|
|
description: "user defined dynamic resource"
|
|
resourcemap:
|
|
- location:
|
|
- default
|
|
|
|
|
|
# dynamic share resource, 2 instances
|
|
- name: dynres2
|
|
type: numeric
|
|
interval: 60
|
|
consumable: false
|
|
order: decrease
|
|
description: "user defined dynamic resource"
|
|
resourcemap:
|
|
- location:
|
|
- host1
|
|
- host2
|
|
- location:
|
|
- host5
|
|
- host6
|
|
|
|
|
|
# static share resource, all host share 100 res.
|
|
- name: staticres4
|
|
type: numeric
|
|
interval: 0
|
|
consumable: true
|
|
order: decrease
|
|
resourcemap:
|
|
- location:
|
|
- all
|
|
value: 100
|
|
|
|
# static share resource, host1 and host2 share the 100 res.
|
|
- name: staticres1
|
|
type: numeric
|
|
interval: 0
|
|
consumable: true
|
|
order: decrease
|
|
resourcemap:
|
|
- value: 100
|
|
location:
|
|
- host1
|
|
- host2
|
|
|
|
# static share resource, each of host1 and host2 shares the 100 res.
|
|
- name: staticres2
|
|
type: numeric
|
|
interval: 0
|
|
consumable: false
|
|
order: decrease
|
|
resourcemap:
|
|
- value: 100
|
|
location:
|
|
- host1
|
|
- value: 100
|
|
location:
|
|
- host2
|
|
|
|
# static hostbased resource.
|
|
- name: staticres3
|
|
type: numeric
|
|
interval: 0
|
|
consumable: true
|
|
order: decrease
|
|
resourcemap:
|
|
- value: 100
|
|
location:
|
|
- default
|
|
|
|
- name: res1
|
|
type: numeric
|
|
interval: 0
|
|
consumable: true
|
|
order: decrease
|
|
resourcemap:
|
|
- location:
|
|
- all
|
|
value: 100
|
|
|
|
- name: sres1
|
|
type: numeric
|
|
interval: 0
|
|
consumable: true
|
|
order: decrease
|
|
|
|
|
|
# boolean resource
|
|
- name: bigmem
|
|
type: boolean
|
|
order: na
|
|
resourcemap:
|
|
- value: true
|
|
location:
|
|
- host1
|
|
- value: true
|
|
location:
|
|
- host2
|
|
- value: true
|
|
location:
|
|
- host3
|
|
|
|
# dynamic string resource
|
|
- name: strres1
|
|
type: string
|
|
interval: 60
|
|
consumable: false
|
|
order: na
|
|
description: "string resources"
|
|
resourcemap:
|
|
- location:
|
|
- default
|
|
|
|
# static string resource
|
|
- name: strres2
|
|
type: string
|
|
description: "string resources"
|
|
resourcemap:
|
|
- value: v1
|
|
location:
|
|
- host1
|
|
- value: v2
|
|
location:
|
|
- host2
|
|
- value: v3
|
|
location:
|
|
- host3
|
|
- name: host_quota
|
|
description: quota on each host
|
|
type: numeric
|
|
order: decrease
|
|
consumable: true
|
|
interval: 0
|
|
resourcemap:
|
|
- value: 10
|
|
location:
|
|
- default
|
|
|
|
- name: gstring
|
|
description: string resource
|
|
type: string
|