mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-09-24 14:15:49 +00:00
* feat(log-store): add the object store WAL object format Add the byte format of a single object store WAL object: a header with the GTWALOBJ magic, format version 1, the object sequence and the writer instance id; one segment per region ordered by region id with entries ordered by entry id; a footer that records each segment's region id, entry id range, entry count, byte range and CRC32; and a fixed trailer with the GTWALTRL magic, the footer location, the footer CRC32 and the whole-object CRC32. The module encodes objects deterministically and decodes the header, trailer, footer and segments separately, with structural checks on footer ranges and segment tiling. It has no callers yet; the store that writes and reads objects follows in later changes. Signed-off-by: jeremyhi <fengjiachun@gmail.com> * test(log-store): pin the object store WAL format with a byte fixture Add a fixed version 1 object with two regions and five entries as a hex literal. The test decodes it and checks the exact header, trailer, footer entries and records, and checks that encoding the same records, in either input order, reproduces the fixture byte for byte. Round-trip tests alone pass when a refactor changes field order, endianness or checksum coverage in both the encoder and the decoder. The fixture bytes were derived from the documented layout rather than from the encoder, so such a change now fails. Signed-off-by: jeremyhi <fengjiachun@gmail.com> * fix(log-store): reject an empty footer when decoding a WAL object The encoder never writes an object without records, but decode_footer accepted a footer that declares zero segments, and verify_segment_ranges accepts an empty footer too. Only the test-only decode_object rejected it, so a checksum-valid empty object would pass the header, trailer and footer checks that recovery runs. Reject a zero entry count in decode_footer and drop the now unreachable check in decode_object. Add a test that builds a checksum-valid object with an empty footer and checks that decode_footer and decode_object reject it. Signed-off-by: jeremyhi <fengjiachun@gmail.com> * refactor(log-store): use pub(crate) for the WAL object format API Other log-store modules use pub(crate) for items shared across module boundaries. Switch the format module from pub(super) to pub(crate) to follow that convention. No behavior change. Signed-off-by: jeremyhi <fengjiachun@gmail.com> --------- Signed-off-by: jeremyhi <fengjiachun@gmail.com>
407 lines
15 KiB
TOML
407 lines
15 KiB
TOML
[workspace]
|
|
members = [
|
|
"src/api",
|
|
"src/auth",
|
|
"src/cache",
|
|
"src/catalog",
|
|
"src/cli",
|
|
"src/client",
|
|
"src/cmd",
|
|
"src/common/base",
|
|
"src/common/batcher",
|
|
"src/common/catalog",
|
|
"src/common/config",
|
|
"src/common/datasource",
|
|
"src/common/decimal",
|
|
"src/common/error",
|
|
"src/common/event-recorder",
|
|
"src/common/frontend",
|
|
"src/common/function",
|
|
"src/common/greptimedb-telemetry",
|
|
"src/common/grpc",
|
|
"src/common/grpc-expr",
|
|
"src/common/macro",
|
|
"src/common/mem-prof",
|
|
"src/common/memory-manager",
|
|
"src/common/meta",
|
|
"src/common/options",
|
|
"src/common/plugins",
|
|
"src/common/pprof",
|
|
"src/common/procedure",
|
|
"src/common/procedure-test",
|
|
"src/common/query",
|
|
"src/common/recordbatch",
|
|
"src/common/runtime",
|
|
"src/common/session",
|
|
"src/common/sql",
|
|
"src/common/stat",
|
|
"src/common/substrait",
|
|
"src/common/telemetry",
|
|
"src/common/test-util",
|
|
"src/common/time",
|
|
"src/common/version",
|
|
"src/common/wal",
|
|
"src/common/workload",
|
|
"src/datanode",
|
|
"src/datatypes",
|
|
"src/file-engine",
|
|
"src/flow",
|
|
"src/frontend",
|
|
"src/index",
|
|
"src/log-query",
|
|
"src/log-store",
|
|
"src/meta-client",
|
|
"src/meta-srv",
|
|
"src/metric-engine",
|
|
"src/mito-codec",
|
|
"src/mito2",
|
|
"src/object-store",
|
|
"src/operator",
|
|
"src/partition",
|
|
"src/pipeline",
|
|
"src/plugins",
|
|
"src/promql",
|
|
"src/puffin",
|
|
"src/query",
|
|
"src/standalone",
|
|
"src/servers",
|
|
"src/session",
|
|
"src/sql",
|
|
"src/store-api",
|
|
"src/table",
|
|
"tests-fuzz",
|
|
"tests-integration",
|
|
"tests/runner",
|
|
]
|
|
resolver = "2"
|
|
|
|
[workspace.package]
|
|
version = "1.3.0-alpha.1"
|
|
edition = "2024"
|
|
license = "Apache-2.0"
|
|
|
|
[workspace.lints]
|
|
clippy.print_stdout = "warn"
|
|
clippy.print_stderr = "warn"
|
|
clippy.dbg_macro = "warn"
|
|
clippy.implicit_clone = "warn"
|
|
clippy.result_large_err = "allow"
|
|
clippy.large_enum_variant = "allow"
|
|
clippy.doc_overindented_list_items = "allow"
|
|
clippy.uninlined_format_args = "allow"
|
|
rust.unknown_lints = "deny"
|
|
rust.unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tokio_unstable)'] }
|
|
|
|
[workspace.dependencies]
|
|
# DO_NOT_REMOVE_THIS: BEGIN_OF_EXTERNAL_DEPENDENCIES
|
|
# We turn off default-features for some dependencies here so the workspaces which inherit them can
|
|
# selectively turn them on if needed, since we can override default-features = true (from false)
|
|
# for the inherited dependency but cannot do the reverse (override from true to false).
|
|
#
|
|
# See for more detaiils: https://github.com/rust-lang/cargo/issues/11329
|
|
ahash = { version = "0.8", features = ["compile-time-rng"] }
|
|
aquamarine = "0.6"
|
|
arrow = { version = "=59.2.0", features = ["prettyprint"] }
|
|
arrow-array = { version = "=59.2.0", default-features = false, features = ["chrono-tz"] }
|
|
arrow-buffer = "=59.2.0"
|
|
arrow-cast = "=59.2.0"
|
|
arrow-flight = "=59.2.0"
|
|
arrow-ipc = { version = "=59.2.0", default-features = false, features = ["lz4", "zstd"] }
|
|
arrow-schema = { version = "=59.2.0", features = ["serde"] }
|
|
async-stream = "0.3"
|
|
async-trait = "0.1"
|
|
# Remember to update axum-extra, axum-macros when updating axum
|
|
axum = "0.8"
|
|
axum-extra = "0.10"
|
|
axum-macros = "0.5"
|
|
backon = "1"
|
|
base64 = "0.22"
|
|
bigdecimal = "0.4.2"
|
|
bitflags = "2.4.1"
|
|
bytemuck = "1.12"
|
|
bytes = { version = "1.11", features = ["serde"] }
|
|
cap-std = "4.0"
|
|
chrono = { version = "0.4", features = ["serde"] }
|
|
chrono-tz = { version = "0.10", features = ["case-insensitive"] }
|
|
clap = { version = "4.4", features = ["derive"] }
|
|
config = "0.13.0"
|
|
const_format = "0.2"
|
|
crc32fast = "1"
|
|
criterion = "0.7"
|
|
crossbeam-utils = "0.8"
|
|
dashmap = "6.1"
|
|
datafusion = "=55.0.0"
|
|
datafusion-common = "=55.0.0"
|
|
datafusion-datasource = "=55.0.0"
|
|
datafusion-expr = "=55.0.0"
|
|
datafusion-expr-common = "=55.0.0"
|
|
datafusion-functions = "=55.0.0"
|
|
datafusion-functions-aggregate-common = "=55.0.0"
|
|
datafusion-functions-window-common = "=55.0.0"
|
|
datafusion-optimizer = "=55.0.0"
|
|
datafusion-orc = "0.10.0"
|
|
datafusion-pg-catalog = "0.18.3"
|
|
datafusion-physical-expr = "=55.0.0"
|
|
datafusion-physical-plan = "=55.0.0"
|
|
datafusion-proto = "=55.0.0"
|
|
datafusion-sql = "=55.0.0"
|
|
datafusion-substrait = "=55.0.0"
|
|
datafusion_object_store = { package = "object_store", version = "0.13.2" }
|
|
deadpool = "0.12"
|
|
deadpool-postgres = "0.14"
|
|
derive_builder = "0.20"
|
|
derive_more = { version = "2.1", features = ["full"] }
|
|
dotenv = "0.15"
|
|
either = "1.15"
|
|
etcd-client = { version = "0.17", features = [
|
|
"tls",
|
|
"tls-roots",
|
|
] }
|
|
fs2 = "0.4"
|
|
fst = "0.4.7"
|
|
futures = "0.3"
|
|
futures-util = "0.3"
|
|
greptime-proto = { git = "https://github.com/GreptimeTeam/greptime-proto.git", rev = "0c4beffaa2b3968034915867593a717c6ab0c6b4" }
|
|
hex = "0.4"
|
|
hostname = "0.4.0"
|
|
http = "1"
|
|
humantime = "2.1"
|
|
humantime-serde = "1.1"
|
|
hyper = "1.1"
|
|
hyper-util = "0.1"
|
|
icu_properties = "2.0.1"
|
|
indicatif = "0.17"
|
|
itertools = "0.14"
|
|
jsonb = { version = "0.4.4", default-features = false }
|
|
lazy_static = "1.4"
|
|
local-ip-address = "0.6"
|
|
loki-proto = { git = "https://github.com/GreptimeTeam/loki-proto.git", rev = "f69c8924c4babe516373e26a4118be82d976629c" }
|
|
meter-core = { git = "https://github.com/GreptimeTeam/greptime-meter.git", rev = "5618e779cf2bb4755b499c630fba4c35e91898cb" }
|
|
mockall = "0.13"
|
|
moka = "0.12"
|
|
nalgebra = "0.33"
|
|
nix = { version = "0.30.1", default-features = false, features = ["event", "fs", "process"] }
|
|
notify = "8.0"
|
|
num_cpus = "1.16"
|
|
object_store_opendal = "0.58"
|
|
once_cell = "1.18"
|
|
opentelemetry-proto = { version = "0.32", features = [
|
|
"gen-tonic",
|
|
"metrics",
|
|
"trace",
|
|
"with-serde",
|
|
"logs",
|
|
] }
|
|
ordered-float = { version = "4.3", features = ["serde"] }
|
|
otel-arrow-rust = { git = "https://github.com/GreptimeTeam/otel-arrow", rev = "5da284414e9b14f678344b51e5292229e4b5f8d2", features = [
|
|
"server",
|
|
] }
|
|
parking_lot = "0.12"
|
|
parquet = { version = "=59.2.0", default-features = false, features = ["arrow", "async", "object_store"] }
|
|
parquet-variant = "=59.2.0"
|
|
parquet-variant-compute = "=59.2.0"
|
|
parquet-variant-json = "=59.2.0"
|
|
paste = "1.0"
|
|
pin-project = "1.0"
|
|
pretty_assertions = "1.4.0"
|
|
prometheus = { version = "0.14", features = ["process"] }
|
|
promql-parser = { version = "0.10.0", features = ["ser"] }
|
|
prost = { version = "0.14", features = ["no-recursion-limit"] }
|
|
prost-types = "0.14"
|
|
protoc-bin-vendored = "3.2"
|
|
protoc-rust = "2.28"
|
|
raft-engine = { version = "0.4.1", default-features = false }
|
|
rand = "0.9"
|
|
ratelimit = "0.10"
|
|
regex = "1.12"
|
|
regex-automata = "0.4"
|
|
reqwest = { version = "0.13", default-features = false, features = [
|
|
"form",
|
|
"json",
|
|
"query",
|
|
"rustls",
|
|
"stream",
|
|
"multipart",
|
|
] }
|
|
rskafka = { git = "https://github.com/influxdata/rskafka.git", rev = "80f42eb15eb9419579a376bdf4411893a7da2728", features = [
|
|
"transport-tls",
|
|
] }
|
|
rstest = "0.25"
|
|
rstest_reuse = "0.7"
|
|
rust_decimal = "1.33"
|
|
rustc-hash = "2.0"
|
|
rustls = { version = "0.23.25", default-features = false }
|
|
ryu = "1.0"
|
|
sea-query = "0.32"
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
serde_json = { version = "1.0", features = ["float_roundtrip"] }
|
|
serde_with = "3"
|
|
serde_yaml_ng = "0.10"
|
|
simd-json = "0.15"
|
|
similar-asserts = "1.6.0"
|
|
smallvec = { version = "1", features = ["serde"] }
|
|
snafu = "0.8"
|
|
sqlparser = { version = "0.62.0", default-features = false, features = ["std", "visitor", "serde"] }
|
|
sqlx = { version = "0.8", default-features = false, features = [
|
|
"any",
|
|
"macros",
|
|
"json",
|
|
"runtime-tokio",
|
|
"tls-rustls-aws-lc-rs",
|
|
"rust_decimal",
|
|
] }
|
|
stringprep = "0.1"
|
|
strum = { version = "0.27", features = ["derive"] }
|
|
sysinfo = "0.33"
|
|
tempfile = "3"
|
|
tokio = { version = "1.47", features = ["full"] }
|
|
tokio-postgres = "0.7.18"
|
|
tokio-rustls = { version = "0.26.2", default-features = false }
|
|
tokio-stream = "0.1"
|
|
tokio-util = { version = "0.7", features = ["io-util", "compat"] }
|
|
toml = "0.8.8"
|
|
url = "2.3"
|
|
# Pin below 0.14.5 to avoid the `connection_timeout_future` "async fn resumed after
|
|
# completion" panic (greptimedb#8265 / grpc-rust#2522). Remove once tonic ships a fix.
|
|
tonic = { version = "0.14, <0.14.5", features = ["tls-aws-lc", "gzip", "zstd"] }
|
|
tower = "0.5"
|
|
tower-http = "0.6"
|
|
tracing = "0.1"
|
|
tracing-appender = "0.2"
|
|
tracing-opentelemetry = "0.33.0"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter", "json", "fmt"] }
|
|
typetag = "0.2"
|
|
uddsketch-rs = "0.1.0"
|
|
uuid = { version = "1.17", features = ["serde", "v4", "v7", "fast-rng"] }
|
|
vrl = "0.33"
|
|
vu128 = "1.1"
|
|
winner_tree = "0.1.1"
|
|
zstd = "0.13"
|
|
# DO_NOT_REMOVE_THIS: END_OF_EXTERNAL_DEPENDENCIES
|
|
|
|
## workspaces members
|
|
api = { path = "src/api" }
|
|
auth = { path = "src/auth" }
|
|
cache = { path = "src/cache" }
|
|
catalog = { path = "src/catalog" }
|
|
catio = { git = "https://github.com/GreptimeTeam/catio.git", rev = "c75be64e7a58f620f6340c24b5b8d76f131af6aa" }
|
|
cli = { path = "src/cli" }
|
|
client = { path = "src/client" }
|
|
cmd = { path = "src/cmd", default-features = false }
|
|
common-base = { path = "src/common/base" }
|
|
common-batcher = { path = "src/common/batcher" }
|
|
common-catalog = { path = "src/common/catalog" }
|
|
common-config = { path = "src/common/config" }
|
|
common-datasource = { path = "src/common/datasource" }
|
|
common-decimal = { path = "src/common/decimal" }
|
|
common-error = { path = "src/common/error" }
|
|
common-event-recorder = { path = "src/common/event-recorder" }
|
|
common-frontend = { path = "src/common/frontend" }
|
|
common-function = { path = "src/common/function" }
|
|
common-greptimedb-telemetry = { path = "src/common/greptimedb-telemetry" }
|
|
common-grpc = { path = "src/common/grpc" }
|
|
common-grpc-expr = { path = "src/common/grpc-expr" }
|
|
common-macro = { path = "src/common/macro" }
|
|
common-mem-prof = { path = "src/common/mem-prof" }
|
|
common-memory-manager = { path = "src/common/memory-manager" }
|
|
common-meta = { path = "src/common/meta" }
|
|
common-options = { path = "src/common/options" }
|
|
common-plugins = { path = "src/common/plugins" }
|
|
common-pprof = { path = "src/common/pprof" }
|
|
common-procedure = { path = "src/common/procedure" }
|
|
common-procedure-test = { path = "src/common/procedure-test" }
|
|
common-query = { path = "src/common/query" }
|
|
common-recordbatch = { path = "src/common/recordbatch" }
|
|
common-runtime = { path = "src/common/runtime" }
|
|
common-session = { path = "src/common/session" }
|
|
common-sql = { path = "src/common/sql" }
|
|
common-stat = { path = "src/common/stat" }
|
|
common-telemetry = { path = "src/common/telemetry" }
|
|
common-test-util = { path = "src/common/test-util" }
|
|
common-time = { path = "src/common/time" }
|
|
common-version = { path = "src/common/version" }
|
|
common-wal = { path = "src/common/wal" }
|
|
common-workload = { path = "src/common/workload" }
|
|
datanode = { path = "src/datanode" }
|
|
datatypes = { path = "src/datatypes" }
|
|
file-engine = { path = "src/file-engine" }
|
|
flow = { path = "src/flow" }
|
|
frontend = { path = "src/frontend", default-features = false }
|
|
index = { path = "src/index" }
|
|
log-query = { path = "src/log-query" }
|
|
log-store = { path = "src/log-store" }
|
|
meta-client = { path = "src/meta-client" }
|
|
meta-srv = { path = "src/meta-srv" }
|
|
metric-engine = { path = "src/metric-engine" }
|
|
mito-codec = { path = "src/mito-codec" }
|
|
mito2 = { path = "src/mito2" }
|
|
object-store = { path = "src/object-store" }
|
|
operator = { path = "src/operator" }
|
|
partition = { path = "src/partition" }
|
|
pipeline = { path = "src/pipeline" }
|
|
plugins = { path = "src/plugins" }
|
|
promql = { path = "src/promql" }
|
|
puffin = { path = "src/puffin" }
|
|
query = { path = "src/query" }
|
|
servers = { path = "src/servers" }
|
|
session = { path = "src/session" }
|
|
sql = { path = "src/sql" }
|
|
standalone = { path = "src/standalone" }
|
|
store-api = { path = "src/store-api" }
|
|
substrait = { path = "src/common/substrait" }
|
|
table = { path = "src/table" }
|
|
|
|
[workspace.dependencies.meter-macros]
|
|
git = "https://github.com/GreptimeTeam/greptime-meter.git"
|
|
rev = "5618e779cf2bb4755b499c630fba4c35e91898cb"
|
|
|
|
[patch.crates-io]
|
|
substrait = { git = "https://github.com/GreptimeTeam/substrait-rs.git", rev = "91ec978b0649417ad3da8390e7a515baec723b1b" }
|
|
datafusion = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "b66dca3260c8e04f314c8036cdfbb08f1a564d95" }
|
|
datafusion-common = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "b66dca3260c8e04f314c8036cdfbb08f1a564d95" }
|
|
datafusion-datasource = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "b66dca3260c8e04f314c8036cdfbb08f1a564d95" }
|
|
datafusion-expr = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "b66dca3260c8e04f314c8036cdfbb08f1a564d95" }
|
|
datafusion-expr-common = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "b66dca3260c8e04f314c8036cdfbb08f1a564d95" }
|
|
datafusion-functions = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "b66dca3260c8e04f314c8036cdfbb08f1a564d95" }
|
|
datafusion-functions-aggregate-common = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "b66dca3260c8e04f314c8036cdfbb08f1a564d95" }
|
|
datafusion-functions-window-common = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "b66dca3260c8e04f314c8036cdfbb08f1a564d95" }
|
|
datafusion-optimizer = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "b66dca3260c8e04f314c8036cdfbb08f1a564d95" }
|
|
datafusion-physical-expr = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "b66dca3260c8e04f314c8036cdfbb08f1a564d95" }
|
|
datafusion-physical-expr-common = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "b66dca3260c8e04f314c8036cdfbb08f1a564d95" }
|
|
datafusion-physical-plan = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "b66dca3260c8e04f314c8036cdfbb08f1a564d95" }
|
|
datafusion-proto = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "b66dca3260c8e04f314c8036cdfbb08f1a564d95" }
|
|
datafusion-sql = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "b66dca3260c8e04f314c8036cdfbb08f1a564d95" }
|
|
datafusion-substrait = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "b66dca3260c8e04f314c8036cdfbb08f1a564d95" }
|
|
datafusion-pg-catalog = { git = "https://github.com/GreptimeTeam/datafusion-postgres.git", rev = "3c77e6c32b8db80635a0d2f4b318a36b31170bc3" }
|
|
arrow-pg = { git = "https://github.com/GreptimeTeam/datafusion-postgres.git", rev = "3c77e6c32b8db80635a0d2f4b318a36b31170bc3" }
|
|
sqlparser = { git = "https://github.com/GreptimeTeam/sqlparser-rs.git", rev = "9e9019bb1c7040ed956f654e39378dd42ab17884" }
|
|
|
|
# Temporary: use the GreptimeTeam fork of tikv-jemalloc-sys embedding
|
|
# jemalloc 5.3.1 + backport of 54f22c83 ("Initialize TSD tcache before
|
|
# enabling it"), fixing the TSD/tcache enable-before-init reentrancy
|
|
# window. Remove once tikv/jemallocator ships a jemalloc snapshot that
|
|
# includes the fix. See GreptimeTeam/jemalloc#1.
|
|
tikv-jemalloc-sys = { git = "https://github.com/GreptimeTeam/jemallocator", rev = "e254a7eaf13a9ede04953ddefd173b5303018530" }
|
|
|
|
[profile.release]
|
|
debug = 1
|
|
|
|
[profile.nightly]
|
|
inherits = "release"
|
|
strip = "debuginfo"
|
|
lto = "thin"
|
|
debug = false
|
|
incremental = false
|
|
|
|
[profile.ci]
|
|
inherits = "dev"
|
|
strip = true
|
|
|
|
[profile.dev.package.sqlness-runner]
|
|
debug = false
|
|
strip = true
|
|
|
|
[profile.dev.package.tests-fuzz]
|
|
debug = false
|
|
strip = true
|