Thanks Even!

On Tue, Mar 4, 2025 at 7:51 AM Even Rouault <even.roua...@spatialys.com>
wrote:

> Tim,
>
> wil be solved (in 3.11 only) per https://github.com/OSGeo/gdal/pull/11915
>
> In the meantime, check for gdal.Warp() return value: if None, an error
> occurred
>
> Even
> Le 01/03/2025 à 01:00, Tim Harris via gdal-dev a écrit :
>
> Hi, I'm having some trouble warping a VRT to a TIF where the VRT and its
> constituent rasters are in S3. It stems from a random read error, but the
> real problem is that the gdal.Warp call didn't throw an exception when it
> was supposed to.
>
> I saw there's this pretty old GitHub issue that may be related, but I'm
> not sure:
> https://github.com/OSGeo/gdal/issues/3372
>
> In my situation what really happened was a random /vsicurl read failed...
> sort of like an issue I reported in December that was fixed in GDAL 3.10.1:
> https://github.com/OSGeo/gdal/issues/11552
>
> Here's a section of my log file (filename sanitized):
> ERROR 11: CURL error: Empty reply from server
> 0...10...20...30...40...50...60...70...80...90...100 - done.
> ERROR 4: `/vsis3/path/to/raster.tif' does not exist in the file system,
> and is not recognized as a supported dataset name.
>
> Notice the CURL error but the progress still goes to 100%. The warp
> completed successfully despite the read error.
>
> I have a hopefully simple reproduce case here. The first few shell
> commands will make two TIFs, put them in S3, then make a VRT of those TIFs
> and also put that in S3. Then to simulate the CURL error above, it just
> deletes one of the TIFs so that the VRT references a non-existent file:
> gdal_create -of GTiff -outsize 1000 1000 -bands 1 -a_srs EPSG:4326 -a_ullr
> 0 1 1 0 input1.tif
> gdal_create -of GTiff -outsize 1000 1000 -bands 1 -a_srs EPSG:4326 -a_ullr
> 1 1 2 0 input2.tif
> aws s3 cp input1.tif s3://your-bucket/test/input1.tif
> aws s3 cp input2.tif s3://your-bucket/test/input2.tif
> gdalbuildvrt input.vrt /vsis3/your-bucket/test/input1.tif
> /vsis3/your-bucket/test/input2.tif
> aws s3 cp input.vrt s3://your-bucket/test/input.vrt
> aws s3 rm s3://your-bucket/test/input2.tif
>
> Then in Python:
> from osgeo import gdal
> gdal.UseExceptions()
> gdal.Warp("output.tif", "/vsis3/tharris-bucket/test/input.vrt",
> callback=gdal.TermProgress)
>
> This throws a RuntimeError, as expected. But delete the partial file and
> try with multithread=True:
> rm output.tif
> gdal.Warp("output.tif", "/vsis3/tharris-bucket/test/input.vrt",
> callback=gdal.TermProgress, multithread=True)
>
> This logs the error, but doesn't throw an exception. The end result is
> that I have a TIF that is missing the contents of the file that suffered
> from that CURL read error.
>
> For what it's worth this also happens with the command line utility, it's
> just not as obvious. Without -multi, it only prints the "0" for the
> progress before the error halts execution:
> gdalwarp /vsis3/your-bucket/test/input.vrt output.tif
> Processing /vsis3/your-bucket/test/input.vrt [1/1] : 0ERROR 4:
> `/vsis3/your-bucket/test/input2.tif' does not exist in the file system, and
> is not recognized as a supported dataset name.
>
> But with -multi, notice the progress goes to 100%:
> gdalwarp /vsis3/your-bucket/test/input.vrt output.tif -multi
> Processing /vsis3/your-bucket/test/input.vrt [1/1] : 0ERROR 4:
> `/vsis3/your-bucket/test/input2.tif' does not exist in the file system, and
> is not recognized as a supported dataset name.
> ...10...20...30...40...50...60...70...80...90...100 - done.
>
> I guess my workaround is to just not use multithread=True. But is this
> something that could be fixed?
>
> Thanks
>
> _______________________________________________
> gdal-dev mailing 
> listgdal-dev@lists.osgeo.orghttps://lists.osgeo.org/mailman/listinfo/gdal-dev
>
> -- http://www.spatialys.com
> My software is free, but my time generally not.
>
>
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to