Skip to content

Commit dde112a

Browse files
authored
chore: friendly OOM message (#223)
Signed-off-by: usamoi <[email protected]>
1 parent eb44c26 commit dde112a

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

src/bgworker/mod.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@ pub mod upgrade;
44
pub unsafe fn init() {
55
use pgrx::bgworkers::BackgroundWorkerBuilder;
66
use pgrx::bgworkers::BgWorkerStartTime;
7+
use std::time::Duration;
78
BackgroundWorkerBuilder::new("vectors")
89
.set_function("vectors_main")
910
.set_library("vectors")
1011
.set_argument(None)
1112
.enable_shmem_access(None)
1213
.set_start_time(BgWorkerStartTime::PostmasterStart)
14+
.set_restart_time(Some(Duration::from_secs(1)))
1315
.load();
1416
}
1517

@@ -19,6 +21,9 @@ extern "C" fn vectors_main(_arg: pgrx::pg_sys::Datum) {
1921
}
2022

2123
pub fn main() {
24+
pub struct AllocErrorPanicPayload {
25+
pub layout: std::alloc::Layout,
26+
}
2227
{
2328
let mut builder = env_logger::builder();
2429
builder.target(env_logger::Target::Stderr);
@@ -33,6 +38,10 @@ pub fn main() {
3338
builder.init();
3439
}
3540
std::panic::set_hook(Box::new(|info| {
41+
if let Some(oom) = info.payload().downcast_ref::<AllocErrorPanicPayload>() {
42+
log::error!("Out of memory. Layout: {:?}.", oom.layout);
43+
return;
44+
}
3645
let backtrace;
3746
#[cfg(not(debug_assertions))]
3847
{
@@ -44,6 +53,9 @@ pub fn main() {
4453
}
4554
log::error!("Panickied. Info: {:?}. Backtrace: {}.", info, backtrace);
4655
}));
56+
std::alloc::set_alloc_error_hook(|layout| {
57+
std::panic::panic_any(AllocErrorPanicPayload { layout });
58+
});
4759
use service::worker::Worker;
4860
use std::path::Path;
4961
let path = Path::new("pg_vectors");

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
//!
33
//! Provides an easy-to-use extension for vector similarity search.
44
#![feature(never_type)]
5+
#![feature(alloc_error_hook)]
56

67
mod bgworker;
78
mod datatype;

0 commit comments

Comments
 (0)