@@ -56,8 +56,8 @@ fn api_file_decompression_threads() -> usize {
5656fn api_file_compression_threads ( ) -> usize {
5757 2
5858}
59- fn api_upload_limit ( ) -> usize {
60- 100
59+ fn api_upload_limit ( ) -> MiB {
60+ 100u64 . into ( )
6161}
6262fn api_max_jwt_uses ( ) -> usize {
6363 5
@@ -345,8 +345,8 @@ fn docker_container_pid_limit() -> u64 {
345345fn docker_installer_limits_timeout ( ) -> u64 {
346346 30 * 60
347347}
348- fn docker_installer_limits_memory ( ) -> u64 {
349- 1024
348+ fn docker_installer_limits_memory ( ) -> MiB {
349+ 1024u64 . into ( )
350350}
351351fn docker_installer_limits_cpu ( ) -> u64 {
352352 100
@@ -388,6 +388,40 @@ fn remote_query_retry_limit() -> u64 {
388388 10
389389}
390390
391+ /// Represents a size in Mebibytes (MiB). The inner value is the number of MiB (not bytes!!).
392+ #[ derive(
393+ ToSchema , Deserialize , Serialize , Clone , Copy , PartialEq , Eq , PartialOrd , Ord , Default ,
394+ ) ]
395+ #[ serde( transparent) ]
396+ #[ repr( transparent) ]
397+ pub struct MiB ( u64 ) ;
398+
399+ impl MiB {
400+ pub fn as_bytes ( self ) -> u64 {
401+ self . 0 * 1024 * 1024
402+ }
403+
404+ pub fn as_kib ( self ) -> u64 {
405+ self . 0 * 1024
406+ }
407+
408+ pub fn as_mib ( self ) -> u64 {
409+ self . 0
410+ }
411+ }
412+
413+ impl From < u64 > for MiB {
414+ fn from ( value : u64 ) -> Self {
415+ MiB ( value)
416+ }
417+ }
418+
419+ impl From < i64 > for MiB {
420+ fn from ( value : i64 ) -> Self {
421+ MiB ( value as u64 )
422+ }
423+ }
424+
391425nestify:: nest! {
392426 #[ derive( ToSchema , Deserialize , Serialize , DefaultFromSerde ) ]
393427 pub struct InnerConfig {
@@ -451,8 +485,7 @@ nestify::nest! {
451485 #[ serde( default = "api_file_compression_threads" ) ]
452486 pub file_compression_threads: usize ,
453487 #[ serde( default = "api_upload_limit" ) ]
454- /// MiB
455- pub upload_limit: usize ,
488+ pub upload_limit: MiB ,
456489 #[ serde( default = "api_max_jwt_uses" ) ]
457490 pub max_jwt_uses: usize ,
458491 #[ serde( default ) ]
@@ -612,11 +645,9 @@ nestify::nest! {
612645 #[ schema( inline) ]
613646 pub backups: #[ derive( ToSchema , Deserialize , Serialize , DefaultFromSerde ) ] #[ serde( default ) ] pub struct SystemBackups {
614647 #[ serde( default ) ]
615- /// MiB/s
616- pub write_limit: u64 ,
648+ pub write_limit: MiB ,
617649 #[ serde( default ) ]
618- /// MiB/s
619- pub read_limit: u64 ,
650+ pub read_limit: MiB ,
620651 #[ serde( default ) ]
621652 pub compression_level: crate :: io:: compression:: CompressionLevel ,
622653
@@ -699,8 +730,7 @@ nestify::nest! {
699730 #[ schema( inline) ]
700731 pub transfers: #[ derive( ToSchema , Deserialize , Serialize , DefaultFromSerde ) ] #[ serde( default ) ] pub struct SystemTransfers {
701732 #[ serde( default ) ]
702- /// MiB/s
703- pub download_limit: u64 ,
733+ pub download_limit: MiB ,
704734 } ,
705735 } ,
706736 #[ serde( default ) ]
@@ -781,8 +811,7 @@ nestify::nest! {
781811 pub timeout: u64 ,
782812
783813 #[ serde( default = "docker_installer_limits_memory" ) ]
784- /// MiB
785- pub memory: u64 ,
814+ pub memory: MiB ,
786815 #[ serde( default = "docker_installer_limits_cpu" ) ]
787816 /// %
788817 pub cpu: u64 ,
@@ -798,7 +827,7 @@ nestify::nest! {
798827
799828 #[ serde( default ) ]
800829 /// Memory Limit MiB -> Multiplier
801- pub multipliers: BTreeMap <i64 , f64 >,
830+ pub multipliers: BTreeMap <MiB , f64 >,
802831 } ,
803832
804833 #[ serde( default ) ]
@@ -862,11 +891,11 @@ impl DockerOverhead {
862891 /// means, <=1024MiB ram = 1.05 multiplier,
863892 /// <=2048MiB ram = 1.10 multiplier,
864893 /// >2048MiB ram = 1.05 multiplier (default_multiplier)
865- pub fn get_mutiplier ( & self , memory : i64 ) -> f64 {
894+ pub fn get_mutiplier ( & self , memory : MiB ) -> f64 {
866895 if !self . r#override {
867- if memory <= 2048 {
896+ if memory. as_mib ( ) <= 2048 {
868897 return 1.15 ;
869- } else if memory <= 4096 {
898+ } else if memory. as_mib ( ) <= 4096 {
870899 return 1.10 ;
871900 }
872901
@@ -885,10 +914,10 @@ impl DockerOverhead {
885914 }
886915
887916 #[ inline]
888- pub fn get_memory ( & self , memory : i64 ) -> i64 {
917+ pub fn get_memory ( & self , memory : MiB ) -> MiB {
889918 let multiplier = self . get_mutiplier ( memory) ;
890919
891- ( memory as f64 * multiplier) as i64
920+ MiB ( ( memory. as_mib ( ) as f64 * multiplier) as u64 )
892921 }
893922}
894923
0 commit comments