1- use crate :: db:: Overrides ;
2- use crate :: error:: Result ;
1+ use crate :: { db:: Overrides , error:: Result , Config } ;
32use postgres:: Client ;
43use serde:: Serialize ;
54use std:: time:: Duration ;
65
6+ const GB : usize = 1024 * 1024 * 1024 ;
7+
78#[ derive( Debug , Clone , PartialEq , Eq , Serialize ) ]
89pub ( crate ) struct Limits {
910 memory : usize ,
@@ -13,21 +14,20 @@ pub(crate) struct Limits {
1314 max_log_size : usize ,
1415}
1516
16- impl Default for Limits {
17- fn default ( ) -> Self {
17+ impl Limits {
18+ pub ( crate ) fn new ( config : & Config ) -> Self {
1819 Self {
19- memory : 3 * 1024 * 1024 * 1024 , // 3 GB
20+ // 3 GB default default
21+ memory : config. build_default_memory_limit . unwrap_or ( 3 * GB ) ,
2022 timeout : Duration :: from_secs ( 15 * 60 ) , // 15 minutes
2123 targets : 10 ,
2224 networking : false ,
2325 max_log_size : 100 * 1024 , // 100 KB
2426 }
2527 }
26- }
2728
28- impl Limits {
29- pub ( crate ) fn for_crate ( conn : & mut Client , name : & str ) -> Result < Self > {
30- let default = Self :: default ( ) ;
29+ pub ( crate ) fn for_crate ( config : & Config , conn : & mut Client , name : & str ) -> Result < Self > {
30+ let default = Self :: new ( config) ;
3131 let overrides = Overrides :: for_crate ( conn, name) ?. unwrap_or_default ( ) ;
3232 Ok ( Self {
3333 memory : overrides. memory . unwrap_or ( default. memory ) ,
@@ -74,8 +74,8 @@ mod test {
7474
7575 let krate = "hexponent" ;
7676 // limits work if no crate has limits set
77- let hexponent = Limits :: for_crate ( & mut db. conn ( ) , krate) ?;
78- assert_eq ! ( hexponent, Limits :: default ( ) ) ;
77+ let hexponent = Limits :: for_crate ( & env . config ( ) , & mut db. conn ( ) , krate) ?;
78+ assert_eq ! ( hexponent, Limits :: new ( & env . config ( ) ) ) ;
7979
8080 Overrides :: save (
8181 & mut db. conn ( ) ,
@@ -86,12 +86,12 @@ mod test {
8686 } ,
8787 ) ?;
8888 // limits work if crate has limits set
89- let hexponent = Limits :: for_crate ( & mut db. conn ( ) , krate) ?;
89+ let hexponent = Limits :: for_crate ( & env . config ( ) , & mut db. conn ( ) , krate) ?;
9090 assert_eq ! (
9191 hexponent,
9292 Limits {
9393 targets: 15 ,
94- ..Limits :: default ( )
94+ ..Limits :: new ( & env . config ( ) )
9595 }
9696 ) ;
9797
@@ -101,7 +101,7 @@ mod test {
101101 memory : 100_000 ,
102102 timeout : Duration :: from_secs ( 300 ) ,
103103 targets : 1 ,
104- ..Limits :: default ( )
104+ ..Limits :: new ( & env . config ( ) )
105105 } ;
106106 Overrides :: save (
107107 & mut db. conn ( ) ,
@@ -112,7 +112,10 @@ mod test {
112112 timeout : Some ( limits. timeout ) ,
113113 } ,
114114 ) ?;
115- assert_eq ! ( limits, Limits :: for_crate( & mut db. conn( ) , krate) ?) ;
115+ assert_eq ! (
116+ limits,
117+ Limits :: for_crate( & env. config( ) , & mut db. conn( ) , krate) ?
118+ ) ;
116119 Ok ( ( ) )
117120 } ) ;
118121 }
@@ -130,10 +133,26 @@ mod test {
130133 ..Overrides :: default ( )
131134 } ,
132135 ) ?;
133- let limits = Limits :: for_crate ( & mut db. conn ( ) , krate) ?;
136+ let limits = Limits :: for_crate ( & env . config ( ) , & mut db. conn ( ) , krate) ?;
134137 assert_eq ! ( limits. targets, 1 ) ;
135138
136139 Ok ( ( ) )
137140 } ) ;
138141 }
142+
143+ #[ test]
144+ fn config_default_memory_limit ( ) {
145+ wrapper ( |env| {
146+ env. override_config ( |config| {
147+ config. build_default_memory_limit = Some ( 6 * GB ) ;
148+ } ) ;
149+
150+ let db = env. db ( ) ;
151+
152+ let limits = Limits :: for_crate ( & env. config ( ) , & mut db. conn ( ) , "krate" ) ?;
153+ assert_eq ! ( limits. memory, 6 * GB ) ;
154+
155+ Ok ( ( ) )
156+ } ) ;
157+ }
139158}
0 commit comments