Skip to content

Commit f9c2024

Browse files
authored
Zstd: Don't persist the checksum param if false (#2655)
1 parent bb8ab0f commit f9c2024

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/zarr/core/metadata/v2.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,13 @@ def _json_convert(
116116
else:
117117
return o.descr
118118
if isinstance(o, numcodecs.abc.Codec):
119-
return o.get_config()
119+
codec_config = o.get_config()
120+
121+
# Hotfix for https://github.com/zarr-developers/zarr-python/issues/2647
122+
if codec_config["id"] == "zstd" and not codec_config.get("checksum", False):
123+
codec_config.pop("checksum", None)
124+
125+
return codec_config
120126
if np.isscalar(o):
121127
out: Any
122128
if hasattr(o, "dtype") and o.dtype.kind == "M" and hasattr(o, "view"):

tests/test_metadata/test_v2.py

+16
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import zarr.api.asynchronous
1010
import zarr.storage
1111
from zarr.core.buffer import cpu
12+
from zarr.core.buffer.core import default_buffer_prototype
1213
from zarr.core.group import ConsolidatedMetadata, GroupMetadata
1314
from zarr.core.metadata import ArrayV2Metadata
1415
from zarr.core.metadata.v2 import parse_zarr_format
@@ -282,3 +283,18 @@ def test_from_dict_extra_fields() -> None:
282283
order="C",
283284
)
284285
assert result == expected
286+
287+
288+
def test_zstd_checksum() -> None:
289+
arr = zarr.create_array(
290+
{},
291+
shape=(10,),
292+
chunks=(10,),
293+
dtype="int32",
294+
compressors={"id": "zstd", "level": 5, "checksum": False},
295+
zarr_format=2,
296+
)
297+
metadata = json.loads(
298+
arr.metadata.to_buffer_dict(default_buffer_prototype())[".zarray"].to_bytes()
299+
)
300+
assert "checksum" not in metadata["compressor"]

0 commit comments

Comments
 (0)