Skip to content

Commit dec9539

Browse files
committed
chore: Make code work again
1 parent 7f29068 commit dec9539

File tree

6 files changed

+63
-51
lines changed

6 files changed

+63
-51
lines changed

crates/stackable-operator/src/builder/pod/resources.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ use k8s_openapi::{
55
};
66
use tracing::warn;
77

8-
use crate::{commons::resources::ResourceRequirementsType, quantity::CpuQuantity};
8+
use crate::{
9+
commons::resources::ResourceRequirementsType,
10+
quantity::{CpuQuantity, MemoryQuantity, ParseQuantityError},
11+
};
912

1013
const RESOURCE_DENYLIST: &[&str] = &["cpu", "memory"];
1114

@@ -50,7 +53,7 @@ impl<CL, MR, ML> ResourceRequirementsBuilder<(), CL, MR, ML> {
5053
self,
5154
request: impl Into<String>,
5255
factor: f32,
53-
) -> cpu::Result<ResourceRequirementsBuilder<Quantity, Quantity, MR, ML>> {
56+
) -> Result<ResourceRequirementsBuilder<Quantity, Quantity, MR, ML>, ParseQuantityError> {
5457
let request = CpuQuantity::from_str(&request.into())?;
5558
let limit = request * factor;
5659

@@ -120,7 +123,7 @@ impl<CR, CL, ML> ResourceRequirementsBuilder<CL, CR, (), ML> {
120123
self,
121124
request: impl Into<String>,
122125
factor: f32,
123-
) -> memory::Result<ResourceRequirementsBuilder<CL, CR, Quantity, Quantity>> {
126+
) -> Result<ResourceRequirementsBuilder<CL, CR, Quantity, Quantity>, ParseQuantityError> {
124127
let request = MemoryQuantity::from_str(&request.into())?;
125128
let limit = request * factor;
126129

crates/stackable-operator/src/commons/resources.rs

+26-20
Original file line numberDiff line numberDiff line change
@@ -67,28 +67,34 @@
6767
//! shared_storage: PvcConfig,
6868
//! }
6969
//! ```
70+
use std::{collections::BTreeMap, fmt::Debug};
7071

7172
use educe::Educe;
72-
use k8s_openapi::api::core::v1::{
73-
Container, PersistentVolumeClaim, PersistentVolumeClaimSpec, PodSpec, ResourceRequirements,
74-
VolumeResourceRequirements,
73+
use k8s_openapi::{
74+
api::core::v1::{
75+
Container, PersistentVolumeClaim, PersistentVolumeClaimSpec, PodSpec, ResourceRequirements,
76+
VolumeResourceRequirements,
77+
},
78+
apimachinery::pkg::{
79+
api::resource::Quantity,
80+
apis::meta::v1::{LabelSelector, ObjectMeta},
81+
},
7582
};
76-
use k8s_openapi::apimachinery::pkg::api::resource::Quantity;
77-
use k8s_openapi::apimachinery::pkg::apis::meta::v1::{LabelSelector, ObjectMeta};
7883
use schemars::JsonSchema;
7984
use serde::{Deserialize, Serialize};
8085
use snafu::{ResultExt, Snafu};
81-
use std::{collections::BTreeMap, fmt::Debug};
8286
use strum::Display;
8387

84-
use crate::config::{
85-
fragment::{Fragment, FromFragment},
86-
merge::Merge,
88+
use crate::{
89+
config::{
90+
fragment::{Fragment, FromFragment},
91+
merge::Merge,
92+
},
93+
quantity::{CpuQuantity, MemoryQuantity, ParseQuantityError},
8794
};
88-
use crate::quantity::{CpuQuantity, MemoryQuantity};
8995

90-
pub const LIMIT_REQUEST_RATIO_CPU: f32 = 5.0;
91-
pub const LIMIT_REQUEST_RATIO_MEMORY: f32 = 1.0;
96+
pub const LIMIT_REQUEST_RATIO_CPU: f64 = 5.0;
97+
pub const LIMIT_REQUEST_RATIO_MEMORY: f64 = 1.0;
9298

9399
type Result<T, E = Error> = std::result::Result<T, E>;
94100

@@ -107,20 +113,20 @@ pub enum Error {
107113
LimitToRequestRatioExceeded {
108114
container_name: String,
109115
resource_key: String,
110-
allowed_ration: f32,
116+
allowed_ration: f64,
111117
},
112118

113119
#[snafu(display("failed to convert Quantity to CpuQuantity for cpu limit"))]
114-
CpuLimit { source: crate::cpu::Error },
120+
CpuLimit { source: ParseQuantityError },
115121

116122
#[snafu(display("failed to convert Quantity to CpuQuantity for cpu request"))]
117-
CpuRequest { source: crate::cpu::Error },
123+
CpuRequest { source: ParseQuantityError },
118124

119125
#[snafu(display("failed to convert Quantity to MemoryQuantity for memory limit"))]
120-
MemoryLimit { source: crate::memory::Error },
126+
MemoryLimit { source: ParseQuantityError },
121127

122128
#[snafu(display("failed to convert Quantity to MemoryQuantity for memory request"))]
123-
MemoryRequest { source: crate::memory::Error },
129+
MemoryRequest { source: ParseQuantityError },
124130
}
125131

126132
/// Resource usage is configured here, this includes CPU usage, memory usage and disk storage
@@ -427,7 +433,7 @@ pub trait ResourceRequirementsExt {
427433
&self,
428434
resource: &ComputeResource,
429435
// We did choose a f32 instead of a usize here, as LimitRange ratios can be a floating point (Quantity - e.g. 1500m)
430-
ratio: f32,
436+
ratio: f64,
431437
) -> Result<()>;
432438
}
433439

@@ -457,7 +463,7 @@ impl ResourceRequirementsExt for Container {
457463
Ok(())
458464
}
459465

460-
fn check_limit_to_request_ratio(&self, resource: &ComputeResource, ratio: f32) -> Result<()> {
466+
fn check_limit_to_request_ratio(&self, resource: &ComputeResource, ratio: f64) -> Result<()> {
461467
let limit = self
462468
.resources
463469
.as_ref()
@@ -509,7 +515,7 @@ impl ResourceRequirementsExt for PodSpec {
509515
Ok(())
510516
}
511517

512-
fn check_limit_to_request_ratio(&self, resource: &ComputeResource, ratio: f32) -> Result<()> {
518+
fn check_limit_to_request_ratio(&self, resource: &ComputeResource, ratio: f64) -> Result<()> {
513519
for container in &self.containers {
514520
container.check_limit_to_request_ratio(resource, ratio)?;
515521
}

crates/stackable-operator/src/product_logging/framework.rs

+5-6
Original file line numberDiff line numberDiff line change
@@ -101,17 +101,16 @@ pub enum LoggingError {
101101
/// .unwrap();
102102
/// ```
103103
pub fn calculate_log_volume_size_limit(max_log_files_size: &[MemoryQuantity]) -> Quantity {
104-
let log_volume_size_limit = max_log_files_size
105-
.iter()
106-
.cloned()
107-
.sum::<MemoryQuantity>()
108-
.scale_to(Suffix::BinaryByteMultiple(BinaryByteMultiple::Mebi))
104+
let mut log_volume_size_limit = max_log_files_size.iter().cloned().sum::<MemoryQuantity>();
105+
log_volume_size_limit.scale_to(Suffix::BinaryByteMultiple(BinaryByteMultiple::Mebi));
106+
log_volume_size_limit
109107
// According to the reasons mentioned in the function documentation, the multiplier must be
110108
// greater than 2. Manual tests with ZooKeeper 3.8 in an OpenShift cluster showed that 3 is
111109
// absolutely sufficient.
112-
.mul(3.0)
110+
.mul(3.0f32)
113111
// Avoid bulky numbers due to the floating-point arithmetic.
114112
.ceil();
113+
115114
log_volume_size_limit.into()
116115
}
117116

crates/stackable-operator/src/quantity/cpu.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::quantity::{
1010
DecimalByteMultiple, ParseQuantityError, Quantity, Suffix,
1111
};
1212

13-
#[derive(Clone, Debug, PartialEq)]
13+
#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
1414
pub struct CpuQuantity(Quantity);
1515

1616
impl Deref for CpuQuantity {

crates/stackable-operator/src/quantity/memory.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub trait JavaHeap {
1818
fn to_java_heap_string(&self) -> Result<String, String>;
1919
}
2020

21-
#[derive(Clone, Debug, PartialEq)]
21+
#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
2222
pub struct MemoryQuantity(Quantity);
2323

2424
impl Deref for MemoryQuantity {

crates/stackable-operator/src/quantity/mod.rs

+24-20
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ mod ops;
1616
pub use cpu::*;
1717
pub use memory::*;
1818

19-
#[derive(Debug, Snafu)]
19+
#[derive(Debug, PartialEq, Snafu)]
2020
pub enum ParseQuantityError {
2121
#[snafu(display("input is either empty or contains non-ascii characters"))]
2222
InvalidFormat,
@@ -28,7 +28,7 @@ pub enum ParseQuantityError {
2828
InvalidSuffix { source: ParseSuffixError },
2929
}
3030

31-
#[derive(Clone, Debug, PartialEq)]
31+
#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
3232
pub struct Quantity {
3333
// FIXME (@Techassi): Support arbitrary-precision numbers
3434
/// The numeric value of the quantity.
@@ -138,22 +138,26 @@ impl Quantity {
138138
let factor = (s.base() as f64).powf(s.exponent())
139139
/ (suffix.base() as f64).powf(suffix.exponent());
140140

141-
*v = *v * factor;
141+
*v *= factor;
142142
*s = suffix;
143143

144144
false
145145
}
146146
}
147147
}
148+
149+
pub fn ceil(&mut self) {
150+
self.value = self.value.ceil();
151+
}
148152
}
149153

150-
#[derive(Debug, Snafu)]
154+
#[derive(Debug, PartialEq, Snafu)]
151155
#[snafu(display("failed to parse {input:?} as quantity suffix"))]
152156
pub struct ParseSuffixError {
153157
input: String,
154158
}
155159

156-
#[derive(Clone, Debug, PartialEq)]
160+
#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
157161
pub enum Suffix {
158162
DecimalByteMultiple(DecimalByteMultiple),
159163
BinaryByteMultiple(BinaryByteMultiple),
@@ -244,7 +248,7 @@ pub trait SuffixMultiple {
244248
/// - <https://physics.nist.gov/cuu/Units/binary.html>
245249
///
246250
/// [k8s-serialization-format]: https://github.com/kubernetes/apimachinery/blob/8c60292e48e46c4faa1e92acb232ce6adb37512c/pkg/api/resource/quantity.go#L37-L59
247-
#[derive(Clone, Debug, PartialEq, strum::Display, strum::EnumString)]
251+
#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, strum::Display, strum::EnumString)]
248252
pub enum BinaryByteMultiple {
249253
#[strum(serialize = "Ki")]
250254
Kibi,
@@ -310,7 +314,7 @@ impl SuffixMultiple for BinaryByteMultiple {
310314
/// - <https://physics.nist.gov/cuu/Units/binary.html>
311315
///
312316
/// [k8s-serialization-format]: https://github.com/kubernetes/apimachinery/blob/8c60292e48e46c4faa1e92acb232ce6adb37512c/pkg/api/resource/quantity.go#L37-L59
313-
#[derive(Clone, Debug, PartialEq, strum::Display, strum::EnumString)]
317+
#[derive(Clone, Copy, Debug, PartialEq, PartialOrd, strum::Display, strum::EnumString)]
314318
pub enum DecimalByteMultiple {
315319
#[strum(serialize = "m")]
316320
Milli,
@@ -355,7 +359,7 @@ impl SuffixMultiple for DecimalByteMultiple {
355359
/// ### See
356360
///
357361
/// - <https://en.wikipedia.org/wiki/Scientific_notation#E_notation>
358-
#[derive(Clone, Debug, PartialEq)]
362+
#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
359363
pub struct DecimalExponent(f64);
360364

361365
impl Deref for DecimalExponent {
@@ -471,10 +475,10 @@ mod test {
471475
#[case] output: &str,
472476
#[case] scaled: bool,
473477
) {
474-
let parsed = Quantity::from_str(input).unwrap();
475-
let (quantity, was_scaled) = parsed.scale_to(Suffix::BinaryByteMultiple(scale_to));
478+
let mut parsed = Quantity::from_str(input).unwrap();
479+
let was_scaled = parsed.scale_to(Suffix::BinaryByteMultiple(scale_to));
476480

477-
assert_eq!(quantity.to_string(), output);
481+
assert_eq!(parsed.to_string(), output);
478482
assert_eq!(was_scaled, scaled);
479483
}
480484

@@ -487,10 +491,10 @@ mod test {
487491
#[case] output: &str,
488492
#[case] scaled: bool,
489493
) {
490-
let parsed = Quantity::from_str(input).unwrap();
491-
let (quantity, was_scaled) = parsed.scale_to(Suffix::DecimalByteMultiple(scale_to));
494+
let mut parsed = Quantity::from_str(input).unwrap();
495+
let was_scaled = parsed.scale_to(Suffix::DecimalByteMultiple(scale_to));
492496

493-
assert_eq!(quantity.to_string(), output);
497+
assert_eq!(parsed.to_string(), output);
494498
assert_eq!(was_scaled, scaled);
495499
}
496500

@@ -504,10 +508,10 @@ mod test {
504508
#[case] output: &str,
505509
#[case] scaled: bool,
506510
) {
507-
let parsed = Quantity::from_str(input).unwrap();
508-
let (quantity, was_scaled) = parsed.scale_to(Suffix::DecimalByteMultiple(scale_to));
511+
let mut parsed = Quantity::from_str(input).unwrap();
512+
let was_scaled = parsed.scale_to(Suffix::DecimalByteMultiple(scale_to));
509513

510-
assert_eq!(quantity.to_string(), output);
514+
assert_eq!(parsed.to_string(), output);
511515
assert_eq!(was_scaled, scaled);
512516
}
513517

@@ -521,10 +525,10 @@ mod test {
521525
#[case] output: &str,
522526
#[case] scaled: bool,
523527
) {
524-
let parsed = Quantity::from_str(input).unwrap();
525-
let (quantity, was_scaled) = parsed.scale_to(Suffix::DecimalExponent(scale_to));
528+
let mut parsed = Quantity::from_str(input).unwrap();
529+
let was_scaled = parsed.scale_to(Suffix::DecimalExponent(scale_to));
526530

527-
assert_eq!(quantity.to_string(), output);
531+
assert_eq!(parsed.to_string(), output);
528532
assert_eq!(was_scaled, scaled);
529533
}
530534
}

0 commit comments

Comments
 (0)