diff --git a/vortex-edition/src/session.rs b/vortex-edition/src/session.rs index a50d17b6b53..f6366371c60 100644 --- a/vortex-edition/src/session.rs +++ b/vortex-edition/src/session.rs @@ -12,6 +12,7 @@ use vortex_session::SessionExt; use vortex_session::SessionGuard; use vortex_session::SessionVar; use vortex_session::registry::Id; +use vortex_session::registry::Registry; use crate::Edition; use crate::EditionDeclaration; @@ -46,19 +47,24 @@ struct Inner { /// same family replaces the previous selection. This is separate from [`EditionSession`]: /// registration describes what a session knows how to reason about, while enabling is the /// explicit writer policy. +/// +/// Backed by the shared session [`Registry`] keyed by edition family, so clones observe the +/// same selection and enabling an edition replaces the family's previous entry. #[derive(Clone, Debug, Default)] pub struct EnabledEditions { - inner: Arc>>, + inner: Registry, } impl EnabledEditions { - /// Return the enabled editions, sorted by family. + /// Return the enabled editions. pub fn editions(&self) -> Vec { - self.inner.read().values().copied().collect() + self.inner.items().collect() } fn enable(&self, edition: EditionId) { - self.inner.write().insert(edition.family, edition); + // The family is a `&'static str`; `Into` interns it once at enable time (a rare + // config-time write, never on the read path). + self.inner.register(edition.family, edition); } } diff --git a/vortex-edition/src/tests.rs b/vortex-edition/src/tests.rs index 3d6550982db..09e1345615a 100644 --- a/vortex-edition/src/tests.rs +++ b/vortex-edition/src/tests.rs @@ -184,7 +184,9 @@ fn enabled_editions_are_independent_across_families() -> Result<(), crate::Editi session.enable_edition(FIRST)?; session.enable_edition(OTHER)?; - assert_eq!(session.enabled_editions().editions(), [OTHER, FIRST]); + let mut enabled = session.enabled_editions().editions(); + enabled.sort_unstable(); + assert_eq!(enabled, [OTHER, FIRST]); assert_eq!(session.enabled_encoding_ids().len(), 3); Ok(()) }