[ncl-talk] Bug: _FillValue attribute erases previous data
Dave Allured - NOAA Affiliate
dave.allured at noaa.gov
Fri Apr 7 14:02:52 MDT 2017
There is a netcdf-C Github ticket for this issue:
https://github.com/Unidata/netcdf-c/issues/390
I would like to suggest that NCL should wait and follow whatever fix is
made in the netcdf-C API. I could see that going either of two valid ways:
either correct support for changing _FillValue in netcdf-4 format, or
reverting to firm prohibition. The core HDF5 library has a firm
prohibition, and there are some good reasons for that.
--Dave A.
On Fri, Apr 7, 2017 at 11:31 AM, David Brown <dbrown at ucar.edu> wrote:
> A JIRA ticket NCL-2589 has been created for this issue with major
> priority to be fixed for 6.4.1.
>
> On Tue, Mar 28, 2017 at 10:29 PM, David Brown <dbrown at ucar.edu> wrote:
> > As Rick recounts above, we thought that the NetCDF4 library went
> > through a lot of hoops in 4.4.1 to do just as you suggest Dave,
> > totally rewriting the variable, just to allow changing the _FillValue,
> > as was possible in NetCDF3.
> >
> > However, it seems that, at least as far back as 4.1.3 (~2011) the
> > documentation (nc_def_var_fill) has explicitly stated that the
> > _FillValue cannot be changed once the data variable has been read or
> > written.
> >
> > I knew this about HDF5, but until now I thought that NetCDF4 had
> > overcome this limitation. Given the situation, it appears you are
> > correct that the only correct response is to refuse to try to change
> > the _FillValue and return an error, although actually it seems that it
> > should really be the responsibility of the NetCDF library to give us
> > the ELATEFILL error message and not allow the data to be modified.
> > -dave
> >
> >
> > On Tue, Mar 28, 2017 at 6:09 PM, Dave Allured - NOAA Affiliate
> > <dave.allured at noaa.gov> wrote:
> >> Rick,
> >>
> >> I discovered that my current complaint is all due to the underlying
> Netcdf
> >> library, currently version 4.4.1. I would not have sent an NCL bug
> report
> >> if I had realized this earlier. I do intend to report this back to
> Netcdf.
> >>
> >> In Netcdf-4 file format, there is apparently a restriction that
> _FillValue
> >> may not be changed after data is written. This is a notable difference
> from
> >> Netcdf-3 format. Functions in the nc_put_att family list this possible
> >> error, which I think applies to Netcdf-4 file access only:
> >>
> >> NC_ELATEFILL -- Fill values must be written while the file is still
> in
> >> initial define mode.
> >>
> >> This is probably due to the underlying HDF5 layer:
> >>
> >> "the fill value for a dataset cannot be modified once the dataset
> has
> >> been created"
> >> https://support.hdfgroup.org/HDF5/hdf5-quest.html#pfillvalue
> >>
> >> This is why I think the correct response for both NCL and C programs
> should
> >> be to fail with NC_ELATEFILL or equivalent, rather than "just work". To
> >> "just work" might involve a large performance penalty along the lines of
> >> scanning or re-writing the entire file variable. Either way, previous
> data
> >> should not be erased, i.e. set to _FillValue.
> >>
> >> --Dave
> >>
> >>
> >> On Tue, Mar 28, 2017 at 4:44 PM, Rick Brownrigg <brownrig at ucar.edu>
> wrote:
> >>>
> >>> Hi Dave,
> >>>
> >>> I will look into this and likely file a bug report. At one point, there
> >>> was an issue whereby if _FillValue (or any attribute) was added to a
> >>> variable, it caused all the other attributes to be dropped (but the
> data was
> >>> preserved). This was traced to a bug in the underlying NetCDF library,
> which
> >>> was fixed in version 4.4.1 around summer 2016. The NetCDF library was
> going
> >>> to a lot of effort to make it possible to rewrite a preexisting
> variable, so
> >>> I would think the correct response is for it to "just work", rather
> than
> >>> error out and do nothing?
> >>>
> >>> Rick
> >>>
> >>> On Tue, Mar 28, 2017 at 2:59 PM, Dave Allured - NOAA Affiliate
> >>> <dave.allured at noaa.gov> wrote:
> >>>>
> >>>> NCL team,
> >>>>
> >>>> Under some conditions, adding a _FillValue attribute to an existing
> >>>> Netcdf-4 file erases previous data. I find this behavior with both
> NCL
> >>>> 6.3.0 and 6.4.0 on Mac OS 10.11 (El Capitan). I get the same
> behavior with
> >>>> both netcdf4-classic and full netcdf4 formats.
> >>>>
> >>>> mac56:~/ncl/bugs/fillvalue1 2> ncdump -s test3.nc
> >>>> netcdf test3 {
> >>>> dimensions:
> >>>> dim = 10 ;
> >>>> variables:
> >>>> int var(dim) ;
> >>>> var:_Storage = "contiguous" ;
> >>>> var:_Endianness = "little" ;
> >>>>
> >>>> // global attributes:
> >>>> :_NCProperties = "version=1|netcdflibversion=4.
> 4.1|hdf5libversion=1.8.17"
> >>>> ;
> >>>> :_SuperblockVersion = 0 ;
> >>>> :_IsNetcdf4 = 1 ;
> >>>> :_Format = "netCDF-4 classic model" ;
> >>>> data:
> >>>>
> >>>> var = 11, 22, 33, 44, 55, _, _, _, _, _ ;
> >>>> }
> >>>>
> >>>> mac56:~/ncl/bugs/fillvalue1 3> ncl
> >>>> Copyright (C) 1995-2017 - All Rights Reserved
> >>>> University Corporation for Atmospheric Research
> >>>> NCAR Command Language Version 6.4.0
> >>>> The use of this software is governed by a License Agreement.
> >>>> See http://www.ncl.ucar.edu/ for more details.
> >>>> ncl 0> f=addfile("test3.nc","w")
> >>>> ncl 1> f->var at _FillValue = 99
> >>>> ncl 2> exit
> >>>>
> >>>> mac56:~/ncl/bugs/fillvalue1 4> ncdump -s test3.nc
> >>>> netcdf test3 {
> >>>> dimensions:
> >>>> dim = 10 ;
> >>>> variables:
> >>>> int var(dim) ;
> >>>> var:_FillValue = 99 ;
> >>>> var:_Storage = "contiguous" ;
> >>>> var:_Endianness = "little" ;
> >>>>
> >>>> // global attributes:
> >>>> :_NCProperties = "version=1|netcdflibversion=4.
> 4.1|hdf5libversion=1.8.17"
> >>>> ;
> >>>> :_SuperblockVersion = 0 ;
> >>>> :_IsNetcdf4 = 1 ;
> >>>> :_Format = "netCDF-4 classic model" ;
> >>>> data:
> >>>>
> >>>> var = _, _, _, _, _, _, _, _, _, _ ;
> >>>> }
> >>>>
> >>>> In my opinion, the correct response for netcdf-4 formats should be an
> >>>> error, something like "Can not change _FillValue after data is
> written in
> >>>> netcdf-4", and the file is unchanged. In any case, previous data
> should not
> >>>> be silently erased. If you agree, please fix this for the next
> release.
> >>>> Thanks.
> >>>>
> >>>> --Dave
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20170407/181a947d/attachment.html
More information about the ncl-talk
mailing list