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

Recent builds cause hanging on Windows #182

Open
1 task done
djhoese opened this issue Jul 19, 2023 · 54 comments · May be fixed by #183
Open
1 task done

Recent builds cause hanging on Windows #182

djhoese opened this issue Jul 19, 2023 · 54 comments · May be fixed by #183
Labels

Comments

@djhoese
Copy link
Contributor

djhoese commented Jul 19, 2023

Solution to issue cannot be found in the documentation.

  • I checked the documentation.

Issue

The CI in GitHub Actions for the Satpy library have started hanging on Windows. It seems to be related to the specific build of libnetcdf. With:

libnetcdf 4.9.2 nompi_h5902ca5_107 conda-forge/win-64

it works fine. With the same code and same dependencies except for the newer build of libnetcdf:

libnetcdf 4.9.2 nompi_h624ddae_109 conda-forge/win-64

Pytest finishes running Satpy's tests (successfully) but then never exits. There is no other difference from what I can tell except the libnetcdf build. A fellow contributor @simonrp84 was able to reproduce this on his local Windows machine. His environment is what's providing the output for the below conda commands.

Otherwise, here is a passing Satpy CI job:

https://github.com/pytroll/satpy/actions/runs/5577565489/jobs/10190534313

And a hanging one:

https://github.com/pytroll/satpy/actions/runs/5594450997/jobs/10229326506

Installed packages

# packages in environment at C:\Users\Simon\miniconda3:
#
# Name                    Version                   Build  Channel
affine                    2.4.0              pyhd8ed1ab_0    conda-forge
aiobotocore               2.5.0              pyhd8ed1ab_0    conda-forge
aiohttp                   3.8.4           py311ha68e1ae_1    conda-forge
aioitertools              0.11.0             pyhd8ed1ab_0    conda-forge
aiosignal                 1.3.1              pyhd8ed1ab_0    conda-forge
alabaster                 0.7.13             pyhd8ed1ab_0    conda-forge
anyio                     3.7.1              pyhd8ed1ab_0    conda-forge
aom                       3.5.0                h63175ca_0    conda-forge
appdirs                   1.4.4              pyh9f0ad1d_0    conda-forge
argon2-cffi               21.3.0             pyhd8ed1ab_0    conda-forge
argon2-cffi-bindings      21.2.0          py311ha68e1ae_3    conda-forge
arrow-cpp                 12.0.0           h57928b3_1_cpu    conda-forge
asciitree                 0.3.3                      py_2    conda-forge
asdf                      2.14.3             pyhd8ed1ab_1    conda-forge
asdf-astropy              0.4.0              pyhd8ed1ab_1    conda-forge
asdf-coordinates-schemas  0.2.0              pyhd8ed1ab_1    conda-forge
asdf-standard             1.0.3              pyhd8ed1ab_0    conda-forge
asdf-transform-schemas    0.3.0              pyhd8ed1ab_0    conda-forge
asdf-unit-schemas         0.1.0              pyhd8ed1ab_0    conda-forge
asdf-wcs-schemas          0.1.1              pyhd8ed1ab_0    conda-forge
astropy                   5.3.1           py311h59ca53f_0    conda-forge
asttokens                 2.2.1              pyhd8ed1ab_0    conda-forge
async-timeout             4.0.2              pyhd8ed1ab_0    conda-forge
attrs                     23.1.0             pyh71513ae_1    conda-forge
aws-c-auth                0.7.0                h6f3c987_2    conda-forge
aws-c-cal                 0.6.0                h6ba3258_0    conda-forge
aws-c-common              0.8.23               hcfcfb64_0    conda-forge
aws-c-compression         0.2.17               h420beca_1    conda-forge
aws-c-event-stream        0.3.1                had47b81_1    conda-forge
aws-c-http                0.7.11               h72ba615_0    conda-forge
aws-c-io                  0.13.28              ha35c040_0    conda-forge
aws-c-mqtt                0.8.14               h4941efa_2    conda-forge
aws-c-s3                  0.3.13               he04eaa7_2    conda-forge
aws-c-sdkutils            0.1.11               h420beca_1    conda-forge
aws-checksums             0.1.16               h420beca_1    conda-forge
aws-crt-cpp               0.20.3               h247a981_4    conda-forge
aws-sdk-cpp               1.10.57             h1a0519f_17    conda-forge
awscli                    1.27.76         py311h1ea47a8_2    conda-forge
babel                     2.12.1             pyhd8ed1ab_1    conda-forge
backcall                  0.2.0              pyh9f0ad1d_0    conda-forge
backports                 1.0                pyhd8ed1ab_3    conda-forge
backports.functools_lru_cache 1.6.5              pyhd8ed1ab_0    conda-forge
backports.zoneinfo        0.2.1           py311h1ea47a8_7    conda-forge
beautifulsoup4            4.12.2             pyha770c72_0    conda-forge
bleach                    6.0.0              pyhd8ed1ab_0    conda-forge
blosc                     1.21.4               hdccc3a2_0    conda-forge
bokeh                     3.2.0              pyhd8ed1ab_0    conda-forge
boltons                   23.0.0             pyhd8ed1ab_0    conda-forge
boost-cpp                 1.78.0               h9f4b32c_3    conda-forge
boto3                     1.26.76            pyhd8ed1ab_0    conda-forge
botocore                  1.29.76            pyhd8ed1ab_0    conda-forge
bottleneck                1.3.7           py311h59ca53f_0    conda-forge
branca                    0.6.0              pyhd8ed1ab_0    conda-forge
brotli                    1.0.9                hcfcfb64_9    conda-forge
brotli-bin                1.0.9                hcfcfb64_9    conda-forge
brotlipy                  0.7.0           py311ha68e1ae_1005    conda-forge
build                     0.7.0              pyhd8ed1ab_0    conda-forge
bzip2                     1.0.8                h8ffe710_4    conda-forge
c-ares                    1.19.1               hcfcfb64_0    conda-forge
c-blosc2                  2.10.0               h183a6f4_0    conda-forge
ca-certificates           2023.5.7             h56e8100_0    conda-forge
cached-property           1.5.2                hd8ed1ab_1    conda-forge
cached_property           1.5.2              pyha770c72_1    conda-forge
cachetools                5.3.1              pyhd8ed1ab_0    conda-forge
caerus                    0.1.9                    pypi_0    pypi
cairo                     1.16.0            hdecc03f_1016    conda-forge
cartopy                   0.21.1          py311h178a126_1    conda-forge
certifi                   2023.5.7           pyhd8ed1ab_0    conda-forge
cffi                      1.15.1          py311h7d9ee11_3    conda-forge
cfgrib                    0.9.10.4           pyhd8ed1ab_0    conda-forge
cfgv                      3.3.1              pyhd8ed1ab_0    conda-forge
cfitsio                   4.2.0                h9ebe7e4_0    conda-forge
cftime                    1.6.2           py311h59ca53f_1    conda-forge
chardet                   5.1.0           py311h1ea47a8_0    conda-forge
charls                    2.4.2                h1537add_0    conda-forge
charset-normalizer        3.2.0              pyhd8ed1ab_0    conda-forge
click                     8.1.6           win_pyh7428d3b_0    conda-forge
click-plugins             1.1.1                      py_0    conda-forge
cligj                     0.7.2              pyhd8ed1ab_1    conda-forge
cloudpickle               2.2.1              pyhd8ed1ab_0    conda-forge
cmarkgfm                  0.8.0           py311ha68e1ae_2    conda-forge
cogeo-mosaic              5.1.1                    pypi_0    pypi
color-operations          0.1.1           py311h59ca53f_2    conda-forge
colorama                  0.4.4              pyh9f0ad1d_0    conda-forge
comm                      0.1.3              pyhd8ed1ab_0    conda-forge
conda                     23.5.2          py311h1ea47a8_0    conda-forge
conda-build               3.24.0          py311h1ea47a8_1    conda-forge
conda-package-handling    2.0.2              pyh38be061_0    conda-forge
conda-package-streaming   0.8.0              pyhd8ed1ab_0    conda-forge
configobj                 5.0.8              pyhd8ed1ab_0    conda-forge
contourpy                 1.1.0           py311h005e61a_0    conda-forge
coverage                  7.2.7           py311ha68e1ae_0    conda-forge
cramjam                   2.6.2                    pypi_0    pypi
cryptography              41.0.2          py311h28e9c30_0    conda-forge
cuda-version              11.8                 h70ddcb2_2    conda-forge
cudatoolkit               11.8.0              h09e9e62_12    conda-forge
cupy                      12.1.0          py311h77068d7_0    conda-forge
curl                      8.1.2                h68f0423_0    conda-forge
cycler                    0.11.0             pyhd8ed1ab_0    conda-forge
cytoolz                   0.12.0          py311ha68e1ae_1    conda-forge
dask                      2023.7.0           pyhd8ed1ab_0    conda-forge
dask-core                 2023.7.0           pyhd8ed1ab_0    conda-forge
dav1d                     1.2.1                hcfcfb64_0    conda-forge
debugpy                   1.6.7           py311h12c1d0e_0    conda-forge
decorator                 5.1.1              pyhd8ed1ab_0    conda-forge
defusedxml                0.7.1              pyhd8ed1ab_0    conda-forge
distlib                   0.3.7              pyhd8ed1ab_0    conda-forge
distributed               2023.7.0           pyhd8ed1ab_0    conda-forge
docutils                  0.15.2          py311h1ea47a8_6    conda-forge
donfig                    0.8.1              pyhd8ed1ab_0    conda-forge
eccodes                   2.31.0               ha10300a_0    conda-forge
ecmwf-opendata            0.2.0                     dev_0    <develop>
entrypoints               0.4                pyhd8ed1ab_0    conda-forge
ephem                     4.1.4           py311ha68e1ae_0    conda-forge
eumdac                    2.0.1              pyhd8ed1ab_0    conda-forge
exceptiongroup            1.1.2              pyhd8ed1ab_0    conda-forge
executing                 1.2.0              pyhd8ed1ab_0    conda-forge
expat                     2.5.0                h63175ca_1    conda-forge
fastapi                   0.94.1                   pypi_0    pypi
fasteners                 0.17.3             pyhd8ed1ab_0    conda-forge
fastrlock                 0.8             py311h12c1d0e_3    conda-forge
ffmpeg                    6.0.0           gpl_h2b371f0_103    conda-forge
filelock                  3.12.2             pyhd8ed1ab_0    conda-forge
findlibs                  0.0.5              pyhd8ed1ab_0    conda-forge
findpeaks                 2.5.0                    pypi_0    pypi
fiona                     1.9.4           py311h4e4dc46_0    conda-forge
flit-core                 3.9.0              pyhd8ed1ab_0    conda-forge
fmt                       9.1.0                h181d51b_0    conda-forge
folium                    0.14.0             pyhd8ed1ab_0    conda-forge
font-ttf-dejavu-sans-mono 2.37                 hab24e00_0    conda-forge
font-ttf-inconsolata      3.000                h77eed37_0    conda-forge
font-ttf-source-code-pro  2.038                h77eed37_0    conda-forge
font-ttf-ubuntu           0.83                 hab24e00_0    conda-forge
fontconfig                2.14.2               hbde0cde_0    conda-forge
fonts-conda-ecosystem     1                             0    conda-forge
fonts-conda-forge         1                             0    conda-forge
fonttools                 4.41.0          py311ha68e1ae_0    conda-forge
freeglut                  3.2.2                h63175ca_2    conda-forge
freetype                  2.12.1               h546665d_1    conda-forge
freexl                    1.0.6                h67ca5e6_1    conda-forge
frozenlist                1.4.0           py311ha68e1ae_0    conda-forge
fsspec                    2023.6.0           pyh1a96a4e_0    conda-forge
gdal                      3.7.0           py311h68c9619_3    conda-forge
geojson-pydantic          0.6.3              pyhd8ed1ab_0    conda-forge
geopandas                 0.13.2             pyhd8ed1ab_1    conda-forge
geopandas-base            0.13.2             pyha770c72_1    conda-forge
geos                      3.11.2               h1537add_0    conda-forge
geotiff                   1.7.1               h4e61e90_10    conda-forge
gettext                   0.21.1               h5728263_0    conda-forge
gflags                    2.2.2             ha925a31_1004    conda-forge
giflib                    5.2.1                h64bf75a_3    conda-forge
glib                      2.76.4               h12be248_0    conda-forge
glib-tools                2.76.4               h12be248_0    conda-forge
glmtools                  0.1.dev0                  dev_0    <develop>
glob2                     0.7                        py_0    conda-forge
glog                      0.6.0                h4797de2_0    conda-forge
graphite2                 1.3.13                     1000    conda-forge
gst-plugins-base          1.22.4               h001b923_1    conda-forge
gstreamer                 1.22.4               hb4038d2_1    conda-forge
gwcs                      0.18.3             pyhd8ed1ab_0    conda-forge
h11                       0.14.0             pyhd8ed1ab_0    conda-forge
h2                        4.1.0              pyhd8ed1ab_0    conda-forge
h5netcdf                  1.2.0              pyhd8ed1ab_0    conda-forge
h5py                      3.9.0           nompi_py311hc8b35be_101    conda-forge
harfbuzz                  7.3.0                h196d34a_0    conda-forge
hdf4                      4.2.15               h1334946_6    conda-forge
hdf5                      1.14.1          nompi_h73e8ff5_100    conda-forge
hpack                     4.0.0              pyh9f0ad1d_0    conda-forge
httpcore                  0.17.3             pyhd8ed1ab_0    conda-forge
httpx                     0.24.1             pyhd8ed1ab_0    conda-forge
hyperframe                6.0.1              pyhd8ed1ab_0    conda-forge
hypothesis                6.81.2             pyha770c72_0    conda-forge
icu                       72.1                 h63175ca_0    conda-forge
identify                  2.5.24             pyhd8ed1ab_0    conda-forge
idna                      3.4                pyhd8ed1ab_0    conda-forge
imagecodecs               2023.1.23       py311h2c9abbb_2    conda-forge
imageio                   2.31.1             pyh24c5eb1_0    conda-forge
imagesize                 1.4.1              pyhd8ed1ab_0    conda-forge
importlib-metadata        6.8.0              pyha770c72_0    conda-forge
importlib-resources       6.0.0              pyhd8ed1ab_1    conda-forge
importlib_metadata        6.8.0                hd8ed1ab_0    conda-forge
importlib_resources       6.0.0              pyhd8ed1ab_1    conda-forge
iniconfig                 2.0.0              pyhd8ed1ab_0    conda-forge
intel-openmp              2023.1.0         h57928b3_46319    conda-forge
ipykernel                 6.24.0             pyh6817e22_0    conda-forge
ipython                   8.14.0             pyh08f2357_0    conda-forge
ipython_genutils          0.2.0                      py_1    conda-forge
ipywidgets                8.0.7              pyhd8ed1ab_0    conda-forge
jaraco.classes            3.3.0              pyhd8ed1ab_0    conda-forge
jasper                    4.0.0                h00710e9_1    conda-forge
jedi                      0.18.2             pyhd8ed1ab_0    conda-forge
jinja2                    3.1.2              pyhd8ed1ab_1    conda-forge
jmespath                  1.0.1              pyhd8ed1ab_0    conda-forge
joblib                    1.3.0              pyhd8ed1ab_1    conda-forge
jplephem                  2.18               pyh78acc04_0    conda-forge
jsonpatch                 1.32               pyhd8ed1ab_0    conda-forge
jsonpointer               2.0                        py_0    conda-forge
jsonschema                4.18.4             pyhd8ed1ab_0    conda-forge
jsonschema-specifications 2023.7.1           pyhd8ed1ab_0    conda-forge
jupyter                   1.0.0           py311h1ea47a8_8    conda-forge
jupyter_client            8.3.0              pyhd8ed1ab_0    conda-forge
jupyter_console           6.6.3              pyhd8ed1ab_0    conda-forge
jupyter_core              5.3.1           py311h1ea47a8_0    conda-forge
jupyter_events            0.6.3              pyhd8ed1ab_0    conda-forge
jupyter_server            2.7.0              pyhd8ed1ab_0    conda-forge
jupyter_server_terminals  0.4.4              pyhd8ed1ab_1    conda-forge
jupyterlab_pygments       0.2.2              pyhd8ed1ab_0    conda-forge
jupyterlab_widgets        3.0.8              pyhd8ed1ab_0    conda-forge
jxrlib                    1.1                  h8ffe710_2    conda-forge
kealib                    1.5.1                h96def13_4    conda-forge
keyring                   24.2.0          py311h1ea47a8_0    conda-forge
kiwisolver                1.4.4           py311h005e61a_1    conda-forge
krb5                      1.20.1               heb0366b_0    conda-forge
lazy_loader               0.2                pyhd8ed1ab_0    conda-forge
lcms2                     2.15                 h3e3b177_1    conda-forge
lerc                      4.0.0                h63175ca_0    conda-forge
libabseil                 20230125.0      cxx17_h63175ca_1    conda-forge
libaec                    1.0.6                h63175ca_1    conda-forge
libarchive                3.6.2                h6f8411a_1    conda-forge
libarrow                  12.0.0           h91bed3e_1_cpu    conda-forge
libavif                   0.11.1               ha7b97ba_2    conda-forge
libblas                   3.9.0              17_win64_mkl    conda-forge
libbrotlicommon           1.0.9                hcfcfb64_9    conda-forge
libbrotlidec              1.0.9                hcfcfb64_9    conda-forge
libbrotlienc              1.0.9                hcfcfb64_9    conda-forge
libcblas                  3.9.0              17_win64_mkl    conda-forge
libclang                  16.0.6          default_heb8d277_0    conda-forge
libclang13                16.0.6          default_hc80b9e7_0    conda-forge
libcrc32c                 1.1.2                h0e60522_0    conda-forge
libcurl                   8.1.2                h68f0423_0    conda-forge
libdeflate                1.18                 hcfcfb64_0    conda-forge
libevent                  2.1.12               h3671451_1    conda-forge
libexpat                  2.5.0                h63175ca_1    conda-forge
libffi                    3.4.2                h8ffe710_5    conda-forge
libgdal                   3.7.0                h123a834_3    conda-forge
libglib                   2.76.4               he8f3873_0    conda-forge
libgoogle-cloud           2.10.0               h00b2bdc_0    conda-forge
libgrpc                   1.54.2               h32da247_0    conda-forge
libhwloc                  2.9.1           nocuda_h15da153_6    conda-forge
libiconv                  1.17                 h8ffe710_0    conda-forge
libjpeg-turbo             2.1.5.1              hcfcfb64_0    conda-forge
libkml                    1.3.0             hf2ab4e4_1015    conda-forge
liblapack                 3.9.0              17_win64_mkl    conda-forge
liblapacke                3.9.0              17_win64_mkl    conda-forge
liblief                   0.12.3               h63175ca_0    conda-forge
libmamba                  1.4.9                ha24f096_0    conda-forge
libmambapy                1.4.9           py311h29ee5fe_0    conda-forge
libnetcdf                 4.9.2           nompi_h624ddae_109    conda-forge
libogg                    1.3.4                h8ffe710_1    conda-forge
libopencv                 4.7.0           py311h787696b_6    conda-forge
libopus                   1.3.1                h8ffe710_1    conda-forge
libpng                    1.6.39               h19919ed_0    conda-forge
libpq                     15.3                 ha9684e8_1    conda-forge
libprotobuf               3.21.12              h12be248_0    conda-forge
librttopo                 1.1.0               he1da8c1_13    conda-forge
libsodium                 1.0.18               h8d14728_1    conda-forge
libsolv                   0.7.24               h12be248_1    conda-forge
libspatialindex           1.9.3                h39d44d4_4    conda-forge
libspatialite             5.0.1               hf8d749d_27    conda-forge
libsqlite                 3.42.0               hcfcfb64_0    conda-forge
libssh2                   1.11.0               h7dfc565_0    conda-forge
libthrift                 0.18.1               h06f6336_2    conda-forge
libtiff                   4.5.1                h6c8260b_0    conda-forge
libutf8proc               2.8.0                h82a8f57_0    conda-forge
libvorbis                 1.3.7                h0e60522_0    conda-forge
libwebp-base              1.3.1                hcfcfb64_0    conda-forge
libxcb                    1.15                 hcd874cb_0    conda-forge
libxml2                   2.11.4               hc3477c8_0    conda-forge
libzip                    1.9.2                h519de47_1    conda-forge
libzlib                   1.2.13               hcfcfb64_5    conda-forge
libzopfli                 1.0.3                h0e60522_0    conda-forge
llvmlite                  0.40.0                   pypi_0    pypi
locket                    1.0.0              pyhd8ed1ab_0    conda-forge
lz4                       4.3.2           py311haddf500_0    conda-forge
lz4-c                     1.9.4                hcfcfb64_0    conda-forge
lzo                       2.10              he774522_1000    conda-forge
m2-msys2-runtime          2.5.0.17080.65c939c               3    conda-forge
m2-patch                  2.7.5                         2    conda-forge
m2w64-gcc-libgfortran     5.3.0                         6    conda-forge
m2w64-gcc-libs            5.3.0                         7    conda-forge
m2w64-gcc-libs-core       5.3.0                         7    conda-forge
m2w64-gmp                 6.1.0                         2    conda-forge
m2w64-libwinpthread-git   5.0.0.4634.697f757               2    conda-forge
make                      4.3                  h3d2af85_1    conda-forge
mamba                     1.4.9           py311h8cb466b_0    conda-forge
mapclassify               2.5.0              pyhd8ed1ab_1    conda-forge
markdown-it-py            3.0.0              pyhd8ed1ab_0    conda-forge
markupsafe                2.1.3           py311ha68e1ae_0    conda-forge
matplotlib                3.7.1           py311h1ea47a8_0    conda-forge
matplotlib-base           3.7.1           py311h6e989c2_0    conda-forge
matplotlib-inline         0.1.6              pyhd8ed1ab_0    conda-forge
mdurl                     0.1.0              pyhd8ed1ab_0    conda-forge
menuinst                  1.4.19          py311h1ea47a8_1    conda-forge
mercantile                1.2.1                    pypi_0    pypi
miniforge_console_shortcut 2.0                  h57928b3_1    conda-forge
mistune                   3.0.0              pyhd8ed1ab_0    conda-forge
mkl                       2022.1.0           h6a75c08_874    conda-forge
more-itertools            9.1.0              pyhd8ed1ab_0    conda-forge
morecantile               4.3.0              pyhd8ed1ab_0    conda-forge
msgpack-python            1.0.5           py311h005e61a_0    conda-forge
msys2-conda-epoch         20160418                      1    conda-forge
multidict                 6.0.4           py311ha68e1ae_0    conda-forge
multiurl                  0.2.1                    pypi_0    pypi
munch                     4.0.0              pyhd8ed1ab_0    conda-forge
munkres                   1.1.4              pyh9f0ad1d_0    conda-forge
nbclassic                 1.0.0              pyhb4ecaf3_1    conda-forge
nbclient                  0.8.0              pyhd8ed1ab_0    conda-forge
nbconvert                 7.7.1              pyhd8ed1ab_1    conda-forge
nbconvert-core            7.7.1              pyhd8ed1ab_1    conda-forge
nbconvert-pandoc          7.7.1              pyhd8ed1ab_1    conda-forge
nbformat                  5.9.1              pyhd8ed1ab_0    conda-forge
nest-asyncio              1.5.6              pyhd8ed1ab_0    conda-forge
netcdf4                   1.6.4           nompi_py311h91f5014_101    conda-forge
networkx                  3.1                pyhd8ed1ab_0    conda-forge
nodeenv                   1.8.0              pyhd8ed1ab_0    conda-forge
notebook                  6.5.4              pyha770c72_0    conda-forge
notebook-shim             0.2.3              pyhd8ed1ab_0    conda-forge
numba                     0.57.1          py311h2c0921f_0    conda-forge
numcodecs                 0.11.0          py311h12c1d0e_1    conda-forge
numexpr                   2.8.4           mkl_py311h9a3bfb6_0    conda-forge
numpy                     1.24.4          py311h0b4df5a_0    conda-forge
odfpy                     1.4.1                      py_0    conda-forge
opencv                    4.7.0           py311h1ea47a8_6    conda-forge
openh264                  2.3.1                h63175ca_2    conda-forge
openjpeg                  2.5.0                ha2aaf27_2    conda-forge
openssl                   3.1.1                hcfcfb64_1    conda-forge
orc                       1.8.3                hada7b9e_1    conda-forge
overrides                 7.3.1              pyhd8ed1ab_0    conda-forge
packaging                 23.1               pyhd8ed1ab_0    conda-forge
pandas                    2.0.3           py311hf63dbb6_1    conda-forge
pandoc                    3.1.3                h57928b3_0    conda-forge
pandocfilters             1.5.0              pyhd8ed1ab_0    conda-forge
parquet-cpp               1.5.1                         2    conda-forge
parso                     0.8.3              pyhd8ed1ab_0    conda-forge
partd                     1.4.0              pyhd8ed1ab_0    conda-forge
pbr                       5.11.1             pyhd8ed1ab_0    conda-forge
pcre2                     10.40                h17e33f8_0    conda-forge
peakdetect                1.1                      pypi_0    pypi
pep517                    0.13.0             pyhd8ed1ab_0    conda-forge
photutils                 1.8.0           py311h59ca53f_0    conda-forge
pickleshare               0.7.5                   py_1003    conda-forge
pillow                    10.0.0          py311hde623f7_0    conda-forge
pip                       23.2               pyhd8ed1ab_0    conda-forge
pixman                    0.40.0               h8ffe710_0    conda-forge
pkginfo                   1.9.6              pyhd8ed1ab_0    conda-forge
pkgutil-resolve-name      1.3.10             pyhd8ed1ab_0    conda-forge
platformdirs              3.9.1              pyhd8ed1ab_0    conda-forge
pluggy                    1.2.0              pyhd8ed1ab_0    conda-forge
ply                       3.11                       py_1    conda-forge
pooch                     1.7.0              pyha770c72_3    conda-forge
poppler                   23.05.0              h45d20d0_1    conda-forge
poppler-data              0.4.12               hd8ed1ab_0    conda-forge
postgresql                15.3                 h96452e4_1    conda-forge
pre-commit                3.3.3              pyha770c72_0    conda-forge
pre_commit                3.3.3                hd8ed1ab_0    conda-forge
proj                      9.2.1                h660b3b0_0    conda-forge
prometheus_client         0.17.1             pyhd8ed1ab_0    conda-forge
prompt-toolkit            3.0.39             pyha770c72_0    conda-forge
prompt_toolkit            3.0.39               hd8ed1ab_0    conda-forge
psutil                    5.9.5           py311ha68e1ae_0    conda-forge
pthread-stubs             0.4               hcd874cb_1001    conda-forge
pthreads-win32            2.9.1                hfa6e2cd_3    conda-forge
pure_eval                 0.2.2              pyhd8ed1ab_0    conda-forge
py-lief                   0.12.3          py311h12c1d0e_0    conda-forge
py-opencv                 4.7.0           py311h3810d55_6    conda-forge
pyarrow                   12.0.0          py311h6a6099b_1_cpu    conda-forge
pyasn1                    0.4.8                      py_0    conda-forge
pyatmcor                  0.0.1                    pypi_0    pypi
pybind11-abi              4                    hd8ed1ab_3    conda-forge
pycosat                   0.6.4           py311ha68e1ae_1    conda-forge
pycparser                 2.21               pyhd8ed1ab_0    conda-forge
pydantic                  1.10.11         py311ha68e1ae_0    conda-forge
pyerfa                    2.0.0.3         py311h59ca53f_0    conda-forge
pyflextrkr                1.0.0                     dev_0    <develop>
pygments                  2.15.1             pyhd8ed1ab_0    conda-forge
pygrib                    2.1.4           py311hb25bc96_7    conda-forge
pyhdf                     0.10.5          py311h702c2b7_1    conda-forge
pykdtree                  1.3.7.post0     py311h59ca53f_0    conda-forge
pyopenssl                 23.2.0             pyhd8ed1ab_1    conda-forge
pyorbital                 1.8.0              pyhd8ed1ab_0    conda-forge
pyparsing                 3.1.0              pyhd8ed1ab_0    conda-forge
pyproj                    3.6.0           py311hcff2a09_1    conda-forge
pyqt                      5.15.7          py311h125bc19_3    conda-forge
pyqt5-sip                 12.11.0         py311h12c1d0e_3    conda-forge
pyresample                1.27.1          py311hf63dbb6_1    conda-forge
pyrsistent                0.19.3          py311ha68e1ae_0    conda-forge
pyshp                     2.3.1              pyhd8ed1ab_0    conda-forge
pysocks                   1.7.1              pyh0701188_6    conda-forge
pyspectral                0.10.6.dev215+g60b5551.d20230710          pypi_0    pypi
pystac                    1.8.2              pyhd8ed1ab_0    conda-forge
pytest                    7.4.0              pyhd8ed1ab_0    conda-forge
pytest-arraydiff          0.5.0              pyhd8ed1ab_0    conda-forge
pytest-astropy            0.10.0             pyhd8ed1ab_0    conda-forge
pytest-astropy-header     0.2.2              pyhd8ed1ab_0    conda-forge
pytest-cov                4.1.0              pyhd8ed1ab_0    conda-forge
pytest-doctestplus        0.13.0             pyhd8ed1ab_0    conda-forge
pytest-filter-subpackage  0.1.1                      py_0    conda-forge
pytest-lazy-fixture       0.6.3                      py_0    conda-forge
pytest-mock               3.11.1             pyhd8ed1ab_0    conda-forge
pytest-openfiles          0.5.0                      py_0    conda-forge
pytest-remotedata         0.4.0              pyhd8ed1ab_0    conda-forge
python                    3.11.4          h2628c8c_0_cpython    conda-forge
python-dateutil           2.8.2              pyhd8ed1ab_0    conda-forge
python-dotenv             1.0.0              pyhd8ed1ab_0    conda-forge
python-eccodes            1.6.0           py311h59ca53f_0    conda-forge
python-fastjsonschema     2.17.1             pyhd8ed1ab_0    conda-forge
python-geotiepoints       1.6.0           py311h59ca53f_0    conda-forge
python-json-logger        2.0.7              pyhd8ed1ab_0    conda-forge
python-libarchive-c       5.0             py311h1ea47a8_1    conda-forge
python-tzdata             2023.3             pyhd8ed1ab_0    conda-forge
python_abi                3.11                    3_cp311    conda-forge
pytz                      2023.3             pyhd8ed1ab_0    conda-forge
pywavelets                1.4.1           py311h59ca53f_0    conda-forge
pywin32                   304             py311h12c1d0e_2    conda-forge
pywin32-ctypes            0.2.2           py311h1ea47a8_0    conda-forge
pywinpty                  2.0.11          py311h12c1d0e_0    conda-forge
pyyaml                    5.4.1           py311ha68e1ae_4    conda-forge
pyzmq                     25.1.0          py311h7b3f143_0    conda-forge
qt-main                   5.15.8              h2c8576c_12    conda-forge
qtconsole                 5.4.3              pyhd8ed1ab_0    conda-forge
qtconsole-base            5.4.3              pyha770c72_0    conda-forge
qtpy                      2.3.1              pyhd8ed1ab_0    conda-forge
rasterio                  1.3.8           py311h58bba51_0    conda-forge
re2                       2023.02.02           h63175ca_0    conda-forge
readme_renderer           40.0               pyhd8ed1ab_0    conda-forge
referencing               0.30.0             pyhd8ed1ab_0    conda-forge
reproc                    14.2.4               hcfcfb64_0    conda-forge
reproc-cpp                14.2.4               h63175ca_0    conda-forge
requests                  2.31.0             pyhd8ed1ab_0    conda-forge
requests-toolbelt         1.0.0              pyhd8ed1ab_0    conda-forge
rfc3339-validator         0.1.4              pyhd8ed1ab_0    conda-forge
rfc3986                   2.0.0              pyhd8ed1ab_0    conda-forge
rfc3986-validator         0.1.1              pyh9f0ad1d_0    conda-forge
rich                      13.4.2             pyhd8ed1ab_0    conda-forge
rio-cogeo                 3.5.1                    pypi_0    pypi
rio-stac                  0.6.1                    pypi_0    pypi
rio-tiler                 5.0.3              pyhd8ed1ab_0    conda-forge
rioxarray                 0.14.1             pyhd8ed1ab_0    conda-forge
ripgrep                   13.0.0               h7f3b576_2    conda-forge
rpds-py                   0.9.2           py311hc37eb10_0    conda-forge
rsa                       4.7.2              pyh44b312d_0    conda-forge
rtree                     1.0.1           py311hcacb13a_1    conda-forge
ruamel.yaml               0.17.32         py311ha68e1ae_0    conda-forge
ruamel.yaml.clib          0.2.7           py311ha68e1ae_1    conda-forge
s3fs                      2023.6.0           pyhd8ed1ab_0    conda-forge
s3transfer                0.6.1              pyhd8ed1ab_0    conda-forge
satpy                     0.42.3.dev248+g5c09f8d87.d20230710          pypi_0    pypi
scikit-image              0.21.0          py311h12c1d0e_0    conda-forge
scikit-learn              1.3.0           py311h142b183_0    conda-forge
scipy                     1.11.1          py311h37ff6ca_0    conda-forge
segment-anything          1.0                       dev_0    <develop>
semantic_version          2.10.0             pyhd8ed1ab_0    conda-forge
send2trash                1.8.2              pyh08f2357_0    conda-forge
setuptools                68.0.0             pyhd8ed1ab_0    conda-forge
sgp4                      2.22            py311h12feb9d_0    conda-forge
shapely                   2.0.1           py311h343093d_1    conda-forge
simplejson                3.19.1          py311ha68e1ae_0    conda-forge
sip                       6.7.9           py311h12c1d0e_0    conda-forge
six                       1.16.0             pyh6c4a22f_0    conda-forge
skyfield                  1.45               pyh1a96a4e_0    conda-forge
snappy                    1.1.10               hfb803bf_0    conda-forge
sniffio                   1.3.0              pyhd8ed1ab_0    conda-forge
snowballstemmer           2.2.0              pyhd8ed1ab_0    conda-forge
snuggs                    1.4.7                      py_0    conda-forge
sortedcontainers          2.4.0              pyhd8ed1ab_0    conda-forge
soupsieve                 2.3.2.post1        pyhd8ed1ab_0    conda-forge
sphinx                    5.1.1              pyhd8ed1ab_1    conda-forge
sphinx_rtd_theme          1.2.2              pyha770c72_0    conda-forge
sphinxcontrib-apidoc      0.3.0                      py_1    conda-forge
sphinxcontrib-applehelp   1.0.4              pyhd8ed1ab_0    conda-forge
sphinxcontrib-devhelp     1.0.2                      py_0    conda-forge
sphinxcontrib-htmlhelp    2.0.1              pyhd8ed1ab_0    conda-forge
sphinxcontrib-jquery      4.1                pyhd8ed1ab_0    conda-forge
sphinxcontrib-jsmath      1.0.1                      py_0    conda-forge
sphinxcontrib-qthelp      1.0.3                      py_0    conda-forge
sphinxcontrib-serializinghtml 1.1.5              pyhd8ed1ab_2    conda-forge
sqlite                    3.42.0               hcfcfb64_0    conda-forge
stack_data                0.6.2              pyhd8ed1ab_0    conda-forge
starlette                 0.30.0             pyhd8ed1ab_0    conda-forge
starlette-cramjam         0.3.2                    pypi_0    pypi
supermercado              0.2.0                    pypi_0    pypi
svt-av1                   1.6.0                h63175ca_0    conda-forge
tbb                       2021.9.0             h91493d7_0    conda-forge
tblib                     1.7.0              pyhd8ed1ab_0    conda-forge
terminado                 0.17.0             pyh08f2357_0    conda-forge
threadpoolctl             3.2.0              pyha21a80b_0    conda-forge
tifffile                  2023.7.10          pyhd8ed1ab_0    conda-forge
tiledb                    2.13.2               h3132609_0    conda-forge
tinycss2                  1.2.1              pyhd8ed1ab_0    conda-forge
titiler-application       0.11.6                   pypi_0    pypi
titiler-core              0.11.6                   pypi_0    pypi
titiler-extensions        0.11.6                   pypi_0    pypi
titiler-mosaic            0.11.6                   pypi_0    pypi
tk                        8.6.12               h8ffe710_0    conda-forge
toml                      0.10.2             pyhd8ed1ab_0    conda-forge
tomli                     2.0.1              pyhd8ed1ab_0    conda-forge
toolz                     0.12.0             pyhd8ed1ab_0    conda-forge
tornado                   6.3.2           py311ha68e1ae_0    conda-forge
tqdm                      4.65.0             pyhd8ed1ab_1    conda-forge
traitlets                 5.9.0              pyhd8ed1ab_0    conda-forge
trollimage                1.20.1             pyhd8ed1ab_0    conda-forge
trollsift                 0.5.0              pyhd8ed1ab_0    conda-forge
twine                     4.0.2              pyhd8ed1ab_0    conda-forge
typing-extensions         4.7.1                hd8ed1ab_0    conda-forge
typing_extensions         4.7.1              pyha770c72_0    conda-forge
typing_utils              0.1.0              pyhd8ed1ab_0    conda-forge
tzdata                    2023c                h71feb2d_0    conda-forge
ucrt                      10.0.22621.0         h57928b3_0    conda-forge
ukkonen                   1.0.1           py311h005e61a_3    conda-forge
urllib3                   1.26.15            pyhd8ed1ab_0    conda-forge
uvicorn                   0.23.1          py311h1ea47a8_0    conda-forge
vc                        14.3                h64f974e_17    conda-forge
vc14_runtime              14.36.32532         hfdfe4a8_17    conda-forge
virtualenv                20.24.0            pyhd8ed1ab_0    conda-forge
vs2015_runtime            14.36.32532         h05e6639_17    conda-forge
wcwidth                   0.2.6              pyhd8ed1ab_0    conda-forge
webencodings              0.5.1                      py_1    conda-forge
websocket-client          1.6.1              pyhd8ed1ab_0    conda-forge
wget                      3.2                      pypi_0    pypi
wheel                     0.40.0             pyhd8ed1ab_1    conda-forge
widgetsnbextension        4.0.8              pyhd8ed1ab_0    conda-forge
win_inet_pton             1.1.0              pyhd8ed1ab_6    conda-forge
winpty                    0.4.3                         4    conda-forge
wrapt                     1.15.0          py311ha68e1ae_0    conda-forge
x264                      1!164.3095           h8ffe710_2    conda-forge
x265                      3.5                  h2d74725_3    conda-forge
xarray                    2023.7.0           pyhd8ed1ab_0    conda-forge
xarray-datatree           0.0.12             pyhd8ed1ab_0    conda-forge
xerces-c                  3.2.4                h63175ca_2    conda-forge
xlrd                      2.0.1              pyhd8ed1ab_3    conda-forge
xorg-libxau               1.0.11               hcd874cb_0    conda-forge
xorg-libxdmcp             1.1.3                hcd874cb_0    conda-forge
xyzservices               2023.7.0           pyhd8ed1ab_0    conda-forge
xz                        5.2.6                h8d14728_0    conda-forge
yaml                      0.2.5                h8ffe710_2    conda-forge
yaml-cpp                  0.7.0                h63175ca_2    conda-forge
yarl                      1.9.2           py311ha68e1ae_0    conda-forge
zarr                      2.15.0             pyhd8ed1ab_0    conda-forge
zeromq                    4.3.4                h0e60522_1    conda-forge
zfp                       1.0.0                h63175ca_3    conda-forge
zict                      3.0.0              pyhd8ed1ab_0    conda-forge
zipp                      3.16.2             pyhd8ed1ab_0    conda-forge
zlib                      1.2.13               hcfcfb64_5    conda-forge
zlib-ng                   2.0.7                hcfcfb64_0    conda-forge
zstandard                 0.19.0          py311he5d195f_2    conda-forge
zstd                      1.5.2                h12be248_7    conda-forge

Environment info

active environment : base
    active env location : C:\Users\Simon\miniconda3
            shell level : 1
       user config file : C:\Users\Simon\.condarc
 populated config files : C:\Users\Simon\miniconda3\.condarc
                          C:\Users\Simon\.condarc
          conda version : 23.5.2
    conda-build version : 3.24.0
         python version : 3.11.4.final.0
       virtual packages : __archspec=1=x86_64
                          __cuda=12.2=0
                          __win=0=0
       base environment : C:\Users\Simon\miniconda3  (writable)
      conda av data dir : C:\Users\Simon\miniconda3\etc\conda
  conda av metadata url : None
           channel URLs : https://conda.anaconda.org/conda-forge/win-64
                          https://conda.anaconda.org/conda-forge/noarch
                          https://repo.anaconda.com/pkgs/main/win-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/r/win-64
                          https://repo.anaconda.com/pkgs/r/noarch
                          https://repo.anaconda.com/pkgs/msys2/win-64
                          https://repo.anaconda.com/pkgs/msys2/noarch
          package cache : C:\Users\Simon\miniconda3\pkgs
                          C:\Users\Simon\.conda\pkgs
                          C:\Users\Simon\AppData\Local\conda\conda\pkgs
       envs directories : C:\Users\Simon\miniconda3\envs
                          C:\Users\Simon\.conda\envs
                          C:\Users\Simon\AppData\Local\conda\conda\envs
               platform : win-64
             user-agent : conda/23.5.2 requests/2.31.0 CPython/3.11.4 Windows/10 Windows/10.0.22000
          administrator : False
             netrc file : None
           offline mode : False
@djhoese djhoese added the bug label Jul 19, 2023
@djhoese
Copy link
Contributor Author

djhoese commented Jul 19, 2023

I'm still trying to make a smaller reproducible example beyond running all of Satpy's tests. However, Satpy's tests are very complicated as far as dependencies go. They include GDAL, netcdf4-python, xarray, dask, cython extensions, etc. So there could be a lot of things conflicting with libnetcdf beyond the changes to the builds.

@djhoese
Copy link
Contributor Author

djhoese commented Jul 19, 2023

Ah @simonrp84 just noted that these errors show up when his pytest command hangs:

Exception ignored in: <function File.close at 0x000002B262A5CFE0>
Traceback (most recent call last):
  File "C:\Users\Simon\miniconda3\Lib\site-packages\h5netcdf\core.py", line 1200, in close
  File "C:\Users\Simon\miniconda3\Lib\site-packages\h5py\_hl\files.py", line 578, in close
TypeError: 'NoneType' object does not support the context manager protocol
Exception ignored in: <function File.close at 0x000002B262A5CFE0>
Traceback (most recent call last):
  File "C:\Users\Simon\miniconda3\Lib\site-packages\h5netcdf\core.py", line 1200, in close
  File "C:\Users\Simon\miniconda3\Lib\site-packages\h5py\_hl\files.py", line 578, in close
TypeError: 'NoneType' object does not support the context manager protocol
Exception ignored in: <function File.close at 0x000002B262A5CFE0>
Traceback (most recent call last):
  File "C:\Users\Simon\miniconda3\Lib\site-packages\h5netcdf\core.py", line 1200, in close
  File "C:\Users\Simon\miniconda3\Lib\site-packages\h5py\_hl\files.py", line 578, in close
TypeError: 'NoneType' object does not support the context manager protocol
Exception ignored in: <function File.close at 0x000002B262A5CFE0>
Traceback (most recent call last):
  File "C:\Users\Simon\miniconda3\Lib\site-packages\h5netcdf\core.py", line 1200, in close
  File "C:\Users\Simon\miniconda3\Lib\site-packages\h5py\_hl\files.py", line 578, in close
TypeError: 'NoneType' object does not support the context manager protocol
Exception ignored in: <function File.close at 0x000002B262A5CFE0>
Traceback (most recent call last):
  File "C:\Users\Simon\miniconda3\Lib\site-packages\h5netcdf\core.py", line 1200, in close
  File "C:\Users\Simon\miniconda3\Lib\site-packages\h5py\_hl\files.py", line 578, in close
TypeError: 'NoneType' object does not support the context manager protocol
Exception ignored in: <function File.close at 0x000002B262A5CFE0>
Traceback (most recent call last):
  File "C:\Users\Simon\miniconda3\Lib\site-packages\h5netcdf\core.py", line 1200, in close
  File "C:\Users\Simon\miniconda3\Lib\site-packages\h5py\_hl\files.py", line 578, in close
TypeError: 'NoneType' object does not support the context manager protocol

@djhoese
Copy link
Contributor Author

djhoese commented Jul 19, 2023

Ok I've got a reproducible example without Satpy:

import xarray as xr


def test_netcdf():
    fk = "test.nc"
    ds = xr.Dataset(
        coords={"nx": [0], "ny": [0]},
        attrs={
            "source": "satpy unit test",
            "time_coverage_start": "0001-01-01T00:00:00Z",
            "time_coverage_end": "0001-01-01T01:00:00Z",
        }
    )
    ds.to_netcdf(fk)

Run with python -c "import test_netcdf; test_netcdf.test_netcdf()" and it will just hang when run on Windows.

@rouault
Copy link
Contributor

rouault commented Jul 19, 2023

This also affects GDAL CI on Windows whose tests involving netcdf hang: https://github.com/OSGeo/gdal/actions/runs/5589991097/jobs/10222968884
e.g the following hangs after the 100% completion:

gdal_translate autotest\gcore\data\byte.tif out.nc
Input file size is 20, 20
0...10...20...30...40...50...60...70...80...90...100 - done.

And I also traced it to the nompi_h5902ca5_107 --> nompi_h624ddae_109 upgrade

@djhoese
Copy link
Contributor Author

djhoese commented Jul 19, 2023

@rouault I haven't tested it yet, but I'm wondering if the 108 build is the actual issue. The 108 build should be the result of #180 being merged.

@djhoese
Copy link
Contributor Author

djhoese commented Jul 19, 2023

A quick test on my CI shows 108 as the problem. Might have to revert the S3 support. CC @zklaus @DennisHeimbigner @dopplershift

@zklaus
Copy link

zklaus commented Jul 20, 2023

Just to confirm, you are saying 107 works as expected?

rouault added a commit to OSGeo/gdal that referenced this issue Jul 20, 2023
@djhoese
Copy link
Contributor Author

djhoese commented Jul 20, 2023

@zklaus As far as I can tell, yes 107 works fine. 107 was released almost 2 weeks earlier and I never noticed any issues. Based on @rouault's gdal_translate example, my guess is opening a NetCDF file for writing is the case that causes it to hang.

@djhoese djhoese changed the title Recent builds cause pytest/tests to not exit Recent builds cause hanging on Windows Jul 20, 2023
@zklaus
Copy link

zklaus commented Jul 20, 2023

It is a bit strange because the test you propose doesn't seem to have anything to do with S3, so I am wondering if it's a random upgrade in the environment that is causing this. To test, I'll add the test as a test to the recipe and see if de-/activating makes a difference. If the trace given above is any indication, h5netcdf or h5py might be involved.

zklaus pushed a commit to zklaus/libnetcdf-feedstock that referenced this issue Jul 20, 2023
@zklaus zklaus linked a pull request Jul 20, 2023 that will close this issue
5 tasks
@djhoese
Copy link
Contributor Author

djhoese commented Jul 20, 2023

I also thought h5netcdf or h5py could be the issue, but when I narrowed it down to my simple Python example it seems less likely. I can try doing one with only importing the lower-level netcdf4-python library. If @rouault knows the exact part of GDAL that does the NetCDF writing, or if there is a test function that writes a NetCDF file, maybe that would also trigger it and remove Python from the equation entirely.

The exception I posted earlier is very strange, but may be a conflict between h5py and netcdf-python talking to HDF5/NetCDF-C internals. As far as runtime environment, it is exactly the same except for that libnetcdf version. Build environment...might be a different story. I suppose the logs for those are long gone though.

@rouault
Copy link
Contributor

rouault commented Jul 20, 2023

so I am wondering if it's a random upgrade in the environment that is causing this.

From my manual testing, it is clearly the nompi_h5902ca5_107 --> nompi_h624ddae_108 upgrade. Manual installation of 107 results in OK behaviour. Manual installation in 108 results in hangs, both when reading or writing with GDAL utilities. Interstingly the ncdump and ncgen utilities don't seem to be affected

@djhoese
Copy link
Contributor Author

djhoese commented Jul 20, 2023

@zklaus Got my python script down to this:

def test_netcdf4_python():
    from netCDF4 import Dataset
    nc = Dataset("test_netcdf4_python.nc", mode="w")
    nc.close()

I threw the .close() conditionally in my own tests expected a closed file to not hang, but 3 minutes of running this script in my CI and I think it is safe to say it is hanging. I'll try removing some dependencies from the environment to triple check that it isn't some weird conflict with some other library. I'm hoping the above netcdf4-python code translates easily to C/C++.

@zklaus
Copy link

zklaus commented Jul 20, 2023

Thanks, @djhoese, that's a nice and compact test! I have plugged your earlier test into the recipe in #183, but curiously, the tests seem not to be run on Windows?! Does anyone know what's up with that? I note that there is a run_test.sh script, but no run_test.bat, but the tests are in the meta.yaml anyways.

@ocefpaf
Copy link
Member

ocefpaf commented Jul 20, 2023

@zklaus should we mark the Windows builds >=107 as broken until we figure this out? I can do that if you all agree.

@rouault
Copy link
Contributor

rouault commented Jul 20, 2023

should we mark the Windows builds >=107 as broken

should be: >= 108 . 107 is fine

@dopplershift
Copy link
Member

Heads up @WardF

@DennisHeimbigner
Copy link

Is there any chance someone can do the following:

  1. rebuild netcdf-c with logging enabled.
  2. export NETCDF_LOG_LEVEL=15
  3. run the python test program.

Warning, the trace output may be voluminous.

@djhoese
Copy link
Contributor Author

djhoese commented Jul 20, 2023

If someone can tell me how to compile my little C program above with conda-forge's preferred compilers and just the command line (something I can put into CI) we may be able to reduce the amount of output by a lot assuming the test C program triggers the same hanging issue.

zklaus pushed a commit to zklaus/libnetcdf-feedstock that referenced this issue Jul 21, 2023
Co-authored-by: Xylar Asay-Davis <xylarstorm@gmail.com>
Co-authored-by: Filipe <ocefpaf@gmail.com>
@zklaus
Copy link

zklaus commented Jul 21, 2023

Is there any chance someone can do the following:

I tried to do this now in #185. Let me know what you think!

@zklaus
Copy link

zklaus commented Jul 21, 2023

Just to let everyone know, I will be on vacation from tomorrow until 23. August. Feel free to take over my branches and to play around.

@WardF
Copy link
Contributor

WardF commented Aug 22, 2023

@WardF Interesting. If you remove everything but the import (and dedent it) so it just looks like:

from netCDF4 import Dataset

does that also hang? I guess this would mean something not getting garbage collected properly in the python library (threads not being killed?).

It does, in fact, still hang.

image

Your supposition sounds right to me; I've just started digging into the AWS SDK documentation looking to see if there is something subtle happening that I can suss out, but if it's Python garbage collection, is that something we are able to do anything about?

I'll keep digging, and will see if I can replicate this in C, but the fact it's triggered by import is a bit of a wrinkle.

@ocefpaf
Copy link
Member

ocefpaf commented Aug 22, 2023

I guess that, at this point, we should probably open an issue in netcdf4-python. Or at least loop them in here. I don't think the tests upstream covers those options we just enabled.

@rouault
Copy link
Contributor

rouault commented Aug 22, 2023

I'll keep digging, and will see if I can replicate this in C, but the fact it's triggered by import is a bit of a wrinkle.

It has likely nothing to do with python. It's definitely reproducible in C/C++ since GDAL C++ command line utilities stall on exit when opening a netcdf file

@WardF
Copy link
Contributor

WardF commented Aug 22, 2023

I'll keep digging, and will see if I can replicate this in C, but the fact it's triggered by import is a bit of a wrinkle.

It has likely nothing to do with python. It's definitely reproducible in C/C++ since GDAL C++ command line utilities stall on exit when opening a netcdf file

That's what makes it an interesting wrinkle; not sure what's happening in terms of the import under the hood but it isn't immediately obvious what, if anything, is happening here. I'll keep poking around at it in the meantime, but it's not as straightforward as I'd have hoped :)

@DennisHeimbigner
Copy link

Ward- There is an experiment you can try to see if it is aws-sdk-cpp.
You will need to do the following:

  1. use the current libnetcdf master branch.
  2. use the -DENABLE_S3_INTERNAL=on (cmake) or the --enable-s3-internal (automake) option when building the the netcdf library.
  3. Run the python program to see if it still hangs.

@WardF
Copy link
Contributor

WardF commented Aug 23, 2023

Ward- There is an experiment you can try to see if it is aws-sdk-cpp. You will need to do the following:

  1. use the current libnetcdf master branch.
  2. use the -DENABLE_S3_INTERNAL=on (cmake) or the --enable-s3-internal (automake) option when building the the netcdf library.
  3. Run the python program to see if it still hangs.

Thanks for the tip; I'll give it a try when I replicate the python script in C. Or, if I get to the point where I need to figure out how to get Python to invoke the netcdf.dll I'm compiling :). Thanks!

@WardF
Copy link
Contributor

WardF commented Aug 23, 2023

I'm able to recreate a hang now in the netCDF-C tests. Interesting; it gives me a good place to start.

@ocefpaf
Copy link
Member

ocefpaf commented Aug 23, 2023

I'm able to recreate a hang now in the netCDF-C tests. Interesting; it gives me a good place to start.

Thanks @WardF for digging into this! It is not an easy debugging for sure! (Hoping for an easy fix though ;-p)

@WardF
Copy link
Contributor

WardF commented Aug 23, 2023

@DennisHeimbigner I'm going to open an issue over on the Unidata/netcdf-c page. I'm seeing a hang in the first test run (tst_create_files), that turns into a thrown Exception when running under Visual Studio. Screenshot here for reference, but it appears there is an issue with what's being passed to Aws::InitAPI(ncs3options). It is strange this is only manifesting under Windows, and I haven't stepped through the entire test yet, but I wanted to make a note of things while I had it in front of me.

This obviates the Python connection (much to my relief, I'm much more at home with C/C++ XD). Thanks all for your help and patience, we'll get this sorted out.

image

@WardF
Copy link
Contributor

WardF commented Aug 23, 2023

I'm able to recreate a hang now in the netCDF-C tests. Interesting; it gives me a good place to start.

Thanks @WardF for digging into this! It is not an easy debugging for sure! (Hoping for an easy fix though ;-p)

Hoping it's one of those cases like the other 99%, where the difficulty is in diagnosing, but the issue is straightforward. I have to shift context for a little bit, but immediately I see that a NULL pointer is being passed as part of ncs3options. I have no reason to think that this is the issue, other than NULL pointers are a great place to start looking when you are seeing access violations. But at least we've wrestled this into a debugging environment I'm able to wring some information out of. Thanks for your patience!

@xylar
Copy link
Contributor

xylar commented Aug 27, 2023

Hi folks, I'm wondering at what point we decide that an easy fix is not in the cards and roll back the changes so conda-forge can move on with various migrations that are stuck because of this issue. Is there any sign that a fix is imminent?

@xylar
Copy link
Contributor

xylar commented Aug 27, 2023

I certainly don't mean to imply that I don't appreciate the work being done to debug this issue. Far from it! But I appreciate that it can be hard to find these issues and that we all have other demands on our time as well.

@DennisHeimbigner
Copy link

> I see that a NULL pointer is being passed as part of ncs3options
Where are you seeing this?
It should not happen. The declaration of ncs3options is:
> static Aws::SDKOptions ncs3options;
which is a static object (i.e. not a pointer).
But if it is, then this could be the problem.

@dopplershift
Copy link
Member

@xylar IMO, it's perfectly reasonable to revert and move on until this is properly fixed upstream. But I'll leave it to those who are willing to do the work of reverting (and possibly un-reverting...).

@akrherz akrherz mentioned this issue Aug 29, 2023
4 tasks
zklaus pushed a commit to zklaus/libnetcdf-feedstock that referenced this issue Sep 5, 2023
Co-authored-by: Xylar Asay-Davis <xylarstorm@gmail.com>
Co-authored-by: Filipe <ocefpaf@gmail.com>
@WardF
Copy link
Contributor

WardF commented Oct 17, 2023

Hello all. Having popped back up the stack, I believe we may have a fix for this at the underlying C library. This was an interesting issue to try to diagnose and fix. As usual, the fix on our end (for the short term) was far easier than the effort put into figuring out what was going on in the first place.

I'm not sure immediately how to test our fix against the libnetcdf-feedstock, but it boils down thusly. On Non-Linux platforms, -DENABLE_S3=TRUE needs to be paired with -DENABLE_S3_INTERNAL=TRUE. This is true for MacOS as well as Windows. For whatever reason, we are observing hangs when linking against the AWS C++ SDK on these platforms. I've been able to confirm, at least, that these issues are not specific to netCDF. But they are also not universal. Maddening, and we will get it sorted out. In the meantime, @DennisHeimbigner showed foresight in his implementation of an internal S3 interface layer.

Other PR's and issues have cropped up while I was focused on this, but I will be triaging and patching ASAP so that we might get a v4.9.3 release out.

@zklaus
Copy link

zklaus commented Oct 18, 2023

Thanks @WardF, that's exciting :). I am trying it out in #185. Just to confirm, that means we should have -DENABLE_S3_SDK=FALSE as well, right?

@zklaus
Copy link

zklaus commented Oct 18, 2023

Hm. Unfortunately, it does not seem to work.

@WardF
Copy link
Contributor

WardF commented Oct 18, 2023

-DENABLE_S3_SDK=FALSE is not a flag for netCDF-C; you should instead set -DENABLE_S3=TRUE and -DENABLE_S3_INTERNAL=TRUE.

@DennisHeimbigner
Copy link

I note that we did have an ENABLE_S3_SDK option in 4.9.2.
I apologize for removing it without explanation.

@zklaus
Copy link

zklaus commented Oct 19, 2023

Ok, things are more or less clear than now: An earlier version of @WardF's comment seemed to suggest that this fix could be applied to version 4.9.2. This was a misinterpretation on my part and we have to wait for 4.9.3. Thus, my attempt in #185 to use it with 4.9.2 was doomed. On the upside, I learned to replace -DENABLE_S3_SDK=TRUE with -DENABLE_S3=TRUE on Linux and -DENABLE_S3_TRUE -DENABLE_S3_INTERNAL=TRUE on Windows and Osx.

@zklaus zklaus mentioned this issue Oct 19, 2023
5 tasks
@WardF
Copy link
Contributor

WardF commented Oct 19, 2023

My apologies for the confusion; I am working to get a v4.9.3 out ASAP. A number of other PR's that need to be addressed made their way into the queue during the time we spent hashing this out, but I'm hoping we can have something in the next week or so. The release of HDF5 1.14.2 is going to require some testing as well. Thanks!

clrpackages pushed a commit to clearlinux-pkgs/gdal that referenced this issue Nov 14, 2023
Aaron Boxer (1):
      JP2OpenJPEG: refactor into re-usable template

Alan Thomas (2):
      DXF: Preserve attributes in nested block insertions
      DXF: Show constant ATTDEFs as text

Alessandro Pasotti (13):
      MSSQL: fix crash in ogr2ogr when BCP is enabled (#7792)
      MSSQL: fix GEOGRAPHY clockwise vertex order (#7826)
      MSSQL: Fix cannot write binary field in BCP mode (#7841)
      MSSQL: add test for geometry column identification (#7871)
      OGCAPI: Fix TILES raster API not working
      Add OGCAPI intial tests (#7926)
      OGCAPI: more tests for errors (#8110)
      Fix build with DEBUG_VERBOSE on
      OPENCL: scan multiple devices for each platform (#8537)
      OGR2OGR: fix preserve_fid and explodecollections incompatible options (#8539)
      API: add GDALGetSubdatasetInfo() and related functions  (#8155)
      OAPIF: bump default limit to 1000 and honor schema from API (#8566)
      OGR2OGR: test JSON types roundtrip (#8609)

Andrea Giudiceandrea (4):
      [Shapefile] SHPRestoreSHX: update SHX content length even if error occurred
      Docs: fix gdal_rasterize.rst
      Doc: substitute remotesensing.org/geotiff/proj_list with gdal.org/proj_list/
      Fix link in javadoc.java

Barry DeZonia (6):
      SWIG JAVA: add Read/WriteRaster abilities for GDT_UInt64 & GDT_Int64 (#7893)
      Java binding: eliminate some deprecations / compiler warnings (#8055)
      Add a compatiblity method to swig bindings that is Java Only
      Make sure to remove the %rename for GetFieldType from ogr_java.i
      Java binding: make multidimensional API usable (#8048)
      Make the 2d multidim test exercise itself harder

Bas Couwenberg (1):
      Include <cstdint> for uint64_t.

Brad Hards (1):
      Update gmlas.rst

Bryce Mecum (1):
      Rename arrow repo links from master to main

Chris Toney (2):
      updates to the documentation for LCP format
      Doc: update url for R bindings

Craig de Stigter (1):
      WFS: Don't issue STARTINDEX if feature count is small (#8146)

Dan Baston (11):
      Update doc/source/drivers/raster/bag.rst
      Update doc/source/drivers/raster/bag.rst
      Update doc/source/drivers/vector/eeda.rst--
      Update doc/source/drivers/raster/blx.rst
      Update doc/source/drivers/vector/geoconcept.rst
      Update doc/source/drivers/vector/elasticsearch.rst
      Apply suggestions from code review
      Update autotest/pyscripts/test_gdal_ls_py.py
      autotest: skip test_vsicurl_streaming_1 on Travis
      validate_geoparquet: avoid GitHub login via .netrc (#8096)
      Doc: Update Python gotchas (#8489)

Daniel Baston (262):
      Doc: Remove outdated information on building Python bindings
      autotest: fix incomplete download when size is unknown
      autotest: simplify gdaltest.download_file
      ogr_sxf.py: Quiet debugging output
      autotest: skip tests requiring unavailable downloads
      hdf5.py: Update test data URL
      autotest: Consolidate JSON validation logic, catch timeout errors
      CI: Strip invalid characters from container tag
      Doc: Add doxygen target to doc Makefile
      Python bindings: Return context manager from Create, CreateDataSource
      Doc: Add directives/roles for declaring and referencing options
      configoptions.rst: Use source file links
      configoptions.rst: Move CPL_VSIL_CURL* to Networking section
      configoptions.rst: Remove GDAL_CACHEMAX history
      configoptions.rst: Remove GDAL_VALIDATE_CREATION_OPTIONS
      Doc: Remove old config options index
      Doc: Use config directives in driver pages (raster)
      Doc: Use config directives in driver pages (vector)
      Doc: Use config directives in program pages
      Doc: Use config directives in user docs
      Doc: Remove :decl_configoption:
      georaster.rst: format code blocks
      configoptions.rst: reorganize global options
      Doc: fix typos, formatting
      configoptions.rst: Reformat options as list
      bag.rst: fix typo
      idb.rst: Distinguish between config options and env vars
      Doc: Fix typos in libkml config option names
      Doc: correct name of GDAL_VRT_PYTHON_TRUSTED_MODULES
      Doc: correct name of PDF_USER_PWD config option
      Doc: Ignore config option usages not in PDF output
      GDALRasterBand: Document and validate GDAL_BAND_BLOCK_CACHE
      Doc: Document OGR_PROMOTE_TO_INTEGER64
      Doc: Document GDAL_MAX_BAND_COUNT
      Doc: Add documentation for HTTP config options
      Doc: Add entry for GDAL_CONFIG_FILE
      Doc: Document GDAL_PYTHON_DRIVER_PATH
      Doc: Migrate gdal_merge.py examples from wiki
      Doc: Migrate gdalwarp information from wiki
      Doc: Migrate gdal_translate information from wiki
      Doc: Migrate ogrinfo information from wiki
      configoptions.rst: Remove default for GDAL_NUM_THREADS
      Doc: Improve documentation for OGR_ORGANIZE_POLYGONS
      autotest: Add some tests for OGRGeometryFactory::organizePolygons
      CI: Run ctest in parallel for most Linux builds
      autotest: Add attribute_filter and spatial_filter context managers
      autotest: Use context managers to remove "assert tr" pattern
      autotest gdrivers/gpkg.py: Update code conventions
      autotest: use asserts in ogrtest helpers
      autotest: remove asserts of ogrtest helper function return values
      autotest: call pytest.skip from skip_on_travis()
      autotest: avoid calling post_reason in gdaltest.equal_srs_from_wkt
      autotest: use assert in gdaltest.rpcs_equal, avoid post_reason
      autotest: Move assert inside gdaltest.geotransform_equals
      autotest: remove gdaltest.post_reason
      autotest: skip test_http_1 on Travis
      autotest: Enhancements to ogrtest.check_feature_geometry
      autotest: check for mismatched dims in ogrtest.check_feature_geometry
      Doc: Update PAM config options
      organizePolygons: Remove handling of nonpolygonal geometries
      autotest netcdf.py: make tests independent
      autotest ogr_sql_sqlite.py: make tests independent
      Python bindings: Invalidate band and layer refs when dataset closes
      SWIG: Increment FeatureDefn ref count on ogr.Layer.GetLayerDefn()
      autotest: remove global setting of ECW_DO_NOT_RESOLVE_DATUM_PROJECTION
      Python bindings: Invalidate mask, overview references after dataset close
      Python bindings: Invalidate refs from CreateLayer on datasource close
      Python bindings: Invalidate refs from CopyLayer on datasource close
      autotest ogr_sql_test.py: make tests independent
      autotest vsizip.py: disable exceptions
      autotest tiff_read.py: make tests independent
      autotest pam.py: make tests independent
      autotest rat.py: make tests independent
      autotest ogr_sql_rfc28.py: make tests independent
      autotest colortable.py: make tests independent
      autotest gdal_stats.py: make tests independent
      autotest hfa_write.py: make tests independent
      GDAL_RASTERIO_RESAMPLING: add doc and test
      Doc: Add entry for GDAL_READDIR_LIMIT_ON_OPEN
      Doc: Document COMPRESS_GEOM configuration option
      Doc: Document CHECK_DISK_FREE_SPACE
      Doc: Add docs for VRT_SHARED_SOURCE
      Doc: formatting fix in jp2openjpeg.rst
      Doc: Add USE_TILE_AS_BLOCK to JP2KAK
      Doc: Add USE_SPILL configuration option to HFA
      OSR_WKT_FORMAT: Add doc and test
      Doc: Add docs for some OSR options
      OSR_DEFAULT_AXIS_MAPPING_STRATEGY: Add doc and test
      autotest: add test to clarify configuration option/env var precedence
      Python bindings: Fix gdal.config_options to prevent migration of config
      autotest: remove unused globals, functions from gdaltest
      autotest: remove usage of GDALTest return values
      autotest: fix test_misc_6 incorrect early return before test completion
      autotest: remove some always-true checks
      autotest: remove assignment of non-existing return values
      rasterlite: restore original state after temporarily setting OGR_SQLITE_EXACT_EXTENT
      SWIG: Expose GetConfigOptions()
      Python bindings: Allow passing options as dict
      autotest: fix execution of commands on Windows with backslashes
      autotest test_gdal_contour.py: make tests independent
      autotest test_gdal_grid.py: make tests independent
      autotest test_gdal_grid.py: split and parametrize tests, use tmp_path
      autotest test_gdaladdo.py: make tests independent
      autotest test_gdaldem.py: make tests independent
      autotest test_nearblack.py: make tests independent
      autotest test_ogrlineref.py: make tests independent
      autotest test_gdal_translate.py: make tests independent
      autotest test_gdalwarp.py: make tests independent
      autotest test_gdalwarp_lib.py: make tests independent
      autotest test_ogrtindex.py: move cleanup into fixture
      autotest test_gdalbuildvrt.py: make tests independent, use tmp_path
      autotest: disable random order for test_gdaltindex and test_gdalgnmutils
      autotest test_gdal_merge.py: make tests independent, use tmp_path
      gdal_pansharpen.py: avoid error trying to generate relative path
      autotest test_gdal_pansharpen.py: make tests independent, use tmp_path
      autotest test_gdal_retile.py: make tests independent, use tmp_path
      autotest: Remove test for deprecated raster GMT driver
      Doc: Document GDAL_OVR_PROPAGATE_NODATA
      autotest test_pct.py: make tests independent, use tmp_path
      autotest mask.py: make tests independent
      autotest histogram.py: make tests independent
      autotest numpy_rw_multidim.py: move setup to fixture
      autotest vsicrypt.py: move setup to fixture
      autotest vsihdfs.py: move setup into fixture
      autotest gcore/tiff: make tests independent
      autotest hfa_rfc40.py: mark to disabled random order
      autotest gif.py: make tests independent
      autotest bsb.py: use pytest.mark.require_driver
      autotest bt.py: use pytest.mark.parameterize, move cleanup to fixture
      autotest vrtrawlink.py: make tests independent, use tmp_path
      autotest vrtwarp.py: combine two interdependent tests
      autotest rasterlite.py: combine two interdependent tests
      autotest postgisraster.py: move cleanup into fixture, add skip messages
      autotest mbtiles.py: move webserver into fixture
      autotest test_validate_jp2.py: move setup, cleanup into fixture
      autotest kmlsuperoverlay.py: move cleanup into fixture
      autotest jpeg.py: make tests independent
      autotest hfa.py: combine interdependent tests
      autotest srtmhgt.py: make tests independent
      autotest srp.py: parametrize tests, use fixture for cleanup
      autotest ehdr.py: merge two interdependent tests
      autotest esric.py: use fixture for sample dataset
      autotest fast.py: use fixture for test dataset
      autotest: restore netcdf_cf checks
      autotest wms.py: update SEDAC url, re-enable tests
      autotest wms.py: use new ESRI test server
      autotest wms.py: pull TileCache test server into fixture
      autotest wms.py: make GIBS TWMS tests independent
      autotest wms.py: fix always-skipped test, use tmp_path for wms cache
      autotest wcs.py: parametrize test_wcs_6, remove global variables
      autotest wcs.py: use fixture for geoserver.wcs
      autotest plmosaic.py: make tests independent
      autotest nitf.py: move cleanup to fixture, merge interdependent tests
      autotest: disable random order for gdrivers/ngw.py
      autotest pcidsk.py: combine interdependent tests
      autotest: test_ogrinfo.py: use tmp_path fixture
      autotest: test_gdal_create.py: use tmp_path fixture
      autotest: test_gdal_footprint.py: use tmp_path fixture
      autotest: test_ogr2ogr.py: use tmp_path fixture
      autotest: test_gdal_rasterize.py: use tmp_path fixture
      autotest: test_gdaladdo.py: use tmp_path fixture
      autotest: test_gdalinfo.py: use tmp_path fixture
      autotest: test_gdalsrsinfo.py: use tmp_path fixture
      autotest: test_gdallocationinfo.py: use tmp_path fixture
      autotest: test_gdaldem.py: use tmp_path fixture
      autotest: test_ogrtindex.py: use tmp_path fixture
      autotest: test_gdalwarp_lib.py: use tmp_path fixture
      autotest: test_gdal_translate.py: use tmp_path fixture
      autotest: test_gdalmdimtranslate.py: use tmp_path fixture
      autotest: test_ogr2ogr_lib.py: use tmp_path fixture
      autotest: test_gdal_rasterize_lib.py: use tmp_path fixture
      autotest: test_gdalwarp.py: use tmp_path fixture
      autotest: test_ogrlineref.py: use tmp_path fixture
      autotest: test_nearblack.py: use tmp_path fixture
      autotest: test_gdal_translate_lib.py: use tmp_path fixture
      autotest: test_gdaltindex.py: use tmp_path fixture
      autotest: test_sozip.py: use tmp_path fixture
      autotest: test_gdal_viewshed.py: use tmp_path fixture
      autotest: test_gnmutils.py: use tmp_path fixture
      autotest: add tmp_vsimem fixture
      autotest: ogr_rfc35_shape.py: make tests independent
      autotest: combine ogr_rfc_35 tests
      OGR: Add OGR_F_DumpReadableAsString
      Python bindings: Use DumpReadable for Feature __repr__
      Python bindings: Accept os.PathLike arguments where applicable
      autotest: test that Python bool can be used in options dict
      autotest: use gdal.quiet_errors()
      Python bindings: Support os.PathLike inputs in utilities
      Python bindings: accept options as dicts in CLI wrapper functions
      autotest: contour.py: make tests independent
      autotest: ogr_basic_test.py: make tests independent, use tmp_path
      autotest: ogr_kml.py: combine two interdependent tests, use tmp_ fixtures
      autotest: ogr_mem.py: make tests independent
      autotest: ogr_shape.py: make tests independent, use tmp_path and tmp_vsimem
      autotest: ogr_svg.py: make tests independent
      autotest: ogr_tiger.py: make tests independent
      autotest: ogr_pdf.py: make tests independent
      autotest: ogr_vrt.py: make tests independent, use tmp_ fixtures
      autotest: ogr_csv.py: make tests independent, use tmp_ fixtures
      autotest: ogr_dgn.py: merge two interdependent tests
      autotest: ogr_sxf.py: avoid assigning global variables
      autotest: ogr_pcidsk.py: make tests independent
      autotest: ogr_jml.py: use tmp_vsimem, split tests
      autotest: ogr_mitab.py: make tests independent, parametrize and use tmp_ fixtures
      autotest: ogr_libkml.py: combine interdependent tests, parametrize and use tmp_ fixtures
      autotest: ogr_layer_algebra.py: split tests, use fixtures for inputs
      autotest: ogr_gml.py: make tests independent, parametrize, use tmp_ fixtures
      autotest: ogr_georss.py: make tests independent
      autotest: ogr_pythondrivers.py: use fixture for setup and cleanup
      autotest: ogr_ili: use tmp_path, mark as order-dependent
      autotest: ogr_selafin.py: make tests independent
      autotest: ogr_vfk.py: make tests independent
      autotest: ogr_vdv.py: make tests independent, parametrize
      autotest: ogr_s57.py: make tests independent
      autotest: ogr_csw.py: make tests independent, use tmp_vsimem
      autotest: ogr_plscenes.py: use pytest.mark.require_driver
      autotest: ogr_gmlas.py: make tests independent
      autotest: ogr_mitab.py: fix format parametrization of mapinfo_ds fixture
      autotest: ogr_gml_read.py: copy xsd files with gml into tmp_path
      autotest: ogr_gml_read.py: test that out-of-date gfs files are ignored
      Doc: Add NASA logo to sponsorship page
      Python bindings: Allow ExecuteSQL context manager to work on empty datasources
      autotest: ogr_sqlite.py: make tests independent, use tmp_ fixtures
      autotest ogr_mysql.py: make tests independent
      autotest: ogr_pg.py: make tests independent
      SWIG: Expose GDALClose
      Python bindings: Avoid crash when using dataset after Destroy or Release
      autotest: add gdaltest.reopen helper
      autotest: ogr_gpkg.py: make tests independent, parallel-safe
      Python bindings: Avoid crashes when using orphaned Geometry refs
      Python bindings: Accept more os.PathLike inputs
      autotest: utilities: use tmp_vsimem fixture
      autotest: zarr_driver.py: use tmp_vsimem in test_zarr_create_array_bad_compressor
      vsimem: implicitly create parent dirs when creating file
      MIGRATION_GUIDE: Document behavior changes in /vsimem
      ElasticSearch: modify paths to avoid having both /vsimem/foo file and /vsimem/foo/ directory
      PLMosaic testing: Use webserver to avoid file and dir with same name in vsimem
      autotest: daas.py: use tmp_vsimem fixture
      autotest: ogr_oapif.py: avoid modifying FileHandler internal dict
      autotest: ogr_elasticsearch.py: use webserver, make tests independent
      autotest: ogr_plscenes.py: use webserver, split some tests
      autotest: webserver.py: uninstall handler if final_check throws
      autotest: ogr_elasticsearch.py: skip test failing on Windows
      autotest: ogr_refcount.py: make tests independent
      autotest: ogr_ogdi.py: make tests independent
      autotest: ecrgtoc.py: make tests independent
      autotest: kea.py: use setup fixture, tmp_path, parametrize
      autotest: ecw.py: combine interdependent tests, use tmp_path
      autotest: ogr_fgdb.py: make tests independent, use tmp_path
      autotest: vsioss.py: make tests independent
      autotest: vsiswift.py: make tests independent
      autotest: vsiwebhdfs.py: make tests independent
      autotest: vsicurl.py: use webserver fixture, skip tests of unavailable urls
      autotest: ogr_mongodbv3.py: mark with require_driver
      autotest: ogr_mvt.py: use webserver fixture
      autotest: ogr_carto.py: move cleanup into fixture
      autotest: ogr_mssqlspatial.py: make tests independent
      autotest: arg.py: mark as order-dependent
      autotest: overviewds.py: make tests independent, use tmp_path
      autotest: idrisi.py: avoid creating new files in data dir
      autotest: eedai.py: disable random order
      autotest: ecw.py: avoid writing file to data dir

Erica Fischer (1):
      GeoJSONand GeoJSONSeq: add AUTODETECT_JSON_STRINGS layer creation option (#8391)

Even Rouault (893):
      Tag master as 3.8.0dev
      mkgdaldist.sh: update to take account python bindings generated files are no longer included [ci skip]
      HOWTO-RELEASE: update [ci skip]
      Fix building without fuzzers/ and perftests/ directory
      gdal.cmake: install data/gfs.xsd and data/gml_registry.xsd
      Doc / NEWS: s/GetCompressedData/ReadCompressedData/
      pytest.ini.in: fix issue when running autotest from git repo when GDAL_RELEASE_NAME in gdal_version.h.in has no dev suffix
      C/C++ multidimensional API: add Rename() methods
      SWIG: map multidimensional API Rename() methods
      MEM multidim: implement Rename() for group, dimensions, arrays and attributes
      netCDF multidim: implement Rename() for group, dimensions, arrays and attributes
      ZARR: fix full name of attributes
      ZARR multidim: implement Rename() for group
      Zarr: avoid GetMDArrayNames() to report several times the same name in some circumstances
      ZARR multidim: implement Rename() for array
      ZARR multidim: implement Rename() for attribute
      ZARR multiidm: implement Rename() for dimension
      cppcheck-related tunings
      Lint: remove useless variable
      geopackage_aspatial.rst: mention it is superseded
      Add third_party/fast_float header library for fast string->double conversion
      scripts/clang-format.sh: exclude third_party/
      CPLStrtodDelim(): use fast_float
      bench_ogr_batch: add a --stream-opt switch
      Parquet: add a COORDINATE_PRECISION layer creation option
      Add a OGRWKTToWKBTranslator utility class
      Parquet: add fast implementation of Arrow Array interface when requesting WKT as WKB
      SDTS: fix reading of polygon geometries (fixes #7680)
      WMTS: workaround buggy TileMatrix.TopLeftCorner of one server (fixes #5729)
      Arrow/Parquet: emit ARROW:extension:name=ogc.wkb in Feature field metadata, and return it also through GetArrowStream() for Parquet; make Parquet driver recognize a geometry column if it has ARROW:extension:name=ogc.wkb/ogc.wkt field metadata
      Add perftests/bench_ogr_to_geopandas.py (from RFC 90 benchmark programs)
      Parquet: add a GEOM_POSSIBLE_NAMES and CRS open options for wider compatibility with datasets not following GeoParquet dataset-level metadata
      Zarr: move code belonging to classes to dedicated files; rename classes ZarrGroupVx to ZarrVXGroup (no functional change)
      NEWS.md: fix link formatting [ci skip]
      Avoids warning with gcc 13.1 of mingw64
      Fix issues on big endian hosts: recode from UTF-16, and broken tests
      OGRSpatialReference::importFromPCI(): lint / avoid Coverity scan warning about leaked memory (CID 1509441)
      Zarr: split ZarrArray in 2 classes (no functional change)
      Zarr V3: update to current specification (breaks backward compatibility), but without codec/compression support for now
      Zarr: robustify detection of existing array/group on creation
      cpl_compressor.h: add missing inclusion guard
      Zarr: fix SRS DataAxisToSRSAxisMapping
      GDALDatasetFromArray: fix write/update support
      Zarr: allow update support in classic mode
      CPLBloscDecompressor(): fix logic error when providing an output buffer larger than needed
      Add CPLJSONObject::Clone()
      Python bindings: take into account Int64/UInt64 in gdal.Array.Write(array(...))
      Zarr V3: add support for endian, transpose, gzip and blosc codecs
      Zarr V3: implement group, array, attribute and dimension renaming
      Multidim rename: factor code related to changing m_osFullName and add a NotifyChildrenOfRenaming() virtual method
      Zarr rename: detect conflict between group and array within the same group
      docker/ubuntu-full/bh-gdal.sh: fix Docker buildx arm64 build [ci skip]
      docker/util.sh: optimize docker buildx --release --push mode [ci skip]
      JP2OpenJPEG: avoid hard crash in multi-threaded writing mode when opj_write_tile() fails (fixes #7713)
      MITAB: fix reading CRS with LCC_2SP and non-metre unit (fixes #7715)
      [Refactor] GTiff: split geotiff.cpp content per class ...
      Internal libjson: use locale insensitive CPLStrtod() to parse floating point numbers (fixes qgis/qgis#52731)
      Add testing that internal libjson is using locale insensitive functions
      Multidim GDALGroup::CopyFrom(): modify logic to copy first indexing variables. Fixes issue with gdalmdimtranslate from Zarr to netCDF
      netCDF multidim: fix issues with data vs definition mode
      Doc: option GDAL_USE_QB3 is actually called GDAL_USE_LIBQB3 (fixes #7727)
      ISG: relax tolerence check to accept GEOIDEAR16_20160419.isg
      Python bindings: make gdal.Group.GetGroupNames() and GetMDArrayNames() return an empty list instead of None
      Multidim API: add DeleteGroup(), DeleteMDArray(), DeleteAttribute() methods in C/C++/SWIG API
      MEM multidim: implement DeleteGroup(), DeleteMDArray(), DeleteAttribute()
      netCDF multidim: implement DeleteAttribute()
      Zarr multidim: implement DeleteGroup(), DeleteMDArray(), DeleteAttribute()
      COG: only update mode if the IGNORE_COG_LAYOUT_BREAK=YES open option is specified (fixes #7735)
      netcdf.py: add missing require_driver('CSV')
      Doc: advertize 3.7.0
      docker/README.md: advertize 3.7.0 [ci skip]
      netCDF: add new member variables to make it easier for follow-up change (no functional change)
      netCDF: on reading, set NETCDF_DIM_xxx band metadata items in on-demand way (helps with network accesses)
      netCDF: do not set NETCDF_DIM_xxxx_VALUES dataset metadata items for variables of unlimited dimensions on network access for performance reasons
      Update doc/source/drivers/raster/cog.rst
      isg.rst: fix broken link (fixes #7738)
      Warp (average,mode,min,max,med,Q1,Q3): fix issue on edge of target valid area when oversampling (fixes #7733)
      minified_zutil.h: fix build error on Gentoo and derivatives (fixes #7739)
      Warp average resampling: using Weighted incremental algorithm mean for numeric stability
      CI: linux_build.yml: set travis_branch: ubuntu_1804
      Zarr V3: add support for fill_value for complex data types
      Zarr: implement GDALDriver::Rename(), Delete() and CopyFiles()
      /vsimem/: make it safe to use in multi-threaded scenarios
      Add perftests/gtiff_multi_ds_parallel_write.py to measure TIFF write performance
      [Perf improvement] GTiff: avoid using block cache when writing whole blocks
      Doc: avoid incorrect display of "--" as "&#8212;" (fixes #7752)
      Revert "doc_build.yml: pin sphinx==6.0.1 to workround https://github.com/sphinx-doc/sphinx/issues/11163 (fixes #7251)"
      gdallocationinfo: set exit code to 1 as soon as one coordinate is off the file (fixes #7759)
      gdal_rasterize: issue explicit error message when specifying invalid layer name, and catch absence of bounds (refs #7763)
      OGRProjCT::Transform(): do not emit generic error message if a specific one has already been emitted
      Add OGRCoordinateTransformationOptions::SetOnlyBest() / OCTCoordinateTransformationOptionsSetOnlyBest()
      autotest/osr: make it work with latest PROJ master
      Add OGR_G_IsClockwise() and map it to SWIG
      Parquet: add a way to write custom geoparquet metadata for unit testing purposes
      CSV: do not allow CREATE_CSVT=YES with /vsistdout/ (fixes #7699), and make it possible to use GEOMETRY_NAME with /vsistdout/ (fixes #7700)
      Revert "Conda: add libarchive.patch"
      Addresses various Coverity Scan warnings about performance & bad use of iterators
      CI: install jsonschema for build-windows-conda
      PDFDataset::ExploreTree(): fix detection of loops
      WCS: replace most uses of CPLString with std::string; addresses various Coverity Scan warnings about performance & bad use of iterators
      scripts/clang-format.sh: skip pcidsk/sdk and third_party
      Addresses various Coverity Scan warnings about performance & bad use of iterators
      Add validate_geoparquet.py sample Python script
      Warper: auto-enable OPTIMIZE_SIZE warping option when reasonable (fixes #7761)
      SHPRestoreSHX(): add extra sanity checks
      CPLParseXML(): do not call CPLErrorReset()
      GDALIdentifyDriverEx() and GDALDriver::QuietDelete(): do not call CPLErrorReset()
      Geoloc transformer: warn if the input dataset is larger in width or height compared to the geoloc array (fixes #7751)
      Python bindings: detect invalid use of ReleaseResultSet() (fixes #7782)
      Doc: fix case of SQLite3_INCLUDE_DIR/SQLite3_LIBRARY in example (fixes #7785)
      netCDF multidim: deal with _FillValue attribute of different type as variable (e.g. for NASA GEDI L2B products)
      HDF5 multidim: deal with _FillValue attribute of different type as variable (e.g. for NASA GEDI L2B products)
      OpenFileGDB: allows to modify a record with a GlobalID field without regenerating it
      OpenFileGDB: reduce debug traces on raster datasets
      OpenFileGDB raster: do not emit error if SRS is unknown (refs #7794)
      OpenFileGDB raster: correctly deal with rasters whose block_origin_x/y != (eminx, emaxy) (fixes #7794)
      RequiresUnixPathSeparator(): takes into account /vsihdfs/ and /vsiwebhdfs/ (refs #7801)
      Shape driver: in creation, uses w+b file opening mode instead of wb followed by r+b, to support network file systems having sequential write only and when using CPL_VSIL_USE_TEMP_FILE_FOR_RANDOM_WRITE=YES (fixes #7801)
      Fix building with -DDEBUG_CONFIG_OPTIONS (fixes #7789)
      Python bindings: do not pass deprecated -py3 SWIG switch for SWIG >= 4.1
      CMake: emit better error message when a raster driver cannot be enabled because of OGR_BUILD_OPTIONAL_DRIVERS=OFF
      Doc: CSharp: add a paragraph about issues related to signing of build artifacts (fixes #7804)
      CI: windows_build.yml: disable downloading of libdeflate.zip which now fails quasi systematically for unknown reason
      Internal libtiff: resync with upstream
      MySQL: add support for inserting new SRS in MySQL >= 8 INFORMATION_SCHEMA.ST_SPATIAL_REFERENCE_SYSTEMS table (refs #7781)
      MySQL: fix compliance issues with test_ogrsf
      netCDF: parse coordinates attribute from Sentinel-3 Synergy product
      Move OGRWKBGetBoundingBox() to ogr_wkb.h/cpp so it can be reused by other drivers
      OGR TileDB: fully apply spatial filter when using ArrowArray interface
      gdalmdiminfo: output details of indexing variables that can be accessed only from the array (typically for TileDB dimension labels)
      .github/workflows/ubuntu_20.04/Dockerfile.ci: update to TileDB 2.15.3
      docker/ubuntu-full/Dockerfile: update to TileDB 2.15.3
      TileDB: add read/write multidimensional support
      GRIB: allow opening files with invalid Earth of shape (fixes #7811)
      Avoid hanging on test_wms_19
      GDALDataset::Open(): take into account open options for OF_SHARED mode (fixes #7824)
      GeoTIFF SRS writer: make sure to write EPSG codes only in VerticalDatumGeoKey and VerticalUnitsGeoKey, and write VerticalCSTypeGeoKey = KvUserDefined, VerticalDatumGeoKey = KvUserDefined and VerticalCitationGeoKey=CRS name when the vertical CRS code is unknown (refs #7833)
      GeoTIFF SRS reader: try to recover the vertical datum from the name of the vertical CRS if we only know it (refs #7833)
      gdalsrsinfo: when -e flag is passed, report properly non EPSG authorities (refs #7833)
      Fix gcc 13.1.1 -Werror=array-bounds false positive
      Python bindings: GetArrowStreamAsNumPy(): fix wrong retrieval of content when ArrowArray::offset != 0 on a field of primitive type (integer, float)
      OGRArrowLayer::CreateWKTArrayFromWKBArray(): fix when ArrowArray::offset != 0 (master only)
      GPKG: sanitize type use of GPkgFieldToOGR()
      GPKG: ArrowArray interface: make it tolerant to Spatialite geometries
      GPKG: fix handling of geometry column from a view, ...
      /vsiadls/: make it take into account Azure SAS token
      Move parts of OGRLayer dealing with Arrow C interface in a dedicated ogrlayerarrow.cpp file
      Parquet/Arrow: implement faster spatial filtering with ArrowArray interface
      GetArrowStreamAsNumPy(): add a few sanity checks
      GetArrowStreamAsNumPy(): remove likely erroneous offseting of data buffer for array of type 'list of strings'
      GPKG: define a 'gdal_spatialite_computed_geom_column' extension when a view has its geometry column being the result of Spatialite SQL function
      CMake: only try to detect HDF5 CXX component if KEA is detected
      TileDB: FillPrimitiveListArray(): fix data corruption with spatial filter (Coverity CID 1512587, 1512576)
      gdal_rasterize: fix logic error of fix of #7663 (CID 1512568)
      CMake: capture dependency of MBTiles driver to MVT
      GDALMDArrayMask: take into account attributes at construction time
      GDALMDArray::GetMask(): add a UNMASK_FLAGS option
      DGN: CreateFeature(): fix crash on empty geometries (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=56771)
      RawRasterBand::IRasterIO(): avoid harmless unsigned integer overflow (https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=57371)
      ERS: avoid integer overflow (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=57472)
      DIPEx: fix memleak in error code path (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=57478)
      netCDF vector: fix crash on invalid layer (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=58469)
      PAM .aux.xml: read geotransform from Esri GeodataXform.CoeffX/CoeffY elements (fixes qgis/qgis#53125)
      GPKG: implement GeoPackage 1.4 RTree triggers, and add a VERSION=1.4 dsco (fixes #7823)
      Doc: gpkg.rst: mention VERSION=1.4 (refs #7823)
      gdal_translate: emit warning when -a_scale/-a_offset + -unscale is specified (fixes #7863)
      Update rfc4_geolocate.rst: update status
      GDALWarpResolveWorkingDataType(): take into account both source and target dataset
      /vsiaz/: fix truncated Authorization header with very large SAS tokens
      CI: try to avoid libjpeg-turbo 2.0 from non-conda-forge channel to be installed
      [Lint] nearblack: isolate current algorithm in a dedicated function
      [Lint] nearblack: better C++ification
      nearblack: add "-alg floodfill" to select a flood fill algorithm
      nearblack: make floodfill call twopasses when number of non-black pixels > 0
      Parquet: fix crash when calling SetIgnoredFields() after SetAttributeFilter() (fixes qgis/QGIS#53301)
      TileDB multidim: create TileDB attribute with the GDAL MDArray name (instead of 'TDB_VALUES')
      OpenFileGDB: add support for FileGDB v9 raster
      CI: fedora:rawhide: workarounds bug in Docker image
      OGRArrowLayer::CreateWKTArrayFromWKBArray(): avoid minimal 2 GB allocation... (master only fix)
      Doc: multidimensional_api_tut.rst: improve links
      MVT generation: improve dealing with polygon inner rings (fixes #7890)
      FlatGeobuf: fix build error when new Abseil headers are present (fixes #7894)
      ZarrV3: fix crash on invalid shape/chunk_shape values (master only) (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=59607)
      gdal_fuzzer: avoid false positive warning about div by zero (CID 1512809)
      CPLStrtod(): avoid false positive warning about untrusted loop bound (CID 1512808)
      MySQL: fix unused value warning (CID 1512807)
      MAP: fix memleak in error code path (CID 1512806)
      GDALDriver::DefaultRename(): avoid warning about unused return value (CID 1512805)
      VSIMemHandle::Write(): disable coverity false positive (CID 1512585)
      feat2kml(): use std::move() (CID 1509476)
      Zarr: fix warning about useless copy (CID 1509443)
      CI: fix build-mac
      Fix typos
      Fix build error with MSYS64 UCRT64 with gcc 13 (fixes #7909)
      gdalwarp: in -tr mode (without -ts / -te), detect blank edge lines/columns before warping and remove them (fixes #7905)
      tiff_ovr.py: add expected checksum for GISInternals build
      /vsiaz/: add options to pass object_id/client_id/msi_res_id in IMDS authentication requests
      Internal libtiff: resync with v4.5.1rc1
      gdal_polygonize: add a -overwrite switch (fixes #7913)
      ESRIC: directly open a .tpkx file
      GTiff multi-threaded reader: catch errors emitted in worker threads and re-emit them in main thread
      GTiff multi-threaded reader: avoid error when reading PlanarConfiguration=Separate and ExtraSamples > 0 (fixes #7921)
      Internal libtiff: resync with v4.5.1rc3
      CSV: change to use separator with the most occurences,  (#7831)
      TileDB multidim: fix creating an array with a dimension of same name as the array
      GML: fix 3.7.0 regression when reading files with several layers, whose features have gml:boundedBy elements and the geometry element name is different between the different layers (fixes #7925)
      OpenFileGDB write: fix memory leak in error code path (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=57365)
      ossfuzz builds: use internal libpng
      SAFE: fix non-contiguous number in subdataset names (fixes #7939)
      ARG: mark it deprecated, removal planned for GDAL 3.9 (refs #7920)
      MVT generation: fix wrong winding order for polygons after MakeValid()
      Selafin: remove problematic trace in DEBUG_VERBOSE mode
      Python bindings: works around issue with SWIG 4.1 related to module unloading
      GML: add a USE_BBOX=YES open option to allow using gml:boundedBy as feature geometry
      gml.rst: document USE_BBOX
      VRT: fix crash in DEBUG_VERBOSE mode (fixes #7958)
      CI/Docker: build libjxl with -DJPEGXL_ENABLE_JPEGLI_LIBJPEG=OFF to avoid install a libjpeg.so
      Multidim API: add option to set actual_range in netCDF and Zarr when computing statistics
      gdal_rasterize_lib: fix error message
      gdal_rasterize_lib: other error messages fixes
      GTiff multi-threaded reader: fix crash/read errors when reading a PlanarConfiguration=Separate file band per band (fixes rasterio/rasterio#2847)
      fuzzers/build.sh: add back -lpng since it is needed by freetype
      Internal Shapelib: update list of symbols to rename to avoid conflicts with external shapelib (fixes microsoft/vcpkg#32070)
      MVT/MBTiles: take into account tileStats metadata item to decide if a field of type 'number' might be Integer or Integer64
      CPLJSon: add setters for uint64_t
      Add PMTiles read-only vector driver
      VSIUnixStdioHandle / VSIWin32Handle: make Close() be callable multiple times to be friendly with VSIVirtualHandleUniquePtr
      core and ogr2ogr: add logic so that ogr2ogr can try a driver specific implementation of GDALVectorTranslate()
      MVT writer: clamp generated tile x, y coordinates to [0,(1<<z)-1]
      PMTiles: add a MBTiles -> PMTiles converter mode through ogr2ogr
      PMTiles: implement regular Create() mode, using MBTiles as an intermediate
      mvtutils.h: change description of COMPRESS option to use GZip
      GPKG: avoid Coverity Scan warning about nullptr deref (CID 1513124)
      gdalmultidim: fix Coverity Scan warning about nullptr deref (CID 1513122) (master only)
      vsis3.py: fix to make tests pass when port = 8081 (fixes #7952)
      CMake: add a EXPAT_USE_STATIC_LIBS hint
      CMake: add a CURL_USE_STATIC_LIBS hint
      Doc: add hint for OpenSSL static linking (fixes #7955)
      GeoTIFF SRS reader: try to retrieve the EPSG code of a CompoundCRS if the one of its horizontal and vertical part is known (fixes #7982)
      typo fixes [ci skip]
      FileGDB / OGRCreateFromShapeBin(): accept empty polygon (refs #7986)
      OGRGeometryFactory::createGeometry(): take into account Z/M flags
      OpenFileGDB: correctly read POINT EMPTY (fixes #7986)
      Fix build against latest libjxl master
      Add gdal_footprint utility
      OGCAPI: make sure OGR_ENABLE_DRIVER_GML is set when the driver is built
      OGCAPI: reduce the scope of code #ifdef'ed by OGR_ENABLE_DRIVER_GML
      OGCAPI: make it work when the media type of links (expected to be application/json) is missing, using Accept content negotiation (fixes #7970)
      OGCAPI: vector tiles: avoid potential infinite time to establish layer definition
      PAM rasterband: on .aux.xml reading do not systematically set (offset,scale) to (0,1)
      JPEG: allow QUALITY down to 1 (refs #7996) and redirect JPEG 'output message' to GDAL debug messages
      gdal_calc.py: make --hideNoData imply --NoDataValue=none as documented (fixes #8009)
      Internal libtiff: resync with upstream
      ogrinfo: speed-up string concatenation
      GPKG: speed-up HasMetadataTables()() on dataset with many layers
      GPKG: speed-up unique constraint discovery on dataset with many layers
      Changes to make ogr_p.h includable with CPL_SUPRESS_CPLUSPLUS (from SWIG bindings)
      test_ogrinfo_lib.py: test reading field domains as JSON output
      SWIG bindings: add ogr.CreateRangeFieldDomainDateTime() and Domain.GetMinAsString()/GetMaxAsString()
      ogrinfo: add support for DateTime field domains
      OpenFileGDB: add support for DateTime field domains
      SQL SQLite: fix error on field of type String with GetWidth() > 0 and a field domain
      Remove unused cmake/template/Makefile.PL.in
      gdal.pc generation: use CMAKE_INSTALL_INCLUDEDIR/CMAKE_INSTALL_LIBDIR for includedir/libdir (refs #8012)
      gdal-config: add a --plugindir switch (fixes #8012)
      gdalwarp: make -cutline to work again with PostGIS datasources (fixes 3.7.0 regression, fixes #8023)
      GDALBufferHasOnlyNoData() / GTiff SPARSE_OK=YES: recognize negative floating point 0 as 0 (fixes #8025)
      Internal libtiff: WebP decoder: fix error when reading a 3-band blob in a RGBA image
      XLSX: add FIELD_TYPES and HEADERS open options (fixes #8028)
      ODS: add FIELD_TYPES and HEADERS open options (fixes #8028)
      Python bindings: accept numpy.int64/float64 arguments for xoff, yoff, win_xsize, win_ysize, buf_xsize, buf_ysize arguments of ReadAsArray() (fixes #8026)
      GTiff creation: do not emit 'WEBP_LEVEL is specified, but WEBP_LOSSLESS=YES' warning when only WEBP_LOSSLESS=YES is specified
      Arrow/Parquet: do not hang on empty RecordBatch (fixes #8042)
      GTiff: fix ff769d91f0d906b7ff0ae9cf6c77d604a7e5feda
      /vsicurl/: avoid the same region to be downloaded at the same time from concurrent threads (fixes #8041)
      fuzzers/build.sh: try to fix build [ci skip]
      test_osr_set_proj_search_paths.cpp: override PROJ_DATA as well
      CI: macos_build: update dependencies
      CI: build-windows-msys2-mingw: workaround jsonschema 4.18 installation issue
      CI: macos: install lxml and jsonschema from conda
      SWIG: add gdal.SuggestedWarpOutput()
      CI fedora: workaround jsonschema 4.18 installation issue
      CI: add a coverage job
      Use coverallsapp/github-action@v2
      CI fedora: workaround jsonschema 4.18 installation issue (again)
      netcdf_cf.py: remove use of 'imp' module removed in python 3.12
      README.md: add coveralls badge [ci skip]
      typo fixes [ci skip]
      OpenFileGDB: make Open() to fail if requested to open in update mode and that files are in read-only (fixes qgis/QGIS#53715)
      gdaladdo: add options to partially refresh existing overviews
      CI: linux_build.yml: build and run tests as non-root
      Doc: testing.rst: add a paragraph about test coverage
      validate_geoparquet.py: make it use non-deprecated remote resource resolution with jsonschema >= 4.18
      autotest: avoid deprecation warning with jsonschema 4.18
      PMTiles: fix 2 Coverity scan warnings
      Python samples: remove gdal_zip.py now we have the sozip utility (fixes #8062)
      GeoPackage: deal with DateTime fields without milliseconds or seconds, as allowed by GeoPackage 1.4 (fixes #8037)
      GeoPackage: add a DATETIME_PRECISION layer creation option (fixes #8037)
      Add testing of OGRParseDateTimeYYYYMMDDTHHMMZ()
      Internal libtiff: WebP codec: turn exact mode when creating lossless files to avoid altering R,G,B values in areas where alpha=0 (fixes #8038)
      WFS: do not surround selected fields names in PROPERTYNAME with open and close parenthesis (fixes #8089)
      autotest: ogr_wfs.py: make it work with pytest --random-order
      Doc: advertize 3.7.1 release
      docker/README.md: advertize v3.7.1 [ci skip]
      Make gdal-config executable in build directory (refs #8029)
      Python bindings: make setup.py check that libgdal version >= python bindings version (fixes #8029)
      Add COPY_SRC_MDD=AUTO/YES/NO and SRC_MDD=domain_name creation options
      vsioss.py: fix letter inversion in test names
      autotest: skip tests that randomly fail on mac
      gdal2tiles: fix exception with dataset in EPSG:4326 with longitudes > 180 in WebMercator profile (fixes #8100)
      Ccache.cmake: fix warning
      ogr2ogr: support -nlt GEOMETRY -nlt CONVERT_TO_LINEAR (fixes #8101)
      vsis3.py: skip another randomly failing test on mac
      Java bindings: implement ogr.CreateCodedFieldDomain() and FieldDomain.GetEnumeration() (fixes #8085)
      WEBP: fix build against libwebp < 0.4.0 (fixes #8111)
      autotest: replace deprecated numpy.alltrue() (will be removed in numpy 2.0) with numpy.all()
      GTiff: fix reading .tif + .tif.aux.xml file with xml:ESRI SourceGCPs without TIFFTAG_RESOLUTIONUNIT (fixes #8083)
      GTiff: fix reading .tif + .tif.aux.xml file with xml:ESRI SourceGCPs without TIFFTAG_RESOLUTIONUNIT - remove useless code (fixes #8083)
      SWIG bindings: fix warning related to redefinition of CPLErr
      Python bindings: fix CoordinateTransform.TransformPoint(sequence of 3 or 4 values)
      Add driver for JSONFG (OGC Features and Geometries JSON)
      tiledbsparse.cpp: fix compiler warning with MSVC
      CI: avoid hang on Windows Conda testing related to https://github.com/conda-forge/libnetcdf-feedstock/issues/182
      Java bindings: change default installation directory of JNI shared library and control it with GDAL_JAVA_JNI_INSTALL_DIR
      TileMatrixSet::parse(): add support for OGC 2D Tile Matrix Set v2 (fixes #6882)
      OGCAPI: do not try to use the 'uri' member of a tilematrixset definition document, as it might not be resolvable, and doesn't bring much
      OGC API: resolve different issues with the raster tile API
      STACIT: correctly process asset 'href' starting with 'file://' (fixes #8135)
      GRIB: implement CCSDS Adaptive Entropy Coding decompression (template 5.42).
      Add a DCAP_FLUSHCACHE_CONSISTENT_STATE capability
      SWIG bindings: fix warning related to redefinition of CPLErr
      OGRGeoJSONReader::FirstPassReadLayer(): fix potential memleak (but likely impossible to occur in practice) (CID 1518087)
      JSONFG: fix wrong variable name in nullptr check (CID 1518086)
      GDALDriver::DefaultCopyMetadata(): fix memleak (master only) (CID 1518085)
      GTiff: fix memleak (master only) (CID 1518084)
      JSONFG: silence Coverity warning (CID 1518083)
      VRT: fix memleak (master only) (CID 1518082)
      GDALFootprintOptionsNew(): remove dead code (CID 1518081)
      Silence Coverity false positive (CID 1518080)
      JSONFG: hopefully avoid Coverity false positive about memleak (CID 1518079)
      Silence Coverity false positive (CID 1518078)
      gdalinfo -json output: emit a stac['proj:epsg'] = null object when emitting proj:wkt2 or proj:projjson (fixes #8137)
      STACIT: make it tolerant to missing proj:epsg if proj:wkt2 or proj:projjson are provided (fixes #8137)
      COG: fix memleak (master only) (CID 1518077)
      Silence Coverity false positive (CID 1518076)
      PMTiles: fix Coverity scan warning (CID 1517749)
      GeoJSON: modify to implement DCAP_FLUSHCACHE_CONSISTENT_STATE
      ogr2ogr: calls FlushCache() (fixes #8033)
      JSONFG: implement DCAP_FLUSHCACHE_CONSISTENT_STATE
      GPKG: implement DCAP_FLUSHCACHE_CONSISTENT_STATE
      Doc: sponsors.rst: remove sponsors which haven't renewed
      XLS: avoid compiler warning when building against freexl 2.0
      NITF: fix MIN/MAX_LONG/LAT when reading RPC00B
      CI Alpine: fix pip install
      CI Fedora: remove mongo-cxx-driver-devel. It has been removed per https://src.fedoraproject.org/rpms/mongo-cxx-driver/c/3cfdc2f6bee3fda0808a5eb91b76640074de176b?branch=rawhide
      Revert "CI: fedora:rawhide: workarounds bug in Docker image"
      CI: fedora:rawhide: use dnf5
      /vsicurl/ / /vsicurl_streaming/: recognize IGNORE_FILENAME_RESTRICTIONS=YES open option to skip any extension based filtering (refs #8162)
      Zarr: ignore filename restrictions when reading tile data files (fixes #8162)
      /vsiaz/: fix cached URL names when listing /vsiaz/
      Python bindings: handle 'tsn:' (DateTime in nanoseconds) data type for GetArrowStreamAsNumPy()
      Arrow/Parquet: avoid data corruption through GetNextArrowArray() API when using spatial filters (master only)
      ArrowArray interface: make PostFilterArrowArray() deal with attribute filter, and enable that in Parquet&Arrow drivers
      Parquet: fix ExecuteSQL() MIN/MAX optimization on a UINT32 field on a Parquet 2 file
      FindSPATIALITE.cmake: quote variable
      CMakeLists.txt: update maximum range to 3.27
      Add delete_untagged_containers.yml [ci skip]
      CI: linux_build.yml: sanitize CACHE_CONTAINER_TAG in the same way as CONTAINER_TAG, to be able to actually use an up-to-date image
      gdalwarp_lib.cpp: C++ify CropToCutline() (no functional change)
      gdalwarp_lib.cpp: C++ify TransformCutlineToSource() (no functional change)
      gdalwarp: fix cutline processing when warping with a cutline geometry in UTM 1/60 crossing the antimeridian, on a raster in long/lat SRS (fixes #8163)
      gdalinfo.py: use math.isnan() (fixes #8196)
      Doc: ogrinfo.rst: fix options fields and geom (fixes #8195)
      gdalinfo.py: fix wrong order of long,lat corner coordinates (fixes #8199)
      test_cpl.cpp: robustify test_cpl.CPLCopyTree
      Add VSIGetCanonicalFilename()
      Shapefile driver: use VSIGetCanonicalFilename() in GetFileList() (fixes #8164)
      linux_build.yml: try to fix issue with Fedora CI
      [Lint] CSV: replace GDAL_OVERRIDE with plain override
      [Lint] CSV: have OGRCSVLayer and OGRCSVEditableLayer inherit from a same base class
      CSV: implement GetFileList() and return .csvt if used (fixes #8165)
      Revert "linux_build.yml: try to fix issue with Fedora CI"
      Shapefile driver: make CreateLayer() + GetFileList() list the .prj file when it exists (fixes #8167)
      VRT: ignore <OverviewList> when external .vrt.ovr is present, as documented and intended
      CI: workaround weird caching issue with fedora_rawhide builds
      /vsis3_streaming/ and the like: implement ReadDir() by forwarding to non-streaming filesystem (fixes #8191)
      ZarrV2: fix duplicate array listing when both a 'foo' file and 'foo/' directory exist on the object storage (fixes #8192)
      More accurate / fixes for M_PI/180 or 180/M_PI constants (fixes #8178)
      CITATION.cff: update with contributors (#8201)
      openjpeg: fix build with MSVC2017 (master only)
      Python bindings: fix typo on slopeFormat parameter (fixes #8154)
      OGRParseDate(): restrict valid times to HH:MM:SS(.sss) with at least 2 figures (fixes #8150)
      Warper: do not modify bounds when doing geographic->geographic on a dataset with world extent but not in [-180,180] (fixes #8194)
      ogrinfo: return non-zero ret code if -sql failed (fixes #8215)
      Doc: removing Twitter, or X or whatever it will be named when I'll have commit this
      Adjust test for libjson-c 0.17
      PDF: update to support (and require) PDFium/5952
      Doc: gdalwarp: clarify that -t_srs might still be needed when using -ct (fixes #8242)
      Overview/RasterIO resampling: use Float64 as working data type for Float64 input data (fixes #8187)
      RMS resampling: avoid potential integer overflow with UInt16 values
      RasterIOResampled(): make mingw gcc happy
      GDALResampleChunk_Mode(): use template for the different working data types
      Fix ExecuteSQL(dialect='SQLITE', spatialFilter=...) on a Memory datasource
      MEM: allocate a single buffer for band-interleaved data
      HDF5: optimize code-paths for RasterIO() without resampling (depends on commit f9cc44abef)
      /vsiaz/: implement Azure Active Directoy Workload Identity authentication, typically for Azure Kubernetes
      NITF: add support for CSCSDB (Common Sensor Covariance Support Data) DES from GLAS/GFM SDEs
      nitf_spec.xml: corrections to CSEXRB TRE
      GDALChecksumImage(): fix 3.6.0 regression regarding integer overflow on images with more than 2 billion pixels (fixes #8254)
      Doc: import https://github.com/OSGeo/libgeotiff / geotiff/html/proj_list under gdal.org/ (fixes #8221)
      HDF5: more efficient metadata collection (no fonctional change)
      HDF5: deal with int64/uint64 attributes
      HDF5: remove trailing space in multi-valued metadata items, remove dataset name prefix in band level metadata, and address Planet's datacube band-specific metadata
      Parquet: add OGRParquetLayer::GetMinMaxForField() and use in ExecuteSQL() (no fonctional change)
      Parquet: optimize SELECT MIN(FID), MAX(FID)
      Parquet: restrict FID column detection to Int32/Int64 data types
      Arrow/Parquet: optimize attribute filter on FID column
      OGRArrowLayer::GetNextArrowArray(): make sure to invalidate potentially modified batches at end of iteration
      Parquet: use statistics to skip row groups that don't match attribute filter (fixes #8225)
      Regenerate autotest/ogr/data/arrow/test.feather
      cpl_json: add CPLJSONArray::AddNull() and CPLJSONObject constructor with primitive types
      Arrow/Parquet: support/reading nested list/map datatypes as JSON (fixes #8227)
      autotest: make tmp_vsimem fixture create the directory (similarly to pytest's tmp_path)
      Arrow/Parquet: make TestCapability(OLCFastGetExtent) call FastGetExtent
      Parquet: use statistics of bbox.minx/miny/max/maxy fields (as found in Ouverture Maps datasets) to implement fast GetExtent()
      OGRArrowLayer::GetNextRawFeature(): save some use of shared_ptr refcount
      Doc: Remove AWS from GDAL Sponsorship program (#8238)
      OGRArrowLayer::GetNextRawFeature(): make it use bbox.minx/miny/max/maxy for faster spatial filter testing
      Parquet: use statistics of bbox.minx/miny/max/maxy fields to skip row groups for faster spatial filter testing
      [code cleanup] ogrlayerarrow.cpp: use helper functions
      [code cleanup] ogrlayerarrow.cpp: rename pabyNull to pabyValidity
      Doc: document performance issues with JPEG2000 through network access (fixes #8275)
      PDF: prefix member variables of PDFDataset class with m_, and use inline initialization
      PDF: avoid CSA false positive
      PDF: use VSIVirtualHandleUniquePtr for m_fp
      PDF: use unique_ptr for m_apoOvrDS and m_apoOvrDSBackup
      pdf.py: add missing require_driver()
      PDF: implement overviews for Poppler backend by adjusting the DPI value (fixes #8233)
      PDF: improve performance of overviews
      Python bindings: add a outputGeotransform option to gdal.Translate()
      PDF: increase threshold to detect tile size and band count (fixes #8236, fixes #8240)
      PDF: avoid int overflow on compressed stream whose decompressed size > 2 GB
      PDF: limit decompression of compressed streams with Poppler backend
      PDF: avoid potential OOM crash in PDFium backend
      PDF: catch C++ exceptions from Poppler
      PDF: limit memory allocations on huge PDF name objects
      CPLvsnprintf(): deal with '%.*f' formatting
      Python bindings: make Feature.SetField(field_idx_or_name, binary_values); add feature.SetFieldBinary(field_idx_or_name, binary_values)
      autotest: replace use of SetFieldBinaryFromHexString() where possible
      gdalmdimtranslate: fix wrong output dimension size when using syntax like '-array name=XXX,view=[::factor_gt_1]'
      Zarr: add MULTIBAND=YES/NO, DIM_X and DIM_Y open options (fixes #8237)
      Zarr: change MULTIBAND open option to default to YES (fixes #8237)
      GDALMDArray::AsClassicDataset(): add a LOAD_EXTRA_DIM_METADATA_DELAY option, and expose it in Zarr driver
      Zarr: fix writing partial tiles
      ZarrArray::IWrite(): optimize inner loop
      Zarr: classic raster API: write multi-band datasets as Zarr 3D arrays (writing them as several 2D arrays as in GDAL 3.7 can be asked with the SINGLE_ARRAY=NO creation option)
      OGRCurve::isClockwise(): fix wrong result when lowest rightmost vertex is the first one (fixes #8296)
      Test OGRCurve::isClockwise()
      ogrinfo_output.schema.json: make schema reflect actual output of ogrinfo (fixes #8300)
      autotest: display loaded shared objects (if psutil installed)
      CI: skip test_driver_metadata on mingw64 since it now crashes for unknown reason
      VRT: add 'min' and 'max' pixel functions (fixes #8292)
      Docker: update dependencies, and bump Alpine to 3.18 [ci skip]
      Python bindings: throw exceptions (when enabled) on gdal_array.OpenArray()/OpenNumPyArray()/OpenMultiDimensionalNumPyArray()
      OGR MEM: add a FID layer creation option to specify the FID column name
      SQLite dialect: when the underlying layer has a FID column name, enable the user to use it as an alias of ROWID
      GPKG: remove duplicate call to CancelAsyncNextArrowArray() in DeleteFeature()
      OGRGeoPackageLayer: prefix all member variables with m_, and use inline initialization
      GPKG: implement SetNextByIndex() on table layers (by appending 'OFFSET -1 LIMIT index')
      osgeo_utils: allign base.get_extension() and util.DoesDriverHandleExtension() on C++ versions, and add tests (fixes #8277)
      TileDB ArrowArray: make sure ResetReading() does not invalidate array
      OGRLayer::GetArrowStream(): do not issue ResetReading() at beginning of iteration, but at end instead, so SetNextByIndex() can be honoured
      GPKG: make GetArrowStream() honour SetNextByIndex()
      Doc: resync OGR_L_SetAttributeFilter() with OGRLayer::SetAttributeFilter() (fixes #8308)
      Python: robustify typemaps, use more fragments
      OGRGeometry classes: add addGeometry()/addRing()/addCurve() methods accepting a std::unique_ptr
      gml2ogrgeometry: use std::unique_ptr
      autotest: ogr_gml_geom.py: enhance tests for gml:Surface
      gml2ogrgeometry: reject empty <gml:Triangle/>
      Simplify GML2FaceExtRing()
      Document and make --help and --help-general available in all utilities (fixes #3816)
      Address warnings of cppcheck master
      ISG: make it able to read headers > 1024 bytes
      ISG: take into ISG format 2.0
      Internal libtiff: resync
      Doc: better document --formats (fixes #8315)
      resync_from_upstream.sh: fix shellcheck issue
      Build: fix building test_ofgdb_write (fixes #8321)
      TileDBRasterBand::IRasterIO(): use correct band indexing
      TileDB: read/write Int8, Int64 and UInt64
      GPKG: add a CRS_WKT_EXTENSION=YES/NO dataset creation option to force addition of definition_12_063 column
      GDALGeoPackageRasterBand::GetMetadata(): fix use after free
      GDALGeoPackageRasterBand: fix missing GRID_CELL_ENCODING metadata item when there is other metadata
      GPKG: remove .aux.xml file in Delete()
      GPKG: add a METADATA_TABLES creation option to control creation of system metadata tables
      /vsis3/ and /vsioss/: less error prone management of redirects / region discovery
      /vsiaz/: do not append trailing slash for directories deduced from .gdal_marker_for_dir special file
      typo fixes [ci skip]
      /vsiaz/: implement server-side copy from /vsis3/, /vsigs/, /vsiadls/, /vsicurl/ to /vsiaz
      VSISync() network to network: implement SyncStrategy::TIMESTAMP
      gdal2tiles: raise explicit exception if bad value for --s_srs (fixes #8331)
      frmts/mrf/CMakeLists.txt: ignore HAVE_JPEGTURBO_DUAL_MODE_8_12 if GDAL_USE_JPEG is OFF (tune #8336)
      Python bindings: improve performance of CSLFromPySequence() on large sequences (like > 100,000 strings)
      GDALGeneralCmdLineProcessor(): improve perf with lots of strings in --optfile
      MEM driver: fix memleak in Create(nBands=0) (master only)
      VSIFilesystemHandler: remove 'virtual' qualifier from ReadDir(), which now forwards to ReadDirEx(); modify all implementations to implement ReadDirEx()
      Add /vsicached? virtual file system, as another way of doing the same as VSICreateCachedFile() / VSI_CACHE=YES
      bench_ogr_batch: add a -v flag
      Arrow/Parquet: fix crash on ArrowArray interface when there is a fid column
      OGR2SQLITE_FeatureFromArgs(): fix memleak (master only)
      GPKG SQL layer GetNextArrowArray(): fix wrong array size when spatial filtering occurs
      OGRWKBGetBoundingBox(): properly initialize envelope
      Add OGRWKBIsWithinPessimistic()
      Add OGRLayer::FilterWKBGeometry()
      JPEG: only take into account first Exif directory found
      GPKG table layer GetNextArrowArray(): implement full spatial filtering (not just bbox intersection)
      Arrow/Parquet GetNextArrowArray(): implement full spatial filtering (not just bbox intersection) (fixes #8347)
      TileDB: GetNextArrowArray(): implement full spatial filtering (not just bbox intersection)
      FlatGeoBuf: GetNextArrowArray(): implement full spatial filtering (not just bbox intersection
      OpenFileGDB: fix opening of .gdb directories whose last component starts with 'a' and is 18 character long... (fixes #8357)
      Add support for PoDoFo >= 0.10.0 (fixes #8356)
      alpine/Dockerfile.ci: add libpodofo-dev (0.10.1 at time of writing)
      autotest/gcore/vrt_read.py: fix random failure
      AAIGRID output: remove leading space on each line (fixes #8344)
      Doc: adjust & resync content of doc/source/api/python_bindings.rst and swig/python/README.rst
      gdal_translate -scale: change dstMax value from 255.999 to 255
      VRTComplexSource (scaling typically): make sure to take into account constraints from VRTRasterBand data type in RasterIO() (rather than just taking into account output buffer data type)
      MITAB: avoid memory leak in edge case (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=61127)
      COG: add a STATISTICS=AUTO/YES/NO creation option and forward gdal_translate -stats to it (fixes #8169)
      Doc: advertize 3.7.2
      docker/README.md: update with 3.7.2 [ci skip]
      vrt_read.py: fix breakage due to another concurrent change, and turn on exceptions
      PDF: unique_ptr'ification of GDALPDFArray implementations
      PDF: CreateCopy(): add #ifdef magick to produce a PDF to reproduce #8372
      PDF: pdfreadvectors.cpp: improve debugging
      PDF: pdfreadvectors.cpp: (minimal) take into account BMC operator to correctly handle BMC/EMC pairs w.r.t BDC/EMC ones (fixes #8372)
      PDF read vector unstructured: take into account OCMD constructs as found in recent USGS GeoPDFs (fixes #8372)
      PDF: ignore non-relevant StructTreeRoot in most recent USGS GeoPDFs (fixes #8372)
      Internal giflib: fix memleak on animations (fixes #8380)
      Internal giflib: fix memleak on truncate files (fixes #8383)
      scripts/clang-format.sh: skip giflib
      gdal_translate -ovr: properly rescale RPC (fixes #8386)
      GTiff and COG: add a MAX_Z_ERROR_OVERVIEW creation option to separately control the error threshold of overviews w.r.t the one of the full resolution image
      .github/workflows/fedora_rawhide/Dockerfile.ci: revert to dnf
      Add support for TileDB 2.17
      OSR SetFromUserInput(): add support for urn:ogc:def:coordinateMetadata (if PROJ >= 9.4)
      OSR SetFromUserInput(): recognize 'EPSG:XXXX@YYYY' (PROJ >= 9.4)
      Add OSRHasPointMotionOperation() (PROJ >= 9.4)
      OGR_CT: handle point motion operations (PROJ >= 9.4)
      gdalwarp: tune usage to allow both -s_coord_epoch and -t_coord_epoch
      ogr2ogr: tune usage to allow both -s_coord_epoch and -t_coord_epoch
      GDALCreateGenImgProjTransformer2(): correctly deal with same CRS but SRC_COORDINATE_EPOCH != DST_COORDINATE_EPOCH
      gdaltransform: add -s_coord_epoch and -t_coord_epoch
      OGR_CT: display epochs in debug messages
      netCDF: better doc and error message when reading from /vsi is not possible (fixes #8398, #8378)
      GDALCreateGenImgProjTransformer2(): deal with discontinuity of GCPs around antimeridian (fixes #8371)
      docker/alpine-normal/Dockerfile: fix build of freexl 2.0 on arm64 architecture [ci skip]
      docker/ubuntu-full/Dockerfile: workaround issue with GDAL not finding Arrow 13.0 on arm64 [ci skip]
      netCDF: renormalize CRS and geotransform to metric, for EUMETSAT OSI SAF products with a proj4_string, units=km and geospatial_bounds_crs
      CSV: avoid extra comma at end of header line with GEOMETRY=AS_XYZ and a single attribute (fixes #8410)
      SQLite: ignore 'SRID=' layer creation option (fixes https://github.com/qgis/QGIS/issues/54560)
      test_driver_metadata.py: skip on build-windows-conda due to crashes
      /vsi network file systems: make Open() method common for all FS (no functional change)
      /vsi network file system: support r+ access under CPL_VSIL_USE_TEMP_FILE_FOR_RANDOM_WRITE=YES by copying initial content of remove file locally
      Parquet: emit GeoParquet 1.0.0 version number now it has been released
      OGRGF_DetectArc(): harden tolerance when detecting consecutive arcs to avoid incorrect arc center computation (refs #8332)
      ogr2ogr: better deal when reprojecting curve geometries to a non-curve geometry type (fixes #8332)
      netCDF multidim: add write support for Int8 data type (fixes #8421)
      GeoJSON writer: when writing with limited coordinate precision, run MakeValid() to avoid creating invalid geometries
      GTiff: SRS writer: write Projected 3D built as a pseudo-compound in .aux.xml
      netCDF: amend previous commit to make it less specific to EUMETSAT OSI SAF and add a PRESERVE_AXIS_UNIT_IN_CRS=YES/NO open option
      netCDF (traditional): add support for EMIT band data ordering and geolocation array (not using glt_x/glt_y)
      GDALMDArrayResampled::Create(): fix assertion if providing a input non-empty dimension for the non-X/Y dimensions
      netCDF multidimensional: add support for EMIT band data ordering and geolocation array (not using glt_x/glt_y)
      netCDF multidimensional: use glt_x/glt_y for EMIT data
      gdalmdimtranslate: add support for resample=yes array spec option
      netCDFVariable::IReadWrite(): emit error message from NCGetPutVaraFunc()
      gdalwarp: fix error when using -ct and -cutline (master only), and actually use the -ct when possible if sourceCRS != targetCRS and targetCRS == cutlineCRS
      Add RFC95 text: Use standard C/C++ integer types
      RFC95: updates with GDAL 4.0, removing questions
      ogrinfo: emit distinct error message if the file doesn't exist or can't be opened (fixes #8432)
      OGR SQL: allow MIN() and MAX() on string fields
      OpenFileGDB raster: add a RASTER_DATASE…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

8 participants