Commit Graph

423 Commits

Author SHA1 Message Date
Quincey Koziol
32b58cef08 [svn-r5894] Purpose:
Bug fix/Code cleanup/New Feature

Description:
    Correct problems with writing fill-values to external storage and allocate
    the data storage at the correct times.

    Also, mostly straighten out the strange code which allocates and fills
    raw data storage for datasets.  Things are still a bit odd in that the
    fill-values for chunked datasets are written when the space is allocated,
    instead of in a separate routine, but there are two reasons for this:
    it's inefficient (especially in parallel) to iterate through all the chunks
    twice, and (more importantly) the space needed to store compressed chunks
    isn't known until we've got a buffer of compressed fill-values ready to
    write to the chunk.

    Additionally, add in the H5D_SPACE_ALLOC_INCR and H5D_SPACE_ALLOC_DEFAULT
    setting for the "space time", which incorporate the previous behavior of
    the space allocation for chunked datasets.

    The default settings for the different types of dataset storage are now
    as follows:
        Contiguous - Late
        Chunked    - Incremental
        Compact    - Early

    This checkin also incorporates a change to the behavior of external data
    storage in two ways - fill-values are _never_ written to external storage
    (under the assumption that writing fill-values is triggered by allocating
    space in an HDF5 file, and since space is not allocated in the file, the
    fill-values should not be written) and external data files are now created
    if they don't exist when data is written to them.  The fill-value will
    probably need to be revisited at some time in the future, this just seemed
    like the safer course currently.

    I think I cleaned up some compiler errors also, before getting bogged down
    in the fixes for the space allocation and fill-values.

Platforms tested:
    FreeBSD 4.6 (sleipnir) w/serial & parallel.  Will be testing on IRIX64
    6.5 (modi4) in serial & parallel shortly.
2002-08-27 08:41:32 -05:00
Quincey Koziol
b7b36d7d06 [svn-r5884] Purpose:
Bug fix/Code cleanup

Description:
    Clean up memory leak in fill value code

    Also rearrange logic of code a bit

Platforms tested:
    FreeBSD 4.6 (sleipnir)
2002-08-21 07:36:18 -05:00
Raymond Lu
250bbd4aba [svn-r5882]
Purpose:
    Bug fix.
Description:
    In H5D_init_storage, contiguous dataset is not initialized properly when
    fill value is library default.
Platforms tested:
    eirene
2002-08-20 16:28:31 -05:00
Raymond Lu
29da4951f8 [svn-r5879]
Purpose:
    Design for compact dataset
Description:
    Compact dataset is stored in the header message for dataset layout.
Platforms tested:
    arabica, eirene.
2002-08-20 11:18:02 -05:00
Quincey Koziol
841ee1c05a [svn-r5875] Purpose:
Additional regression tests & bug fixes

Description:
    There was no testing for the H5Dget_storage_size function and it seemed to
    be having problems with compressed, chunked datasets, so write some tests
    to verify that its working correctly.

    Also, fix case for allocating storage early for chunked datasets

Platforms tested:
    FreeBSD 4.6 (sleipnir) serial & parallel
2002-08-14 09:34:01 -05:00
Quincey Koziol
5112232ddf [svn-r5871] Purpose:
Code cleanup

Description:
    Combined H5P_isa_class and H5I_object functionality into a new internal
    H5P API function: H5P_object_verify, which checks that a property list is
    the appropriate class and then returns the property list object associated
    with the property list ID.

    This reduces the source code by about 200 LOC and trims the library binary
    some more.

Platforms tested:
    FreeBSD 4.6 (sleipnir)
2002-08-12 08:33:42 -05:00
Quincey Koziol
8f7425d2a2 [svn-r5867] Purpose:
Code cleanup

Description:
    Changed the last HRETURN* statements in the FUNC_ENTER macros into HGOTO*
    macros, which reduces the size of the library binary in certain
    configurations by another 10%

Platforms tested:
    FreeBSD 4.6 (sleipnir) serial & parallel, IRIX64 6.5 (modi4) serial &
    parallel
2002-08-09 15:48:23 -05:00
Quincey Koziol
d48558126d [svn-r5866] Purpose:
Code cleanup

Description:
    Cleaned up a few warnings from compiling with --disable-hsizet on Linux

Platforms tested:
    Linux 2.2.x (eirene)
2002-08-09 15:23:28 -05:00
Quincey Koziol
d8397a6f42 [svn-r5842] Purpose:
Code cleanup

Description:
    Change most (all?) HRETURN_ERROR macros to HGOTO_ERROR macros, along with
    HRETURN macros to HGOTO_DONE macros.  This unifies the error return path
    from functions and reduces the size of the library by up to 10% on some
    platforms.

    Additionally, I improved a lot of the error cleanup code in many routines.

Platforms tested:
    FreeBSD 4.6 (sleipnir) serial & parallel and IRIX64 6.5 (modi4) serial &
    parallel.
2002-08-08 11:52:55 -05:00
Quincey Koziol
5588db111c [svn-r5840] Purpose:
Code cleanup

Description:
    Created a new H5I function which combined the some of the functionality of
    H5I_get_type and H5I_object: H5I_object_verify.

    Using this new function in the library trims another ~200 lines of code off
    the library and makes the resulting binaries smaller and faster also.

Platforms tested:
    FreeBSD 4.6 (sleipnir)
2002-07-31 14:17:12 -05:00
Quincey Koziol
17275779d0 [svn-r5839] Purpose:
Code cleanup

Description:
    Move operations on each type of selection into the source code file for
    each selection type (all->H5Sall.c, hyperslab->H5Shyper.c, etc.)

    Remove central H5S_select_<foo> operations, instead calling the operations
    through function pointers in each selection (a much more object-oriented
    approach).

Platforms tested:
    FreeBSD 4.6 (sleipnir)
2002-07-31 10:27:07 -05:00
Quincey Koziol
40df66ebd0 [svn-r5834] Purpose:
Large code cleanup/re-write

Description:
    This is phase 1 of the data I/O re-architecture, with the following changes:
        - Changed the selection drivers to not actually do any I/O, they
            only generate the sequences of offset/length pairs needed for
            the I/O (or memory access, in the case of iterating or filling
            a selection in a memory buffer)
        - Wrote more abstract I/O routines which get the sequence of offset/
            length pairs for each selection and access perform the I/O or
            memory access.

    Benefits of this change include:
        - Removed ~3400 lines of quite redundant code, with corresponding
            reduction in the size of library binary.
        - Any selection can now directly access memory when performing I/O,
            if no type conversions are required, instead of just "regular"
            hyperslab and 'all' selections, which speeds up I/O.
        - Sped up I/O for hyperslab selections which have contiguous lower
            dimensions by "flattening" them out into lesser dimensional objects
            for the I/O.

    No file format or API changes were necessary for this change.

    The next phase will be to create a "selection driver" for each type of
        selection, allowing each type of selection to directly call certain
        methods that only apply to that type of selection, instead of passing
        through dozens of functions which have switch statements to call the
        appropriate method for each selection type.  This will also reduce
        the amount of code in the library and speed things up a bit more.

    Phase 3 will involve generating an MPI datatype for all types of selections,
        instead of only "regular" hyperslab and 'all' selections.  This will
        allow collective parallel I/O for all I/O operations which don't
        require type conversions.  It will also open up the door for allowing
        collective I/O on datasets which require type conversion.

    Phase 4 will involve changing the access pattern to deal with chunked
        datasets in a more optimal way (in serial).

    Phase 5 will deal with accessing chunked datasets more optimally for
        collective parallel I/O operations.

Platforms tested:
    FreeBSD 4.6 (sleipnir) w/ parallel & C++ and IRIX64 6.5 (modi4) w/parallel
2002-07-24 13:56:48 -05:00
Quincey Koziol
363ec52b7c [svn-r5799] Purpose:
New feature.

Description:
    Added MPI-posix VFL driver.  This driver uses MPI to coordinate actions, but
    performs I/O directly with posix sec(2) I/O functions.  This driver should
    _NOT_ be used if the file accessed is not on a parallel filesystem.

Platforms tested:
    FreeBSD 4.6 (sleipnir) w/parallel & IRIX64 6.5 (modi4) w/parallel
2002-07-15 10:21:32 -05:00
Raymond Lu
d934f081d2 [svn-r5764]
Purpose:
    Bug Fix.
Description:
    VL type memory leak when data is overwritten.
Solution:
    Free heap objects holding old data.
Platforms tested:
    Linux 2.2(eirene), IRIX 6.5(paz).
2002-07-03 16:06:55 -05:00
Quincey Koziol
b1514ea26d [svn-r5680] Purpose:
New feature.

Description:
    There is some discussion among the SAF team as to whether it is better
    to use MPI derived types for raw data transfers (thus needing a
    MPI_File_set_view() call), or whether it is better to use a sequence of
    low-level MPI types (i.e. MPI_BYTE) for the raw data transfer.

Solution:
    Added an in internal flag to determine whether derived types are preferred
    (the default), or whether they should be avoided.  An environment variable
    ("HDF5_MPI_PREFER_DERIVED_TYPES") can be set by users to control whether MPI
    types should be used or not.  Set the environment variable to "0" (i.e.:
    'setenv HDF5_MPI_PREFER_DERIVED_TYPES 0' to avoid using MPI derived types.

Platforms tested:
    IRIX64 6.5 (modi4) w/parallel
2002-06-19 15:16:20 -05:00
Quincey Koziol
3659ae4176 [svn-r5677] Purpose:
Code improvement

Description:
    Some small code cleanups and took out the code the was turning off the
    metadata cache for parallel I/O (!)

Platforms tested:
    IRIX64 6.5 (modi4) w/parallel
2002-06-19 12:07:52 -05:00
Quincey Koziol
29a0f3e358 [svn-r5670] Purpose:
Code cleanup

Description:
    Remove "COALESCE_READS" ifdefs, which were brought in by the DPSS VFL
    driver and are no longer used.

Platforms tested:
    IRIX64 6.5 (modi4) w/parallel
2002-06-19 08:42:02 -05:00
Quincey Koziol
33a1bc03c4 [svn-r5586] Purpose:
Bug Fix

Description:
    H5Dcreate and H5Tcommit allow "empty" compound and enumerated types (i.e.
    ones with no members) to be stored in the file, but this causes an assertion
    failure and is somewhat vapid.

Solution:
    Check the datatype "makes sense" before using it for H5Dcreate and
    H5Tcommit.

Platforms tested:
    FreeBSD 4.5 (sleipnir)
2002-06-11 11:03:04 -05:00
Quincey Koziol
b5dfb3116d [svn-r5545] Purpose:
Code cleanup

Description:
    Back out [apparently] unnecessary include of H5F package include files.

Platforms tested:
    FreeBSD 4.5 (sleipnir)
2002-06-06 10:43:02 -05:00
Bill Wendling
dd51aae3ca [svn-r5530] Purpose:
Code Cleanup
Description:
    Removed some compiler warnings.
Solution:
    In a few cases, NULL was being returned when a FAIL was supposed to
    be returned instead. There were some header files which needed to be
    included in a few of the sources. A couple of if-then statements had
    assignments in the conditional part. The compiler warned that they
    should have extra "()"s around them. Made the code check the values
    instead.
Platforms tested:
    Linux (parallel) Modi4 (parallel)
2002-06-04 16:29:05 -05:00
Quincey Koziol
e69e970a1c [svn-r5471] Purpose:
Code cleanup

Description:
    Broke the FUNC_ENTER macro into several macros, with more specialized
    uses (which followup mail will describe).  This was designed to move
    most/all of the checks which could be done at compile time to that point,
    instead of needlessly performing them (over & over :-) at run-time.
    This reduces the library's size (and thus staticly linked binaries) and
    has a minor speedup effect also.

Platforms tested:
    IRIX64 6.5 (modi4) with parallel & FORTRAN enabled, and additional testing
    on FreeBSD and Solaris immediately after the checkin.
2002-05-29 10:07:55 -05:00
Quincey Koziol
ca912c389e [svn-r5467] Purpose:
Code cleanup.

Description:
    Took Robb's recent ideas for improving the FUNC_ENTER/FUNC_LEAVE macros
    equivalents in the SAF library and adapted them to our library.  I added
    an additional macro which is equivalent to FUNC_ENTER:
        FUNC_ENTER_NOINIT - Has the API tracing code, etc. from FUNC_ENTER but
            none of the library or interface initialization code.  This is to
            be used _only_ for static functions and those which explicitly
            cannot have the library or interface initialization code enabled
            (like the API termination routines, etc.).

    This allowed many more of the functions in the library [but not all yet :-(]
    to be wrapped with FUNC_ENTER[_NOINIT]/FUNC_LEAVE pairs.

    It also reduced the size of the library and executables (by cutting out a
    bunch of code which was never executed), I'll e-mail the exact results when
    I've finished editing it.

Platforms tested:
    IRIX64 6.5 (modi4)
2002-05-28 13:17:12 -05:00
Quincey Koziol
124979bfc2 [svn-r5272] Purpose:
Bug fix

Description:
    Move iterator initialization in H5D_read & H5D_write before any errors can
    occur.

Platforms tested:
    FreeBSD 4.5 (sleipnir)
2002-04-26 10:44:08 -05:00
Quincey Koziol
d33f7d93a3 [svn-r5259] Purpose:
Code cleanup

Description:
    Previously, the I/O pipeline (pline), external file list (efl) and fill-
    value (fill) structs were passed down the raw data function call chain,
    even into and/or through functions which didn't use them.  Since all three
    of these pieces of information are available from the dataset creation
    property list, just pass the dataset creation property list down the
    function call chain and query for the information needed in a particular
    function.

Platforms tested:
    FreeBSD 4.5 (sleipnir)
2002-04-25 12:56:56 -05:00
Quincey Koziol
5c6f86d9aa [svn-r5255] Purpose:
Code cleanup

Description:
    Reduce gratuitous differences between H5D_write and H5D_read and also
    remove distracting debugging printf's that were ifdef'd out.

Platforms tested:
    FreeBSD 4.5 (sleipnir)
2002-04-25 08:52:03 -05:00
Quincey Koziol
e5fc40662c [svn-r5219] Purpose:
Code cleanup

Description:
    Clean up warnings from gcc 3.1

Platforms tested:
    FreeBSD 4.5 (sleipnir)
2002-04-22 12:48:24 -05:00
Albert Cheng
f5d5e9e2ff [svn-r5205] Purpose:
Code cleanup
Description:
    Platform dependent code related to the struct stat and fstat
    calls polluted source codes.  Hard to maintain.
Solution:
    Platform dependent code are moved to H5private.h and then internal
    code can #include H5private.h.  Repeat those macro definition for
    the stdio and multi drivers since they area examples for writing
    a virtual file driver.  They must not use any internal code.
Platforms tested:
    eirene (parallel), modi4 (serial including gass driver.)
2002-04-19 02:20:41 -05:00
Quincey Koziol
40117dd384 [svn-r5203] Purpose:
Code cleanup

Description:
    Re-indented new code to match coding style of rest of library.

Platforms tested:
    FreeBSD 4.5 (sleipnir)
2002-04-18 15:10:05 -05:00
Quincey Koziol
ef9c40754b [svn-r5200] Purpose:
Code Cleanup

Description:
    Clean up compiler warnings from the last bunch of checkins

Platforms tested:
    FreeBSD 4.5 (sleipnir)
2002-04-18 09:05:38 -05:00
Quincey Koziol
6a0ecf7366 [svn-r5198] Purpose:
Code Cleanup

Description:
    Remove "knowledge" about external file storage from H5D_init_storage and
    call H5F_seq_write instead, which handles things correctly.

Platforms tested:
    FreeBSD 4.5 (sleipnir)
2002-04-18 08:34:20 -05:00
Quincey Koziol
4433c85766 [svn-r5195] Purpose:
Code cleanup

Description:
    Got rid of the "H5T_BKG_TEMP" setting that was used internally to the
    library, since temporary background buffers are now handled by the
    individual conversion routines instead of in a global background buffer.

    No APIs were changed or affected by this.

Platforms tested:
    FreeBSD 4.5 (sleipnir)
2002-04-17 13:49:49 -05:00
Quincey Koziol
fa314a767e [svn-r5191] Purpose:
Bug fix

Description:
    When several level deep nested compound & VL datatypes are used, the data
    in the nested compound datatypes is incorrectly sharing the same "background
    buffer", causing data corruption when the data is written to the file.

Solution:
    Allocate a separate background buffer for each level of the nested types
    to convert.  (Also allocate temporary background buffers for array
    datatypes, where this sort of problem could occur also)

    Added more regression tests to check for these errors.

Platforms tested:
    FreeBSD 4.5 (sleipnir) & Solaris 2.6 (baldric)
2002-04-17 11:47:47 -05:00
Raymond Lu
ce920c6c04 [svn-r5170]
Purpose:
    New feature
Description:
    Fill-value's behaviors for contiguous dataset have been redefined.
    Basicly, dataset won't allocate space until it's necessary.  Full details
    are available at http://hdf.ncsa.uiuc.edu/RFC/Fill_Value, at this moment.
Platforms tested:
    Linux 2.2.
2002-04-11 17:52:48 -05:00
Pedro Vicente Nunes
f368891ac8 [svn-r5168]
Purpose:
    H5Dset_extent API function
Description:

1 new public function: H5Dset_extent, that allows shrinking a dataset
several private functions that free the previously allocated chunks
H5F_istore_prune_by_extent, H5B_prune_by_extent : removes the chunks
H5F_istore_initialize_by_extent : initializes them with the fill value

H5S_select_fill is used to fill the selection in the memory buffer



Platforms tested:

    Windows 2000
    SUN( arabica)
    LINUX (eirene)
    IRIX64 (modi4)
2002-04-11 16:28:59 -05:00
Pedro Vicente Nunes
41fda81044 [svn-r5153]
Purpose:

Modified all.zip file to include a windows project for set_extend
2002-04-09 11:06:15 -05:00
Quincey Koziol
1ffe083f61 [svn-r5152] Purpose:
New Feature

Description:
    Added new H5Dfill() routine to fill the elements in a selection for a
    memory buffer with a fill value.  This is a user API wrapper around some
    internal routines which were needed for the fill-value modifications
    from Raymond as well as Pedro's code for reducing the size of a chunked
    dataset.

Platforms tested:
    FreeBSD 4.5 (sleipnir) [and IRIX64 6.5 (modi4) in parallel, in a few
    minutes]
2002-04-09 07:47:34 -05:00
Quincey Koziol
7ae00db7a4 [svn-r5138] Purpose:
Bug Fix & Code Cleanup

Description:
    The MPI-IO optimized transfer routines
    (H5S_mpio_spaces_read/H5S_mpio_space_write) are not being invoked in all
    the cases where they could be used.

    Additionally, the code for determining if an optimized transfer is wrapped
    into the actual I/O transfer routine in a very confusing way.

Solution:
    Re-enabled MPI-IO optimized transfer routines in all the cases where they
    should work.

    Extracted all the pre-conditions for optimized transfers into separate
    routines from the transfer routines.

Platforms tested:
    FreeBSD 4.5 (sleipnir) & IRIX64 6.5 (modi4)
2002-04-03 12:07:14 -05:00
Quincey Koziol
8005e831a0 [svn-r5131] Purpose:
Code cleanup
Description:
    The function pointer for doing parallel I/O was being set in the H5D_read
    and H5D_write routines instead of in H5S_conv, where it belongs.
Solution:
    Added an extra 'flags' parameter to H5S_find to allow the function to
    determine when to set the MPIO functions instead of the regular optimized
    I/O routines and get rid of code messing with the function pointer in the
    H5D routines.
Platforms tested:
    IRIX64 6.5 (modi4)
2002-04-02 16:21:13 -05:00
Pedro Vicente Nunes
c33fd20d54 [svn-r5064]
Purpose:
    updated the H5D_update_chunk function
Description:
    removed some debugging code headers
Platforms tested:
    w2000, linux
2002-03-14 12:52:58 -05:00
Pedro Vicente Nunes
e739b76295 [svn-r5063]
Purpose:
    added a new function H5D_update_chunck that will update the chunk information; for the moment this function
    just has debugging of the b-tree

Platforms tested:
    w2000 , eirene
2002-03-13 17:22:44 -05:00
Pedro Vicente Nunes
64658d1f9f [svn-r5062]
Purpose:
    code clean up
Description:
    just some clean up of the functions H5D_set_extend and H5S_set_extend before the big change
    (changing chunk info in the b-tree struct of the dataset)
Platforms tested:
    w2000, eirene
2002-03-13 11:35:31 -05:00
Quincey Koziol
5883b9d67d [svn-r4965] Purpose:
Bug Fix
Description:
    If a non-zero fill-value is used for a chunked dataset, any non-existent
    chunked read with an "all" selection (or a contiguous hyperslab selection)
    will return zero for those instead of the user's fill-value.
Solution:
    Fixed I/O code to pass down fill-value to "optimized" I/O routines, so it
    will be available to fill the user's buffer with.
Platforms tested:
    FreeBSD 4.5 (sleipnir)
2002-02-14 10:57:48 -05:00
Pedro Vicente Nunes
472c42233c [svn-r4921]
Description:

modified the below files to inlude a new public function H5Dset_extend, similar
to H5Dextend, but it can lower the dimension

this function requires 2 more new private functions:
H5D_set_extend
H5S_set_extend

Platforms tested:
2002-02-07 15:20:40 -05:00
Quincey Koziol
0288e2f9da [svn-r4903] Purpose:
Code cleanup
Description:
    Clean up H5D_read and H5D_write routines, adding comments, etc.
Platforms tested:
    FreeBSD 4.5 (sleipnir)
2002-02-06 09:31:26 -05:00
Quincey Koziol
47d88766db [svn-r4706] Purpose:
Code cleanup
Description:
    Tweaked internal error handling macros to reduce the size of the library's
    object code by about 10-20%.

    Also cleaned up some compiler warnings...

Platforms tested:
    FreeBSD 4.4 (sleipnir)
2001-12-12 13:40:09 -05:00
Raymond Lu
d28fd08f4a [svn-r4696]
Purpose:
    Modify H5Fclose behavior
Description:
    The HDF5 actual file close behaves in several ways in terms of if there
    are still objects(dataset, group, datatype) opened in file.
Solution:
    Added a new file access property, file close degree.  It has four values,
	H5F_CLOSE_DEFAULT
	H5F_CLOSE_WEAK
	H5F_CLOSE_SEMI
	H5F_CLOSE_STRONG
    The way a file is closed is decided by these values.
Platforms tested:
    IRIX64 6.5, SunOS 5.6, FreeBSD 4.4
2001-12-11 14:53:44 -05:00
Quincey Koziol
7a30de3a2b [svn-r4680] Purpose:
Code cleanup
Description:
    Property that H5P(g|s)et_hyper_cache uses is no longer in use inside the
    library.
Solution:
    Removed H5P(g|s)et_hyper_cache API functions, except when backward
    compatibility is turned on.  When backward compatibility is turned on,
    the property is defined by the library, but unused internally.
Platforms tested:
    FreeBSD 4.4 (sleipnir)
2001-12-06 14:05:12 -05:00
Quincey Koziol
d456c2bb82 [svn-r4643] Purpose:
Code cleanup
Description:
    Windows is generating hundreds of warnings from some of the practices in
    the library.  Mostly, they are because size_t is 32-bit and hsize_t is
    64-bit on Windows and we were carelessly casting the larger values down to
    the smaller ones without checking for overflow.

    Also, some other small code cleanups,etc.

Solution:
    Re-worked some algorithms to eliminate the casts and also added more
    overflow checking for assignments and function parameters which needed
    casts.

    Kent did most of the work, I just went over his changes and fit them into
    the the library code a bit better.

Platforms tested:
    FreeBSD 4.4 (hawkwind)
2001-11-27 11:29:13 -05:00
Quincey Koziol
fa4e258236 [svn-r4622] Purpose:
Code cleanup
Description:
    Be more careful when starting up and shutting down APIs, only initialize
    variables which are actually shut down already.

    Get rid of IDs from internal function calls
Platforms tested:
    FreeBSD 4.4 (hawkwind)
2001-11-20 14:11:49 -05:00
Quincey Koziol
1cd9eb7e0d [svn-r4586] Purpose:
Code speedups, etc.
Description:
    Bring in new algorithms and data structures for dealing with hyperslabs.

    This speeds up the hyperslab I/O for non-regular hyperslabs by a huge
    amount.

    Currently, the new API functions are ifdef'ed out, pending discussion
    and consensus approval.
Platforms tested:
    FreeBSD 4.4 (hawkwind)
2001-11-02 15:31:35 -05:00