Hi Liam,

Thanks for starting this discussion!

To clarity: Does a view with a custom location work in Polaris if the
location is a subpath inside allowedLocations?

Thanks,
Dmitri.

On Thu, May 29, 2025 at 9:57 PM Liam Bao <liam.zw....@gmail.com> wrote:

> Hi everyone,
>
> I’d like to bring up a discussion around the expected behavior of the
> write.metadata.path config, which is used to set a custom metadata location
> for tables and views.
>
> Currently, Polaris does *not allow* creating a view with
> write.metadata.path
> outside of the allowedLocations defined in the storageConfig. I’ve
> documented this behavior in #1320
> <https://github.com/apache/polaris/pull/1320>, and I’d like to clarify
> what
> the intended behavior should be moving forward.
> Summary of Current Behavior 1. *View Creation with Custom Metadata Path*
>
> A view *cannot be created* with a write.metadata.path outside of
> allowedLocations, *unless*:
>
>    - The parent namespace defines write.metadata.path, and
>    - The view’s write.metadata.path is a *subpath* of the namespace-defined
>    value.
>
>
>
> This logic is implemented here
> <
> https://github.com/apache/polaris/blob/989e99ae51f6cef0c093a86a4e51796f99a6894d/polaris-core/src/main/java/org/apache/polaris/core/storage/PolarisStorageConfigurationInfo.java#L184-L191
> >,
> where the namespace config overrides storage settings.
>
> *Example:*
> If the namespace sets write.metadata.path=file://baseLocation, then the
> view can be created at file://baseLocation/customLocation.
> 2. *Editing a View’s Metadata Path to a Sibling Location*
>
> Once the view is created, updating its write.metadata.path to a sibling
> path (e.g., file://baseLocation/customLocation2) is *not allowed*.
>
> *Reason:*
> The validation during update uses the *view’s own* write.metadata.path, not
> the namespace’s config.
> 3. *Editing to a Subpath Also Fails*
>
> Updating write.metadata.path to a *subpath* (e.g., from
> file://baseLocation/customLocation to
> file://baseLocation/customLocation/child) fails.
>
> *Reason:*
> This is rejected because after creation, the view’s write.metadata.path is
> stored in internalProperties rather than properties, so the previous config
> override no longer applies.
> Questions to Discuss:
>
>    - What is the *intended behavior* of write.metadata.path?
>    - The override logic
>    <
> https://github.com/apache/polaris/blob/989e99ae51f6cef0c093a86a4e51796f99a6894d/polaris-core/src/main/java/org/apache/polaris/core/storage/PolarisStorageConfigurationInfo.java#L184-L191
> >
>    doesn't appear to be covered by existing tests. I'm wondering about the
>    original purpose behind it.
>
>
>
> Looking forward to your feedback!
> Best,
> Liam
>

Reply via email to