diff --git a/Cargo.lock b/Cargo.lock index 58125ca41c..3dfde91463 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1640,6 +1640,7 @@ dependencies = [ "hyper", "itertools", "lazy_static", + "libloading", "metrics", "nix", "once_cell", diff --git a/pageserver/Cargo.toml b/pageserver/Cargo.toml index 23c16dd5be..114110e273 100644 --- a/pageserver/Cargo.toml +++ b/pageserver/Cargo.toml @@ -62,6 +62,7 @@ postgres_ffi = { path = "../libs/postgres_ffi" } metrics = { path = "../libs/metrics" } utils = { path = "../libs/utils" } workspace_hack = { version = "0.1", path = "../workspace_hack" } +libloading = "0.7.0" [dev-dependencies] hex-literal = "0.3" diff --git a/pageserver/src/bin/linked_redo.rs b/pageserver/src/bin/linked_redo.rs new file mode 100644 index 0000000000..ecd1952e2f --- /dev/null +++ b/pageserver/src/bin/linked_redo.rs @@ -0,0 +1,4 @@ + +fn main() { + pageserver::walredo::linked_redo().unwrap(); +} diff --git a/pageserver/src/walredo.rs b/pageserver/src/walredo.rs index 6338b839ae..3805373400 100644 --- a/pageserver/src/walredo.rs +++ b/pageserver/src/walredo.rs @@ -163,6 +163,23 @@ pub enum WalRedoError { InvalidRecord, } +pub fn linked_redo( + // key: Key, + // lsn: Lsn, + // base_img: Option, + // records: Vec<(Lsn, ZenithWalRecord)>, +) -> Result { + unsafe { + let pg_path = "/home/bojan/src/neondatabase/neon/tmp_install/bin/postgres"; + let pg_lib = libloading::Library::new(pg_path).expect("failed loading pg"); + // TODO add stringinfo arg + let apply_record_fn: libloading::Symbol = + pg_lib.get(b"ApplyRecord").expect("failed loading ApplyRecord fn"); + } + // TODO actually return something + Ok(Bytes::new()) +} + /// /// Public interface of WAL redo manager /// @@ -185,6 +202,8 @@ impl WalRedoManager for PostgresRedoManager { return Err(WalRedoError::InvalidRequest); } + // return linked_redo(key, lsn, base_img, records); + let mut img: Option = base_img; let mut batch_zenith = can_apply_in_zenith(&records[0].1); let mut batch_start = 0;