///|
/// D-05/D-06: finite Native resources. Budgets include all instances sharing an owner.
pub(all) struct RuntimeLimits {
file_workers : Int
queued_operations : Int
connections : Int
body_block_bytes : Int
body_buffer_bytes : Int
directory_metadata_bytes : Int
} derive(Debug, Eq)
///|
pub fn RuntimeLimits::default() -> RuntimeLimits {
{ file_workers: 4, queued_operations: 256, connections: 1024,
body_block_bytes: 65536, body_buffer_bytes: 67108864,
directory_metadata_bytes: 67108864 }
}
///|
pub fn RuntimeLimits::validate(self : RuntimeLimits) -> Unit raise ConfigError {
if self.file_workers < 1 || self.file_workers > 64 ||
self.queued_operations < 1 || self.connections < 1 ||
self.body_block_bytes < 1 || self.body_block_bytes > 1048576 ||
self.body_buffer_bytes < self.body_block_bytes * 2 || self.directory_metadata_bytes < 1 {
raise InvalidLimits("positive capacities required; file_workers <= 64, body_block_bytes <= 1 MiB; body budget must hold both native and delivered blocks")
}
}
///|
pub extend RuntimeLimits with Debug::{to_repr}
///|
pub extend RuntimeLimits with Eq::{not_equal, equal}