Files
truf-server/app/capacity_model.py
2026-09-30 20:30:56 +03:00

56 lines
2.1 KiB
Python

MAX_RESULT_BUNDLE_BYTES = 64 * 1024 * 1024
REMOTE_ASSIGNMENT_BASELINE_BYTES = 2 * 1024 * 1024
REMOTE_ASSIGNMENT_MAX_ACTIVE = 50
def validate_remote_assignment_capacity(config):
values = {}
fields = (
'result_bundle_max_event_bytes',
'remote_assignment_reserve_bytes',
'remote_assignment_max_active',
'result_bundle_max_total_bytes',
'projection_backlog_max_bytes',
'projection_backlog_headroom_bytes',
'keycheck_queue_max_items',
'keycheck_queue_max_bytes',
'keycheck_candidates_per_event',
'keycheck_candidate_bytes_per_event',
)
for name in fields:
value = config.get(name)
if type(value) is not int or value < 0:
raise ValueError(name)
values[name] = value
hard_limit = values['result_bundle_max_event_bytes']
reserve = values['remote_assignment_reserve_bytes']
active = values['remote_assignment_max_active']
if not REMOTE_ASSIGNMENT_BASELINE_BYTES <= reserve <= hard_limit:
raise ValueError('remote_assignment_reserve_bytes')
if not REMOTE_ASSIGNMENT_BASELINE_BYTES <= hard_limit <= MAX_RESULT_BUNDLE_BYTES:
raise ValueError('result_bundle_max_event_bytes')
if not 1 <= active <= REMOTE_ASSIGNMENT_MAX_ACTIVE:
raise ValueError('remote_assignment_max_active')
required_bytes = active * reserve
if values['result_bundle_max_total_bytes'] < required_bytes:
raise ValueError('result_bundle_max_total_bytes')
projection_admission_bytes = (
values['projection_backlog_max_bytes']
- values['projection_backlog_headroom_bytes']
)
if projection_admission_bytes < required_bytes:
raise ValueError('projection_backlog_max_bytes')
if (
values['keycheck_queue_max_items']
< active * values['keycheck_candidates_per_event']
):
raise ValueError('keycheck_queue_max_items')
if (
values['keycheck_queue_max_bytes']
< active * values['keycheck_candidate_bytes_per_event']
):
raise ValueError('keycheck_queue_max_bytes')
return values