56 lines
2.1 KiB
Python
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
|