Don't depend on the postgres_ffi just for one type (#12610)

We don't want to depend on postgres_ffi in an API crate. If there is no
such dependency, we can compile stuff like `storcon_cli` without needing
a full working postgres build. Fixes regression of #12548 (before we
could compile it).
This commit is contained in:
Arpad Müller
2025-07-15 19:28:08 +02:00
committed by GitHub
parent 5c9c3b3317
commit 5c934efb29
13 changed files with 22 additions and 15 deletions

3
Cargo.lock generated
View File

@@ -6211,6 +6211,7 @@ dependencies = [
"postgres-protocol", "postgres-protocol",
"postgres_backend", "postgres_backend",
"postgres_ffi", "postgres_ffi",
"postgres_ffi_types",
"postgres_versioninfo", "postgres_versioninfo",
"pprof", "pprof",
"pq_proto", "pq_proto",
@@ -6255,7 +6256,7 @@ dependencies = [
"anyhow", "anyhow",
"const_format", "const_format",
"pageserver_api", "pageserver_api",
"postgres_ffi", "postgres_ffi_types",
"postgres_versioninfo", "postgres_versioninfo",
"pq_proto", "pq_proto",
"serde", "serde",

View File

@@ -110,7 +110,6 @@ fn main() -> anyhow::Result<()> {
.allowlist_type("XLogRecPtr") .allowlist_type("XLogRecPtr")
.allowlist_type("XLogSegNo") .allowlist_type("XLogSegNo")
.allowlist_type("TimeLineID") .allowlist_type("TimeLineID")
.allowlist_type("TimestampTz")
.allowlist_type("MultiXactId") .allowlist_type("MultiXactId")
.allowlist_type("MultiXactOffset") .allowlist_type("MultiXactOffset")
.allowlist_type("MultiXactStatus") .allowlist_type("MultiXactStatus")

View File

@@ -227,8 +227,7 @@ pub mod walrecord;
// Export some widely used datatypes that are unlikely to change across Postgres versions // Export some widely used datatypes that are unlikely to change across Postgres versions
pub use v14::bindings::{ pub use v14::bindings::{
BlockNumber, CheckPoint, ControlFileData, MultiXactId, OffsetNumber, Oid, PageHeaderData, BlockNumber, CheckPoint, ControlFileData, MultiXactId, OffsetNumber, Oid, PageHeaderData,
RepOriginId, TimeLineID, TimestampTz, TransactionId, XLogRecPtr, XLogRecord, XLogSegNo, uint32, RepOriginId, TimeLineID, TransactionId, XLogRecPtr, XLogRecord, XLogSegNo, uint32, uint64,
uint64,
}; };
// Likewise for these, although the assumption that these don't change is a little more iffy. // Likewise for these, although the assumption that these don't change is a little more iffy.
pub use v14::bindings::{MultiXactOffset, MultiXactStatus}; pub use v14::bindings::{MultiXactOffset, MultiXactStatus};

View File

@@ -4,13 +4,14 @@
//! TODO: Generate separate types for each supported PG version //! TODO: Generate separate types for each supported PG version
use bytes::{Buf, Bytes}; use bytes::{Buf, Bytes};
use postgres_ffi_types::TimestampTz;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use utils::bin_ser::DeserializeError; use utils::bin_ser::DeserializeError;
use utils::lsn::Lsn; use utils::lsn::Lsn;
use crate::{ use crate::{
BLCKSZ, BlockNumber, MultiXactId, MultiXactOffset, MultiXactStatus, Oid, PgMajorVersion, BLCKSZ, BlockNumber, MultiXactId, MultiXactOffset, MultiXactStatus, Oid, PgMajorVersion,
RepOriginId, TimestampTz, TransactionId, XLOG_SIZE_OF_XLOG_RECORD, XLogRecord, pg_constants, RepOriginId, TransactionId, XLOG_SIZE_OF_XLOG_RECORD, XLogRecord, pg_constants,
}; };
#[repr(C)] #[repr(C)]
@@ -863,7 +864,8 @@ pub mod v17 {
XlHeapDelete, XlHeapInsert, XlHeapLock, XlHeapMultiInsert, XlHeapUpdate, XlParameterChange, XlHeapDelete, XlHeapInsert, XlHeapLock, XlHeapMultiInsert, XlHeapUpdate, XlParameterChange,
rm_neon, rm_neon,
}; };
pub use crate::{TimeLineID, TimestampTz}; pub use crate::TimeLineID;
pub use postgres_ffi_types::TimestampTz;
#[repr(C)] #[repr(C)]
#[derive(Debug)] #[derive(Debug)]

View File

@@ -9,10 +9,11 @@
use super::super::waldecoder::WalStreamDecoder; use super::super::waldecoder::WalStreamDecoder;
use super::bindings::{ use super::bindings::{
CheckPoint, ControlFileData, DBState_DB_SHUTDOWNED, FullTransactionId, TimeLineID, TimestampTz, CheckPoint, ControlFileData, DBState_DB_SHUTDOWNED, FullTransactionId, TimeLineID,
XLogLongPageHeaderData, XLogPageHeaderData, XLogRecPtr, XLogRecord, XLogSegNo, XLOG_PAGE_MAGIC, XLogLongPageHeaderData, XLogPageHeaderData, XLogRecPtr, XLogRecord, XLogSegNo, XLOG_PAGE_MAGIC,
MY_PGVERSION MY_PGVERSION
}; };
use postgres_ffi_types::TimestampTz;
use super::wal_generator::LogicalMessageGenerator; use super::wal_generator::LogicalMessageGenerator;
use crate::pg_constants; use crate::pg_constants;
use crate::PG_TLI; use crate::PG_TLI;

View File

@@ -11,3 +11,4 @@ pub mod forknum;
pub type Oid = u32; pub type Oid = u32;
pub type RepOriginId = u16; pub type RepOriginId = u16;
pub type TimestampTz = i64;

View File

@@ -9,7 +9,7 @@ anyhow.workspace = true
const_format.workspace = true const_format.workspace = true
serde.workspace = true serde.workspace = true
serde_json.workspace = true serde_json.workspace = true
postgres_ffi.workspace = true postgres_ffi_types.workspace = true
postgres_versioninfo.workspace = true postgres_versioninfo.workspace = true
pq_proto.workspace = true pq_proto.workspace = true
tokio.workspace = true tokio.workspace = true

View File

@@ -3,7 +3,7 @@
use std::net::SocketAddr; use std::net::SocketAddr;
use pageserver_api::shard::ShardIdentity; use pageserver_api::shard::ShardIdentity;
use postgres_ffi::TimestampTz; use postgres_ffi_types::TimestampTz;
use postgres_versioninfo::PgVersionId; use postgres_versioninfo::PgVersionId;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use tokio::time::Instant; use tokio::time::Instant;

View File

@@ -2,7 +2,8 @@
use bytes::Bytes; use bytes::Bytes;
use postgres_ffi::walrecord::{MultiXactMember, describe_postgres_wal_record}; use postgres_ffi::walrecord::{MultiXactMember, describe_postgres_wal_record};
use postgres_ffi::{MultiXactId, MultiXactOffset, TimestampTz, TransactionId}; use postgres_ffi::{MultiXactId, MultiXactOffset, TransactionId};
use postgres_ffi_types::TimestampTz;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use utils::bin_ser::DeserializeError; use utils::bin_ser::DeserializeError;

View File

@@ -25,9 +25,9 @@ use pageserver_api::keyspace::{KeySpaceRandomAccum, SparseKeySpace};
use pageserver_api::models::RelSizeMigration; use pageserver_api::models::RelSizeMigration;
use pageserver_api::reltag::{BlockNumber, RelTag, SlruKind}; use pageserver_api::reltag::{BlockNumber, RelTag, SlruKind};
use pageserver_api::shard::ShardIdentity; use pageserver_api::shard::ShardIdentity;
use postgres_ffi::{BLCKSZ, PgMajorVersion, TimestampTz, TransactionId}; use postgres_ffi::{BLCKSZ, PgMajorVersion, TransactionId};
use postgres_ffi_types::forknum::{FSM_FORKNUM, VISIBILITYMAP_FORKNUM}; use postgres_ffi_types::forknum::{FSM_FORKNUM, VISIBILITYMAP_FORKNUM};
use postgres_ffi_types::{Oid, RepOriginId}; use postgres_ffi_types::{Oid, RepOriginId, TimestampTz};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use strum::IntoEnumIterator; use strum::IntoEnumIterator;
use tokio_util::sync::CancellationToken; use tokio_util::sync::CancellationToken;

View File

@@ -32,9 +32,10 @@ use pageserver_api::reltag::{BlockNumber, RelTag, SlruKind};
use pageserver_api::shard::ShardIdentity; use pageserver_api::shard::ShardIdentity;
use postgres_ffi::walrecord::*; use postgres_ffi::walrecord::*;
use postgres_ffi::{ use postgres_ffi::{
PgMajorVersion, TimestampTz, TransactionId, dispatch_pgversion, enum_pgversion, PgMajorVersion, TransactionId, dispatch_pgversion, enum_pgversion, enum_pgversion_dispatch,
enum_pgversion_dispatch, fsm_logical_to_physical, pg_constants, fsm_logical_to_physical, pg_constants,
}; };
use postgres_ffi_types::TimestampTz;
use postgres_ffi_types::forknum::{FSM_FORKNUM, INIT_FORKNUM, MAIN_FORKNUM, VISIBILITYMAP_FORKNUM}; use postgres_ffi_types::forknum::{FSM_FORKNUM, INIT_FORKNUM, MAIN_FORKNUM, VISIBILITYMAP_FORKNUM};
use tracing::*; use tracing::*;
use utils::bin_ser::{DeserializeError, SerializeError}; use utils::bin_ser::{DeserializeError, SerializeError};

View File

@@ -58,6 +58,7 @@ metrics.workspace = true
pem.workspace = true pem.workspace = true
postgres_backend.workspace = true postgres_backend.workspace = true
postgres_ffi.workspace = true postgres_ffi.workspace = true
postgres_ffi_types.workspace = true
postgres_versioninfo.workspace = true postgres_versioninfo.workspace = true
pq_proto.workspace = true pq_proto.workspace = true
remote_storage.workspace = true remote_storage.workspace = true

View File

@@ -12,7 +12,8 @@ use futures::FutureExt;
use itertools::Itertools; use itertools::Itertools;
use parking_lot::Mutex; use parking_lot::Mutex;
use postgres_backend::{CopyStreamHandlerEnd, PostgresBackend, PostgresBackendReader, QueryError}; use postgres_backend::{CopyStreamHandlerEnd, PostgresBackend, PostgresBackendReader, QueryError};
use postgres_ffi::{MAX_SEND_SIZE, PgMajorVersion, TimestampTz, get_current_timestamp}; use postgres_ffi::{MAX_SEND_SIZE, PgMajorVersion, get_current_timestamp};
use postgres_ffi_types::TimestampTz;
use pq_proto::{BeMessage, WalSndKeepAlive, XLogDataBody}; use pq_proto::{BeMessage, WalSndKeepAlive, XLogDataBody};
use safekeeper_api::Term; use safekeeper_api::Term;
use safekeeper_api::models::{ use safekeeper_api::models::{