Skip to content
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

Draft for HYCOM50 recipe #29

Open
wants to merge 16 commits into
base: master
Choose a base branch
from
Open

Conversation

roxyboy
Copy link

@roxyboy roxyboy commented Apr 28, 2021

HYCOM50 data for SWOT Xover regions.

@rabernat rabernat added the swot-adac SWOT Adopt-a-Crossover Dataset label May 10, 2021
@roxyboy
Copy link
Author

roxyboy commented May 19, 2021

@cisaacstern Do you have updates on pushing the data to the cloud? :)

@cisaacstern
Copy link
Member

@roxyboy, no updates as of today. Aiming to get back to this later this week.

Of all the PRs labeled swot-adac, are any of highest or lowest priority for you?

@roxyboy
Copy link
Author

roxyboy commented May 19, 2021

@cisaacstern It's in lieu of a model inter-comparison study so no specific model has priority but... if you could prioritize the surface data from each PR labeled swot-adac, I'd appreciate it very much! :)

@cisaacstern
Copy link
Member

@roxyboy, you got it! Will likely begin pushing changes to these PRs today; tomorrow morning at the latest!

@roxyboy
Copy link
Author

roxyboy commented May 19, 2021

@cisaacstern Thanks a lot!

@cisaacstern
Copy link
Member

@roxyboy, the HYCOM50 surf_01 data is now on OSN. As we see in the recipe here, these are the data corresponding to the "GS" region. This example notebook demonstrates how to open the dataset:

https://gist.github.com/cisaacstern/59b39cb86308fa62c9d0da17b1f8630b

When you get a moment, please let me know if it looks like these data are complete or if any errors were introduced in writing. I will continue to write the surface data to OSN this evening and tomorrow, and will ping you again as new datasets come online.

@cisaacstern
Copy link
Member

Update: surf_02 (region GE) is now up as well. You can open it using the same notebook linked above, by substituting

root_path = 's3://Pangeo/pangeo-forge/swot_adac/HYCOM50/surf_02.zarr'

@cisaacstern
Copy link
Member

@roxyboy, all of the HYCOM50 surface data should now be on OSN. The following will produce a dictionary of all three datasets:

import s3fs
import xarray as xr

endpoint_url = 'https://ncsa.osn.xsede.org'
fs_osn = s3fs.S3FileSystem(anon=True, client_kwargs={'endpoint_url': endpoint_url},)

url = "s3://Pangeo/pangeo-forge/swot_adac/HYCOM50/"
hycom50_datasets = {
    ds: xr.open_zarr(fs_osn.get_mapper(f"{url}{ds}.zarr"), consolidated=True)
    for ds in ["surf_01", "surf_02", "surf_03"]
}
hycom50_datasets

@roxyboy
Copy link
Author

roxyboy commented May 26, 2021

@cisaacstern I started looking into the data but it seems that they're filled with NaNs...

@rabernat
Copy link
Contributor

rabernat commented May 26, 2021

There appears to be no actual data variables present in the dataset, only metadata. E.g.

fs_osn.ls('Pangeo/pangeo-forge/swot_adac/HYCOM50/surf_01.zarr/sst')
['Pangeo/pangeo-forge/swot_adac/HYCOM50/surf_01.zarr/sst/.zarray',
 'Pangeo/pangeo-forge/swot_adac/HYCOM50/surf_01.zarr/sst/.zattrs']

(we expect to see a bunch of chunks here, e.g. 0.0.0, 0.0.1, etc.)

This would happen if the store_chunk step had not been run.

@cisaacstern
Copy link
Member

On closer inspection, it does appear the execution pipeline was erroring out on the call to self.expand_target_dim (source).

Traceback
RUNNING surf_01
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Caching input '(0,)'
pangeo_forge_recipes.storage - INFO - Caching file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Feb_GS_hourly.nc'
pangeo_forge_recipes.storage - INFO - Coping remote file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Feb_GS_hourly.nc' to cache
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Caching metadata for input '(0,)'
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Opening input with Xarray (0,): 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Feb_GS_hourly.nc'
pangeo_forge_recipes.storage - INFO - Opening 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Feb_GS_hourly.nc' from cache
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - <xarray.Dataset>
Dimensions:    (lat: 615, lon: 503, time: 696)
Coordinates:
  * time       (time) object 0020-02-02 01:00:00 ... 0020-03-02 00:00:00
Dimensions without coordinates: lat, lon
Data variables:
    latitude   (lat) float32 ...
    longitude  (lon) float32 ...
    tauewd     (time, lat, lon) float32 ...
    taunwd     (time, lat, lon) float32 ...
    ssh        (time, lat, lon) float32 ...
    sst        (time, lat, lon) float32 ...
    sss        (time, lat, lon) float32 ...
    uu1        (time, lat, lon) float32 ...
    vv1        (time, lat, lon) float32 ...
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Caching input '(1,)'
pangeo_forge_recipes.storage - INFO - Caching file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Mar_GS_hourly.nc'
pangeo_forge_recipes.storage - INFO - Coping remote file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Mar_GS_hourly.nc' to cache
/srv/conda/envs/notebook/lib/python3.8/site-packages/xarray/coding/times.py:527: SerializationWarning: Unable to decode time axis into full numpy.datetime64 objects, continuing using cftime.datetime objects instead, reason: dates out of range
  dtype = _decode_cf_datetime_dtype(data, units, calendar, self.use_cftime)
/srv/conda/envs/notebook/lib/python3.8/site-packages/numpy/core/_asarray.py:102: SerializationWarning: Unable to decode time axis into full numpy.datetime64 objects, continuing using cftime.datetime objects instead, reason: dates out of range
  return array(a, dtype, copy=False, order=order)
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Caching metadata for input '(1,)'
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Opening input with Xarray (1,): 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Mar_GS_hourly.nc'
pangeo_forge_recipes.storage - INFO - Opening 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Mar_GS_hourly.nc' from cache
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - <xarray.Dataset>
Dimensions:    (lat: 615, lon: 503, time: 744)
Coordinates:
  * time       (time) object 0020-03-02 01:00:00 ... 0020-04-02 00:00:00
Dimensions without coordinates: lat, lon
Data variables:
    latitude   (lat) float32 ...
    longitude  (lon) float32 ...
    tauewd     (time, lat, lon) float32 ...
    taunwd     (time, lat, lon) float32 ...
    ssh        (time, lat, lon) float32 ...
    sst        (time, lat, lon) float32 ...
    sss        (time, lat, lon) float32 ...
    uu1        (time, lat, lon) float32 ...
    vv1        (time, lat, lon) float32 ...
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Caching input '(2,)'
pangeo_forge_recipes.storage - INFO - Caching file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Apr_GS_hourly.nc'
pangeo_forge_recipes.storage - INFO - Coping remote file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Apr_GS_hourly.nc' to cache
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Caching metadata for input '(2,)'
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Opening input with Xarray (2,): 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Apr_GS_hourly.nc'
pangeo_forge_recipes.storage - INFO - Opening 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Apr_GS_hourly.nc' from cache
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - <xarray.Dataset>
Dimensions:    (lat: 615, lon: 503, time: 720)
Coordinates:
  * time       (time) object 0020-04-02 01:00:00 ... 0020-05-02 00:00:00
Dimensions without coordinates: lat, lon
Data variables:
    latitude   (lat) float32 ...
    longitude  (lon) float32 ...
    tauewd     (time, lat, lon) float32 ...
    taunwd     (time, lat, lon) float32 ...
    ssh        (time, lat, lon) float32 ...
    sst        (time, lat, lon) float32 ...
    sss        (time, lat, lon) float32 ...
    uu1        (time, lat, lon) float32 ...
    vv1        (time, lat, lon) float32 ...
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Caching input '(3,)'
pangeo_forge_recipes.storage - INFO - Caching file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Aug_GS_hourly.nc'
pangeo_forge_recipes.storage - INFO - Coping remote file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Aug_GS_hourly.nc' to cache
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Caching metadata for input '(3,)'
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Opening input with Xarray (3,): 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Aug_GS_hourly.nc'
pangeo_forge_recipes.storage - INFO - Opening 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Aug_GS_hourly.nc' from cache
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - <xarray.Dataset>
Dimensions:    (lat: 615, lon: 503, time: 744)
Coordinates:
  * time       (time) object 0019-08-02 01:00:00 ... 0019-09-02 00:00:00
Dimensions without coordinates: lat, lon
Data variables:
    latitude   (lat) float32 ...
    longitude  (lon) float32 ...
    tauewd     (time, lat, lon) float32 ...
    taunwd     (time, lat, lon) float32 ...
    ssh        (time, lat, lon) float32 ...
    sst        (time, lat, lon) float32 ...
    sss        (time, lat, lon) float32 ...
    uu1        (time, lat, lon) float32 ...
    vv1        (time, lat, lon) float32 ...
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Caching input '(4,)'
pangeo_forge_recipes.storage - INFO - Caching file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Sep_GS_hourly.nc'
pangeo_forge_recipes.storage - INFO - Coping remote file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Sep_GS_hourly.nc' to cache
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Caching metadata for input '(4,)'
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Opening input with Xarray (4,): 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Sep_GS_hourly.nc'
pangeo_forge_recipes.storage - INFO - Opening 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Sep_GS_hourly.nc' from cache
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - <xarray.Dataset>
Dimensions:    (lat: 615, lon: 503, time: 720)
Coordinates:
  * time       (time) object 0019-09-02 01:00:00 ... 0019-10-02 00:00:00
Dimensions without coordinates: lat, lon
Data variables:
    latitude   (lat) float32 ...
    longitude  (lon) float32 ...
    tauewd     (time, lat, lon) float32 ...
    taunwd     (time, lat, lon) float32 ...
    ssh        (time, lat, lon) float32 ...
    sst        (time, lat, lon) float32 ...
    sss        (time, lat, lon) float32 ...
    uu1        (time, lat, lon) float32 ...
    vv1        (time, lat, lon) float32 ...
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Caching input '(5,)'
pangeo_forge_recipes.storage - INFO - Caching file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Oct_GS_hourly.nc'
pangeo_forge_recipes.storage - INFO - Coping remote file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Oct_GS_hourly.nc' to cache
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Caching metadata for input '(5,)'
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Opening input with Xarray (5,): 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Oct_GS_hourly.nc'
pangeo_forge_recipes.storage - INFO - Opening 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Oct_GS_hourly.nc' from cache
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - <xarray.Dataset>
Dimensions:    (lat: 615, lon: 503, time: 744)
Coordinates:
  * time       (time) object 0019-10-02 01:00:00 ... 0019-11-02 00:00:00
Dimensions without coordinates: lat, lon
Data variables:
    latitude   (lat) float32 ...
    longitude  (lon) float32 ...
    tauewd     (time, lat, lon) float32 ...
    taunwd     (time, lat, lon) float32 ...
    ssh        (time, lat, lon) float32 ...
    sst        (time, lat, lon) float32 ...
    sss        (time, lat, lon) float32 ...
    uu1        (time, lat, lon) float32 ...
    vv1        (time, lat, lon) float32 ...
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Creating a new dataset in target
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Opening inputs for chunk (0,)
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Opening input with Xarray (0,): 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Feb_GS_hourly.nc'
pangeo_forge_recipes.storage - INFO - Opening 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Feb_GS_hourly.nc' from cache
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - <xarray.Dataset>
Dimensions:    (lat: 615, lon: 503, time: 696)
Coordinates:
  * time       (time) object 0020-02-02 01:00:00 ... 0020-03-02 00:00:00
Dimensions without coordinates: lat, lon
Data variables:
    latitude   (lat) float32 ...
    longitude  (lon) float32 ...
    tauewd     (time, lat, lon) float32 ...
    taunwd     (time, lat, lon) float32 ...
    ssh        (time, lat, lon) float32 ...
    sst        (time, lat, lon) float32 ...
    sss        (time, lat, lon) float32 ...
    uu1        (time, lat, lon) float32 ...
    vv1        (time, lat, lon) float32 ...
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Combining inputs for chunk '(0,)'
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - <xarray.Dataset>
Dimensions:    (lat: 615, lon: 503, time: 696)
Coordinates:
  * time       (time) object 0020-02-02 01:00:00 ... 0020-03-02 00:00:00
Dimensions without coordinates: lat, lon
Data variables:
    latitude   (lat) float32 dask.array<chunksize=(615,), meta=np.ndarray>
    longitude  (lon) float32 dask.array<chunksize=(503,), meta=np.ndarray>
    tauewd     (time, lat, lon) float32 dask.array<chunksize=(696, 615, 503), meta=np.ndarray>
    taunwd     (time, lat, lon) float32 dask.array<chunksize=(696, 615, 503), meta=np.ndarray>
    ssh        (time, lat, lon) float32 dask.array<chunksize=(696, 615, 503), meta=np.ndarray>
    sst        (time, lat, lon) float32 dask.array<chunksize=(696, 615, 503), meta=np.ndarray>
    sss        (time, lat, lon) float32 dask.array<chunksize=(696, 615, 503), meta=np.ndarray>
    uu1        (time, lat, lon) float32 dask.array<chunksize=(696, 615, 503), meta=np.ndarray>
    vv1        (time, lat, lon) float32 dask.array<chunksize=(696, 615, 503), meta=np.ndarray>
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - Setting variable time encoding chunks to (24,)
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - Setting variable latitude encoding chunks to (615,)
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - Setting variable longitude encoding chunks to (503,)
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - Setting variable tauewd encoding chunks to (24, 615, 503)
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - Setting variable taunwd encoding chunks to (24, 615, 503)
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - Setting variable ssh encoding chunks to (24, 615, 503)
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - Setting variable sst encoding chunks to (24, 615, 503)
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - Setting variable sss encoding chunks to (24, 615, 503)
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - Setting variable uu1 encoding chunks to (24, 615, 503)
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - Setting variable vv1 encoding chunks to (24, 615, 503)
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Storing dataset in s3://Pangeo/pangeo-forge/swot_adac/HYCOM50/surf_01.zarr
pangeo_forge_recipes.recipes.xarray_zarr - DEBUG - <xarray.Dataset>
Dimensions:    (lat: 615, lon: 503, time: 696)
Coordinates:
  * time       (time) object 0020-02-02 01:00:00 ... 0020-03-02 00:00:00
Dimensions without coordinates: lat, lon
Data variables:
    latitude   (lat) float32 29.99 30.01 30.02 30.04 ... 39.98 39.99 40.01 40.02
    longitude  (lon) float32 -78.02 -78.0 -77.98 -77.96 ... -68.02 -68.0 -67.98
    tauewd     (time, lat, lon) float32 dask.array<chunksize=(696, 615, 503), meta=np.ndarray>
    taunwd     (time, lat, lon) float32 dask.array<chunksize=(696, 615, 503), meta=np.ndarray>
    ssh        (time, lat, lon) float32 dask.array<chunksize=(696, 615, 503), meta=np.ndarray>
    sst        (time, lat, lon) float32 dask.array<chunksize=(696, 615, 503), meta=np.ndarray>
    sss        (time, lat, lon) float32 dask.array<chunksize=(696, 615, 503), meta=np.ndarray>
    uu1        (time, lat, lon) float32 dask.array<chunksize=(696, 615, 503), meta=np.ndarray>
    vv1        (time, lat, lon) float32 dask.array<chunksize=(696, 615, 503), meta=np.ndarray>
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Expanding target concat dim 'time' to size 4368

GroupNotFoundError                        Traceback (most recent call last)
<ipython-input-8-bccf9db82171> in <module>
      7         pl = r.to_pipelines()
      8         plan = executor.pipelines_to_plan(pl)
----> 9         executor.execute_plan(plan)

/srv/conda/envs/notebook/lib/python3.8/site-packages/rechunker/executors/python.py in execute_plan(self, plan, **kwargs)
     30 
     31     def execute_plan(self, plan: Task, **kwargs):
---> 32         plan()
     33 
     34 

/srv/conda/envs/notebook/lib/python3.8/site-packages/rechunker/executors/python.py in _execute_all(tasks)
     35 def _execute_all(tasks: Iterable[Task]) -> None:
     36     for task in tasks:
---> 37         task()

/srv/conda/envs/notebook/lib/python3.8/site-packages/pangeo_forge_recipes/recipes/xarray_zarr.py in prepare_target(self)
    267         n_sequence = sum(input_sequence_lens)
    268         logger.info(f"Expanding target concat dim '{self._concat_dim}' to size {n_sequence}")
--> 269         self.expand_target_dim(self._concat_dim, n_sequence)
    270 
    271         if self._cache_metadata:

/srv/conda/envs/notebook/lib/python3.8/site-packages/pangeo_forge_recipes/recipes/xarray_zarr.py in expand_target_dim(self, dim, dimsize)
    402         target_mapper = self.target.get_mapper()
    403         zgroup = zarr.open_group(target_mapper)
--> 404         ds = self.open_target()
    405         sequence_axes = {v: ds[v].get_axis_num(dim) for v in ds.variables if dim in ds[v].dims}
    406 

/srv/conda/envs/notebook/lib/python3.8/site-packages/pangeo_forge_recipes/recipes/xarray_zarr.py in open_target(self)
    397     def open_target(self):
    398         target_mapper = self.target.get_mapper()
--> 399         return xr.open_zarr(target_mapper)
    400 
    401     def expand_target_dim(self, dim, dimsize):

/srv/conda/envs/notebook/lib/python3.8/site-packages/xarray/backends/zarr.py in open_zarr(store, group, synchronizer, chunks, decode_cf, mask_and_scale, decode_times, concat_characters, decode_coords, drop_variables, consolidated, overwrite_encoded_chunks, chunk_store, storage_options, decode_timedelta, use_cftime, **kwargs)
    685     }
    686 
--> 687     ds = open_dataset(
    688         filename_or_obj=store,
    689         group=group,

/srv/conda/envs/notebook/lib/python3.8/site-packages/xarray/backends/api.py in open_dataset(filename_or_obj, engine, chunks, cache, decode_cf, mask_and_scale, decode_times, decode_timedelta, use_cftime, concat_characters, decode_coords, drop_variables, backend_kwargs, *args, **kwargs)
    494 
    495     overwrite_encoded_chunks = kwargs.pop("overwrite_encoded_chunks", None)
--> 496     backend_ds = backend.open_dataset(
    497         filename_or_obj,
    498         drop_variables=drop_variables,

/srv/conda/envs/notebook/lib/python3.8/site-packages/xarray/backends/zarr.py in open_dataset(self, filename_or_obj, mask_and_scale, decode_times, concat_characters, decode_coords, drop_variables, use_cftime, decode_timedelta, group, mode, synchronizer, consolidated, consolidate_on_close, chunk_store, storage_options, lock)
    732 
    733         filename_or_obj = _normalize_path(filename_or_obj)
--> 734         store = ZarrStore.open_group(
    735             filename_or_obj,
    736             group=group,

/srv/conda/envs/notebook/lib/python3.8/site-packages/xarray/backends/zarr.py in open_group(cls, store, mode, synchronizer, group, consolidated, consolidate_on_close, chunk_store, storage_options, append_dim, write_region, safe_chunks)
    336             zarr_group = zarr.open_consolidated(store, **open_kwargs)
    337         else:
--> 338             zarr_group = zarr.open_group(store, **open_kwargs)
    339         return cls(
    340             zarr_group, consolidate_on_close, append_dim, write_region, safe_chunks

/srv/conda/envs/notebook/lib/python3.8/site-packages/zarr/hierarchy.py in open_group(store, mode, cache_attrs, synchronizer, path, chunk_store, storage_options)
   1164             raise ContainsArrayError(path)
   1165         elif not contains_group(store, path=path):
-> 1166             raise GroupNotFoundError(path)
   1167 
   1168     elif mode == 'w':

GroupNotFoundError: group not found at path ''

@cisaacstern
Copy link
Member

I'm now adding the missing data (per solution identified by Ryan) and will ping this thread again when it is complete. A summary of the underlying issue follows.

As evidenced by the Traceback in my previous comment, the error was raised on self.open_target() when the expand_target_dim method is called within recipe.prepare_target. This turned out to be the same caching issue identified in pangeo-forge/pangeo-forge-recipes#113 (comment). The issue is resolved by setting use_listings_cache=False when instantiating the s3fs object:

import s3fs

endpoint_url = 'https://ncsa.osn.xsede.org'
fs_osn = s3fs.S3FileSystem(
    key='<KEY>',
    secret='<SECRET>',
    client_kwargs={'endpoint_url': endpoint_url},
    default_cache_type='none',
    default_fill_cache=False,
    use_listings_cache=False
)

target_base = f's3://Pangeo/pangeo-forge'

For this to work, however, the s3fs version must be one that includes fsspec/s3fs#471. The current default s3fs install on Pangeo cloud predates this PR, therefore running !pip install "s3fs>=2021.05.0" in the notebook was also required.

@cisaacstern
Copy link
Member

@roxyboy, as indicated by the output of the below code, I believe the surface data are now good to go. The paths have not changed so the xarray code block in my earlier comment should still work to load them. Thanks for your patience and as always do let me know if anything is amiss.

import s3fs
import zarr

endpoint_url = 'https://ncsa.osn.xsede.org'
fs_osn = s3fs.S3FileSystem(anon=True, client_kwargs={'endpoint_url': endpoint_url},)

url_base = "s3://Pangeo/pangeo-forge/swot_adac/HYCOM50/"
root_paths = [f"{url_base}{ds}.zarr" for ds in ("surf_01", "surf_02", "surf_03")]
variables = ["ssh", "sss", "sst", "tauewd", "taunwd", "uu1", "vv1"]

for r in root_paths:
    print(r)
    group = zarr.open_consolidated(fs_osn.get_mapper(r))
    for v in variables:
        group_info = group[v].info_items()
        print(f"""{group_info[0][1]}
        {group_info[-2]}
        {group_info[-1]}
        """)
s3://Pangeo/pangeo-forge/swot_adac/HYCOM50/surf_01.zarr
/ssh
        ('No. bytes', '5404875840 (5.0G)')
        ('Chunks initialized', '182/182')
        
/sss
        ('No. bytes', '5404875840 (5.0G)')
        ('Chunks initialized', '182/182')
        
/sst
        ('No. bytes', '5404875840 (5.0G)')
        ('Chunks initialized', '182/182')
        
/tauewd
        ('No. bytes', '5404875840 (5.0G)')
        ('Chunks initialized', '182/182')
        
/taunwd
        ('No. bytes', '5404875840 (5.0G)')
        ('Chunks initialized', '182/182')
        
/uu1
        ('No. bytes', '5404875840 (5.0G)')
        ('Chunks initialized', '182/182')
        
/vv1
        ('No. bytes', '5404875840 (5.0G)')
        ('Chunks initialized', '182/182')
        
s3://Pangeo/pangeo-forge/swot_adac/HYCOM50/surf_02.zarr
/ssh
        ('No. bytes', '5404875840 (5.0G)')
        ('Chunks initialized', '182/182')
        
/sss
        ('No. bytes', '5404875840 (5.0G)')
        ('Chunks initialized', '182/182')
        
/sst
        ('No. bytes', '5404875840 (5.0G)')
        ('Chunks initialized', '182/182')
        
/tauewd
        ('No. bytes', '5404875840 (5.0G)')
        ('Chunks initialized', '182/182')
        
/taunwd
        ('No. bytes', '5404875840 (5.0G)')
        ('Chunks initialized', '182/182')
        
/uu1
        ('No. bytes', '5404875840 (5.0G)')
        ('Chunks initialized', '182/182')
        
/vv1
        ('No. bytes', '5404875840 (5.0G)')
        ('Chunks initialized', '182/182')
        
s3://Pangeo/pangeo-forge/swot_adac/HYCOM50/surf_03.zarr
/ssh
        ('No. bytes', '4587553152 (4.3G)')
        ('Chunks initialized', '182/182')
        
/sss
        ('No. bytes', '4587553152 (4.3G)')
        ('Chunks initialized', '182/182')
        
/sst
        ('No. bytes', '4587553152 (4.3G)')
        ('Chunks initialized', '182/182')
        
/tauewd
        ('No. bytes', '4587553152 (4.3G)')
        ('Chunks initialized', '182/182')
        
/taunwd
        ('No. bytes', '4587553152 (4.3G)')
        ('Chunks initialized', '182/182')
        
/uu1
        ('No. bytes', '4587553152 (4.3G)')
        ('Chunks initialized', '182/182')
        
/vv1
        ('No. bytes', '4587553152 (4.3G)')
        ('Chunks initialized', '182/182')

@roxyboy
Copy link
Author

roxyboy commented May 27, 2021

Yep, seems to be working now! Thanks @cisaacstern :)

@roxyboy
Copy link
Author

roxyboy commented May 27, 2021

@cisaacstern The time metadata for HYCOM is not based on any real calendar such as Gregorian so it makes it a bit hard to identify which time step is when but is it ok to understand that the ordering of the zarr dataset is in the same order as the recipe: months = ["Feb", "Mar", "Apr", "Aug", "Sep", "Oct"]?

@rabernat
Copy link
Contributor

is it ok to understand that the ordering of the zarr dataset is in the same order as the recipe: months = ["Feb", "Mar", "Apr", "Aug", "Sep", "Oct"]

I would say that if the months are not contiguous, it would be best to separate into two distinct "seasons", as we did for eNATL60.

@cisaacstern
Copy link
Member

cisaacstern commented Jun 2, 2021

@roxyboy, the brief answer (and apologies that it's taken me a moment to get back around to this question), is yes: the HYCOM50 zarr stores are organized chronologically following the same order of months as provided in the recipe. I figured this would be the case, but wanted to make sure I could prove it in the data itself, and found out one or two interesting things in the process. Here are some thoughts.

Once we've defined the hycom50_datasets dictionary as shown above in #29 (comment), looking at the time index of the first dataset shows us that the calendar is of type CFTimeIndex (which I agree is not especially human-readable):

CFTimeIndex example
hycom50_datasets["surf_01"].indexes
time: CFTimeIndex([0020-02-02 01:00:00, 0020-02-02 02:00:00, 0020-02-02 03:00:00,
                   0020-02-02 04:00:00, 0020-02-02 05:00:00, 0020-02-02 06:00:00,
                   ...
                   0019-11-01 21:00:00, 0019-11-01 22:00:00, 0019-11-01 23:00:00,
                   0019-11-02 00:00:00],
                  dtype='object', length=4368, calendar='gregorian', freq='None')

Each of these timepoints has a number of more easily understandable attributes, however, which we can introspect. Here are the relevant attributes, as pulled from the first timepoint of hycom50_datasets["surf_01"].indexes["time"]:

CFTimeIndex attributes
t_point = hycom50_datasets["surf_01"].indexes["time"][0]

attributes = [attr for attr in dir(t_point) if attr[0] != "_"]

print(attributes)
['calendar', 'datetime_compatible', 'day', 'dayofwk', 'dayofyr', 'daysinmonth', 'format', 'fromordinal', 'has_year_zero', 'hour', 'isoformat', 'microsecond', 'minute', 'month', 'replace', 'second', 'strftime', 'timetuple', 'toordinal', 'tzinfo', 'year']

So, the month for this first timepoint can be discovered as follows:

hycom50_datasets["surf_01"].indexes["time"][0].month
2

Combining this with a relatively simple loop, we can then print the following mapping of time indices to months. (Just showing the first of the three surface datasets here, as it appears all three time indexes are the same.) The interesting thing shown here is that it appears that the fma season (i.e. Feb, Mar, April) actually includes 24 timepoints in May, and similarly the aso (Aug, Sep, Oct) season includes 24 timepoints in November.

Is this expected?

Loop
months = (
    "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
)
d = {i: m for i, m in zip(range(1,13), months)}

ds = "surf_01"
t_index = hycom50_datasets[ds].indexes["time"]
print(
    f"The time index of '{ds}' is a {type(t_index)}, \n"
    f"with calendar='{t_index.calendar}' and length={len(t_index)}."
)
month = t_index[0].month
breakpoint = 0
for i in range(len(t_index)):
    if t_index[i].month != month:
        print(
            f"Month {month} ({d[month]}) spans {i - 1 - breakpoint} indices,"
            f" from {breakpoint} to {i - 1}."
        )
        month = t_index[i].month
        breakpoint = i
    elif i == len(t_index) - 1:
        print(
            f"Month {month} ({d[month]}) spans {i - breakpoint} indices,"
            f" from {breakpoint} to {i}."
        )
    else:
        pass
The time index of 'surf_01' is a <class 'xarray.coding.cftimeindex.CFTimeIndex'>, 
with calendar='gregorian' and length=4368.
Month 2 (Feb) spans 670 indices, from 0 to 670.
Month 3 (Mar) spans 743 indices, from 671 to 1414.
Month 4 (Apr) spans 719 indices, from 1415 to 2134.
Month 5 (May) spans 24 indices, from 2135 to 2159.
Month 8 (Aug) spans 718 indices, from 2160 to 2878.
Month 9 (Sep) spans 719 indices, from 2879 to 3598.
Month 10 (Oct) spans 743 indices, from 3599 to 4342.
Month 11 (Nov) spans 24 indices, from 4343 to 4367.

@rabernat, your suggestion to separate non-contiguous seasons into separate zarr stores, as demonstrated in #24 (comment), is well taken. I will work on a revision to the HYCOM50 recipe this week that accomplishes that, but wanted to get these thoughts down first, in the event they're able to aid data exploration before I'm able to push the new version.

@roxyboy
Copy link
Author

roxyboy commented Jun 2, 2021

@rabernat, your suggestion to separate non-contiguous seasons into separate zarr stores, as demonstrated in #24 (comment), is well taken. I will work on a revision to the HYCOM50 recipe this week that accomplishes that, but wanted to get these thoughts down first, in the event they're able to aid data exploration before I'm able to push the new version.

Should we also split up the GIGATL data into winter (Feb, Mar, Apr) and summer (Aug, Sep, Oct)?

@roxyboy
Copy link
Author

roxyboy commented Jun 2, 2021

@roxyboy, the brief answer (and apologies that it's taken me a moment to get back around to this question), is yes: the HYCOM50 zarr stores are organized chronologically following the same order of months as provided in the recipe. I figured this would be the case, but wanted to make sure I could prove it in the data itself, and found out one or two interesting things in the process. Here are some thoughts.

Once we've defined the hycom50_datasets dictionary as shown above in #29 (comment), looking at the time index of the first dataset shows us that the calendar is of type CFTimeIndex (which I agree is not especially human-readable):
CFTimeIndex example

Each of these timepoints has a number of more easily understandable attributes, however, which we can introspect. Here are the relevant attributes, as pulled from the first timepoint of hycom50_datasets["surf_01"].indexes["time"]:
CFTimeIndex attributes

So, the month for this first timepoint can be discovered as follows:

hycom50_datasets["surf_01"].indexes["time"][0].month
2

Combining this with a relatively simple loop, we can then print the following mapping of time indices to months. (Just showing the first of the three surface datasets here, as it appears all three time indexes are the same.) The interesting thing shown here is that it appears that the fma season (i.e. Feb, Mar, April) actually includes 24 timepoints in May, and similarly the aso (Aug, Sep, Oct) season includes 24 timepoints in November.

Is this expected?
Loop

The time index of 'surf_01' is a <class 'xarray.coding.cftimeindex.CFTimeIndex'>, 
with calendar='gregorian' and length=4368.
Month 2 (Feb) spans 670 indices, from 0 to 670.
Month 3 (Mar) spans 743 indices, from 671 to 1414.
Month 4 (Apr) spans 719 indices, from 1415 to 2134.
Month 5 (May) spans 24 indices, from 2135 to 2159.
Month 8 (Aug) spans 718 indices, from 2160 to 2878.
Month 9 (Sep) spans 719 indices, from 2879 to 3598.
Month 10 (Oct) spans 743 indices, from 3599 to 4342.
Month 11 (Nov) spans 24 indices, from 4343 to 4367.

@cisaacstern Thanks for checking.

I was able to exactly match the length of the time by accounting for leap year (hourly data of 29 days in Feb.) within the months of FMA and ASO... I agree it's weird that there would be data in May and Nov...

@cisaacstern
Copy link
Member

Should we also split up the GIGATL data into winter (Feb, Mar, Apr) and summer (Aug, Sep, Oct)?

Yes, and for the detailed response: #27 (comment)

... Also, could you push the grid files for HYCOM50... ?

(☝️ from #26 (comment))

Sure thing! HYCOM50 grids are now on OSN and accessible with:

HYCOM50 grid access code
import s3fs
import xarray as xr

endpoint_url = 'https://ncsa.osn.xsede.org'
fs_osn = s3fs.S3FileSystem(anon=True, client_kwargs={'endpoint_url': endpoint_url},)

url = "s3://Pangeo/pangeo-forge/swot_adac/HYCOM50/"
hycom50_grids = {
    grid: xr.open_zarr(fs_osn.get_mapper(f"{url}{grid}.zarr"), consolidated=True)
    for grid in ["grid_01", "grid_02", "grid_03"]
}

hycom50_grids

@cisaacstern
Copy link
Member

cisaacstern commented Jun 11, 2021

@martindurant, any recommendations for how to resolve a timeout error when caching a large file from an ftp server?

The first input url for the recipe in question (code here) is:

from hycom_recipe import recipes
rec = recipes["HYCOM50/Region01_GS/int/fma"]
for k, v in rec.file_pattern.items():
    print(k, v)
    break
(0,) ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Feb_GS_daily.nc

Which is just shy of 6 GB according to curl:

➜ URL="ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Feb_GS_daily.nc"
➜ curl -sI $URL
Last-Modified: Thu, 15 Apr 2021 17:31:14 GMT
Content-Length: 5937121613
Accept-ranges: bytes

When I run

for input_name in rec.iter_inputs():
    rec.cache_input(input_name)

I get:

logs before `timeout` Traceback
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Caching input '(0,)'
pangeo_forge_recipes.storage - INFO - Caching file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Feb_GS_daily.nc'
pangeo_forge_recipes.storage - INFO - Coping remote file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Feb_GS_daily.nc' to cache
pangeo_forge_recipes.storage - DEBUG - entering fs.open context manager for gs://pangeo-forge-us-central1/pangeo-forge-cache/swot_adac/HYCOM50/Region01_GS/int/fma/3fcae1d70dba164317d164c5d7fdccea-ftp_ftp.hycom.org_pub_xbxu_atlc0.02_swot_adac_hycom50_e043_feb_gs_daily.nc
pangeo_forge_recipes.storage - DEBUG - FSSpecTarget.open yielding <File-like object GCSFileSystem, pangeo-forge-us-central1/pangeo-forge-cache/swot_adac/HYCOM50/Region01_GS/int/fma/3fcae1d70dba164317d164c5d7fdccea-ftp_ftp.hycom.org_pub_xbxu_atlc0.02_swot_adac_hycom50_e043_feb_gs_daily.nc>
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
`timeout` Traceback
---------------------------------------------------------------------------
timeout                                   Traceback (most recent call last)
<ipython-input-22-d14b93ca6904> in <module>
      1 for input_name in rec.iter_inputs():
----> 2     rec.cache_input(input_name)

/srv/conda/envs/notebook/lib/python3.8/site-packages/pangeo_forge_recipes/recipes/xarray_zarr.py in cache_input(self, input_key)
    287             logger.info(f"Caching input '{input_key}'")
    288             fname = self.file_pattern[input_key]
--> 289             self.input_cache.cache_file(fname, **self.fsspec_open_kwargs)
    290 
    291         if self._cache_metadata:

/srv/conda/envs/notebook/lib/python3.8/site-packages/pangeo_forge_recipes/storage.py in cache_file(self, fname, **open_kwargs)
    151         target_opener = self.open(fname, mode="wb")
    152         logger.info(f"Coping remote file '{fname}' to cache")
--> 153         _copy_btw_filesystems(input_opener, target_opener)
    154 
    155 

/srv/conda/envs/notebook/lib/python3.8/site-packages/pangeo_forge_recipes/storage.py in _copy_btw_filesystems(input_opener, output_opener, BLOCK_SIZE)
     32                 logger.debug("_copy_btw_filesystems reading data")
     33                 try:
---> 34                     data = source.read(BLOCK_SIZE)
     35                 except BlockSizeError as e:
     36                     raise ValueError(

/srv/conda/envs/notebook/lib/python3.8/site-packages/fsspec/spec.py in read(self, length)
   1467             # don't even bother calling fetch
   1468             return b""
-> 1469         out = self.cache._fetch(self.loc, self.loc + length)
   1470         self.loc += len(out)
   1471         return out

/srv/conda/envs/notebook/lib/python3.8/site-packages/fsspec/caching.py in _fetch(self, start, end)
    151             part = b""
    152         end = min(self.size, end + self.blocksize)
--> 153         self.cache = self.fetcher(start, end)  # new block replaces old
    154         self.start = start
    155         self.end = self.start + len(self.cache)

/srv/conda/envs/notebook/lib/python3.8/site-packages/fsspec/implementations/ftp.py in _fetch_range(self, start, end)
    245 
    246         try:
--> 247             self.fs.ftp.retrbinary(
    248                 "RETR %s" % self.path,
    249                 blocksize=self.blocksize,

/srv/conda/envs/notebook/lib/python3.8/ftplib.py in retrbinary(self, cmd, callback, blocksize, rest)
    425         with self.transfercmd(cmd, rest) as conn:
    426             while 1:
--> 427                 data = conn.recv(blocksize)
    428                 if not data:
    429                     break

timeout: timed out

The default timeout appears to be 30 (seconds), I've tried increasing this to up to 300 by setting

rec.fsspec_open_kwargs={"timeout": 300}

but this does not resolve the error. Any guidance will be very much appreciated.

@martindurant
Copy link

That is the right kwarg for the timeout as far as I can tell. Do you know if it was waiting the new longer period, or still 30s (or something else?)? The file object should have f.fs.ftp.timeout of the value you sent.

FTPFile, like most of these, is geared to random access of the target file, but streaming operations like this could well do with additional simpler helper methods.
You might try playing with the blocksize of the copy process and of the FTPFile too.

@rabernat
Copy link
Contributor

but streaming operations like this could well do with additional simpler helper methods.

Could you clarify what you mean here. What would an "additional simpler helper method" look like?

@martindurant
Copy link

If you look at fsspec.implementations.ftp.FTPFile._fetch_range, you'll see it does a surprising amount to be able to read a random chunk from the server. Here we don't need offset/size, the callback would simply write the bytes to wherever they are going. ftplib actually makes it tricky to stream the data as an iterator would, but
compare with aioftp's API.

@cisaacstern
Copy link
Member

cisaacstern commented Jun 14, 2021

The file object should have f.fs.ftp.timeout of the value you sent.

Yes, I can confirm that the correct timeout value is being passed from the recipe all the way through to f.fs.ftp.timeout, as evidenced by running the caching step with the following print statements added to fsspec/implementations/ftp.py:

rec.fsspec_open_kwargs={"timeout": 300} 
for input_name in rec.iter_inputs():
    rec.cache_input(input_name)
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Caching input '(0,)'
pangeo_forge_recipes.storage - INFO - Caching file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Feb_GS_daily.nc'
pangeo_forge_recipes.storage - INFO - Coping remote file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Feb_GS_daily.nc' to cache
pangeo_forge_recipes.storage - DEBUG - entering fs.open context manager for gs://pangeo-forge-us-central1/pangeo-forge-cache/swot_adac/HYCOM50/Region01_GS/int/fma/3fcae1d70dba164317d164c5d7fdccea-ftp_ftp.hycom.org_pub_xbxu_atlc0.02_swot_adac_hycom50_e043_feb_gs_daily.nc
pangeo_forge_recipes.storage - DEBUG - FSSpecTarget.open yielding <File-like object GCSFileSystem, pangeo-forge-us-central1/pangeo-forge-cache/swot_adac/HYCOM50/Region01_GS/int/fma/3fcae1d70dba164317d164c5d7fdccea-ftp_ftp.hycom.org_pub_xbxu_atlc0.02_swot_adac_hycom50_e043_feb_gs_daily.nc>
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
In `FTPFile._fetch_range`,
            `self.fs.timeout` is 300,
            `self.fs.ftp.timeout` is 300.

Do you know if it was waiting the new longer period, or still 30s (or something else?)?

This questions is harder to answer, because I am not sure what specific block(s) of code to time. When I wrap data = source.read(BLOCK_SIZE) with this timing code, and run it with the default of timeout=30, I get a range of execution times, some of which (that do not time out) are above 30 seconds:

# running here with default of `timeout=30`
for input_name in rec.iter_inputs():
    rec.cache_input(input_name)
logging of `data = source.read(BLOCK_SIZE)` execution times followed by `timeout` Traceback (from above-linked timing branch)
pangeo_forge_recipes.recipes.xarray_zarr - INFO - Caching input '(0,)'
pangeo_forge_recipes.storage - INFO - Caching file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Feb_GS_daily.nc'
pangeo_forge_recipes.storage - INFO - Coping remote file 'ftp://ftp.hycom.org/pub/xbxu/ATLc0.02/SWOT_ADAC/HYCOM50_E043_Feb_GS_daily.nc' to cache
pangeo_forge_recipes.storage - DEBUG - entering fs.open context manager for gs://pangeo-forge-us-central1/pangeo-forge-cache/swot_adac/HYCOM50/Region01_GS/int/fma/3fcae1d70dba164317d164c5d7fdccea-ftp_ftp.hycom.org_pub_xbxu_atlc0.02_swot_adac_hycom50_e043_feb_gs_daily.nc
pangeo_forge_recipes.storage - DEBUG - FSSpecTarget.open yielding <File-like object GCSFileSystem, pangeo-forge-us-central1/pangeo-forge-cache/swot_adac/HYCOM50/Region01_GS/int/fma/3fcae1d70dba164317d164c5d7fdccea-ftp_ftp.hycom.org_pub_xbxu_atlc0.02_swot_adac_hycom50_e043_feb_gs_daily.nc>
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems read data in 88.65745 seconds.
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems read data in 49.84251 seconds.
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems read data in 29.06689 seconds.
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems read data in 9.8586 seconds.
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems copying block of 10000000 bytes
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems reading data
pangeo_forge_recipes.storage - DEBUG - _copy_btw_filesystems timed out in 43.1214 seconds.

---------------------------------------------------------------------------
TransferDone                              Traceback (most recent call last)
~/.pyenv/versions/anaconda3-2019.10/envs/pangeo-forge3.8/lib/python3.8/site-packages/fsspec/implementations/ftp.py in _fetch_range(self, start, end)
    246         try:
--> 247             self.fs.ftp.retrbinary(
    248                 "RETR %s" % self.path,

~/.pyenv/versions/anaconda3-2019.10/envs/pangeo-forge3.8/lib/python3.8/ftplib.py in retrbinary(self, cmd, callback, blocksize, rest)
    429                     break
--> 430                 callback(data)
    431             # shutdown ssl layer

~/.pyenv/versions/anaconda3-2019.10/envs/pangeo-forge3.8/lib/python3.8/site-packages/fsspec/implementations/ftp.py in callback(x)
    238                 if end < self.size:
--> 239                     raise TransferDone
    240             else:

TransferDone: 

During handling of the above exception, another exception occurred:

timeout                                   Traceback (most recent call last)
~/.pyenv/versions/anaconda3-2019.10/envs/pangeo-forge3.8/lib/python3.8/site-packages/pangeo_forge_recipes/storage.py in _copy_btw_filesystems(input_opener, output_opener, BLOCK_SIZE)
     36                     start = time.time()
---> 37                     data = source.read(BLOCK_SIZE)
     38                     logger.debug(

~/.pyenv/versions/anaconda3-2019.10/envs/pangeo-forge3.8/lib/python3.8/site-packages/fsspec/spec.py in read(self, length)
   1468             return b""
-> 1469         out = self.cache._fetch(self.loc, self.loc + length)
   1470         self.loc += len(out)

~/.pyenv/versions/anaconda3-2019.10/envs/pangeo-forge3.8/lib/python3.8/site-packages/fsspec/caching.py in _fetch(self, start, end)
    152         end = min(self.size, end + self.blocksize)
--> 153         self.cache = self.fetcher(start, end)  # new block replaces old
    154         self.start = start

~/.pyenv/versions/anaconda3-2019.10/envs/pangeo-forge3.8/lib/python3.8/site-packages/fsspec/implementations/ftp.py in _fetch_range(self, start, end)
    255                 # stop transfer, we got enough bytes for this block
--> 256                 self.fs.ftp.abort()
    257                 self.fs.ftp.getmultiline()

~/.pyenv/versions/anaconda3-2019.10/envs/pangeo-forge3.8/lib/python3.8/ftplib.py in abort(self)
    266         self.sock.sendall(line, MSG_OOB)
--> 267         resp = self.getmultiline()
    268         if resp[:3] not in {'426', '225', '226'}:

~/.pyenv/versions/anaconda3-2019.10/envs/pangeo-forge3.8/lib/python3.8/ftplib.py in getmultiline(self)
    223     def getmultiline(self):
--> 224         line = self.getline()
    225         if line[3:4] == '-':

~/.pyenv/versions/anaconda3-2019.10/envs/pangeo-forge3.8/lib/python3.8/ftplib.py in getline(self)
    205     def getline(self):
--> 206         line = self.file.readline(self.maxline + 1)
    207         if len(line) > self.maxline:

~/.pyenv/versions/anaconda3-2019.10/envs/pangeo-forge3.8/lib/python3.8/socket.py in readinto(self, b)
    668             try:
--> 669                 return self._sock.recv_into(b)
    670             except timeout:

timeout: timed out

The above exception was the direct cause of the following exception:

ValueError                                Traceback (most recent call last)
<ipython-input-9-d14b93ca6904> in <module>
      1 for input_name in rec.iter_inputs():
----> 2     rec.cache_input(input_name)

~/.pyenv/versions/anaconda3-2019.10/envs/pangeo-forge3.8/lib/python3.8/site-packages/pangeo_forge_recipes/recipes/xarray_zarr.py in cache_input(self, input_key)
    287             logger.info(f"Caching input '{input_key}'")
    288             fname = self.file_pattern[input_key]
--> 289             self.input_cache.cache_file(fname, **self.fsspec_open_kwargs)
    290 
    291         if self._cache_metadata:

~/.pyenv/versions/anaconda3-2019.10/envs/pangeo-forge3.8/lib/python3.8/site-packages/pangeo_forge_recipes/storage.py in cache_file(self, fname, **open_kwargs)
    167         target_opener = self.open(fname, mode="wb")
    168         logger.info(f"Coping remote file '{fname}' to cache")
--> 169         _copy_btw_filesystems(input_opener, target_opener)
    170 
    171 

~/.pyenv/versions/anaconda3-2019.10/envs/pangeo-forge3.8/lib/python3.8/site-packages/pangeo_forge_recipes/storage.py in _copy_btw_filesystems(input_opener, output_opener, BLOCK_SIZE)
     45                         round((time.time() - start), 5)
     46                     )
---> 47                     raise ValueError(
     48                         "Connection timed out. "
     49                         'Try re-instantiating recipe with `fsspec_open_kwargs={"timeout": 300}`'

ValueError: Connection timed out. Try re-instantiating recipe with `fsspec_open_kwargs={"timeout": 300}`

@martindurant, which specific block(s) in fsspec, or possibly in Python's ftplib.py or socket.py, would we need to time to measure the time elapsed before socket.timeout is raised?

@martindurant
Copy link

I don't know in detail what ftpl;ib does with its timeout. You might be right that you need to get it to the lower-level socket.

@cisaacstern
Copy link
Member

HYCOM50 int data is now on OSN. (@martindurant, I never did figure out a real solution for socket.timeout. I just reset the caching whenever it happened—which was kind of a lot—and it would eventually work.)

@roxyboy, you can find them at the following paths:

import s3fs

endpoint_url = 'https://ncsa.osn.xsede.org'
fs_osn = s3fs.S3FileSystem(anon=True, client_kwargs={'endpoint_url': endpoint_url},)

path_fmt = "Pangeo/pangeo-forge/swot_adac/HYCOM50/{region}/int"
regions = ["Region01_GS", "Region02_GE", "Region03_MD",]

for r in regions:
    int_paths = fs_osn.ls(path_fmt.format(region=r))
    print("\n".join(int_paths))
Pangeo/pangeo-forge/swot_adac/HYCOM50/Region01_GS/int/aso.zarr
Pangeo/pangeo-forge/swot_adac/HYCOM50/Region01_GS/int/fma.zarr
Pangeo/pangeo-forge/swot_adac/HYCOM50/Region02_GE/int/aso.zarr
Pangeo/pangeo-forge/swot_adac/HYCOM50/Region02_GE/int/fma.zarr
Pangeo/pangeo-forge/swot_adac/HYCOM50/Region03_MD/int/aso.zarr
Pangeo/pangeo-forge/swot_adac/HYCOM50/Region03_MD/int/fma.zarr

@roxyboy
Copy link
Author

roxyboy commented Oct 13, 2021

@cisaacstern The HYCOM50 group newly diagnosed the vertical velocities so could we flux them to OSN? The file names are in the format of HYCOM50_E043_{month}_{reg}_{freq}_wvel.nc with the freq being daily.

@cisaacstern
Copy link
Member

@roxyboy the vertical velocities should be good to go. (Apologies for the lag time on this one!)

I've added them to the project catalog and updated the example notebook there with loading details. Check out Cell No. 5 here for the the available parameterizations (and keep following along below that, for how to load them):

https://github.com/pangeo-data/swot_adac_ogcms/blob/main/intake_demo.ipynb

(As with any catalog example, of course, this notebook needs to be run from within the project repo, to have access to the catalog and validate_catalog.py module.)

Let me know of any issues, per usual!

@roxyboy
Copy link
Author

roxyboy commented Oct 19, 2021

Seems to be working perfect @cisaacstern :) Thanks!

@andersy005
Copy link
Member

pre-commit.ci autofix

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
swot-adac SWOT Adopt-a-Crossover Dataset
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants