rocketmq_runtime/
resources.rs1use crate::metadata_target::MetadataTargetRegistry;
16use crate::resource_budget::BudgetLimit;
17use crate::resource_budget::FullPolicy;
18use crate::resource_budget::ManagedMemoryBudget;
19use crate::resource_budget::ProcessMemoryLimit;
20use crate::resource_budget::ResourceBudget;
21use crate::resource_budget::ResourceBudgetTree;
22
23#[derive(Debug, Clone)]
29pub struct RuntimeResources {
30 memory_limit: ProcessMemoryLimit,
31 memory_budget: ManagedMemoryBudget,
32 process_budget: ResourceBudget,
33 metadata_targets: MetadataTargetRegistry,
34}
35
36impl RuntimeResources {
37 pub(crate) fn from_memory_budget(memory_budget: ManagedMemoryBudget) -> Self {
38 Self::from_memory_budget_with_metadata_capacity(
39 memory_budget,
40 crate::metadata_target::DEFAULT_MAX_METADATA_TARGETS,
41 )
42 }
43
44 pub(crate) fn from_memory_budget_with_metadata_capacity(
45 memory_budget: ManagedMemoryBudget,
46 metadata_capacity: usize,
47 ) -> Self {
48 let managed_bytes = usize::try_from(memory_budget.managed_bytes()).unwrap_or(usize::MAX);
49 let process_budget = ResourceBudgetTree::new(
50 "process",
51 BudgetLimit::new(usize::MAX, managed_bytes, FullPolicy::Reject),
52 )
53 .expect("a positive managed memory budget must create the process budget")
54 .root();
55 Self {
56 memory_limit: memory_budget.detected(),
57 memory_budget,
58 process_budget,
59 metadata_targets: MetadataTargetRegistry::with_max_entries(metadata_capacity),
60 }
61 }
62
63 #[must_use]
65 pub const fn memory_limit(&self) -> ProcessMemoryLimit {
66 self.memory_limit
67 }
68
69 #[must_use]
71 pub const fn memory_budget(&self) -> ManagedMemoryBudget {
72 self.memory_budget
73 }
74
75 #[must_use]
77 pub fn process_budget(&self) -> ResourceBudget {
78 self.process_budget.clone()
79 }
80
81 pub fn metadata_target_stats(&self) -> crate::MetadataTargetRegistryStats {
83 self.metadata_targets.stats()
84 }
85
86 pub(crate) fn metadata_targets(&self) -> MetadataTargetRegistry {
87 self.metadata_targets.clone()
88 }
89}