Commit Graph

234 Commits

Author SHA1 Message Date
Quincey Koziol
dfbf976509 [svn-r12004] Purpose:
New feature & code cleanup

Description:
    Update fractal heap to be able to insert objects into a direct block
hanging off the header.

    Extract "octal dump" code into separate routine so that both the local
heaps & fractal heaps can use it.

    Other code cleanups & support to get this far.

Platforms tested:
    FreeBSD 4.11 (sleipnir)
    Linux 2.4
2006-03-04 17:56:44 -05:00
James Laird
216a6e9904 [svn-r11850] Purpose:
Feature

Description:
Added character encoding and attribute creation property lists.

Solution:
Attributes' character encoding is set via the ACPL.
The default is ASCII, with UTF-8 being the other option currently.

Platforms tested:
heping, mir, sleipnir, copper
2006-01-02 14:20:19 -05:00
Quincey Koziol
a1708eb023 [svn-r11712] Purpose:
New feature

Description:
    Check in baseline for compact group revisions, which radically revises the
source code for managing groups and object headers.

WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!
WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!

    This initiates the "unstable" phase of the 1.7.x branch, leading up
to the 1.8.0 release.  Please test this code, but do _NOT_ keep files created
with it - the format will change again before the release and you will not
be able to read your old files!!!

WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!
WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!  WARNING!!!!


Solution:
    There's too many changes to really describe them all, but some of them
include:
    - Stop abusing the H5G_entry_t structure and split it into two separate
        structures for non-symbol table node use within the library: H5O_loc_t
        for object locations in a file and H5G_name_t to store the path to
        an opened object.  H5G_entry_t is now only used for storing symbol
        table entries on disk.

    - Retire H5G_namei() in favor of a more general mechanism for traversing
        group paths and issuing callbacks on objects located.  This gets us out
        of the business of hacking H5G_namei() for new features, generally.

    - Revised H5O* routines to take a H5O_loc_t instead of H5G_entry_t

    - Lots more...

Platforms tested:
    h5committested and maybe another dozen configurations.... :-)
2005-11-14 21:55:39 -05:00
John Mainzer
c100b0bf26 [svn-r11470] Purpose:
Repair synchronization bug in the metadata cache in PHDF5

Also repair numerous other bugs that surfaced in testing the
bug fix.


Description:

While operations modifying metadata must be collective, we allow
independant reads.  This allows metadata caches on different processes
to adjust to different sizes, and to place the entries on their dirty
lists in different orders.  Since only process 0 actually writes
metadata to disk (all other processes thought they did, but the writes
were discarded on the theory that they had to be collective), this made
it possible for another process to modify metadata, flush it, and then
read it back in in its original form (pre-modification) form.  The
possibilities for file corruption should be obvious.


Solution:

Make the policy that only process 0 can write to file explicit, and
visible to the metadata caches.  Thus only process 0 may flush dirty
entries -- all other caches must retain dirty entries until they are
informed by process 0 that the entries are clean.

Synchronization is handled by counting the bytes of dirty cache entries
created, and then synching up between the caches whenever the sum
exceeds an (eventually user specified) limit.  Dirty metadata creation
is consistent across all processes because all operations modifying
metadata must be collective.

This change uncovered may bugs which are repaired in this checkin.
It also required modification of H5HL and H5O to allocate file space
on insertion rather than on flush from cache.


Platforms tested:

H5committest, heping(parallel & serial)

Misc. update:
2005-09-27 00:20:11 -05:00
Quincey Koziol
e1747e456c [svn-r11307] Purpose:
Code cleanup

Description:
    Clean up internals of group creation & iteration code.

Platforms tested:
    FreeBSD 4.11 (sleipnir)
    Mac OS X (nile)
    Too minor to require h5committest
2005-08-29 00:36:16 -05:00
Quincey Koziol
6b45f5172c [svn-r11245] Purpose:
Code cleanup

Description:
    Trim trailing whitespace, which is making 'diff'ing the two branches
difficult.

Solution:
    Ran this script in each directory:

foreach f (*.[ch] *.cpp)
    sed 's/[[:blank:]]*$//' $f > sed.out && mv sed.out $f
end


Platforms tested:
    FreeBSD 4.11 (sleipnir)
    Too minor to require h5committest
2005-08-13 15:53:35 -05:00
Quincey Koziol
210ef12816 [svn-r11219] Purpose:
Code cleanup

Description:
    Bring some of the cleanups from the external link coding (which isn't
checked in yet) back into CVS as an intermediate checkin.

Platforms tested:
    FreeBSD 4.11 (sleipnir)
    Too minor to require h5committest
2005-08-08 16:03:17 -05:00
Quincey Koziol
502b4c206d [svn-r11215] Purpose:
Bug fix & code cleanup

Description:
    Fix another bug in the file mounting code and refactor the unmount
code that it is simpler.

Platforms tested:
    FreeBSD 4.11 (sleipnir)
    Linux 2.4
    Too minor to require h5committest
2005-08-08 13:41:35 -05:00
Quincey Koziol
bb31e94a92 [svn-r11093] Purpose:
Bug fix

Description:
    Rewrite code for mounting files to clean up layers of kludges and implement
a much cleaner and more maintainable design.

Platforms tested:
    FreeBSD 4.11 (sleipnir)
    Linux 2.4
2005-07-21 09:48:26 -05:00
Quincey Koziol
6aa7ea9331 [svn-r11057] Purpose:
Bug fix

Description:
    Correct error where the dataset sieve buffer was inadvertantly disabled,
resulting in poor raw data I/O performance for certain I/O patterns.

Solution:
    Hook dataset sieve buffer size setting back up.

Platforms tested:
    FreeBSD 4.11 (sleipnir)
    Solaris 2.9 (shanti)
2005-07-09 00:02:04 -05:00
Raymond Lu
071be8ef3b [svn-r10971] Purpose: Bug fix
Description: See details from Bug #213.  Family member file size wasn't saved
anywhere in file.  When family file is opened, the first member size determine
the member size.

Solution:  Hopefully, this is the last step of checkin for this stage.  This step
mainly enables h5repart tool to be able to convert file driver from family to
sec2.  Because the library saves family information in file, in trying to convert
to sec2 driver, the library simply change the address of driver information to
undefined so that the driver information block can be ignored.  This step also
updates the reference manual of H5Pset_fapl_family() and h5repart.

In the fifth step of checkin, backward compatibility with v1.6
is tested.  A family file created was created with the v1.6 library and opened
with this version of the library.

In the fourth step of checkin, a test suit is added for h5repart,
including a program to generate the test files, a script file to run h5repart,
and a program to verify repartitioned files can be opened by the library.

There's a change from the first step of checkin.  Family name template is no
longer saved in the superblock because different pathname can make the name
different.

In the third step of checkin, h5repart has been modified.  If h5repart is used
to change the size of family member file, the new size(actual member size) is saved
in the superblock.

In the second step of checkin, multi driver is checked against the driver
name saved in superblock.  Wrong driver will result in a failure with an error message
indicating
multi driver should be used.  This change includes split driver because it's a special
case for multi
driver.

In the first step of checkin.  Family member size and name template(unused at this stage) are saved
in file superblock.  When file is reopened,the size passed in thrin superblock.  A different size
will trigger a failure with an error message indicating the right size.  Wrong driver to open family
file will cause a failure, too.


Platforms tested: h5committest and fuss.

Misc. update: doc/html/RM_H5P.html and doc/html/Tools.html
2005-06-22 13:59:48 -05:00
Raymond Lu
7696942940 [svn-r10847] Purpose: Bug fix
Description: See details from Bug #213.  Family member file size wasn't saved
anywhere in file.  When family file is opened, the first member size determine
the member size.

Solution: This is the fourth step of checkin.  A test suit is added for h5repart,
including a program to generate the test files, a script file to run h5repart,
and a program to verify repartitioned files can be opened by the library.

There's a change from the first step of checkin.  Family name template is no
longer saved in the superblock because different pathname can make the name
different.

In the third step of checkin, h5repart has been modified.  If h5repart is used
to change the size of family member file, the new size(actual member size) is saved
in the superblock.

In the second step of checkin, multi driver is checked against the driver
name saved in superblock.  Wrong driver will result in a failure with an error message indicating
multi driver should be used.  This change includes split driver because it's a special case for multi
driver.

In the first step of checkin.  Family member size and name template(unused at this stage) are saved
in file superblock.  When file is reopened,the size passed in thrin superblock.  A different size
will trigger a failure with an error message indicating the right size.  Wrong driver to open family
file will cause a failure, too.


Platforms tested: h5committest and fuss.

Misc. update:  MANIFEST
2005-06-02 16:00:23 -05:00
Quincey Koziol
063642da28 [svn-r10841] Purpose:
Code cleanup

Description:
    Merge in some mostly cosmetic improvements to the H5F routines.

Platforms tested:
    FreeBSD 4.11 (sleipnir)
    Too minor to require h5committest
2005-06-01 21:37:52 -05:00
John Mainzer
a9ba92287d [svn-r10688] Purpose:
Add API calls allowing user control of the metadata cache.


Description:

Prior to this update, the metadata cache was not configurable
from outside the library.


Solution:

Add API calls allowing the user to configure the metadata cache
either at file open time, or for any open file.  Also added calls
permitting the user to monitor cache size and hit rate.  These
latter facilities are needed for "manual" cache size control


Platforms tested:

h5committested


Misc. update:
2005-04-28 11:40:07 -05:00
Quincey Koziol
7af838b69c [svn-r9354] Purpose:
Bug fix & code cleanup

Description:
    More dataset cleanups to get to a point where we can fix the chunked I/O
bug.

    Also fix a couple of errors in the recent file object resurrection changes
which should hopefully address the recent daily test failres (H5T.c)

Platforms tested:
    FreeBSD 4.10 (sleipnir) w/parallel
    Solaris 2.7 (arabica)
    h5committest
2004-10-01 18:00:42 -05:00
Quincey Koziol
3df2828991 [svn-r8981] Purpose:
Code cleanup

Description:
    Various minor tweaks to clean code up and bring it into closer
syncronization with the release branch.

Platforms tested:
    FreeBSD 4.10 (sleipnir) w/parallel
    h5committested
    IRIX64 6.5 (modi4)
2004-08-02 09:03:40 -05:00
Quincey Koziol
ecd9f0a10e [svn-r8932] Purpose:
Code cleanup

Description:
    Clean up collective chunking code a bit.

    Also, add '--enable-instrument' configure flag to have a mechanism for
determining that optimized operations happened correctly in the library (instead
of just the "normal" way) by allowing 'flag' properties to be set outside the
library and set when the "right" thing happens.  This is mainly for debugging
and regression checks, so we make certain we don't break optimized I/O by
accident.  It's enabled by default when --enable-debug is on (which is on by
default in the development branch and off by default in the release branch),
but can also be independently controlled with its own configure flag.

Platforms tested:
    FreeBSD 4.10 (sleipnir) w/parallel
    IBM p690 (copper) w/parallel
2004-07-22 15:46:27 -05:00
Quincey Koziol
c97fddc786 [svn-r8892] Purpose:
Code cleanup

Description:
    Clean up a bunch of warnings and bring new code better inline with current
library coding practice.

Platforms tested:
    FreeBSD 4.10 (sleipnir) w/parallel
    Too minor to require h5committest

Misc. update:
2004-07-16 15:48:40 -05:00
Quincey Koziol
18c505c675 [svn-r8853] Purpose:
Code optimization

Description:
    Refactor B-tree code to extract all common information for a B-tree into a
shared structure that is pointed to by all the nodes in tree (instead of being
included in each node).

    Also re-order B-tree node comparison checks for chunked datasets to
check for >= the upper node first, since the comparison is a bit "heavy" and
this check is more likely to succeed when you are adding records to the
dataset.

Platforms tested:
    Solaris 2.7 (arabica)
    FreeBSD 4.10 (sleipnir) w/parallel
    Too minor to require h5committest
    (also, recent h5dump commits have broken testing...)
2004-07-09 21:28:06 -05:00
Quincey Koziol
fe76fb1b58 [svn-r8844] Purpose:
Bug fix

Description:
    The "shared" raw B-tree node can get freed before all the B-tree nodes
had been flushed out to disk and released by the cache.

Solution:
    Implement a simple reference counting wrapper for objects in the library
and use it to hold the shared raw B-tree nodes so they aren't freed before all
references to them in memory are released.

Platforms tested:
    Solaris 2.7 (arabica)
    FreeBSD 4.10 (sleipnir)
    IRIX64 6.5 (modei4)
2004-07-08 21:06:29 -05:00
Quincey Koziol
585d31b7cb [svn-r8823] Purpose:
Code optimization

Description:
    Since the raw B-tree nodes are the same size and only used when reading in
or writing out a B-tree node, move raw B-tree node buffer from being per node
to a single node that is shared among all B-tree nodes of a particular tree,
freeing up a lot of space and eliminating lots of memory copies, etc.

Platforms tested:
    Solaris 2.7 (arabica)
    FreeBSD 4.10 (sleipnir) w/parallel
    Too minor to require h5committest
2004-07-07 16:23:45 -05:00
Quincey Koziol
339a81a766 [svn-r8613] Purpose:
Refactor code

Description:
    Move chunk and contiguous cached raw data from file information to dataset
information.  This simplifies a number of internal interfaces, aligns the
code with it's purpose better and should allow more optimizations to the
chunked data I/O performance.

Platforms tested:
    Solaris 2.7 (arabica)
    FreeBSD 4.10 (sleipnir)
    h5committest

Misc. update:
2004-06-05 14:04:49 -05:00
Quincey Koziol
1ec351813b [svn-r8600] Purpose:
Code optimization

Description:
    Don't recompute the internal index value for looking up the chunk in the
hash table, just use the value already computed from iterating through the
chunks.

Platforms tested:
    Solaris 2.7 (arabica)
    FreeBSD 4.9 (sleipnir) w/parallel
2004-05-31 14:59:59 -05:00
Quincey Koziol
d8cfeadd90 [svn-r8158] Purpose:
Code cleanup/optimization

Description:
    Query property list values once, at the beginning of the I/O routines,
instead of querying the property list values multiple (lots!) of times in
lower level routines.

Solution:
    Create "property list caches" for internal library queries of the property
list values.

Platforms tested:
    IBM p690 (copper) w/parallel & fphdf5
    h5committest
2004-02-06 10:34:01 -05:00
Quincey Koziol
31431be374 [svn-r7917] Purpose:
Code cleanup

Description:
    Clean up compiler warnings, especially the 'FUNC' variable not used which
comes out in production mode.

Solution:
    Had to add a new FUNC_ENTER_NOAPI_NOINIT_NOFUNC macro for those non-API
functions which don't need the 'FUNC' variable defined.  (This will be _so_
much easier when C99 is standard on all our supposed platforms, since it has a
__FUNC__ macro... )

Platforms tested:
    FreeBSD 4.9 (sleipnir)
    too minor for h5committest (although there were lots of files changed, the
        change was minor in each one)
2003-12-06 15:38:31 -05:00
Raymond Lu
d1f7c81a46 [svn-r7784] *** empty log message *** 2003-10-29 12:04:58 -05:00
Bill Wendling
543c958928 [svn-r7471] Purpose:
Update

Description:
    The F_open and F_flush functions had a lot of cruft in them. The
    F_flush was being used as a way to allocate the superblock. The
    F_open had a bunch of code in there to read and serialize the
    superblock.

Solution:
    Moved these out into their own functions.

Platforms tested:
    Modi4 (parallel, Fortran)
    Copper (parallel, Fortran)
    Verbena (Fortran, C++)
    Sol (Fortran)

Misc. update:
2003-09-12 18:10:22 -05:00
Quincey Koziol
9881fa7e34 [svn-r7381] Purpose:
Code cleanup

Description:
    Various cleanups resulting from running lint tool over H5F.c source module

Platforms tested:
    FreeBSD 4.8 (sleipnir)
    too minor to require h5committest
2003-08-18 11:34:27 -05:00
Quincey Koziol
bdc659f2bb [svn-r7316] Purpose:
Code cleanup

Description:
    Removed prototype for H5F_addr_pack() routine.

Platforms tested:
    h5committested
2003-08-08 14:16:07 -05:00
Quincey Koziol
e9cc951e03 [svn-r7232] Purpose:
Bug fix

Description:
    When a non-default indexed storage B-tree internal 'K' value is set by the
user, the chunked datasets created in that file (until it is closed) use the
user's 'K' value and the data can be accessed correctly, but the 'K' value is
not stored in the file.
    However, once the file is closed and re-opened, the non-default 'K' value
is lost and the data in the chunked datasets will not be able to be accessed
correctly.

Solution:
    Store the indexed storage B-tree internal 'K' value in the superblock.

Platforms tested:
    FreeBSD 4.8 (sleipnir)
    h5committest
2003-07-16 09:56:58 -05:00
Quincey Koziol
932101bb80 [svn-r7201] Purpose:
Code cleanup

Description:
    Finish converting the B-tree 'K' values to use unsigned integers, rather
than signed ones, since negative amounts of entries in a B-tree node aren't
meaningful.

Platforms tested:
    FreeBSD 4.8 (sleipnir)
    h5committest
2003-07-10 14:39:04 -05:00
Quincey Koziol
839de1e367 [svn-r7189] Purpose:
Code cleanup

Description:
    Break some of the "debugging" routines into their own module, so they
aren't pulled into every executable, which certainly isn't going to use them.

Platforms tested:
    h5committested
2003-07-09 13:00:43 -05:00
Quincey Koziol
f2048a2379 [svn-r7184] Purpose:
Code cleanup

Description:
    Clean up various warnings from lint

Platforms tested:
    FreeBSD 4.8 (sleipnir)
    no major changes requiring h5committest
2003-07-08 16:05:27 -05:00
Quincey Koziol
87a5f6480c [svn-r7122] Purpose:
Code cleanup/Feature removal

Description:
    Remove "round robin" writing of metadata in MPI VFDs (and a couple of other
places).  This never really worked the way I hoped it would and it causes
problems on certain machines.

Platforms tested:
    FreeBSD 4.8 (sleipnir) w/parallel
    Too small for triple check.
2003-06-30 10:53:02 -05:00
Quincey Koziol
d0d6ef4a90 [svn-r7057] Purpose:
Bug fix, refactored code

Description:
    Fixed closing objects for "strong" file degree, which previously would
sometime attempt to close the same object twice (when a named datatype and
a dataset which used it were both left open before the file was closed).

    Stopped datatype iteration from querying for the group entry of non-named
datatypes.

    Added attributes to the list of objects that can be queried by
H5Fget_obj_count and H5Fget_obj_ids, since they can hold open a file also.

    Took a suggestion from Robb to return the number of open objects
in the return values of H5Fget_obj_count and H5Fget_obj_ids.

    Also, added a "max_objs" parameter to the H5Fget_obj_ids function, so that
it can work well with staticly allocated arrays.


Platforms tested:
    FreeBSD 4.8 (sleipnir)
    h5committest
2003-06-18 15:50:22 -05:00
Quincey Koziol
b496ac1482 [svn-r6878] Purpose:
Code cleanup

Description:
    Limit the scope on more function prototypes/macros/typedefs.

Platforms tested:
    FreeBSD 4.8 (sleipnir)
    h5committest not necessary.
2003-05-15 14:22:33 -05:00
Quincey Koziol
43e3b45021 [svn-r6825] Purpose:
New feature/enhancement

Description:
    Chunked datasets are handled poorly in several circumstances involving
certain selections and chunks that are too large for the chunk cache and/or
chunks with filters, causing the chunk to be read from disk multiple times.

Solution:
    Rearrange raw data I/O infrastructure to handle chunked datasets in a much
more friendly way by creating a selection in memory and on disk for each chunk
in a chunked dataset and performing all of the I/O on that chunk at one time.

    There are still some scalability (the current code attempts to
create a selection for all the chunks in the dataset, instead of just the
chunks that are accessed, requiring portions of the istore.c and fillval.c
tests to be commented out) and performance issues, but checking this in will
allow the changes to be tested by a much wider audience while I address the
remaining issues.


Platforms tested:
    h5committested, FreeBSD 4.8 (sleipnir) serial & parallel, Linux 2.4 (eirene)
2003-05-07 16:52:24 -05:00
Quincey Koziol
f37cc25026 [svn-r6653] Purpose:
New feature.

Description:
    Added ability to free space used for storing raw data for both contiguous
and chunked datasets.


Platforms tested:
    FreeBSD 4.8 (sleipnir) w/C++
    Linux 2.4 (burrwhite) w/FORTRAN
    Solaris 2.7 (arabica) w/FORTRAN
    IRIX64 6.5 (modi4) w/parallel & FORTRAN

    (h5committest not run due to my ongoing difficulties with C++ on burrwhite).
2003-04-13 23:46:56 -05:00
Quincey Koziol
a52914987e [svn-r6497] Purpose:
Finish code cleanup

Description:
    Wrap up the conversion of H5F_flush's multiple boolean flags into a single
bitfield of flags by pushing the flags down into the H5AC_flush and
H5F_istore_flush routines.
    Also, changed the flags from H5_FLUSH_<foo> to H5F_FLUSH_<foo> to be more
consistent with rest of library.
    And reverted the changes to H5FDflush and H5FD_flush routines.

Platforms tested:
    FreeBSD 4.7 (sleipnir)
    Solaris 5.8 (sol)
    IRIX64 6.5 (modi4) w/parallel

Misc. update:
2003-03-19 13:58:54 -05:00
Bill Wendling
d317b8b404 [svn-r6496] Purpose:
Refactoring of Flush Logic

Description:
    The Flushing logic passed in multiple flags to indicate what type of
    flush it was: closing, invalidate, alloc only. This made extending
    the function of the flush logic to handle other flags annoying.

Solution:
    I changed it to be just one bitmasked flag to indicate what type of
    flushing to do. I also added the CLEAR_ONLY flag, which will be used
    in the FPHDF5 stuff.

Platforms tested:
    h5committest doesn't work for me (my environment isn't setup on the
    other machines I guess). I tested it manually:

        Linux parallel & C++
        Sol Fortran
        Modi4 parallel & Fortran.
2003-03-19 12:02:23 -05:00
Quincey Koziol
24d8506dd5 [svn-r6387] Purpose:
Bug Fix

Description:
    Metadata cache in parallel I/O can cause hangs in applications which
    perform independent I/O on chunked datasets, because the metadata cache
    can attempt to flush out dirty metadata from only a single process, instead
    of collectively from all processes.

Solution:
    Pass a dataset transfer property list down from every API function which
    could possibly trigger metadata I/O.

    Then, split the metadata cache into two sets of entries to allow dirty
    metadata to be set aside when a hash table collision occurs during
    independent I/O.

Platforms tested:
    Tested h5committest {arabica (fortran), eirene (fortran, C++)
        modi4 (parallel, fortran)}

    FreeBSD 4.7 (sleipnir) serial & parallel

Misc. update:
    Updated release_docs/RELEASE
2003-02-10 12:26:09 -05:00
Quincey Koziol
9a433b99a5 [svn-r6252] Purpose:
Lots of performance improvements & a couple new internal API interfaces.

Description:
    Performance Improvements:
        - Cached file offset & length sizes in shared file struct, to avoid
            constantly looking them up in the FCPL.
        - Generic property improvements:
            - Added "revision" number to generic property classes to speed
                up comparisons.
            - Changed method of storing properties from using a hash-table
                to the TBBT routines in the library.
            - Share the propery names between classes and the lists derived
                from them.
            - Removed redundant 'def_value' buffer from each property.
            - Switching code to use a "copy on write" strategy for
                properties in each list, where the properties in each list
                are shared with the properties in the class, until a
                property's value is changed in a list.
        - Fixed error in layout code which was allocating too many buffers.
        - Redefined public macros of the form (H5open()/H5check, <variable>)
            internally to only be (<variable>), avoiding innumerable useless
            calls to H5open() and H5check_version().
        - Reuse already zeroed buffers in H5F_contig_fill instead of
            constantly re-zeroing them.
        - Don't write fill values if writing entire dataset.
        - Use gettimeofday() system call instead of time() system when
            checking the modification time of a dataset.
        - Added reference counted string API and use it for tracking the
            names of objects opening in a file (for the ID->name code).
        - Removed redundant H5P_get() calls in B-tree routines.
        - Redefine H5T datatype macros internally to the library, to avoid
            calling H5check redundantly.
        - Keep dataspace information for dataset locally instead of reading
            from disk each time.  Added new module to track open objects
            in a file, to allow this (which will be useful eventually for
            some FPH5 metadata caching issues).
        - Remove H5AC_find macro which was inlining metadata cache lookups,
            and call function instead.
        - Remove redundant memset() calls from H5G_namei() routine.
        - Remove redundant checking of object type when locating objects
            in metadata cache and rely on the address only.
        - Create default dataset object to use when default dataset creation
            property list is used to create datasets, bypassing querying
            for all the property list values.
        - Use default I/O vector size when performing raw data with the
            default dataset transfer property list, instead of querying for
            I/O vector size.
        - Remove H5P_DEFAULT internally to the library, replacing it with
            more specific default property list based on the type of
            property list needed.
        - Remove redundant memset() calls in object header message (H5O*)
            routines.
        - Remove redunant memset() calls in data I/O routines.
        - Split free-list allocation routines into malloc() and calloc()-
            like routines, instead of one combined routine.
        - Remove lots of indirection in H5O*() routines.
        - Simplify metadata cache entry comparison routine (used when
            flushing entire cache out).
        - Only enable metadata cache statistics when H5AC_DEBUG is turned
            on, instead of always tracking them.
        - Simplify address comparison macro (H5F_addr_eq).
        - Remove redundant metadata cache entry protections during dataset
            creation by protecting the object header once and making all
            the modifications necessary for the dataset creation before
            unprotecting it.
        - Reduce # of "number of element in extent" computations performed
            by computing and storing the value during dataspace creation.
        - Simplify checking for group location's file information, when file
            has not been involving in file-mounting operations.
        - Use binary encoding for modification time, instead of ASCII.
        - Hoist H5HL_peek calls (to get information in a local heap)
            out of loops in many group routine.
        - Use static variable for iterators of selections, instead of
            dynamically allocation them each time.
        - Lookup & insert new entries in one step, avoiding traversing
            group's B-tree twice.
        - Fixed memory leak in H5Gget_objname_idx() routine (tangential to
            performance improvements, but fixed along the way).
        - Use free-list for reference counted strings.
        - Don't bother copying object names into cached group entries,
            since they are re-created when an object is opened.

        The benchmark I used to measure these results created several thousand
        small (2K) datasets in a file and wrote out the data for them.  This is
        Elena's "regular.c" benchmark.

        These changes resulted in approximately ~4.3x speedup of the
        development branch when compared to the previous code in the
        development branch and ~1.4x speedup compared to the release
        branch.

        Additionally, these changes reduce the total memory used (code and
        data) by the development branch by ~800KB, bringing the development
        branch back into the same ballpark as the release branch.

        I'll send out a more detailed description of the benchmark results
        as a followup note.

    New internal API routines:
        Added "reference counted strings" API for tracking strings that get
            used by multiple owners without duplicating the strings.
        Added "ternary search tree" API for text->object mappings.

Platforms tested:
    Tested h5committest {arabica (fortran), eirene (fortran, C++)
	modi4 (parallel, fortran)}
    Other platforms/configurations tested?
        FreeBSD 4.7 (sleipnir) serial & parallel
        Solaris 2.6 (baldric) serial
2003-01-09 12:20:03 -05:00
Raymond Lu
437dd9be23 [svn-r6145]
Purpose:
    New feature to H5Dget_offset
Description:
    If user block is set, H5Dget_offset should be able to return the absolute
    offset from the beginning of file.
Platforms tested:
    eirene, arabica
2002-12-02 14:47:57 -05:00
Bill Wendling
01b3ee75cf [svn-r6057] Purpose:
New Feature. Support for new FPHDF5 Feature
Description:
    More support for the FPHDF5 feature. This splits the H5D_create
    function into separate parts which update the metadata cache. It was
    necessary to split apart the H5O_create function to do a similar
    thing since it would allocate real space on the hard disk.

    I'm checking this up now so that I don't get too far away from what
    the CVS repository has and so that others may look at the code and
    retch^H^H^H^H^Hmarvel at it. If there are any comments, send them my
    way.

    There is one outstanding issue, though. I need to use non-API
    functions in the FPHDF5 stuff. I'm using some APIs right now and
    should migrate to using others. At the moment, I'm putting that on
    the back burner until I'm more along in the implementation.
Platforms tested:
    Arabica (C++)
    Eirene (Parallel)
    Modi4 (Parallel)
2002-11-05 12:55:27 -05:00
Bill Wendling
f5b0c68a53 [svn-r6028] Purpose:
Bug Fix
Description:
    The NBYTE{ENCODE,DECODE} macros were updating the pointer "p" to a
    new value instead of one of the "real" pointers passed into the
    macro.
Solution:
    Changed it so that it updates the destination pointer which gets
    passed into these macros.

    I'm not sure if this is correct, since neither of these macros are
    actually used in our source code...
Platforms tested:
    They aren't used, so no testing possible.
2002-10-23 14:35:36 -05:00
Raymond Lu
d1e26ae328 [svn-r5951]
Purpose:
    New API functions
Description:
    Added API functions to return pointer to low-level file handle
    (H5Fget_vfd_handle and H5FDget_vfd_handle) and related property list
    setting functions(H5Pset_family_offset and H5Pset_multi_type).
Platforms tested:
    Linux 2.2(eirene), Solaris 2.7(arabica), IRIX64 6.5(modi4)
2002-09-30 11:31:55 -05:00
MuQun Yang
e5b28ef37b [svn-r5931]
Purpose:
__DLL__ is a keyword in some platforms and __DLL__ is also defined as a macro for windows DLL applications.
That causes problems.
Description:
Solution:
Use H5_DLL*** to replace __DLL***__ at all header files.
Change the macro defination at H5api_adpt.h.
Platforms tested:
linux2.2.18smp, irix64, solaris 2.7 and windows 2000
2002-09-20 15:36:09 -05:00
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
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