Skip to content

Commit d381c37

Browse files
Nemo157syphar
authored andcommitted
Don't reduce memory limit if override is less than default
1 parent 3277ddd commit d381c37

File tree

3 files changed

+43
-10
lines changed

3 files changed

+43
-10
lines changed

src/db/migrate.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,11 +286,16 @@ pub fn migrate(version: Option<Version>, conn: &mut Client) -> crate::error::Res
286286
// version
287287
7,
288288
// description
289-
"Allow memory limits of more than 4 GB",
289+
"Allow memory limits of more than 2 GB",
290290
// upgrade query
291291
"ALTER TABLE sandbox_overrides ALTER COLUMN max_memory_bytes TYPE BIGINT;",
292292
// downgrade query
293-
"ALTER TABLE sandbox_overrides ALTER COLUMN max_memory_bytes TYPE INTEGER;"
293+
"
294+
ALTER TABLE sandbox_overrides
295+
ALTER COLUMN max_memory_bytes
296+
TYPE INTEGER
297+
USING least(max_memory_bytes, 2147483647);
298+
"
294299
),
295300
sql_migration!(
296301
context,

src/docbuilder/limits.rs

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@ impl Limits {
3030
let default = Self::new(config);
3131
let overrides = Overrides::for_crate(conn, name)?.unwrap_or_default();
3232
Ok(Self {
33-
memory: overrides.memory.unwrap_or(default.memory),
33+
memory: overrides
34+
.memory
35+
.unwrap_or(default.memory)
36+
.max(default.memory),
3437
targets: overrides
3538
.targets
3639
.or(overrides.timeout.map(|_| 1))
@@ -72,10 +75,12 @@ mod test {
7275
wrapper(|env| {
7376
let db = env.db();
7477

78+
let defaults = Limits::new(&env.config());
79+
7580
let krate = "hexponent";
7681
// limits work if no crate has limits set
7782
let hexponent = Limits::for_crate(&env.config(), &mut db.conn(), krate)?;
78-
assert_eq!(hexponent, Limits::new(&env.config()));
83+
assert_eq!(hexponent, defaults);
7984

8085
Overrides::save(
8186
&mut db.conn(),
@@ -91,17 +96,17 @@ mod test {
9196
hexponent,
9297
Limits {
9398
targets: 15,
94-
..Limits::new(&env.config())
99+
..defaults
95100
}
96101
);
97102

98103
// all limits work
99104
let krate = "regex";
100105
let limits = Limits {
101-
memory: 100_000,
102-
timeout: Duration::from_secs(300),
106+
memory: defaults.memory * 2,
107+
timeout: defaults.timeout * 2,
103108
targets: 1,
104-
..Limits::new(&env.config())
109+
..defaults
105110
};
106111
Overrides::save(
107112
&mut db.conn(),
@@ -155,4 +160,27 @@ mod test {
155160
Ok(())
156161
});
157162
}
163+
164+
#[test]
165+
fn overrides_dont_lower_memory_limit() {
166+
wrapper(|env| {
167+
let db = env.db();
168+
169+
let defaults = Limits::new(&env.config());
170+
171+
Overrides::save(
172+
&mut db.conn(),
173+
"krate",
174+
Overrides {
175+
memory: Some(defaults.memory / 2),
176+
..Overrides::default()
177+
},
178+
)?;
179+
180+
let limits = Limits::for_crate(&env.config(), &mut db.conn(), "krate")?;
181+
assert_eq!(limits, defaults);
182+
183+
Ok(())
184+
});
185+
}
158186
}

src/web/builds.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ mod tests {
291291
VALUES ($1, $2, $3, $4)",
292292
&[
293293
&"foo",
294-
&3072i64,
294+
&(6 * 1024 * 1024 * 1024i64),
295295
&(Duration::hours(2).num_seconds() as i32),
296296
&1,
297297
],
@@ -315,7 +315,7 @@ mod tests {
315315
let values: Vec<_> = values.iter().map(|v| &**v).collect();
316316

317317
dbg!(&values);
318-
assert!(values.contains(&"3 KB"));
318+
assert!(values.contains(&"6 GB"));
319319
assert!(values.contains(&"2 hours"));
320320
assert!(values.contains(&"100 KB"));
321321
assert!(values.contains(&"blocked"));

0 commit comments

Comments
 (0)