Skip to content

Commit ebdd9da

Browse files
committed
chore(pm): clarify resolver provider diagnostics
1 parent 5d59626 commit ebdd9da

3 files changed

Lines changed: 34 additions & 5 deletions

File tree

crates/ruborist/src/resolver/builder.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1683,6 +1683,11 @@ where
16831683
}
16841684

16851685
let Some(done) = fetches.next().await else {
1686+
tracing::warn!(
1687+
full_waiters = state.full_waiters.values().map(Vec::len).sum::<usize>(),
1688+
version_waiters = state.version_waiters.values().map(Vec::len).sum::<usize>(),
1689+
"manifest fetch stream ended with pending resolver waiters; falling back to sequential resolution"
1690+
);
16861691
let mut fallback = Vec::new();
16871692
for (_, waiters) in state.full_waiters.drain() {
16881693
fallback.extend(waiters);

crates/ruborist/src/service/manifest.rs

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,32 @@ fn parse_full_manifest_with_core_sync(
6868
.map_err(|e| anyhow!("JSON parse error: {e}"))?;
6969
manifest.raw = raw_bytes;
7070

71-
let speculative = spec.and_then(|spec| {
72-
resolve_target_version((&manifest).into(), &spec)
73-
.ok()
74-
.and_then(|version| manifest.get_core_version(&version).map(|core| (spec, core)))
75-
});
71+
let speculative = match spec {
72+
Some(spec) => match resolve_target_version((&manifest).into(), &spec) {
73+
Ok(version) => match manifest.get_core_version(&version) {
74+
Some(core) => Some((spec, core)),
75+
None => {
76+
tracing::trace!(
77+
package = %manifest.name,
78+
spec = %spec,
79+
version = %version,
80+
"speculative manifest extract missed resolved version"
81+
);
82+
None
83+
}
84+
},
85+
Err(error) => {
86+
tracing::trace!(
87+
package = %manifest.name,
88+
spec = %spec,
89+
error = %error,
90+
"speculative manifest version resolution failed"
91+
);
92+
None
93+
}
94+
},
95+
None => None,
96+
};
7697

7798
Ok((manifest, speculative))
7899
}

crates/ruborist/src/service/provider.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ pub enum ManifestJobDone {
7373
}
7474

7575
/// Lower-level manifest provider used by the demand BFS loop.
76+
///
77+
/// Resolver workers clone the provider before spawning jobs, so implementors
78+
/// should keep `Clone` cheap (for example by storing shared state behind `Arc`).
7679
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
7780
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
7881
pub trait ManifestProvider: RegistryClient + Clone + Send + Sync + 'static {

0 commit comments

Comments
 (0)