fix(odm): expose store context after relocation

Expose the ECStore instance context through a narrow accessor so relocated on-demand migration backfill code no longer reaches into private storage fields.

Declare the faster-hex dependency used by the relocated native HTTP source implementation.

Co-Authored-By: heihutu <heihutu@gmail.com>

Co-Authored-By: zhi22915 <qiuzgang@gmail.com>
This commit is contained in:
houseme
2026-09-06 02:02:35 +08:00
parent 37667edf48
commit 7983a26269
4 changed files with 11 additions and 5 deletions
Generated
+1
View File
@@ -9503,6 +9503,7 @@ dependencies = [
"clap",
"const-str",
"datafusion",
"faster-hex",
"flatbuffers",
"flate2",
"futures",
+4
View File
@@ -707,6 +707,10 @@ impl std::fmt::Debug for ECStore {
/// These delegate to the process-global statics. No local state — the globals
/// remain the single source of truth until the migration is complete.
impl ECStore {
pub fn instance_ctx(&self) -> &Arc<InstanceContext> {
&self.ctx
}
/// Every erasure set across all pools, pool-major order.
///
/// Read-only queries that must consult each set's own copy of a
+1
View File
@@ -291,6 +291,7 @@ tokio-rustls = { workspace = true, default-features = false, features = ["loggin
aws-smithy-runtime-api = { workspace = true, features = ["http-1x"] }
aws-smithy-types = { workspace = true }
google-cloud-auth = { workspace = true, optional = true }
faster-hex = { workspace = true }
moka = { workspace = true, features = ["sync"] }
xxhash-rust = { workspace = true, features = ["xxh3"] }
aws-sdk-s3 = { workspace = true, default-features = false, features = ["sigv4a", "default-https-client", "rt-tokio"] }
+5 -5
View File
@@ -470,10 +470,10 @@ impl BackfillContext for BucketBackfillContext {
}
async fn config_updated_at(&self) -> Result<Option<OffsetDateTime>, StorageError> {
Ok(
super::config::decode_stored_config(get_on_demand_migration_config_in(&self.api.ctx, self.state.bucket()).await?)?
.map(|(_, updated_at)| updated_at),
)
Ok(super::config::decode_stored_config(
get_on_demand_migration_config_in(self.api.instance_ctx(), self.state.bucket()).await?,
)?
.map(|(_, updated_at)| updated_at))
}
}
@@ -1472,7 +1472,7 @@ impl Job {
/// Spawns [`run_backfill_recovery_loop`] on the store's shutdown token;
/// `false` (nothing spawned) when the store has no background token.
pub fn spawn_backfill_recovery_loop(runner: Arc<BackfillRunner>) -> bool {
let Some(cancel) = runner.api.ctx.background_cancel_token() else {
let Some(cancel) = runner.api.instance_ctx().background_cancel_token() else {
return false;
};
tokio::spawn(run_backfill_recovery_loop(runner, cancel));