Commit Graph

55 Commits

Author SHA1 Message Date
Dennis Heimbigner
69e84fe9f1 Fix byterange handling of some URLS
re: Issue

The byterange handling of the following URLS fails.

### Problem 1: "https://crudata.uea.ac.uk/cru/data/temperature/HadCRUT.4.6.0.0.median.nc#mode=bytes"
It turns out that byterange in hdf5 has two possible targets: S3 and not-S3 (e.g. a thredds server or the crudata URL above). Each uses a different HDF5 Virtual File Driver (VFD).
I incorrectly set up the byterange code in libhdf5 so that it would choose one or the other of the two VFD's for any netcdf-c library build. The fix is to allow it to choose either one at run-time.

### Problem 2: "https://noaa-goes16.s3.amazonaws.com/ABI-L1b-RadF/2022/001/18/OR_ABI-L1b-RadF-M6C01_G16_s20220011800205_e20220011809513_c20220011809562.nc#mode=bytes,s3"
When given what appears to be an S3-related URL, the netcdf-c library code converts it into a canonical, so-called "path" format. In casing out the possible input URL formats, I missed the case where the host contains the bucket ("noaa-goes16"), but not the region. So the fix was to check for this case.

## Misc. Related Changes
1. Since S3 is used in more than just NCZarr, I changed the automake/cmake options to replace "--enable-nczarr-s3" with "--enable-s3", but keeping the former option as a synonym for the latter. This also entailed cleaning up libnetcdf.settings WRT S3 support
2. Added the above URLS as additional test cases

## Misc. Un-Related Changes
1. CURLOPT_PUT is deprecated in favor to CURLOPT_UPLOAD
2. Fix some minor warnings

## Open Problems
* Under Ubuntu, either libcrypto or aws-sdk-cpp has a memory leak.
2023-03-02 19:51:02 -07:00
Edward Hartnett
f32890e1be more testing of quantize 2022-07-08 14:58:52 -06:00
Edward Hartnett
a621ed4224 more testing of quantize 2022-07-08 13:33:23 -06:00
Edward Hartnett
31dfc1ce15 more testing of quantize 2022-07-08 13:29:56 -06:00
Edward Hartnett
8142189892 more testing of quantize 2022-07-08 13:27:18 -06:00
Edward Hartnett
99dbcad141 more testing of quantize 2022-07-08 13:21:51 -06:00
Edward Hartnett
cd1aa7b882 more testing of quantize 2022-07-08 13:15:23 -06:00
Edward Hartnett
d23d90e148 more testing of quantize 2022-07-08 12:48:46 -06:00
Edward Hartnett
82caba1f12 more quantize testing 2022-07-08 11:44:23 -06:00
Edward Hartnett
1a13b9ed09 more quantize testing 2022-07-08 10:35:38 -06:00
Edward Hartnett
6645cce1c9 more quantize testing 2022-07-08 09:44:38 -06:00
Edward Hartnett
2bfde9a5eb more quantize testing 2022-07-08 08:55:48 -06:00
Edward Hartnett
536cdd28f9 fix and test quantize mode for NC_CLASSIC_MODEL 2022-07-02 06:14:32 -06:00
Edward Hartnett
8d8fdfd12c fixed warnings 2022-04-26 05:31:07 -06:00
Ward Fisher
2ccdf14697 Merge branch 'csz_bitround' of https://github.com/nco/netcdf-c into gh2232.wif 2022-04-01 10:43:34 -06:00
Dennis Heimbigner
3ffe7be446 Enhance/Fix filter support
re: Discussion https://github.com/Unidata/netcdf-c/discussions/2214

The primary change is to support so-called "standard filters".
A standard filter is one that is defined by the following
netcdf-c API:
````
int nc_def_var_XXX(int ncid, int varid, size_t nparams, unsigned* params);
int nc_inq_var_XXXX(int ncid, int varid, int* usefilterp, unsigned* params);
````
So for example, zstandard would be a standard filter by defining
the functions *nc_def_var_zstandard* and *nc_inq_var_zstandard*.

In order to define these functions, we need a new dispatch function:
````
int nc_inq_filter_avail(int ncid, unsigned filterid);
````
This function, combined with the existing filter API can be used
to implement arbitrary standard filters using a simple code pattern.
Note that I would have preferred that this function return a list
of all available filters, but HDF5 does not support that functionality.

So this PR implements the dispatch function and implements
the following standard functions:
    + bzip2
    + zstandard
    + blosc
Specific test cases are also provided for HDF5 and NCZarr.
Over time, other specific standard filters will be defined.

## Primary Changes
* Add nc_inq_filter_avail() to netcdf-c API.
* Add standard filter implementations to test use of *nc_inq_filter_avail*.
* Bump the dispatch table version number and add to all the relevant
   dispatch tables (libsrc, libsrcp, etc).
* Create a program to invoke nc_inq_filter_avail so that it is accessible
  to shell scripts.
* Cleanup szip support to properly support szip
  when HDF5 is disabled. This involves detecting
  libsz separately from testing if HDF5 supports szip.
* Integrate shuffle and fletcher32 into the existing
  filter API. This means that, for example, nc_def_var_fletcher32
  is now a wrapper around nc_def_var_filter.
* Extend the Codec defaulting to allow multiple default shared libraries.

## Misc. Changes
* Modify configure.ac/CMakeLists.txt to look for the relevant
  libraries implementing standard filters.
* Modify libnetcdf.settings to list available standard filters
  (including deflate and szip).
* Add CMake test modules to locate libbz2 and libzstd.
* Cleanup the HDF5 memory manager function use in the plugins.
* remove unused file include//ncfilter.h
* remove tests for the HDF5 memory operations e.g. H5allocate_memory.
* Add flag to ncdump to force use of _Filter instead of _Deflate
  or _Shuffle or _Fletcher32. Used for testing.
2022-03-14 12:39:37 -06:00
Charlie Zender
b4969df1ef Set bit_xpl_nbr_sgn_dbl=52 not 53. No longer add additional bit to prc_bnr_xpl_rqr for BitGroom NC_DOUBLE. Bugfix maintains original BG behavior, fixes corner case. 2022-02-19 14:48:08 -08:00
Charlie Zender
a74d3573e5 First draft of BitRound implementation 2022-02-18 11:00:37 -08:00
Dennis Heimbigner
89cc20a20d Rename GranularBitGroom to GranularBitRound
As per Charlie Zender's request (https://github.com/Unidata/netcdf-c/pull/2197#issuecomment-1022762863), the GranularBitGroom name is changed to GranularBitRound
with attendant code changes.
2022-01-28 13:04:16 -07:00
Dennis Heimbigner
446348ed18 Add complete bitgroom support to NCZarr
re: PR https://github.com/Unidata/netcdf-c/pull/2088
re: PR https://github.com/Unidata/netcdf-c/pull/2130
replaces: https://github.com/Unidata/netcdf-c/pull/2140

Changes:
* Add NCZarr-specific quantize functions to the dispatch table.
* Copy (modified) quantize code from libhdf5 to NCZarr
* Add quantize invocation to zvar.c
* Add support for _QuantizeBitgroomNumberOfSignificantDigits
and _QuantizeGranularBitgroomNumberOfSignificantDigits to ncgen.
* Modify nc_test4/tst_quantize.c to allow it to be used both for hdf5
  and for nczarr.
* Make dap4 properly handle quantize functions in dispatch table.
* Add quantize attribute support to ncgen.

Other changes:
* Caught and fixed some S3 problems
* Fixed some nczarr fillvalue problems.
* Fixed some nczarr cache problems.
* Cleanup some flaws in libdispatch/dinfermodel.c
* Allow byterange requests to S3 be readable by dinfermodel.c/check_file_type
* Remove the libnczarr ztracedispatch code (big change).
2022-01-24 15:22:24 -07:00
Ward Fisher
abcbd9e1d5
Merge pull request #2156 from edwardhartnett/ejh_t1
Now setting deflate_level of 0 is interpreted to mean no deflate.
2022-01-18 17:02:30 -07:00
Ward Fisher
3980d7616a
Merge pull request #2130 from nco/csz_gbg
Granular BitGroom feature for netcdf-c
2022-01-13 17:35:16 -07:00
Dennis Heimbigner
9380790ea8 Support MSYS2/Mingw platform
re:

The current netcdf-c release has some problems with the mingw platform
on windows. Mostly they are path issues.

Changes to support mingw+msys2:
-------------------------------
* Enable option of looking into the windows registry to find
  the mingw root path. In aid of proper path handling.
* Add mingw+msys as a specific platform in configure.ac and move testing
  of the platform to the front so it is available early.
* Handle mingw X libncpoco (dynamic loader) properly even though
  mingw does not yet support it.
* Handle mingw X plugins properly even though mingw does not yet support it.
* Alias pwd='pwd -W' to better handle paths in shell scripts.
* Plus a number of other minor compile irritations.
* Disallow the use of multiple nc_open's on the same file for windows
  (and mingw) because windows does not seem to handle these properly.
  Not sure why we did not catch this earlier.
* Add mountpoint info to dpathmgr.c to help support mingw.
* Cleanup dpathmgr conversions.

Known problems:
---------------
* I have not been able to get shared libraries to work, so
  plugins/filters must be disabled.
* There is some kind of problem with libcurl that I have not solved,
  so all uses of libcurl (currently DAP+Byterange) must be disabled.

Misc. other fixes:
------------------
* Cleanup the relationship between ENABLE_PLUGINS and various other flags
  in CMakeLists.txt and configure.ac.
* Re-arrange the TESTDIRS order in Makefile.am.
* Add pseudo-breakpoint to nclog.[ch] for debugging.
* Improve the documentation of the path manager code in ncpathmgr.h
* Add better support for relative paths in dpathmgr.c
* Default the mode args to NCfopen to include "b" (binary) for windows.
* Add optional debugging output in various places.
* Make sure that everything builds with plugins disabled.
* Fix numerous (s)printf inconsistencies betweenb the format spec
  and the arguments.
2021-12-23 22:18:56 -07:00
Edward Hartnett
0a00163b05 better comments 2021-11-26 06:35:18 -07:00
Edward Hartnett
2d504e02d8 adding quantize test 2021-11-26 06:29:35 -07:00
Charlie Zender
48560bfad9 Change test to verify that using quantize mode one greater than NC_GRANULARBG (instead of NC_QUANTIZE_BITGROOM) fails. 2021-11-04 16:13:12 -07:00
Charlie Zender
e7394af9be Change NC_QUANTIZE_ATT_NAME to NC_QUANTIZE_BITGROOM_ATT_NAME 2021-10-21 11:39:39 -07:00
Edward Hartnett
5200477de1 now nsd of 0 is NC_EINVAL for nc_def_var_quantize() 2021-09-10 06:10:20 -06:00
Edward Hartnett
09defc5c72 more tests for quantize 2021-09-02 08:18:27 -06:00
Edward Hartnett
ae3b083e20 turned off failing quantize test 2021-09-01 02:29:17 -06:00
Edward Hartnett
3e056f4f35 more tests 2021-09-01 02:24:28 -06:00
Edward Hartnett
4cd4aff1af testing with fill values 2021-08-31 07:12:46 -06:00
Edward Hartnett
e3c8be89f6 testing with fill values 2021-08-31 07:10:54 -06:00
Edward Hartnett
f809aadc6c testing with fill values 2021-08-31 06:59:59 -06:00
Edward Hartnett
bb40936a7e more testing with type conversion 2021-08-31 06:42:30 -06:00
Edward Hartnett
1e6ad091b6 type conversion with quantize between float and double 2021-08-29 23:06:16 -06:00
Edward Hartnett
5d1aa2a926 added more documentation, also started on test code for type conversion 2021-08-29 22:34:14 -06:00
Edward Hartnett
f5e2926f02 testing of quantize with scalars 2021-08-29 22:25:57 -06:00
Edward Hartnett
229e101569 quantize now working for NC_DOUBLE 2021-08-29 20:50:19 -06:00
Edward Hartnett
d3e725b3c8 attempting to fix ncdap test on appvayor 2021-08-29 20:39:51 -06:00
Edward Hartnett
ed60a16529 moving quantize to its own function 2021-08-29 08:42:21 -06:00
Edward Hartnett
5aa429cda4 whitespace cleanup 2021-08-29 01:13:39 -06:00
Edward Hartnett
bec26aa3de more quantize testing 2021-08-29 01:04:09 -06:00
Edward Hartnett
eabbd686b0 bitgroom working for floats 2021-08-29 00:30:17 -06:00
Edward Hartnett
0265953207 more quantize testing 2021-08-26 07:24:22 -06:00
Edward Hartnett
c609a17a4f more quantize testing 2021-08-26 07:21:07 -06:00
Edward Hartnett
539578dab8 more tests for quantization 2021-08-26 06:37:45 -06:00
Edward Hartnett
c655488400 more quantize testing 2021-08-25 02:17:57 -06:00
Edward Hartnett
ee788d6f25 more quantize testing 2021-08-25 02:07:09 -06:00
Edward Hartnett
4ac7fa9584 more quantize testing 2021-08-25 02:00:14 -06:00