Problem with CGLS_SSM_V1_GLOBAL collection

dear all,
I am facing an issue when working with the CGLS_SSM_V1_GLOBAL collection.
I am working with the Python client, and, for instance, I can run successfully the example code in Python Client | openEO, which creates an RGB image based on Sentinel-1 monthly mean backscatter.
However, when I try to do the same thing with CGLS_SSM_V1_GLOBAL, the job fails. Below you can find both the code and the error log.
I could not really identify the cause of the problem, do you have any idea / suggestion on how to fix it?

Many thanks in advance,
Luca

— code —

import openeo
connection = openeo.connect(“openeo.cloud”).authenticate_oidc()
datacube = connection.load_collection(“CGLS_SSM_V1_GLOBAL”,
spatial_extent={“west”: 16.06, “south”: 48.10, “east”: 16.65, “north”: 48.31, “crs”: “EPSG:4326”},
temporal_extent=[“2019-03-01”, “2019-06-01”])
march = datacube.filter_temporal(“2019-03-01”, “2019-04-01”)
april = datacube.filter_temporal(“2019-04-01”, “2019-05-01”)
may = datacube.filter_temporal(“2019-05-01”, “2019-06-01”)
mean_march = march.mean_time()
mean_april = april.mean_time()
mean_may = may.mean_time()
R_band = mean_march.rename_labels(dimension=“bands”, target=[“R”])
G_band = mean_april.rename_labels(dimension=“bands”, target=[“G”])
B_band = mean_may.rename_labels(dimension=“bands”, target=[“B”])
RG = R_band.merge(G_band)
RGB = RG.merge(B_band)
RGB = RGB.save_result(format=“GTiff”)
job = RGB.send_job()
job.start_and_wait().download_results()

— error log —

error processing batch job Traceback (most recent call last): File “batch_job.py”, line 307, in main run_driver() File “batch_job.py”, line 280, in run_driver run_job( File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeogeotrellis/utils.py”, line 41, in memory_logging_wrapper return function(*args, **kwargs) File “batch_job.py”, line 339, in run_job result = ProcessGraphDeserializer.evaluate(process_graph, env=env, do_dry_run=tracer) File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 308, in evaluate return convert_node(result_node, env=env) File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 314, in convert_node return apply_process( File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 1240, in apply_process args = {name: convert_node(expr, env=env) for (name, expr) in sorted(args.items())} File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 1240, in args = {name: convert_node(expr, env=env) for (name, expr) in sorted(args.items())} File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 319, in convert_node return convert_node(processGraph[‘node’], env=env) File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 314, in convert_node return apply_process( File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 1240, in apply_process args = {name: convert_node(expr, env=env) for (name, expr) in sorted(args.items())} File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 1240, in args = {name: convert_node(expr, env=env) for (name, expr) in sorted(args.items())} File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 319, in convert_node return convert_node(processGraph[‘node’], env=env) File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 314, in convert_node return apply_process( File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 1240, in apply_process args = {name: convert_node(expr, env=env) for (name, expr) in sorted(args.items())} File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 1240, in args = {name: convert_node(expr, env=env) for (name, expr) in sorted(args.items())} File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 319, in convert_node return convert_node(processGraph[‘node’], env=env) File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 314, in convert_node return apply_process( File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 1240, in apply_process args = {name: convert_node(expr, env=env) for (name, expr) in sorted(args.items())} File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 1240, in args = {name: convert_node(expr, env=env) for (name, expr) in sorted(args.items())} File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 319, in convert_node return convert_node(processGraph[‘node’], env=env) File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 314, in convert_node return apply_process( File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 1240, in apply_process args = {name: convert_node(expr, env=env) for (name, expr) in sorted(args.items())} File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 1240, in args = {name: convert_node(expr, env=env) for (name, expr) in sorted(args.items())} File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 319, in convert_node return convert_node(processGraph[‘node’], env=env) File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 314, in convert_node return apply_process( File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 1240, in apply_process args = {name: convert_node(expr, env=env) for (name, expr) in sorted(args.items())} File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 1240, in args = {name: convert_node(expr, env=env) for (name, expr) in sorted(args.items())} File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 319, in convert_node return convert_node(processGraph[‘node’], env=env) File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 314, in convert_node return apply_process( File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 1337, in apply_process return process_function(args=args, env=env) File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo_driver/ProcessGraphDeserializer.py”, line 479, in load_collection return env.backend_implementation.catalog.load_collection(collection_id, load_params=load_params, env=env) File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeo/util.py”, line 362, in wrapper return f(*args, **kwargs) File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeogeotrellis/layercatalog.py”, line 475, in load_collection pyramid = file_cgls_pyramid() File “/data1/hadoop/yarn/local/usercache/openeo/appcache/application_1650104936572_3988/container_e5020_1650104936572_3988_01_000001/venv/lib/python3.8/site-packages/openeogeotrellis/layercatalog.py”, line 441, in file_cgls_pyramid factory.datacube_seq(projected_polygons, from_date, to_date) if single_level File “/opt/spark3_2_0/python/lib/py4j-0.10.9.2-src.zip/py4j/java_gateway.py”, line 1309, in call return_value = get_return_value( File “/opt/spark3_2_0/python/lib/py4j-0.10.9.2-src.zip/py4j/protocol.py”, line 326, in get_return_value raise Py4JJavaError( py4j.protocol.Py4JJavaError: An error occurred while calling o897.datacube_seq. : geotrellis.raster.gdal.MalformedDataException: Unable to construct dataset dimensions. GDAL Error Code: 4 at geotrellis.raster.gdal.GDALDataset$.$anonfun$dimensions$1(GDALDataset.scala:160) at geotrellis.raster.gdal.GDALDataset$.$anonfun$dimensions$1$adapted(GDALDataset.scala:157) at geotrellis.raster.gdal.GDALDataset$.errorHandler$extension(GDALDataset.scala:422) at geotrellis.raster.gdal.GDALDataset$.dimensions$extension1(GDALDataset.scala:157) at geotrellis.raster.gdal.GDALDataset$.rasterExtent$extension1(GDALDataset.scala:197) at geotrellis.raster.gdal.GDALRasterSource.gridExtent$lzycompute(GDALRasterSource.scala:93) at geotrellis.raster.gdal.GDALRasterSource.gridExtent(GDALRasterSource.scala:93) at geotrellis.raster.RasterMetadata.extent(RasterMetadata.scala:52) at geotrellis.raster.RasterMetadata.extent$(RasterMetadata.scala:52) at geotrellis.raster.RasterSource.extent(RasterSource.scala:43) at org.openeo.geotrellis.layers.AbstractGlobFileLayerProvider.maxZoom$lzycompute(AbstractGlobFileLayerProvider.scala:45) at org.openeo.geotrellis.layers.AbstractGlobFileLayerProvider.maxZoom(AbstractGlobFileLayerProvider.scala:43) at org.openeo.geotrellis.file.GlobPyramidFactory.datacube_seq(GlobPyramidFactory.scala:27) at org.openeo.geotrellis.file.GlobPyramidFactory.datacube_seq(GlobPyramidFactory.scala:17) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244) at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) at py4j.Gateway.invoke(Gateway.java:282) at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) at py4j.commands.CallCommand.execute(CallCommand.java:79) at py4j.ClientServerConnection.waitForCommands(ClientServerConnection.java:182) at py4j.ClientServerConnection.run(ClientServerConnection.java:106) at java.base/java.lang.Thread.run(Thread.java:834)

Thanks for your report,
it indeed seems that something goes wrong when looking up the ssm variable.
I’ll look into a fix!

best regards,
Jeroen

Hi Luca,
this has now been fixed on our development endpoint.
I verified with this somewhat simpler example:

import openeo
connection = openeo.connect("openeo-dev.vito.be").authenticate_oidc()
datacube = connection.load_collection("CGLS_SSM_V1_GLOBAL",
spatial_extent={"west": 16.06, "south": 48.10, "east": 16.65, "north": 48.31, "crs": "EPSG:4326"},
temporal_extent=["2019-03-01", "2019-06-01"])
datacube.download("ssm.nc")

Apologies for the inconvenience!