Skip to content

Commit 784c521

Browse files
committed
also queue rebuilds for broken db indexes
1 parent bd66f01 commit 784c521

File tree

2 files changed

+29
-10
lines changed

2 files changed

+29
-10
lines changed

src/bin/cratesfyi.rs

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,23 @@ impl DatabaseSubcommand {
577577
let build_queue = ctx.build_queue()?;
578578
ctx.runtime()?
579579
.block_on(async {
580+
async fn queue_rebuild(
581+
build_queue: Arc<BuildQueue>,
582+
name: &str,
583+
version: &str,
584+
) -> Result<()> {
585+
spawn_blocking({
586+
let name = name.to_owned();
587+
let version = version.to_owned();
588+
move || {
589+
if !build_queue.has_build_queued(&name, &version)? {
590+
build_queue.add_crate(&name, &version, 5, None)?;
591+
}
592+
Ok(())
593+
}
594+
})
595+
.await
596+
}
580597
let storage = ctx.async_storage().await?;
581598
let mut conn = pool.get_async().await?;
582599
let mut result_stream = sqlx::query!(
@@ -615,11 +632,18 @@ impl DatabaseSubcommand {
615632
};
616633

617634
let count = {
618-
let connection = Connection::open_with_flags(
635+
let connection = match Connection::open_with_flags(
619636
&local_archive_index_filename,
620637
OpenFlags::SQLITE_OPEN_READ_ONLY
621638
| OpenFlags::SQLITE_OPEN_NO_MUTEX,
622-
)?;
639+
) {
640+
Ok(conn) => conn,
641+
Err(err) => {
642+
println!("... error opening sqlite db, queueing rebuild: {:?}", err);
643+
queue_rebuild(build_queue.clone(), &row.name, &row.version).await?;
644+
continue;
645+
}
646+
};
623647
let mut stmt =
624648
connection.prepare("SELECT count(*) FROM files")?;
625649

@@ -630,13 +654,8 @@ impl DatabaseSubcommand {
630654

631655
if count >= 65000 {
632656
println!("...big index, queueing rebuild");
633-
spawn_blocking({
634-
let build_queue = build_queue.clone();
635-
let name = row.name.clone();
636-
let version = row.version.clone();
637-
move || build_queue.add_crate(&name, &version, 5, None)
638-
})
639-
.await?;
657+
queue_rebuild(build_queue.clone(), &row.name, &row.version)
658+
.await?;
640659
}
641660
}
642661
}

src/build_queue.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ impl BuildQueue {
151151
.collect())
152152
}
153153

154-
pub(crate) fn has_build_queued(&self, name: &str, version: &str) -> Result<bool> {
154+
pub fn has_build_queued(&self, name: &str, version: &str) -> Result<bool> {
155155
Ok(self
156156
.db
157157
.get()?

0 commit comments

Comments
 (0)