Skip to content

Commit 7ad8c62

Browse files
committed
downgrade ZIP dependency to a version that supports >65k files
1 parent 2eb0516 commit 7ad8c62

File tree

3 files changed

+94
-21
lines changed

3 files changed

+94
-21
lines changed

Cargo.lock

Lines changed: 60 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ font-awesome-as-a-crate = { path = "crates/font-awesome-as-a-crate" }
6363
dashmap = "5.1.0"
6464
string_cache = "0.8.0"
6565
postgres-types = { version = "0.2", features = ["derive"] }
66-
zip = {version = "2.1.3", default-features = false, features = ["bzip2"]}
66+
zip = {version = "1.1.4", default-features = false, features = ["bzip2"]}
6767
bzip2 = "0.4.4"
6868
getrandom = "0.2.1"
6969
itertools = { version = "0.13.0", optional = true}

src/storage/archive_index.rs

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -119,31 +119,33 @@ mod tests {
119119
use std::io::Write;
120120
use zip::write::SimpleFileOptions;
121121

122-
fn create_test_archive() -> fs::File {
122+
fn create_test_archive(file_count: u32) -> fs::File {
123123
let mut tf = tempfile::tempfile().unwrap();
124124

125125
let objectcontent: Vec<u8> = (0..255).collect();
126126

127127
let mut archive = zip::ZipWriter::new(tf);
128-
archive
129-
.start_file(
130-
"testfile1",
131-
SimpleFileOptions::default().compression_method(zip::CompressionMethod::Bzip2),
132-
)
133-
.unwrap();
134-
archive.write_all(&objectcontent).unwrap();
128+
for i in 0..file_count {
129+
archive
130+
.start_file(
131+
format!("testfile{i}"),
132+
SimpleFileOptions::default().compression_method(zip::CompressionMethod::Bzip2),
133+
)
134+
.unwrap();
135+
archive.write_all(&objectcontent).unwrap();
136+
}
135137
tf = archive.finish().unwrap();
136138
tf
137139
}
138140

139141
#[test]
140142
fn index_create_save_load_sqlite() {
141-
let mut tf = create_test_archive();
143+
let mut tf = create_test_archive(1);
142144

143145
let tempfile = tempfile::NamedTempFile::new().unwrap().into_temp_path();
144146
create(&mut tf, &tempfile).unwrap();
145147

146-
let fi = find_in_file(&tempfile, "testfile1").unwrap().unwrap();
148+
let fi = find_in_file(&tempfile, "testfile0").unwrap().unwrap();
147149

148150
assert_eq!(fi.range, FileRange::new(39, 459));
149151
assert_eq!(fi.compression, CompressionAlgorithm::Bzip2);
@@ -152,4 +154,25 @@ mod tests {
152154
.unwrap()
153155
.is_none());
154156
}
157+
158+
#[test]
159+
fn archive_with_more_than_65k_files() {
160+
let mut tf = create_test_archive(100_000);
161+
162+
let tempfile = tempfile::NamedTempFile::new().unwrap().into_temp_path();
163+
create(&mut tf, &tempfile).unwrap();
164+
165+
let connection = Connection::open_with_flags(
166+
tempfile,
167+
OpenFlags::SQLITE_OPEN_READ_ONLY | OpenFlags::SQLITE_OPEN_NO_MUTEX,
168+
)
169+
.unwrap();
170+
let mut stmt = connection.prepare("SELECT count(*) FROM files").unwrap();
171+
172+
let count = stmt
173+
.query_row([], |row| Ok(row.get::<_, usize>(0)))
174+
.unwrap()
175+
.unwrap();
176+
assert_eq!(count, 100_000);
177+
}
155178
}

0 commit comments

Comments
 (0)