feat(tvix/castore): bump [Directory,File]Node size to u64

Having more than 4GiB files is quite possible (think about the NixOS
graphical installer, and an uncompressed iso of it).

No wire format changes.

Change-Id: Ia78a07e4c554e91b93c5b9f8533266e4bd7f22b6
Reviewed-on: https://cl.tvl.fyi/c/depot/+/9950
Reviewed-by: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
This commit is contained in:
Florian Klink 2023-11-05 10:53:42 +02:00 committed by flokli
parent 47e34b2c36
commit 2546446d51
16 changed files with 55 additions and 57 deletions

View file

@ -217,7 +217,7 @@ mod tests {
let mut inode_tracker = InodeTracker::default();
let f = InodeData::Regular(
fixtures::BLOB_A_DIGEST.clone(),
fixtures::BLOB_A.len() as u32,
fixtures::BLOB_A.len() as u64,
false,
);
@ -241,7 +241,7 @@ mod tests {
ino,
inode_tracker.put(InodeData::Regular(
fixtures::BLOB_B_DIGEST.clone(),
fixtures::BLOB_B.len() as u32,
fixtures::BLOB_B.len() as u64,
false,
))
);

View file

@ -5,7 +5,7 @@ use tvix_castore::B3Digest;
#[derive(Clone, Debug)]
pub enum InodeData {
Regular(B3Digest, u32, bool), // digest, size, executable
Regular(B3Digest, u64, bool), // digest, size, executable
Symlink(bytes::Bytes), // target
Directory(DirectoryInodeData), // either [DirectoryInodeData:Sparse] or [DirectoryInodeData:Populated]
}
@ -16,7 +16,7 @@ pub enum InodeData {
/// lookup and did fetch the data.
#[derive(Clone, Debug)]
pub enum DirectoryInodeData {
Sparse(B3Digest, u32), // digest, size
Sparse(B3Digest, u64), // digest, size
Populated(B3Digest, Vec<(u64, castorepb::node::Node)>), // [(child_inode, node)]
}

View file

@ -71,7 +71,7 @@ async fn populate_blob_a(
node: Some(castorepb::node::Node::File(castorepb::FileNode {
name: BLOB_A_NAME.into(),
digest: fixtures::BLOB_A_DIGEST.clone().into(),
size: fixtures::BLOB_A.len() as u32,
size: fixtures::BLOB_A.len() as u64,
executable: false,
})),
}),
@ -101,7 +101,7 @@ async fn populate_blob_b(
node: Some(castorepb::node::Node::File(castorepb::FileNode {
name: BLOB_B_NAME.into(),
digest: fixtures::BLOB_B_DIGEST.clone().into(),
size: fixtures::BLOB_B.len() as u32,
size: fixtures::BLOB_B.len() as u64,
executable: false,
})),
}),
@ -135,7 +135,7 @@ async fn populate_helloworld_blob(
node: Some(castorepb::node::Node::File(castorepb::FileNode {
name: HELLOWORLD_BLOB_NAME.into(),
digest: fixtures::HELLOWORLD_BLOB_DIGEST.clone().into(),
size: fixtures::HELLOWORLD_BLOB_CONTENTS.len() as u32,
size: fixtures::HELLOWORLD_BLOB_CONTENTS.len() as u64,
executable: true,
})),
}),
@ -262,7 +262,7 @@ async fn populate_blob_a_without_blob(
node: Some(castorepb::node::Node::File(castorepb::FileNode {
name: BLOB_A_NAME.into(),
digest: fixtures::BLOB_A_DIGEST.clone().into(),
size: fixtures::BLOB_A.len() as u32,
size: fixtures::BLOB_A.len() as u64,
executable: false,
})),
}),

View file

@ -136,7 +136,7 @@ async fn walk_node(
nar_node
.file(
proto_file_node.executable,
proto_file_node.size.into(),
proto_file_node.size,
&mut blob_reader.compat(),
)
.await

View file

@ -37,7 +37,7 @@ async fn single_file_missing_blob() {
&castorepb::node::Node::File(FileNode {
name: "doesntmatter".into(),
digest: HELLOWORLD_BLOB_DIGEST.clone().into(),
size: HELLOWORLD_BLOB_CONTENTS.len() as u32,
size: HELLOWORLD_BLOB_CONTENTS.len() as u64,
executable: false,
}),
// the blobservice is empty intentionally, to provoke the error.
@ -150,7 +150,7 @@ async fn single_file() {
&castorepb::node::Node::File(FileNode {
name: "doesntmatter".into(),
digest: HELLOWORLD_BLOB_DIGEST.clone().into(),
size: HELLOWORLD_BLOB_CONTENTS.len() as u32,
size: HELLOWORLD_BLOB_CONTENTS.len() as u64,
executable: false,
}),
blob_service,