This page is under construction and subject to change.
This release includes changes in the HDF5 storage format.
See the HDF5 File Format Specification for complete details on the changes. This specification describes how the bytes in an HDF5 file are organized on the storage media where the file is kept. In other words, when a file is written to disk, the file will be written according to the information described in this file. The following sections have been added or changed:
PLEASE NOTE that HDF5-1.10 and earlier releases cannot read files created with the new features described below that are marked with a *.
HDF5 1.12 introduces several new features in the HDF5 library:
- Chunk Query Functions
- H5Fdelete and Changes to the Virtual File Layer
- Hyperslab Performance Improvements
- References API
- Virtual File Drivers (S3 and HFDS)
- Virtual Object Layer (VOL)
H5Fdelete and Changes to the Virtual File Layer (VFL) (RFC)
With the new virtual object layer (VOL), HDF5 "files" can map to arbitrary storage schemes such as object stores and relational database tables. The data created by these implementations may be inconvenient for a user to remove without a detailed knowledge of the storage scheme. The H5Fdelete() API was introduced to give VOL connector authors the ability to add connector-specific delete code to their connectors so that users can remove these "files" without detailed knowledge of the storage scheme.
|H5F_DELETE||Deletes an HDF5 file|
Since HDF5 storage can differ among the virtual file drivers, changes had to be made so that each Virtual File Driver (VFD) could have its own driver-specific cleanup code.
Hyperslab Performance Improvements
VDS and Hyperslab performance have been improved dramatically.
References API (RFC) *
While the previous H5R API supported both object and region references, it was lacking in functionality and flexibility: there was no support for attribute or external references, and it was not suitable for use outside of native HDF5 files, a requirement of the virtual object layer (VOL). In order to support these features several functions were introduced:
- Create (H5R_CREATE*) functions were added for each reference type: object, dataset region and attribute.
- A function was added to release a reference (H5R_DESTROY). This is required because a region reference no longer modifies the original file.
- Functions were added to query references (H5R_GET*).
- Other functions were added to simplify or clarify the API.
The H5R functions that were introduced are described below.
|H5R_COPY||Copies an existing reference|
|H5R_CREATE_ATTR||Creates an attribute reference|
|H5R_CREATE_OBJECT||Creates an object reference|
|H5R_CREATE_REGION||Creates a region reference|
|H5R_DECODE||Decodes a reference from a buffer|
|H5R_DESTROY||Closes a reference|
|H5R_ENCODE||Encodes a reference into a buffer|
|H5R_EQUAL||Determines whether two references are equal|
|H5R_GET_ATTR_NAME||Retrieves the attribute name for a referenced object|
|H5R_GET_FILE_NAME||Retrieves the file name for a referenced object|
|H5R_GET_OBJ_NAME||Retrieves the object name for a referenced object|
|H5R_GET_OBJ_TYPE3||Retrieves the type of object that an object reference points to|
|H5R_GET_TYPE||Retrieves the type of reference|
|H5R_OPEN_ATTR||Opens the referenced HDF5 attribute|
|H5R_OPEN_OBJECT||Opens the referenced HDF5 object|
|H5R_OPEN_REGION||Sets up a dataspace and selection as specified by a region reference|
The Virtual Object Layer (VOL) is an abstraction layer within the HDF5 library that enables different methods for accessing data and objects that conform to the HDF5 data model. The VOL intercepts all HDF5 API calls that potentially modify data on disk and forwards those calls to a plugin "object driver". The data on disk can be a different format than the HDF5 format.
The plugins can actually store the objects in variety of ways. A plugin could, for example, have objects be distributed remotely over different platforms, provide a raw mapping of the model to the file system, or even store the data in other file formats (like native netCDF or HDF4 format). The user still gets the same data model where access is done to a single HDF5 “container”; however the plugin object driver translates from what the user sees to how the data is actually stored. Having this abstraction layer maintains the object model of HDF5 and allows better usage of new object storage file systems that are targeted for Exascale systems.
The following functions were introduced to support this feature:
|H5P_GET_VOL_ID||Returns the identifier of the current VOL connector|
|H5P_GET_VOL_INFO||Returns a copy of the VOL information for a connector|
|H5P_SET_VOL||Set the file VOL connector for a file access property list|
|H5VL_CLOSE||Closes a VOL connector identifier|
|H5VL_GET_CONNECTOR_ID||Retrieves the identifier for a registered VOL connector|
Retrieves the connector name for the VOL associated with the object or file identifier
|H5VL_IS_CONNECTOR_REGISTERED||Tests whether a VOL class has been registered or not|
|H5VL_REGISTER_CONNECTOR||Registers a new VOL connector|
|H5VL_REGISTER_CONNECTOR_BY_NAME||Registers a new VOL connector by name|
|H5VL_REGISTER_CONNECTOR_BY_VALUE||Registers a new VOL connector by connector value|
|H5VL_UNREGISTER_CONNECTOR||Removes a VOL connector identifier from the library|