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

Enhance/Fix filter support #2245

Merged
merged 4 commits into from
Mar 21, 2022
Merged

Commits on Mar 14, 2022

  1. Enhance/Fix filter support

    re: Discussion Unidata#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.
    DennisHeimbigner committed Mar 14, 2022
    Configuration menu
    Copy the full SHA
    3ffe7be View commit details
    Browse the repository at this point in the history
  2. Update release notes

    DennisHeimbigner committed Mar 14, 2022
    Configuration menu
    Copy the full SHA
    092c395 View commit details
    Browse the repository at this point in the history
  3. Fix new LGTM errors

    DennisHeimbigner committed Mar 14, 2022
    Configuration menu
    Copy the full SHA
    150e19c View commit details
    Browse the repository at this point in the history
  4. retry

    DennisHeimbigner committed Mar 14, 2022
    Configuration menu
    Copy the full SHA
    bbdfec2 View commit details
    Browse the repository at this point in the history