-
Notifications
You must be signed in to change notification settings - Fork 31
Open
Description
Hello - I'm having trouble hosting a zarr dataset with Xpublish, getting error 500 - Client Response from the .zmetadata file.
I'm able to serve an xarray file not created from a zarr just fine. For example:
Server Side:
data = xr.Dataset(
{
"temperature": (("time", "lat", "lon"), 20 * np.random.rand(4, 3, 2)),
},
coords={
"time": pd.date_range("2023-01-01", periods=4),
"lat": [10, 20, 30],
"lon": [100, 110],
},
)
rest = xpublish.SingleDatasetRest(data)
# Start the server and keep it running
if __name__ == "__main__":
print("Serving simple dataset...")
rest.serve(port=8000)
Client Side
import zarr
from fsspec.implementations.http import HTTPFileSystem
fs = HTTPFileSystem()
# The URL 'http://0.0.0.0:9000/zarr/' here serves one dataset
http_map = fs.get_mapper("http://0.0.0.0:8000/zarr/")
# open as a zarr group
zg = zarr.open_consolidated(http_map, mode="r")
# or open as another Xarray Dataset
ds = xr.open_zarr(http_map, consolidated=True)
However, when the data are created and then stored as a zarr dataset first, I'm getting a 500:ClientResponseError:Internal Server Error. I believe this is something to do with .zmetadata.
For example, saving the file first
data.to_zarr("simple_zarr_dataset.zarr", consolidated=True)
and then opening it when creating the server
output_zarr_store = r"simple_zarr_dataset.zarr"
data = xr.open_zarr(output_zarr_store)
Is producing the following error log:
---------------------------------------------------------------------------
ClientResponseError Traceback (most recent call last)
Cell In[8], [line 10](vscode-notebook-cell:?execution_count=8&line=10)
[7](vscode-notebook-cell:?execution_count=8&line=7) http_map = fs.get_mapper("http://0.0.0.0:8001/zarr/")
[9](vscode-notebook-cell:?execution_count=8&line=9) # Open as a Zarr group
---> [10](vscode-notebook-cell:?execution_count=8&line=10) zg = zarr.open_consolidated(http_map, mode="r")
[12](vscode-notebook-cell:?execution_count=8&line=12) # Or open as another Xarray Dataset
[13](vscode-notebook-cell:?execution_count=8&line=13) ds = xr.open_zarr(http_map, consolidated=True)
File ~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/convenience.py:1362, in open_consolidated(store, metadata_key, mode, **kwargs)
[1359](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/convenience.py:1359) metadata_key = "meta/root/consolidated/" + metadata_key
[1361](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/convenience.py:1361) # setup metadata store
-> [1362](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/convenience.py:1362) meta_store = ConsolidatedStoreClass(store, metadata_key=metadata_key)
[1364](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/convenience.py:1364) # pass through
[1365](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/convenience.py:1365) chunk_store = kwargs.pop("chunk_store", None) or store
File ~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/storage.py:3045, in ConsolidatedMetadataStore.__init__(self, store, metadata_key)
[3042](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/storage.py:3042) self.store = Store._ensure_store(store)
[3044](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/storage.py:3044) # retrieve consolidated metadata
-> [3045](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/storage.py:3045) meta = json_loads(self.store[metadata_key])
[3047](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/storage.py:3047) # check format of consolidated metadata
[3048](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/storage.py:3048) consolidated_format = meta.get("zarr_consolidated_format", None)
File ~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/storage.py:1446, in FSStore.__getitem__(self, key)
[1444](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/storage.py:1444) key = self._normalize_key(key)
[1445](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/storage.py:1445) try:
-> [1446](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/storage.py:1446) return self.map[key]
[1447](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/storage.py:1447) except self.exceptions as e:
[1448](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/zarr/storage.py:1448) raise KeyError(key) from e
File ~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/mapping.py:155, in FSMap.__getitem__(self, key, default)
[153](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/mapping.py:153) k = self._key_to_str(key)
[154](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/mapping.py:154) try:
--> [155](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/mapping.py:155) result = self.fs.cat(k)
[156](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/mapping.py:156) except self.missing_exceptions as exc:
[157](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/mapping.py:157) if default is not None:
File ~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:118, in sync_wrapper.<locals>.wrapper(*args, **kwargs)
[115](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:115) @functools.wraps(func)
[116](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:116) def wrapper(*args, **kwargs):
[117](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:117) self = obj or args[0]
--> [118](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:118) return sync(self.loop, func, *args, **kwargs)
File ~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:103, in sync(loop, func, timeout, *args, **kwargs)
[101](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:101) raise FSTimeoutError from return_result
[102](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:102) elif isinstance(return_result, BaseException):
--> [103](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:103) raise return_result
[104](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:104) else:
[105](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:105) return return_result
File ~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:56, in _runner(event, coro, result, timeout)
[54](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:54) coro = asyncio.wait_for(coro, timeout=timeout)
[55](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:55) try:
---> [56](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:56) result[0] = await coro
[57](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:57) except Exception as ex:
[58](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:58) result[0] = ex
File ~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:465, in AsyncFileSystem._cat(self, path, recursive, on_error, batch_size, **kwargs)
[463](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:463) ex = next(filter(is_exception, out), False)
[464](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:464) if ex:
--> [465](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:465) raise ex
[466](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:466) if (
[467](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:467) len(paths) > 1
[468](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:468) or isinstance(path, list)
[469](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:469) or paths[0] != self._strip_protocol(path)
[470](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:470) ):
[471](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:471) return {
[472](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:472) k: v
[473](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:473) for k, v in zip(paths, out)
[474](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:474) if on_error != "omit" or not is_exception(v)
[475](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:475) }
File ~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:245, in _run_coros_in_chunks.<locals>._run_coro(coro, i)
[243](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:243) async def _run_coro(coro, i):
[244](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:244) try:
--> [245](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:245) return await asyncio.wait_for(coro, timeout=timeout), i
[246](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:246) except Exception as e:
[247](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/asyn.py:247) if not return_exceptions:
File ~/miniforge3/envs/fruitflyzarr/lib/python3.13/asyncio/tasks.py:507, in wait_for(fut, timeout)
[504](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/asyncio/tasks.py:504) raise TimeoutError from exc
[506](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/asyncio/tasks.py:506) async with timeouts.timeout(timeout):
--> [507](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/asyncio/tasks.py:507) return await fut
File ~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/implementations/http.py:236, in HTTPFileSystem._cat_file(self, url, start, end, **kwargs)
[234](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/implementations/http.py:234) async with session.get(self.encode_url(url), **kw) as r:
[235](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/implementations/http.py:235) out = await r.read()
--> [236](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/implementations/http.py:236) self._raise_not_found_for_status(r, url)
[237](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/implementations/http.py:237) return out
File ~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/implementations/http.py:219, in HTTPFileSystem._raise_not_found_for_status(self, response, url)
[217](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/implementations/http.py:217) if response.status == 404:
[218](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/implementations/http.py:218) raise FileNotFoundError(url)
--> [219](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/fsspec/implementations/http.py:219) response.raise_for_status()
File ~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/aiohttp/client_reqrep.py:1161, in ClientResponse.raise_for_status(self)
[1158](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/aiohttp/client_reqrep.py:1158) if not self._in_context:
[1159](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/aiohttp/client_reqrep.py:1159) self.release()
-> [1161](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/aiohttp/client_reqrep.py:1161) raise ClientResponseError(
[1162](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/aiohttp/client_reqrep.py:1162) self.request_info,
[1163](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/aiohttp/client_reqrep.py:1163) self.history,
[1164](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/aiohttp/client_reqrep.py:1164) status=self.status,
[1165](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/aiohttp/client_reqrep.py:1165) message=self.reason,
[1166](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/aiohttp/client_reqrep.py:1166) headers=self.headers,
[1167](https://file+.vscode-resource.vscode-cdn.net/home/thom/Desktop/CIPM/FruitFlyPheno/tests/~/miniforge3/envs/fruitflyzarr/lib/python3.13/site-packages/aiohttp/client_reqrep.py:1167) )
ClientResponseError: 500, message='Internal Server Error', url='http://0.0.0.0:8001/zarr/.zmetadata'
Thanks in advance!
Metadata
Metadata
Assignees
Labels
No labels