-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathCargo.toml
More file actions
189 lines (166 loc) · 7.46 KB
/
Copy pathCargo.toml
File metadata and controls
189 lines (166 loc) · 7.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
[workspace]
resolver = "3"
members = [
"crates/icegate-common",
"crates/icegate-catalog-s3",
"crates/icegate-queue",
"crates/icegate-query",
"crates/icegate-ingest",
"crates/icegate-maintain",
]
[workspace.package]
version = "0.2.0"
edition = "2024"
# The same version `rust-toolchain.toml` pins, and it moves in the same commit.
# Nothing here is built or linted with anything else: rustup obeys that pin on a
# workstation, CI hands it to dtolnay/rust-toolchain, and `pedantic = "deny"`
# below makes each release's new lints part of the contract. A lower number here
# would be a second, untested claim about which compiler this workspace needs.
rust-version = "1.98.0"
authors = ["IceGate Tech"]
license = "Apache-2.0"
repository = "https://github.com/icegatetech/icegate"
[workspace.lints.rust]
unsafe_code = "forbid"
missing_docs = "deny"
unused_imports = "deny"
unused_variables = "deny"
dead_code = "deny"
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tokio_unstable)', 'cfg(icegate_sanitize)'] }
[workspace.lints.clippy]
pedantic = { level = "deny", priority = -1 }
nursery = { level = "deny", priority = -1 }
perf = { level = "deny", priority = -1 }
cargo = { level = "deny", priority = -1 }
correctness = { level = "deny", priority = -1 }
dbg_macro = "deny"
todo = "deny"
unimplemented = "deny"
print_stdout = "deny"
print_stderr = "deny"
unwrap_used = "deny"
expect_used = "deny"
must_use_candidate = "allow"
missing_errors_doc = "allow"
missing_panics_doc = "allow"
module_name_repetitions = "allow"
multiple_crate_versions = "allow"
single_match_else = "allow"
redundant_pub_crate = "allow"
[workspace.dependencies]
# Internal crates
icegate-common = { path = "crates/icegate-common" }
icegate-catalog-s3 = { path = "crates/icegate-catalog-s3" }
icegate-queue = { path = "crates/icegate-queue" }
# The job/task framework, extracted to icegatetech/jobmanager as a standalone tool.
# It is not published to a registry, so a version IS a git rev. Pinned to an immutable
# rev (not a branch) for reproducible builds; bump the SHA deliberately, together with a
# run of the ingest/maintain integration tests that drive shift and compaction through it.
# `metrics-otel` is the crate's `MetricsSink` implementation over OpenTelemetry. A cargo
# feature is workspace-wide, so it is enabled once here; which pool actually records is
# decided per pool by whether it is given a sink (`JobsManagerBuilder::metrics`).
jobmanager = { git = "https://github.com/icegatetech/jobmanager", rev = "db738dd87443f3d30d85cbba0bd604f98df4ef97", features = ["metrics-otel"] }
# Arrow ecosystem (must match iceberg's version)
arrow = { version = "58.4", default-features = false, features = ["prettyprint"] }
arrow-flight = { version = "58.4", default-features = false, features = ["flight-sql"] }
parquet = { version = "58.4", default-features = false, features = ["arrow", "object_store", "zstd"] }
object_store = { version = "0.13", features = ["aws"] }
opendal = { version = "0.57", features = ["services-s3", "services-fs", "layers-otel-trace", "layers-otel-metrics"]}
# Pinned exactly. 0.56/0.57 want object_store ^0.13.1, which is what parquet 58.4
# uses; 0.58.x moves to opendal 0.58, whose Layer trait was redesigned around
# `Servicer`/`apply_service` and would require rewriting CacheLayer/PrefetchLayer.
object_store_opendal = { version = "=0.57.0" }
foyer = { version = "0.22", features = ["serde"] }
typetag = "0.2"
# reqsign is a transitive dep of iceberg-storage-opendal; `reqwest_request` and
# `services-aws` were previously unified by the crates.io opendal `services-s3`
# feature but are lost under the git patch. Declaring it here restores them.
reqsign = { version = "0.16", default-features = false, features = ["reqwest_request", "services-aws"] }
# Error handling
thiserror = "2"
# Utilities
uuid = { version = "1.19", features = ["v7", "v4", "serde"] }
async-trait = "0.1"
tikv-jemallocator = "0.6"
# ANTLR parser
antlr4rust = "0.5"
# Sourced from the icegatetech/iceberg-rust fork (0.9.0 base).
# Pinned to an immutable rev (not a branch) for reproducible builds; bump the SHA
# deliberately when adopting fork updates rather than letting `develop` float.
iceberg = { git = "https://github.com/icegatetech/iceberg-rust", rev = "22d0e8b29f3ba7f6c99395088a8fe5cddb24117d" }
iceberg-catalog-rest = { git = "https://github.com/icegatetech/iceberg-rust", rev = "22d0e8b29f3ba7f6c99395088a8fe5cddb24117d" }
iceberg-catalog-s3tables = { git = "https://github.com/icegatetech/iceberg-rust", rev = "22d0e8b29f3ba7f6c99395088a8fe5cddb24117d" }
iceberg-catalog-glue = { git = "https://github.com/icegatetech/iceberg-rust", rev = "22d0e8b29f3ba7f6c99395088a8fe5cddb24117d" }
iceberg-storage-opendal = { git = "https://github.com/icegatetech/iceberg-rust", rev = "22d0e8b29f3ba7f6c99395088a8fe5cddb24117d", features = ["opendal-s3"] }
iceberg-datafusion = { git = "https://github.com/icegatetech/iceberg-rust", rev = "22d0e8b29f3ba7f6c99395088a8fe5cddb24117d" }
# DataFusion
datafusion = "54.1"
datafusion-tracing = "54.0"
# 0.4.15 builds against datafusion 52 / arrow-flight 57, which no longer unify
# with the pins above (SQLOptions, SessionState and the FlightSqlService trait all
# came out as distinct types). 0.4.18 targets datafusion ^54 / arrow-flight ^58.3,
# and dropping the 52 subtree also removes the second object_store from the graph.
datafusion-flight-sql-server = "=0.4.18"
# Async runtime
tokio = { version = "1.48.0", features = ["full", "tracing"] }
tokio-util = "0.7"
tokio-stream = "0.1"
futures = "0.3.31"
# CLI
clap = { version = "4", features = ["derive"] }
# Configuration
serde = { version = "1", features = ["derive"] }
serde_json = "1"
serde_yaml = "0.9"
toml = "1.0.6"
# HTTP server
axum = "0.8.8"
axum-extra = { version = "0.12.5", features = ["query"] }
tower-http = { version = "0.6.8", features = ["trace", "decompression-gzip", "decompression-zstd", "timeout"] }
# gRPC server
tonic = "0.14"
prost = "0.14"
# Tower service/layer traits plus the HTTP body types they carry. Needed to write
# middleware of our own (`icegate-query::infra::deadline`); tonic and axum both
# already build on these exact versions.
tower = "0.5"
http = "1"
http-body = "1"
# OpenTelemetry proto (with tonic service generation)
# The OpenTelemetry stack moves as a unit, and opendal 0.57's otel layers build
# against opentelemetry 0.32 — so bumping opendal drags the whole set with it.
opentelemetry-instrumentation-tokio = "0.2"
opentelemetry-proto = { version = "0.32.0", features = ["gen-tonic", "logs", "trace", "metrics"] }
opentelemetry-resource-detectors = "0.11"
opentelemetry = { version = "0.32.0", features = ["metrics", "trace"] }
opentelemetry_sdk = { version = "0.32.1", features = ["metrics", "trace", "rt-tokio", "spec_unstable_metrics_views"] }
opentelemetry-prometheus = "0.32.0"
prometheus = "0.14.0"
# OpenTelemetry tracing integration
tracing-opentelemetry = "0.33.0"
opentelemetry-otlp = { version = "0.32.0", features = ["grpc-tonic", "trace"] }
# Logging
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
# Date and time
chrono = { version = "0.4", features = ["serde"] }
# Regex for matcher evaluation
regex = "1.12"
# Utilities
itoa = "1"
bytes = "1.11.1"
base64 = "0.22"
percent-encoding = "2"
sha2 = "0.10"
dashmap = "6.1"
lru = "0.18"
url = "2"
hex = "0.4"
rand = "0.9.2"
# Dev dependencies
reqwest = { version = "0.13.2", features = ["json", "query"] }
tempfile = "3"
testcontainers = { version = "0.27", features = ["http_wait"] }
aws-config = "1.8"
aws-sdk-s3 = "1.127"
criterion = "0.8.2"