merge consecutive reads in shards - #1358

Closed
jstriebel wants to merge 2 commits into
zarr-developers:mainfrom
scalableminds:sharding-merge-read-ranges
Closed

merge consecutive reads in shards#1358
jstriebel wants to merge 2 commits into
zarr-developers:mainfrom
scalableminds:sharding-merge-read-ranges

Conversation

@jstriebel

Copy link
Copy Markdown
Member

This PR adds a feature for the v3 sharding implementation. When multiple chunks are read at once with a store that supports partial reads, each chunk was requested separately before, even if it was in the same shard. This PR adds the feature to merge consecutive (on a byte-level) requests in the same shard.

TODO:

  • Add unit tests and/or doctests in docstrings
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@github-actionsgithub-actionsBot added the needs release notes Automatically applied to PRs which haven't added release notes label Feb 27, 2023
@codecov

codecovBot commented Feb 27, 2023

Copy link
Copy Markdown

Codecov Report

Merging #1358 (a98c7b8) into main (5ece3e6) will decrease coverage by 0.04%.
The diff coverage is 83.33%.

@@ Coverage Diff @@## main #1358 +/- ##
===========================================
- Coverage 100.00% 99.96% -0.04% 
===========================================
Files 36 36 Lines 14775 14804 +29 ===========================================
+ Hits 14775 14799 +24 - Misses 0 5 +5 
Impacted FilesCoverage Δ
zarr/_storage/v3_storage_transformers.py97.97% <83.33%> (-2.03%)⬇️

@rabernat

Copy link
Copy Markdown
Contributor

Thanks for working on this important optimization! @martindurant implemented something similar at the fsspec level in fsspec/filesystem_spec#1063. I'm curious how this implementation here would interact with that one. Where in this stack should this optimization live?

@normanrz

Copy link
Copy Markdown
Member

Good point. We weren't aware of that optimization. I almost think it makes more sense in the fsspec. @jstriebel wdyt?

@rabernat

Copy link
Copy Markdown
Contributor

I almost think it makes more sense in the fsspec.

That's a reasonable point of view. However, currently not all zarr I/O goes through fsspec. This is a rather major architectural issue that we need to confront for zarr-python: how dependent do we want to be on fsspec? If we require fsspec as a core dependency, we could remove quite a bit of code from zarr-python itself. Currently, we're somewhere in the middle--we rely on fsspec for some things, but we still have many of our own implementations for different stores.

We need to discuss this as a team.

@martindurant

Copy link
Copy Markdown
Member

Totally agree with @rabernat , of course you might know which way I lean.

For merging the requests via fsspec, this should be available via the cat_ranges() method - it is intended but not implemented yet.

@jhamman

Copy link
Copy Markdown
Member

closing since now that the sharding implementation is in a codec, this would need to be reworked. This feature conversation is also happening as part of #1583

@jhammanjhamman closed this Dec 7, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs release notesAutomatically applied to PRs which haven't added release notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jstriebel@rabernat@normanrz@martindurant@jhamman
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

merge consecutive reads in shards - #1358

Closed
jstriebel wants to merge 2 commits into
zarr-developers:mainfrom
scalableminds:sharding-merge-read-ranges
Closed

merge consecutive reads in shards#1358
jstriebel wants to merge 2 commits into
zarr-developers:mainfrom
scalableminds:sharding-merge-read-ranges

Conversation

@jstriebel

Copy link
Copy Markdown
Member

This PR adds a feature for the v3 sharding implementation. When multiple chunks are read at once with a store that supports partial reads, each chunk was requested separately before, even if it was in the same shard. This PR adds the feature to merge consecutive (on a byte-level) requests in the same shard.

TODO:

  • Add unit tests and/or doctests in docstrings
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@github-actionsgithub-actionsBot added the needs release notes Automatically applied to PRs which haven't added release notes label Feb 27, 2023
@codecov

codecovBot commented Feb 27, 2023

Copy link
Copy Markdown

Codecov Report

Merging #1358 (a98c7b8) into main (5ece3e6) will decrease coverage by 0.04%.
The diff coverage is 83.33%.

@@ Coverage Diff @@## main #1358 +/- ##
===========================================
- Coverage 100.00% 99.96% -0.04% 
===========================================
Files 36 36 Lines 14775 14804 +29 ===========================================
+ Hits 14775 14799 +24 - Misses 0 5 +5 
Impacted FilesCoverage Δ
zarr/_storage/v3_storage_transformers.py97.97% <83.33%> (-2.03%)⬇️

@rabernat

Copy link
Copy Markdown
Contributor

Thanks for working on this important optimization! @martindurant implemented something similar at the fsspec level in fsspec/filesystem_spec#1063. I'm curious how this implementation here would interact with that one. Where in this stack should this optimization live?

@normanrz

Copy link
Copy Markdown
Member

Good point. We weren't aware of that optimization. I almost think it makes more sense in the fsspec. @jstriebel wdyt?

@rabernat

Copy link
Copy Markdown
Contributor

I almost think it makes more sense in the fsspec.

That's a reasonable point of view. However, currently not all zarr I/O goes through fsspec. This is a rather major architectural issue that we need to confront for zarr-python: how dependent do we want to be on fsspec? If we require fsspec as a core dependency, we could remove quite a bit of code from zarr-python itself. Currently, we're somewhere in the middle--we rely on fsspec for some things, but we still have many of our own implementations for different stores.

We need to discuss this as a team.

@martindurant

Copy link
Copy Markdown
Member

Totally agree with @rabernat , of course you might know which way I lean.

For merging the requests via fsspec, this should be available via the cat_ranges() method - it is intended but not implemented yet.

@jhamman

Copy link
Copy Markdown
Member

closing since now that the sharding implementation is in a codec, this would need to be reworked. This feature conversation is also happening as part of #1583

@jhammanjhamman closed this Dec 7, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs release notesAutomatically applied to PRs which haven't added release notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jstriebel@rabernat@normanrz@martindurant@jhamman
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

merge consecutive reads in shards - #1358

Closed
jstriebel wants to merge 2 commits into
zarr-developers:mainfrom
scalableminds:sharding-merge-read-ranges
Closed

merge consecutive reads in shards#1358
jstriebel wants to merge 2 commits into
zarr-developers:mainfrom
scalableminds:sharding-merge-read-ranges

Conversation

@jstriebel

Copy link
Copy Markdown
Member

This PR adds a feature for the v3 sharding implementation. When multiple chunks are read at once with a store that supports partial reads, each chunk was requested separately before, even if it was in the same shard. This PR adds the feature to merge consecutive (on a byte-level) requests in the same shard.

TODO:

  • Add unit tests and/or doctests in docstrings
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@github-actionsgithub-actionsBot added the needs release notes Automatically applied to PRs which haven't added release notes label Feb 27, 2023
@codecov

codecovBot commented Feb 27, 2023

Copy link
Copy Markdown

Codecov Report

Merging #1358 (a98c7b8) into main (5ece3e6) will decrease coverage by 0.04%.
The diff coverage is 83.33%.

@@ Coverage Diff @@## main #1358 +/- ##
===========================================
- Coverage 100.00% 99.96% -0.04% 
===========================================
Files 36 36 Lines 14775 14804 +29 ===========================================
+ Hits 14775 14799 +24 - Misses 0 5 +5 
Impacted FilesCoverage Δ
zarr/_storage/v3_storage_transformers.py97.97% <83.33%> (-2.03%)⬇️

@rabernat

Copy link
Copy Markdown
Contributor

Thanks for working on this important optimization! @martindurant implemented something similar at the fsspec level in fsspec/filesystem_spec#1063. I'm curious how this implementation here would interact with that one. Where in this stack should this optimization live?

@normanrz

Copy link
Copy Markdown
Member

Good point. We weren't aware of that optimization. I almost think it makes more sense in the fsspec. @jstriebel wdyt?

@rabernat

Copy link
Copy Markdown
Contributor

I almost think it makes more sense in the fsspec.

That's a reasonable point of view. However, currently not all zarr I/O goes through fsspec. This is a rather major architectural issue that we need to confront for zarr-python: how dependent do we want to be on fsspec? If we require fsspec as a core dependency, we could remove quite a bit of code from zarr-python itself. Currently, we're somewhere in the middle--we rely on fsspec for some things, but we still have many of our own implementations for different stores.

We need to discuss this as a team.

@martindurant

Copy link
Copy Markdown
Member

Totally agree with @rabernat , of course you might know which way I lean.

For merging the requests via fsspec, this should be available via the cat_ranges() method - it is intended but not implemented yet.

@jhamman

Copy link
Copy Markdown
Member

closing since now that the sharding implementation is in a codec, this would need to be reworked. This feature conversation is also happening as part of #1583

@jhammanjhamman closed this Dec 7, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs release notesAutomatically applied to PRs which haven't added release notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jstriebel@rabernat@normanrz@martindurant@jhamman
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

merge consecutive reads in shards - #1358

Closed
jstriebel wants to merge 2 commits into
zarr-developers:mainfrom
scalableminds:sharding-merge-read-ranges
Closed

merge consecutive reads in shards#1358
jstriebel wants to merge 2 commits into
zarr-developers:mainfrom
scalableminds:sharding-merge-read-ranges

Conversation

@jstriebel

Copy link
Copy Markdown
Member

This PR adds a feature for the v3 sharding implementation. When multiple chunks are read at once with a store that supports partial reads, each chunk was requested separately before, even if it was in the same shard. This PR adds the feature to merge consecutive (on a byte-level) requests in the same shard.

TODO:

  • Add unit tests and/or doctests in docstrings
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@github-actionsgithub-actionsBot added the needs release notes Automatically applied to PRs which haven't added release notes label Feb 27, 2023
@codecov

codecovBot commented Feb 27, 2023

Copy link
Copy Markdown

Codecov Report

Merging #1358 (a98c7b8) into main (5ece3e6) will decrease coverage by 0.04%.
The diff coverage is 83.33%.

@@ Coverage Diff @@## main #1358 +/- ##
===========================================
- Coverage 100.00% 99.96% -0.04% 
===========================================
Files 36 36 Lines 14775 14804 +29 ===========================================
+ Hits 14775 14799 +24 - Misses 0 5 +5 
Impacted FilesCoverage Δ
zarr/_storage/v3_storage_transformers.py97.97% <83.33%> (-2.03%)⬇️

@rabernat

Copy link
Copy Markdown
Contributor

Thanks for working on this important optimization! @martindurant implemented something similar at the fsspec level in fsspec/filesystem_spec#1063. I'm curious how this implementation here would interact with that one. Where in this stack should this optimization live?

@normanrz

Copy link
Copy Markdown
Member

Good point. We weren't aware of that optimization. I almost think it makes more sense in the fsspec. @jstriebel wdyt?

@rabernat

Copy link
Copy Markdown
Contributor

I almost think it makes more sense in the fsspec.

That's a reasonable point of view. However, currently not all zarr I/O goes through fsspec. This is a rather major architectural issue that we need to confront for zarr-python: how dependent do we want to be on fsspec? If we require fsspec as a core dependency, we could remove quite a bit of code from zarr-python itself. Currently, we're somewhere in the middle--we rely on fsspec for some things, but we still have many of our own implementations for different stores.

We need to discuss this as a team.

@martindurant

Copy link
Copy Markdown
Member

Totally agree with @rabernat , of course you might know which way I lean.

For merging the requests via fsspec, this should be available via the cat_ranges() method - it is intended but not implemented yet.

@jhamman

Copy link
Copy Markdown
Member

closing since now that the sharding implementation is in a codec, this would need to be reworked. This feature conversation is also happening as part of #1583

@jhammanjhamman closed this Dec 7, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs release notesAutomatically applied to PRs which haven't added release notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jstriebel@rabernat@normanrz@martindurant@jhamman
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

merge consecutive reads in shards - #1358

Closed
jstriebel wants to merge 2 commits into
zarr-developers:mainfrom
scalableminds:sharding-merge-read-ranges
Closed

merge consecutive reads in shards#1358
jstriebel wants to merge 2 commits into
zarr-developers:mainfrom
scalableminds:sharding-merge-read-ranges

Conversation

@jstriebel

Copy link
Copy Markdown
Member

This PR adds a feature for the v3 sharding implementation. When multiple chunks are read at once with a store that supports partial reads, each chunk was requested separately before, even if it was in the same shard. This PR adds the feature to merge consecutive (on a byte-level) requests in the same shard.

TODO:

  • Add unit tests and/or doctests in docstrings
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@github-actionsgithub-actionsBot added the needs release notes Automatically applied to PRs which haven't added release notes label Feb 27, 2023
@codecov

codecovBot commented Feb 27, 2023

Copy link
Copy Markdown

Codecov Report

Merging #1358 (a98c7b8) into main (5ece3e6) will decrease coverage by 0.04%.
The diff coverage is 83.33%.

@@ Coverage Diff @@## main #1358 +/- ##
===========================================
- Coverage 100.00% 99.96% -0.04% 
===========================================
Files 36 36 Lines 14775 14804 +29 ===========================================
+ Hits 14775 14799 +24 - Misses 0 5 +5 
Impacted FilesCoverage Δ
zarr/_storage/v3_storage_transformers.py97.97% <83.33%> (-2.03%)⬇️

@rabernat

Copy link
Copy Markdown
Contributor

Thanks for working on this important optimization! @martindurant implemented something similar at the fsspec level in fsspec/filesystem_spec#1063. I'm curious how this implementation here would interact with that one. Where in this stack should this optimization live?

@normanrz

Copy link
Copy Markdown
Member

Good point. We weren't aware of that optimization. I almost think it makes more sense in the fsspec. @jstriebel wdyt?

@rabernat

Copy link
Copy Markdown
Contributor

I almost think it makes more sense in the fsspec.

That's a reasonable point of view. However, currently not all zarr I/O goes through fsspec. This is a rather major architectural issue that we need to confront for zarr-python: how dependent do we want to be on fsspec? If we require fsspec as a core dependency, we could remove quite a bit of code from zarr-python itself. Currently, we're somewhere in the middle--we rely on fsspec for some things, but we still have many of our own implementations for different stores.

We need to discuss this as a team.

@martindurant

Copy link
Copy Markdown
Member

Totally agree with @rabernat , of course you might know which way I lean.

For merging the requests via fsspec, this should be available via the cat_ranges() method - it is intended but not implemented yet.

@jhamman

Copy link
Copy Markdown
Member

closing since now that the sharding implementation is in a codec, this would need to be reworked. This feature conversation is also happening as part of #1583

@jhammanjhamman closed this Dec 7, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs release notesAutomatically applied to PRs which haven't added release notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jstriebel@rabernat@normanrz@martindurant@jhamman
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

merge consecutive reads in shards - #1358

Closed
jstriebel wants to merge 2 commits into
zarr-developers:mainfrom
scalableminds:sharding-merge-read-ranges
Closed

merge consecutive reads in shards#1358
jstriebel wants to merge 2 commits into
zarr-developers:mainfrom
scalableminds:sharding-merge-read-ranges

Conversation

@jstriebel

Copy link
Copy Markdown
Member

This PR adds a feature for the v3 sharding implementation. When multiple chunks are read at once with a store that supports partial reads, each chunk was requested separately before, even if it was in the same shard. This PR adds the feature to merge consecutive (on a byte-level) requests in the same shard.

TODO:

  • Add unit tests and/or doctests in docstrings
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@github-actionsgithub-actionsBot added the needs release notes Automatically applied to PRs which haven't added release notes label Feb 27, 2023
@codecov

codecovBot commented Feb 27, 2023

Copy link
Copy Markdown

Codecov Report

Merging #1358 (a98c7b8) into main (5ece3e6) will decrease coverage by 0.04%.
The diff coverage is 83.33%.

@@ Coverage Diff @@## main #1358 +/- ##
===========================================
- Coverage 100.00% 99.96% -0.04% 
===========================================
Files 36 36 Lines 14775 14804 +29 ===========================================
+ Hits 14775 14799 +24 - Misses 0 5 +5 
Impacted FilesCoverage Δ
zarr/_storage/v3_storage_transformers.py97.97% <83.33%> (-2.03%)⬇️

@rabernat

Copy link
Copy Markdown
Contributor

Thanks for working on this important optimization! @martindurant implemented something similar at the fsspec level in fsspec/filesystem_spec#1063. I'm curious how this implementation here would interact with that one. Where in this stack should this optimization live?

@normanrz

Copy link
Copy Markdown
Member

Good point. We weren't aware of that optimization. I almost think it makes more sense in the fsspec. @jstriebel wdyt?

@rabernat

Copy link
Copy Markdown
Contributor

I almost think it makes more sense in the fsspec.

That's a reasonable point of view. However, currently not all zarr I/O goes through fsspec. This is a rather major architectural issue that we need to confront for zarr-python: how dependent do we want to be on fsspec? If we require fsspec as a core dependency, we could remove quite a bit of code from zarr-python itself. Currently, we're somewhere in the middle--we rely on fsspec for some things, but we still have many of our own implementations for different stores.

We need to discuss this as a team.

@martindurant

Copy link
Copy Markdown
Member

Totally agree with @rabernat , of course you might know which way I lean.

For merging the requests via fsspec, this should be available via the cat_ranges() method - it is intended but not implemented yet.

@jhamman

Copy link
Copy Markdown
Member

closing since now that the sharding implementation is in a codec, this would need to be reworked. This feature conversation is also happening as part of #1583

@jhammanjhamman closed this Dec 7, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs release notesAutomatically applied to PRs which haven't added release notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jstriebel@rabernat@normanrz@martindurant@jhamman
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

merge consecutive reads in shards - #1358

Closed
jstriebel wants to merge 2 commits into
zarr-developers:mainfrom
scalableminds:sharding-merge-read-ranges
Closed

merge consecutive reads in shards#1358
jstriebel wants to merge 2 commits into
zarr-developers:mainfrom
scalableminds:sharding-merge-read-ranges

Conversation

@jstriebel

Copy link
Copy Markdown
Member

This PR adds a feature for the v3 sharding implementation. When multiple chunks are read at once with a store that supports partial reads, each chunk was requested separately before, even if it was in the same shard. This PR adds the feature to merge consecutive (on a byte-level) requests in the same shard.

TODO:

  • Add unit tests and/or doctests in docstrings
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@github-actionsgithub-actionsBot added the needs release notes Automatically applied to PRs which haven't added release notes label Feb 27, 2023
@codecov

codecovBot commented Feb 27, 2023

Copy link
Copy Markdown

Codecov Report

Merging #1358 (a98c7b8) into main (5ece3e6) will decrease coverage by 0.04%.
The diff coverage is 83.33%.

@@ Coverage Diff @@## main #1358 +/- ##
===========================================
- Coverage 100.00% 99.96% -0.04% 
===========================================
Files 36 36 Lines 14775 14804 +29 ===========================================
+ Hits 14775 14799 +24 - Misses 0 5 +5 
Impacted FilesCoverage Δ
zarr/_storage/v3_storage_transformers.py97.97% <83.33%> (-2.03%)⬇️

@rabernat

Copy link
Copy Markdown
Contributor

Thanks for working on this important optimization! @martindurant implemented something similar at the fsspec level in fsspec/filesystem_spec#1063. I'm curious how this implementation here would interact with that one. Where in this stack should this optimization live?

@normanrz

Copy link
Copy Markdown
Member

Good point. We weren't aware of that optimization. I almost think it makes more sense in the fsspec. @jstriebel wdyt?

@rabernat

Copy link
Copy Markdown
Contributor

I almost think it makes more sense in the fsspec.

That's a reasonable point of view. However, currently not all zarr I/O goes through fsspec. This is a rather major architectural issue that we need to confront for zarr-python: how dependent do we want to be on fsspec? If we require fsspec as a core dependency, we could remove quite a bit of code from zarr-python itself. Currently, we're somewhere in the middle--we rely on fsspec for some things, but we still have many of our own implementations for different stores.

We need to discuss this as a team.

@martindurant

Copy link
Copy Markdown
Member

Totally agree with @rabernat , of course you might know which way I lean.

For merging the requests via fsspec, this should be available via the cat_ranges() method - it is intended but not implemented yet.

@jhamman

Copy link
Copy Markdown
Member

closing since now that the sharding implementation is in a codec, this would need to be reworked. This feature conversation is also happening as part of #1583

@jhammanjhamman closed this Dec 7, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs release notesAutomatically applied to PRs which haven't added release notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jstriebel@rabernat@normanrz@martindurant@jhamman
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

merge consecutive reads in shards - #1358

Closed
jstriebel wants to merge 2 commits into
zarr-developers:mainfrom
scalableminds:sharding-merge-read-ranges
Closed

merge consecutive reads in shards#1358
jstriebel wants to merge 2 commits into
zarr-developers:mainfrom
scalableminds:sharding-merge-read-ranges

Conversation

@jstriebel

Copy link
Copy Markdown
Member

This PR adds a feature for the v3 sharding implementation. When multiple chunks are read at once with a store that supports partial reads, each chunk was requested separately before, even if it was in the same shard. This PR adds the feature to merge consecutive (on a byte-level) requests in the same shard.

TODO:

  • Add unit tests and/or doctests in docstrings
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@github-actionsgithub-actionsBot added the needs release notes Automatically applied to PRs which haven't added release notes label Feb 27, 2023
@codecov

codecovBot commented Feb 27, 2023

Copy link
Copy Markdown

Codecov Report

Merging #1358 (a98c7b8) into main (5ece3e6) will decrease coverage by 0.04%.
The diff coverage is 83.33%.

@@ Coverage Diff @@## main #1358 +/- ##
===========================================
- Coverage 100.00% 99.96% -0.04% 
===========================================
Files 36 36 Lines 14775 14804 +29 ===========================================
+ Hits 14775 14799 +24 - Misses 0 5 +5 
Impacted FilesCoverage Δ
zarr/_storage/v3_storage_transformers.py97.97% <83.33%> (-2.03%)⬇️

@rabernat

Copy link
Copy Markdown
Contributor

Thanks for working on this important optimization! @martindurant implemented something similar at the fsspec level in fsspec/filesystem_spec#1063. I'm curious how this implementation here would interact with that one. Where in this stack should this optimization live?

@normanrz

Copy link
Copy Markdown
Member

Good point. We weren't aware of that optimization. I almost think it makes more sense in the fsspec. @jstriebel wdyt?

@rabernat

Copy link
Copy Markdown
Contributor

I almost think it makes more sense in the fsspec.

That's a reasonable point of view. However, currently not all zarr I/O goes through fsspec. This is a rather major architectural issue that we need to confront for zarr-python: how dependent do we want to be on fsspec? If we require fsspec as a core dependency, we could remove quite a bit of code from zarr-python itself. Currently, we're somewhere in the middle--we rely on fsspec for some things, but we still have many of our own implementations for different stores.

We need to discuss this as a team.

@martindurant

Copy link
Copy Markdown
Member

Totally agree with @rabernat , of course you might know which way I lean.

For merging the requests via fsspec, this should be available via the cat_ranges() method - it is intended but not implemented yet.

@jhamman

Copy link
Copy Markdown
Member

closing since now that the sharding implementation is in a codec, this would need to be reworked. This feature conversation is also happening as part of #1583

@jhammanjhamman closed this Dec 7, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs release notesAutomatically applied to PRs which haven't added release notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@jstriebel@rabernat@normanrz@martindurant@jhamman