mirror of
https://github.com/Unidata/netcdf-c.git
synced 2024-11-21 03:13:42 +08:00
4636584d5b
re: https://github.com/Unidata/netcdf-c/issues/1154 Inadvertently, the behavior of NC_DISKLESS with nc_create() was changed in release 4.6.1. Previously, the NC_WRITE flag needed to be explicitly used with NC_DISKLESS in order to cause the created file to be persisted to disk. Additional analyis indicated that the current NC_DISKLESS implementation was seriously flawed. This PR attempts to clean up and regularize the situation with respect to NC_DISKLESS control. One important aspect of diskless operation is that there are two different notions of write. 1. The file is read-write vs read-only when using the netcdf API. 2. The file is persisted or not to disk at nc_close(). Previously, these two were conflated. The rules now are as follows. 1. NC_DISKLESS + NC_WRITE means that the file is read/write using the netcdf API 2. NC_DISKLESS + NC_PERSIST means that the file is persisted to a disk file at nc_close. 3. NC_DISKLESS + NC_PERSIST + NC_WRITE means both 1 and 2. The NC_PERSIST flag is new and takes over the obsolete NC_MPIPOSIX flag. NC_MPIPOSIX is still defined, but is now an alias for the NC_MPIIO flag. It is also now the case that for netcdf-4, NC_DISKLESS is independent of NC_INMEMORY and in fact it is an error to specify both flags simultaneously. Finally, the MMAP code was fixed to use NC_PERSIST as well. Also marked MMAP as deprecated. Also added a test case to test various combinations of NC_DISKLESS, NC_PERSIST, and NC_WRITE. This PR affects a number of files and especially test cases that used NC_DISKLESS. Misc. Unrelated fixes 1. fixed some warnings in ncdump/dumplib.c
59 lines
1.2 KiB
Bash
Executable File
59 lines
1.2 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
|
|
if test "x$srcdir" = x ; then srcdir=`pwd`; fi
|
|
. ../test_common.sh
|
|
|
|
set -e
|
|
|
|
# Get the target OS and CPU
|
|
CPU=`uname -p`
|
|
OS=`uname`
|
|
|
|
#Constants
|
|
FILE1=tst_diskless.nc
|
|
FILE2=tst_diskless2.nc
|
|
FILE3=tst_diskless3.nc
|
|
|
|
echo ""
|
|
echo "*** Testing create files with mmap"
|
|
|
|
echo "**** Test create mmap netCDF classic file without persistence"
|
|
${execdir}/tst_diskless mmap
|
|
echo "PASS: create mmap netCDF classic file without persistence"
|
|
|
|
echo ""
|
|
echo "**** Test create mmap netCDF classic file with persistence"
|
|
rm -f $FILE1
|
|
${execdir}/tst_diskless mmap persist
|
|
if test -f $FILE1 ; then
|
|
echo "**** $FILE1 created"
|
|
# ${NCDUMP} $FILE1
|
|
echo "PASS: create mmap netCDF classic file with persistence"
|
|
else
|
|
echo "#### $FILE1 not created"
|
|
echo "FAIL: create mmap netCDF classic file with persistence"
|
|
fi
|
|
|
|
rm -f tmp1.cdl tmp2.cdl tmp1.nc tmp2.nc
|
|
|
|
echo ""
|
|
echo "**** Testing open files with mmap"
|
|
|
|
# clear old files
|
|
rm -f tst_diskless3_file.cdl tst_diskless3_memory.cdl
|
|
|
|
echo ""
|
|
echo "**** Open and modify file using mmap"
|
|
rm -f $FILE3
|
|
${execdir}/tst_diskless3 diskless mmap
|
|
${NCDUMP} $FILE3 >tst_diskless3_memory.cdl
|
|
|
|
# compare
|
|
diff tst_diskless3_file.cdl tst_diskless3_memory.cdl
|
|
|
|
# cleanup
|
|
rm -f $FILE3 tst_diskless3_file.cdl tst_diskless3_memory.cdl
|
|
|
|
exit
|