drop ulid dependency

...and use v7 UUIDs exclusively. It's useful to have the timestamp in
request ids in particular, and no reason we _need_ v4 anywhere.
This commit is contained in:
Scott Lamb 2025-02-07 06:25:35 -08:00
parent d780b28cc2
commit 0bfa09b1f1
6 changed files with 15 additions and 35 deletions

24
server/Cargo.lock generated
View File

@ -1256,7 +1256,6 @@ dependencies = [
"tempfile", "tempfile",
"tokio", "tokio",
"tracing", "tracing",
"ulid",
"url", "url",
"uuid", "uuid",
] ]
@ -1272,6 +1271,7 @@ dependencies = [
"byteorder", "byteorder",
"bytes", "bytes",
"cursive", "cursive",
"data-encoding",
"flate2", "flate2",
"futures", "futures",
"h264-reader", "h264-reader",
@ -1314,7 +1314,6 @@ dependencies = [
"tracing-log", "tracing-log",
"tracing-subscriber", "tracing-subscriber",
"tracing-test", "tracing-test",
"ulid",
"url", "url",
"uuid", "uuid",
"walkdir", "walkdir",
@ -2547,16 +2546,6 @@ version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
[[package]]
name = "ulid"
version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f294bff79170ed1c5633812aff1e565c35d993a36e757f9bc0accf5eec4e6045"
dependencies = [
"rand",
"web-time",
]
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.15" version = "1.0.15"
@ -2618,6 +2607,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b3758f5e68192bb96cc8f9b7e2c2cfdabb435499a28499a42f8f984092adad4b" checksum = "b3758f5e68192bb96cc8f9b7e2c2cfdabb435499a28499a42f8f984092adad4b"
dependencies = [ dependencies = [
"getrandom", "getrandom",
"rand",
"serde", "serde",
] ]
@ -2745,16 +2735,6 @@ dependencies = [
"wasm-bindgen", "wasm-bindgen",
] ]
[[package]]
name = "web-time"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
dependencies = [
"js-sys",
"wasm-bindgen",
]
[[package]] [[package]]
name = "which" name = "which"
version = "4.4.2" version = "4.4.2"

View File

@ -36,6 +36,7 @@ tracing-core = "0.1.30"
tracing-futures = { version = "0.2.5", features = ["futures-03", "std-future"] } tracing-futures = { version = "0.2.5", features = ["futures-03", "std-future"] }
tracing-log = "0.2" tracing-log = "0.2"
tracing-subscriber = { version = "0.3.16" } tracing-subscriber = { version = "0.3.16" }
uuid = { version = "1.1.2", features = ["serde", "std", "v7", "fast-rng"] }
[dependencies] [dependencies]
base = { package = "moonfire-base", path = "base" } base = { package = "moonfire-base", path = "base" }
@ -45,6 +46,7 @@ bpaf = { version = "0.9.15", features = ["autocomplete", "bright-color", "derive
bytes = "1" bytes = "1"
byteorder = "1.0" byteorder = "1.0"
cursive = { version = "0.21.1", default-features = false, features = ["termion-backend"] } cursive = { version = "0.21.1", default-features = false, features = ["termion-backend"] }
data-encoding = "2.7.0"
db = { package = "moonfire-db", path = "db" } db = { package = "moonfire-db", path = "db" }
futures = "0.3" futures = "0.3"
h264-reader = { workspace = true } h264-reader = { workspace = true }
@ -76,9 +78,8 @@ tracing-subscriber = { version = "0.3.16", features = ["env-filter", "json"] }
tracing-core = "0.1.30" tracing-core = "0.1.30"
tracing-futures = { version = "0.2.5", features = ["futures-03", "std-future"] } tracing-futures = { version = "0.2.5", features = ["futures-03", "std-future"] }
tracing-log = { workspace = true } tracing-log = { workspace = true }
ulid = "1.0.0"
url = "2.1.1" url = "2.1.1"
uuid = { version = "1.1.2", features = ["serde", "std", "v4"] } uuid = { workspace = true }
flate2 = "1.0.26" flate2 = "1.0.26"
hyper-util = { version = "0.1.7", features = ["server-graceful", "tokio"] } hyper-util = { version = "0.1.7", features = ["server-graceful", "tokio"] }
http-body = "1.0.1" http-body = "1.0.1"

View File

@ -39,9 +39,8 @@ smallvec = "1.0"
tempfile = "3.2.0" tempfile = "3.2.0"
tokio = { version = "1.24", features = ["macros", "rt-multi-thread", "sync"] } tokio = { version = "1.24", features = ["macros", "rt-multi-thread", "sync"] }
tracing = { workspace = true } tracing = { workspace = true }
ulid = "1.0.0"
url = { version = "2.1.1", features = ["serde"] } url = { version = "2.1.1", features = ["serde"] }
uuid = { version = "1.1.2", features = ["serde", "std", "v4"] } uuid = { workspace = true }
[build-dependencies] [build-dependencies]
protobuf-codegen = "3.0" protobuf-codegen = "3.0"

View File

@ -1797,7 +1797,7 @@ impl LockedDatabase {
pub fn add_sample_file_dir(&mut self, path: PathBuf) -> Result<i32, Error> { pub fn add_sample_file_dir(&mut self, path: PathBuf) -> Result<i32, Error> {
let mut meta = schema::DirMeta::default(); let mut meta = schema::DirMeta::default();
let uuid = Uuid::new_v4(); let uuid = Uuid::now_v7();
let uuid_bytes = &uuid.as_bytes()[..]; let uuid_bytes = &uuid.as_bytes()[..];
let o = self let o = self
.open .open
@ -1906,7 +1906,7 @@ impl LockedDatabase {
/// Adds a camera. /// Adds a camera.
pub fn add_camera(&mut self, mut camera: CameraChange) -> Result<i32, Error> { pub fn add_camera(&mut self, mut camera: CameraChange) -> Result<i32, Error> {
let uuid = Uuid::new_v4(); let uuid = Uuid::now_v7();
let uuid_bytes = &uuid.as_bytes()[..]; let uuid_bytes = &uuid.as_bytes()[..];
let tx = self.conn.transaction()?; let tx = self.conn.transaction()?;
let streams; let streams;
@ -2227,7 +2227,7 @@ pub fn init(conn: &mut rusqlite::Connection) -> Result<(), Error> {
tx.execute_batch(include_str!("schema.sql")) tx.execute_batch(include_str!("schema.sql"))
.map_err(|e| err!(e, msg("unable to create database schema")))?; .map_err(|e| err!(e, msg("unable to create database schema")))?;
{ {
let uuid = ::uuid::Uuid::new_v4(); let uuid = ::uuid::Uuid::now_v7();
let uuid_bytes = &uuid.as_bytes()[..]; let uuid_bytes = &uuid.as_bytes()[..];
tx.execute("insert into meta (uuid) values (?)", params![uuid_bytes])?; tx.execute("insert into meta (uuid) values (?)", params![uuid_bytes])?;
} }
@ -2353,7 +2353,7 @@ impl<C: Clocks + Clone> Database<C> {
let real = recording::Time::from(clocks.realtime()); let real = recording::Time::from(clocks.realtime());
let mut stmt = conn let mut stmt = conn
.prepare(" insert into open (uuid, start_time_90k, boot_uuid) values (?, ?, ?)")?; .prepare(" insert into open (uuid, start_time_90k, boot_uuid) values (?, ?, ?)")?;
let open_uuid = SqlUuid(Uuid::new_v4()); let open_uuid = SqlUuid(Uuid::now_v7());
let boot_uuid = match get_boot_uuid() { let boot_uuid = match get_boot_uuid() {
Err(e) => { Err(e) => {
warn!(err = %e.chain(), "unable to get boot uuid"); warn!(err = %e.chain(), "unable to get boot uuid");

View File

@ -80,17 +80,17 @@ pub fn run(args: &super::Args, tx: &rusqlite::Transaction) -> Result<(), Error>
create index user_session_uid on user_session (user_id); create index user_session_uid on user_session (user_id);
"#, "#,
)?; )?;
let db_uuid = ::uuid::Uuid::new_v4(); let db_uuid = ::uuid::Uuid::now_v7();
let db_uuid_bytes = &db_uuid.as_bytes()[..]; let db_uuid_bytes = &db_uuid.as_bytes()[..];
tx.execute("insert into meta (uuid) values (?)", params![db_uuid_bytes])?; tx.execute("insert into meta (uuid) values (?)", params![db_uuid_bytes])?;
let open_uuid = ::uuid::Uuid::new_v4(); let open_uuid = ::uuid::Uuid::now_v7();
let open_uuid_bytes = &open_uuid.as_bytes()[..]; let open_uuid_bytes = &open_uuid.as_bytes()[..];
tx.execute( tx.execute(
"insert into open (uuid) values (?)", "insert into open (uuid) values (?)",
params![open_uuid_bytes], params![open_uuid_bytes],
)?; )?;
let open_id = tx.last_insert_rowid() as u32; let open_id = tx.last_insert_rowid() as u32;
let dir_uuid = ::uuid::Uuid::new_v4(); let dir_uuid = ::uuid::Uuid::now_v7();
let dir_uuid_bytes = &dir_uuid.as_bytes()[..]; let dir_uuid_bytes = &dir_uuid.as_bytes()[..];
// Write matching metadata to the directory. // Write matching metadata to the directory.

View File

@ -319,7 +319,7 @@ impl Service {
req: Request<::hyper::body::Incoming>, req: Request<::hyper::body::Incoming>,
conn_data: ConnData, conn_data: ConnData,
) -> Result<Response<Body>, std::convert::Infallible> { ) -> Result<Response<Body>, std::convert::Infallible> {
let request_id = ulid::Ulid::new(); let request_id = uuid::Uuid::now_v7();
let authreq = auth::Request { let authreq = auth::Request {
when_sec: Some(self.db.clocks().realtime().as_secs()), when_sec: Some(self.db.clocks().realtime().as_secs()),
addr: if self.trust_forward_hdrs { addr: if self.trust_forward_hdrs {
@ -340,7 +340,7 @@ impl Service {
// https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/http/ // https://opentelemetry.io/docs/reference/specification/trace/semantic_conventions/http/
let span = tracing::info_span!( let span = tracing::info_span!(
"request", "request",
%request_id, request_id = %data_encoding::BASE32_NOPAD.encode_display(request_id.as_bytes()),
net.sock.peer.uid = conn_data.client_unix_uid.map(tracing::field::display), net.sock.peer.uid = conn_data.client_unix_uid.map(tracing::field::display),
http.client_ip = authreq.addr.map(tracing::field::display), http.client_ip = authreq.addr.map(tracing::field::display),
http.method = %req.method(), http.method = %req.method(),