{{ message }}
fix: Auto-detect GCS/S3 registry store when registry is passed as string#6260
Merged
franciscojavierarceo merged 1 commit intoApr 14, 2026
Merged
Conversation
4ee48c2 to
189f67c
Compare
April 14, 2026 08:28
franciscojavierarceo
approved these changes
Apr 14, 2026
franciscojavierarceo
approved these changes
Apr 14, 2026
Signed-off-by: jiwidi <fhjaime96@gmail.com>
189f67c to
944e9c2
Compare
April 14, 2026 15:42
ntkathole
approved these changes
Apr 14, 2026
Hide details
View details
franciscojavierarceo
merged commit
7ebcf03
into
feast-dev:master
Apr 14, 2026
27 checks passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.
Problem
When passing
registry="gs://bucket/feast/registry.pb"as a string toRepoConfig, Feast always creates a file-basedRegistryConfig(hardcoded atrepo_config.pyline ~402). This ignores the URI scheme and causesFileRegistryStoreto be used, which cannot handlegs://paths —pathlib.Path("gs://...")is not treated as absolute, leading toIsADirectoryErrorat runtime.The
RegistryConfigdocstring states:But
FileRegistryStoreusespathlib.Pathwhich doesn't support GCS URIs.Meanwhile,
Registry.__init__already has correct scheme-based auto-detection viaget_registry_store_class_from_scheme()andREGISTRY_STORE_CLASS_FOR_SCHEME = {"gs": "GCSRegistryStore", ...}— it just never gets a chance because theRegistryConfigis pre-wrapped as "file" type.Root Cause
In
RepoConfig.registryproperty, theelif isinstance(self.registry_config, str)branch hardcodes:This wraps the path in a file-type config regardless of the URI scheme.
Reproduction
Fix
In
RepoConfig.registryproperty, when registry is a string, create a plainRegistryConfig(path=...)instead of hardcodingget_registry_config_from_type("file"). This preservesregistry_store_type=None, letting the existing auto-detection inRegistry.__init__select the correct store class based on the URI scheme.Local file paths continue to work because
registry_typedefaults to"file"inRegistryConfig, andget_registry_store_class_from_schememaps thefilescheme (and schemeless paths) toFileRegistryStore.Tests
Added
test_registry_string_config.pywith 11 tests covering:RegistryConfigwithregistry_store_type=NoneREGISTRY_STORE_CLASS_FOR_SCHEMEmaps gs→GCS, s3→S3, file→Filepathlib.Pathcannot handle cloud URIs (documenting the underlying issue)