From 9eea3da810fcda5f614344d310adede5977a4ee6 Mon Sep 17 00:00:00 2001 From: Bojan Serafimov Date: Mon, 2 May 2022 15:36:03 -0400 Subject: [PATCH] WIP --- Cargo.lock | 1 + pageserver/Cargo.toml | 1 + pageserver/src/bin/linked_redo.rs | 4 ++++ pageserver/src/walredo.rs | 19 +++++++++++++++++++ 4 files changed, 25 insertions(+) create mode 100644 pageserver/src/bin/linked_redo.rs 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;