Skip to content

Create read only copy if needed when opening a store path #3156

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 17 commits into from
Jun 24, 2025

Conversation

maxrjones
Copy link
Member

@maxrjones maxrjones commented Jun 19, 2025

This PR makes a read-only copy of a store when using StorePath.open(mode="r").

See discussion in #3068. This augments #3068 (it still errors when attempting to open a writeable store path using a read-only store). This is an alternative to #3155.

Closes #3147

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/user-guide/*.rst
  • Changes documented as a new file in changes/
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@github-actions github-actions bot added the needs release notes Automatically applied to PRs which haven't added release notes label Jun 19, 2025
Copy link
Contributor

@dstansby dstansby left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. Requesting changes because:

  • This should get a release note
  • My old release note from when I added the error should be deleted

@github-actions github-actions bot removed the needs release notes Automatically applied to PRs which haven't added release notes label Jun 20, 2025
@maxrjones
Copy link
Member Author

This should get a release note
My old release note from when I added the error should be deleted

Thanks, done in 10e50e4 (#3156)

@maxrjones maxrjones requested a review from dstansby June 20, 2025 13:41
@TomNicholas
Copy link
Member

TomNicholas commented Jun 24, 2025

FYI I tried running xarray's zarr tests with this PR and while it fixes the basic read_only failure that #3068 caused (see for example this test, which passes with this PR), I still see a lot of other errors. I'm just trying to work out if those errors are caused by this PR or by zarr's dtypes refactor.

I also see a lot of things like this

FAILED xarray/tests/test_backends.py::TestZarrDictStore::test_warning_on_bad_chunks[2] - AssertionError: Got 1 unexpected warning(s): ["UserWarning('Store is not read-only but mode is 'r'. Creating a read-only copy. This behavior may change in the future with a more granular permissions model.'))"]

suggesting that xarray might need to swallow the warning being raised in this PR.

@d-v-b
Copy link
Contributor

d-v-b commented Jun 24, 2025

Why do we need to raise a warning here? Doesn't the new with_read_only method fully legitimize the creation of a new store in read-only mode?

@TomNicholas
Copy link
Member

I agree, this isn't something to warn for, it's just a change of behaviour to be documented.

@rabernat
Copy link
Contributor

I agree, this isn't something to warn for, it's just a change of behaviour to be documented.

👍 to this. FWIW I think we have been way to eager to issue warnings in Zarr. No warning is needed here.

@TomNicholas
Copy link
Member

I'm just trying to work out if those errors are caused by this PR or by zarr's dtypes refactor.

After talking to @ianhi I think those other errors are related to the dtypes changes rather than to the changes in this PR.

@maxrjones
Copy link
Member Author

I'm just trying to work out if those errors are caused by this PR or by zarr's dtypes refactor.

After talking to @ianhi I think those other errors are related to the dtypes changes rather than to the changes in this PR.

Yes they are definitely unrelated to this and instead are relevant to the dtypes changes.

@maxrjones
Copy link
Member Author

Why do we need to raise a warning here? Doesn't the new with_read_only method fully legitimize the creation of a new store in read-only mode?

thanks for this suggestion, Davis, and the affirmations, Tom and Ryan. The PR no longer includes a warning. My decision to initially include one was influenced by the prevalence of warnings elsewhere so it's helpful to have that general correction.

Copy link
Contributor

@rabernat rabernat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be good to get coverage back up before merging.

@rabernat rabernat dismissed dstansby’s stale review June 24, 2025 23:45

David's comments have clearly been addressed, he's on vacation and can't approve. GH won't let us merge with pending changes requested..

@rabernat rabernat merged commit 5731c6c into zarr-developers:main Jun 24, 2025
30 checks passed
@maxrjones maxrjones deleted the maybe-copy-store branch June 25, 2025 00:09
@d-v-b d-v-b added this to the 3.0.9 milestone Jun 30, 2025
@d-v-b
Copy link
Contributor

d-v-b commented Jun 30, 2025

@meeseeksdev backport to 3.0.9

Copy link

lumberbot-app bot commented Jun 30, 2025

Owee, I'm MrMeeseeks, Look at me.

There seem to be a conflict, please backport manually. Here are approximate instructions:

  1. Checkout backport branch and update it.
git checkout 3.0.9
git pull
  1. Cherry pick the first parent branch of the this PR on top of the older branch:
git cherry-pick -x -m1 5731c6c88ef0c5a3cb7f9701a7fbcee2814febf3
  1. You will likely have some merge/cherry-pick conflict here, fix them and commit:
git commit -am 'Backport PR #3156: Create read only copy if needed when opening a store path'
  1. Push to a named branch:
git push YOURFORK 3.0.9:auto-backport-of-pr-3156-on-3.0.9
  1. Create a PR against branch 3.0.9, I would have named this PR:

"Backport PR #3156 on branch 3.0.9 (Create read only copy if needed when opening a store path)"

And apply the correct labels and milestones.

Congratulations — you did some good work! Hopefully your backport PR will be tested by the continuous integration and merged soon!

Remember to remove the Still Needs Manual Backport label once the PR gets merged.

If these instructions are inaccurate, feel free to suggest an improvement.

@d-v-b
Copy link
Contributor

d-v-b commented Jun 30, 2025

@meeseeksdev backport to 3.0.9

Copy link

lumberbot-app bot commented Jun 30, 2025

Owee, I'm MrMeeseeks, Look at me.

There seem to be a conflict, please backport manually. Here are approximate instructions:

  1. Checkout backport branch and update it.
git checkout 3.0.9
git pull
  1. Cherry pick the first parent branch of the this PR on top of the older branch:
git cherry-pick -x -m1 5731c6c88ef0c5a3cb7f9701a7fbcee2814febf3
  1. You will likely have some merge/cherry-pick conflict here, fix them and commit:
git commit -am 'Backport PR #3156: Create read only copy if needed when opening a store path'
  1. Push to a named branch:
git push YOURFORK 3.0.9:auto-backport-of-pr-3156-on-3.0.9
  1. Create a PR against branch 3.0.9, I would have named this PR:

"Backport PR #3156 on branch 3.0.9 (Create read only copy if needed when opening a store path)"

And apply the correct labels and milestones.

Congratulations — you did some good work! Hopefully your backport PR will be tested by the continuous integration and merged soon!

Remember to remove the Still Needs Manual Backport label once the PR gets merged.

If these instructions are inaccurate, feel free to suggest an improvement.

d-v-b added a commit to d-v-b/zarr-python that referenced this pull request Jun 30, 2025
…opers#3156)

* Create read only copy if needed when opening a store path

* Add ValueError to Raises section

* Update expected warning

* Update src/zarr/storage/_common.py

Co-authored-by: Davis Bennett <[email protected]>

* Use ANY_ACCESS_MODE

* Update src/zarr/storage/_common.py

Co-authored-by: David Stansby <[email protected]>

* Update src/zarr/storage/_common.py

Co-authored-by: David Stansby <[email protected]>

* Update changes

* Try using get_args on definition

* Revert "Try using get_args on definition"

This reverts commit 7ad760f.

* Add test

* Remove warning

* Apply suggestion for try; except shortening

Co-authored-by: Tom Nicholas <[email protected]>

* Improve code coverage

---------

Co-authored-by: Davis Bennett <[email protected]>
Co-authored-by: David Stansby <[email protected]>
Co-authored-by: Tom Nicholas <[email protected]>
(cherry picked from commit 5731c6c)
d-v-b added a commit that referenced this pull request Jun 30, 2025
)

* Create read only copy if needed when opening a store path

* Add ValueError to Raises section

* Update expected warning

* Update src/zarr/storage/_common.py



* Use ANY_ACCESS_MODE

* Update src/zarr/storage/_common.py



* Update src/zarr/storage/_common.py



* Update changes

* Try using get_args on definition

* Revert "Try using get_args on definition"

This reverts commit 7ad760f.

* Add test

* Remove warning

* Apply suggestion for try; except shortening



* Improve code coverage

---------




(cherry picked from commit 5731c6c)

Co-authored-by: Max Jones <[email protected]>
Co-authored-by: David Stansby <[email protected]>
Co-authored-by: Tom Nicholas <[email protected]>
@d-v-b d-v-b mentioned this pull request Jun 30, 2025
d-v-b added a commit that referenced this pull request Jun 30, 2025
* Create read only copy if needed when opening a store path (#3156)

* Create read only copy if needed when opening a store path

* Add ValueError to Raises section

* Update expected warning

* Update src/zarr/storage/_common.py

Co-authored-by: Davis Bennett <[email protected]>

* Use ANY_ACCESS_MODE

* Update src/zarr/storage/_common.py

Co-authored-by: David Stansby <[email protected]>

* Update src/zarr/storage/_common.py

Co-authored-by: David Stansby <[email protected]>

* Update changes

* Try using get_args on definition

* Revert "Try using get_args on definition"

This reverts commit 7ad760f.

* Add test

* Remove warning

* Apply suggestion for try; except shortening

Co-authored-by: Tom Nicholas <[email protected]>

* Improve code coverage

---------

Co-authored-by: Davis Bennett <[email protected]>
Co-authored-by: David Stansby <[email protected]>
Co-authored-by: Tom Nicholas <[email protected]>
(cherry picked from commit 5731c6c)

* release notes

---------

Co-authored-by: Max Jones <[email protected]>
Co-authored-by: David Stansby <[email protected]>
Co-authored-by: Tom Nicholas <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Able to delete group even when opened as readonly
5 participants