mirror of
https://github.com/neondatabase/neon.git
synced 2026-05-17 21:20:37 +00:00
Major changes and new concepts: Simplify Repository to a value-store ------------------------------------ Move the responsibility of tracking relation metadata, like which relations exist and what are their sizes, from Repository to a new module, pgdatadir_mapping.rs. The interface to Repository is now a simple key-value PUT/GET operations. It's still not any old key-value store though. A Repository is still responsible from handling branching, and every GET operation comes with an LSN. Key --- The key to the Repository key-value store is a Key struct, which consists of a few integer fields. It's wide enough to store a full RelFileNode, fork and block number, and to distinguish those from metadata keys. See pgdatadir_mapping.rs for how relation blocks and metadata keys are mapped to the Key struct. Store arbitrary key-ranges in the layer files --------------------------------------------- The concept of a "segment" is gone. Each layer file can store an arbitrary range of Keys. TODO: - Deleting keys, to reclaim space. This isn't visible to Postgres, dropping or truncating a relation works as you would expect if you look at it from the compute node. If you drop a relation, for example, the relation is removed from the metadata entry, so that it appears to be gone. However, the layered repository implementation never reclaims the storage. - Tracking "logical database size", for disk space quotas. That ought to be reimplemented now in pgdatadir_mapping.rs, or perhaps in walingest.rs. - LSM compaction. The logic for checkpointing and creating image layers is very dumb. AFAIK the *read* code could deal with a full-fledged LSM tree now consisting of the delta and image layers. But there's no code to take a bunch of delta layers and compact them, and the heuristics for when to create image layers is pretty dumb. - The code to track the layers is inefficient. All layers are just stored in a vector, and whenever we need to find a layer, we do a linear search in it.
58 lines
1.9 KiB
TOML
58 lines
1.9 KiB
TOML
[package]
|
|
name = "pageserver"
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
|
|
[dependencies]
|
|
bookfile = { git = "https://github.com/zenithdb/bookfile.git", branch="generic-readext" }
|
|
chrono = "0.4.19"
|
|
rand = "0.8.3"
|
|
regex = "1.4.5"
|
|
bytes = { version = "1.0.1", features = ['serde'] }
|
|
byteorder = "1.4.3"
|
|
futures = "0.3.13"
|
|
hyper = "0.14"
|
|
itertools = "0.10.3"
|
|
lazy_static = "1.4.0"
|
|
log = "0.4.14"
|
|
clap = "3.0"
|
|
daemonize = "0.4.1"
|
|
tokio = { version = "1.11", features = ["process", "sync", "macros", "fs", "rt", "io-util", "time"] }
|
|
postgres-types = { git = "https://github.com/zenithdb/rust-postgres.git", rev="2949d98df52587d562986aad155dd4e889e408b7" }
|
|
postgres-protocol = { git = "https://github.com/zenithdb/rust-postgres.git", rev="2949d98df52587d562986aad155dd4e889e408b7" }
|
|
postgres = { git = "https://github.com/zenithdb/rust-postgres.git", rev="2949d98df52587d562986aad155dd4e889e408b7" }
|
|
tokio-postgres = { git = "https://github.com/zenithdb/rust-postgres.git", rev="2949d98df52587d562986aad155dd4e889e408b7" }
|
|
tokio-stream = "0.1.8"
|
|
anyhow = { version = "1.0", features = ["backtrace"] }
|
|
crc32c = "0.6.0"
|
|
thiserror = "1.0"
|
|
hex = { version = "0.4.3", features = ["serde"] }
|
|
tar = "0.4.33"
|
|
humantime = "2.1.0"
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
serde_json = "1"
|
|
toml_edit = { version = "0.13", features = ["easy"] }
|
|
scopeguard = "1.1.0"
|
|
async-trait = "0.1"
|
|
const_format = "0.2.21"
|
|
tracing = "0.1.27"
|
|
tracing-futures = "0.2"
|
|
signal-hook = "0.3.10"
|
|
url = "2"
|
|
nix = "0.23"
|
|
once_cell = "1.8.0"
|
|
crossbeam-utils = "0.8.5"
|
|
fail = "0.5.0"
|
|
|
|
rust-s3 = { version = "0.28", default-features = false, features = ["no-verify-ssl", "tokio-rustls-tls"] }
|
|
async-compression = {version = "0.3", features = ["zstd", "tokio"]}
|
|
|
|
postgres_ffi = { path = "../postgres_ffi" }
|
|
zenith_metrics = { path = "../zenith_metrics" }
|
|
zenith_utils = { path = "../zenith_utils" }
|
|
workspace_hack = { path = "../workspace_hack" }
|
|
|
|
[dev-dependencies]
|
|
hex-literal = "0.3"
|
|
tempfile = "3.2"
|