Skip to content

Commit 1cdfb30

Browse files
committed
temporary command to recompress broken index files in storage
1 parent 7dfb7f4 commit 1cdfb30

File tree

7 files changed

+507
-19
lines changed

7 files changed

+507
-19
lines changed

.sqlx/query-29e5ac519965abe821ae15c21014d9943a38c16ca49ba014d8227df1b605bad9.json

Lines changed: 41 additions & 0 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
@@ -59,7 +59,7 @@ bzip2 = "0.6.0"
5959
getrandom = "0.3.1"
6060
itertools = { version = "0.14.0" }
6161
hex = "0.4.3"
62-
derive_more = { version = "2.0.0", features = ["display", "deref", "from", "into"] }
62+
derive_more = { version = "2.0.0", features = ["display", "deref", "from", "into", "from_str"] }
6363
sysinfo = { version = "0.37.2", default-features = false, features = ["system"] }
6464
derive_builder = "0.20.2"
6565

Justfile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,11 @@ sqlx-prepare ADDITIONAL_ARGS="":
1111
sqlx-check:
1212
just sqlx-prepare "--check"
1313

14-
lint:
15-
cargo clippy --all-features --all-targets --workspace --locked -- -D warnings
14+
lint *args:
15+
cargo clippy --all-features --all-targets --workspace --locked {{ args }} -- -D warnings
16+
17+
lint-fix:
18+
just lint --fix --allow-dirty --allow-staged
1619

1720
lint-js *args:
1821
deno run -A npm:eslint@9 static templates gui-tests eslint.config.js {{ args }}

src/bin/cratesfyi.rs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use anyhow::{Context as _, Result, anyhow};
22
use clap::{Parser, Subcommand, ValueEnum};
33
use docs_rs::{
44
Config, Context, PackageKind, RustwideBuilder,
5-
db::{self, CrateId, Overrides, add_path_into_database, types::version::Version},
5+
db::{self, CrateId, Overrides, ReleaseId, add_path_into_database, types::version::Version},
66
start_background_metrics_webserver, start_web_server,
77
utils::{
88
ConfigName, get_config, get_crate_pattern_and_priority, list_crate_priorities,
@@ -531,6 +531,16 @@ enum DatabaseSubcommand {
531531
/// Backfill GitHub/GitLab stats for crates.
532532
BackfillRepositoryStats,
533533

534+
/// Recompress broken archive index files in storage.
535+
RecompressArchiveIndexes {
536+
#[arg(long)]
537+
min_release_id: Option<ReleaseId>,
538+
#[arg(long)]
539+
max_release_id: Option<ReleaseId>,
540+
#[arg(long)]
541+
concurrency: Option<u8>,
542+
},
543+
534544
/// Updates info for a crate from the registry's API
535545
UpdateCrateRegistryFields {
536546
#[arg(name = "CRATE")]
@@ -619,6 +629,28 @@ impl DatabaseSubcommand {
619629
db::update_crate_data_in_database(&mut conn, &name, &registry_data).await
620630
})?,
621631

632+
Self::RecompressArchiveIndexes {
633+
min_release_id,
634+
max_release_id,
635+
concurrency,
636+
} => ctx.runtime.block_on(async move {
637+
let mut conn = ctx.pool.get_async().await?;
638+
639+
let (checked, recompressed) = ctx
640+
.async_storage
641+
.recompress_index_files_in_bucket(
642+
&mut conn,
643+
min_release_id,
644+
max_release_id,
645+
concurrency.map(Into::into),
646+
)
647+
.await?;
648+
649+
println!("{} index files checked", checked);
650+
println!("{} index files recompressed", recompressed);
651+
Ok::<_, anyhow::Error>(())
652+
})?,
653+
622654
Self::AddDirectory { directory } => {
623655
ctx.runtime
624656
.block_on(add_path_into_database(

src/db/types/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use derive_more::Display;
1+
use derive_more::{Display, FromStr};
22
use serde::{Deserialize, Serialize};
33

44
pub mod dependencies;
@@ -8,7 +8,7 @@ pub mod version;
88
#[sqlx(transparent)]
99
pub struct CrateId(pub i32);
1010

11-
#[derive(Debug, Clone, Copy, Display, PartialEq, Eq, Hash, Serialize, sqlx::Type)]
11+
#[derive(Debug, Clone, Copy, Display, PartialEq, Eq, Hash, FromStr, Serialize, sqlx::Type)]
1212
#[sqlx(transparent)]
1313
pub struct ReleaseId(pub i32);
1414

src/storage/archive_index.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
use crate::error::Result;
2-
use crate::storage::{FileRange, compression::CompressionAlgorithm};
1+
use crate::{
2+
error::Result,
3+
storage::{FileRange, compression::CompressionAlgorithm},
4+
};
35
use anyhow::{Context as _, bail};
46
use itertools::Itertools as _;
57
use sqlx::{Acquire as _, QueryBuilder, Row as _, Sqlite};

0 commit comments

Comments
 (0)