Improve portability of flushrefresh test.
Description:
The flush/refresh API test was hanging on linew because
Solaris's 'date' tool does not recognize the "+%s" option,
which returns time since the epoch on other UNIXes.
There doesn't seem to be a good way to unify the tools,
however, Perl can be easily used for this function. I've
modified configure to always check for the existence of
Perl (previously it only did so if GNU compilers were being
used), and the flush/refresh test script now uses perl to
perform this timestamping functionality rather than date,
by default. (if Perl is not detected by configure, the
script will use date as it did prior to this modification).
Fixed a few other compatibility issues w/ Solaris in passing:
- fixed 'head' and 'tail' parameters to be more portable
- avoid passing NULL to an fprintf call in flushrefresh.c
Tested:
- Tested testflushrefresh.sh on jam, linew, heiwa, liberty,
duty, ember, and abe.
Adjust flush/refresh tests to allow more time
for completion, and fix a bug that caused a
race condition between the test script and a
process it invokes.
Description:
Flush/refresh testing slows down considerably
with multiple (other) processes running in the
background, such as the case when -j option is
supplied to gmake when running the test suite.
I've extended the amount of time before the test
times out due to not receiving a signal, and
modified the script so that the timer now resets
after receiving a signal so it is not a cumulative
timer for the entire test, but rather only per
verification process that the script needs to spawn.
Additionally, I changed the way the test script
detected that a signal from a process was ready by
changing detection from 'file exists' to 'non-empty
file exists'.
This test may need to undergo further tweaking once
we get a feeling for how well it currently runs in
a number of different scenarios, particularly with
regards to how the script and the processes it spawns
communicate with each other.
Tested:
amani, using 'gmake -j 8 check'.
h5committest
Add API and supporting code to allow single object flushes and refreshes.
Description:
Added the following API calls:
H5Dflush / H5Drefresh
H5Gflush / H5Grefresh
H5Tflush / H5Trefresh
H5Oflush / H5Orefresh
Each H5*flush API flushes the targeted object's metadata,
while each H5*refresh evicts all metadata related to an object
and reopens the object (re-loading needed metadata from disk).
New files include src/H5Oflush.c, containing new internal H5O_*
functions used by the above API calls. Also, a test file and test
script template have been added, test/flushrefresh.c and
test/testflushrefresh.sh.in. There is not (yet) a corresponding
test script for windows as the current one isn't quite portable.
Several H5C and H5AC-level functions have been added to support
single object flushing and eviction, and the previously committed
'metadata tagging' code has been tweaked slightly to pull H5AC__*
macros out of H5C.c and a few other fixes as necessary as well.
Tag globality has been added to better encapsulate the meaning of
global tags in the H5C layer of the code.
Tested:
h5committested.