summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2010-05-05 19:18:32 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2010-05-05 19:18:32 (GMT)
commitb60f90da91886edc2afaaca9bf1587d7591051e1 (patch)
tree9f0c5f09e65af4c1b45e3e0577c2310df8242b7b
parentb05a1c671317403994e4bff5564563f41d348eea (diff)
downloadhdf5-b60f90da91886edc2afaaca9bf1587d7591051e1.zip
hdf5-b60f90da91886edc2afaaca9bf1587d7591051e1.tar.gz
hdf5-b60f90da91886edc2afaaca9bf1587d7591051e1.tar.bz2
[svn-r18711] Description:
More changes to move metadata journaling code closer to trunk: - Retire old (H5AC1) cache code & tests - Remove 'clear_dirty_bits' callback from client class struct - Eliminate 'addr' & 'len' parameters from 'free_icr' client callbacks Tested on: Mac OS X/32 10.6.3 (amazon) debug & production Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
-rw-r--r--MANIFEST13
-rwxr-xr-xbin/trace2
-rw-r--r--src/H5.c4
-rw-r--r--src/H5AC1.c4741
-rw-r--r--src/H5AC1pkg.h325
-rw-r--r--src/H5AC1private.h328
-rw-r--r--src/H5AC1public.h453
-rw-r--r--src/H5B2cache.c15
-rw-r--r--src/H5B2test.c2
-rw-r--r--src/H5Bcache.c5
-rw-r--r--src/H5C.c73
-rw-r--r--src/H5C1.c8782
-rw-r--r--src/H5C1pkg.h3402
-rw-r--r--src/H5C1private.h1081
-rw-r--r--src/H5C1public.h61
-rw-r--r--src/H5Cprivate.h79
-rw-r--r--src/H5Dchunk.c3
-rw-r--r--src/H5F.c32
-rw-r--r--src/H5FScache.c12
-rw-r--r--src/H5Fpkg.h4
-rw-r--r--src/H5Fpublic.h6
-rw-r--r--src/H5Gnode.c5
-rw-r--r--src/H5HFcache.c17
-rwxr-xr-xsrc/H5HGcache.c5
-rw-r--r--src/H5HLcache.c10
-rw-r--r--src/H5Oalloc.c8
-rw-r--r--src/H5Ocache.c10
-rw-r--r--src/H5Ochunk.c4
-rw-r--r--src/H5Pfapl.c33
-rw-r--r--src/H5Ppublic.h5
-rw-r--r--src/H5SMcache.c10
-rw-r--r--src/H5private.h1
-rwxr-xr-xsrc/Makefile.am8
-rw-r--r--src/Makefile.in60
-rw-r--r--src/hdf5.h1
-rw-r--r--test/Makefile.am4
-rw-r--r--test/Makefile.in61
-rw-r--r--test/cache1.c28237
-rw-r--r--test/cache1_api.c4058
-rw-r--r--test/cache1_common.c4613
-rw-r--r--test/cache1_common.h786
-rw-r--r--test/cache_api.c46
-rw-r--r--test/cache_common.c42
-rw-r--r--test/cache_common.h20
-rw-r--r--test/cache_jnl_file_marking.c2
-rw-r--r--test/cache_journal.c2
-rw-r--r--testpar/Makefile.am2
-rw-r--r--testpar/Makefile.in18
-rw-r--r--testpar/t_cache.c89
-rw-r--r--testpar/t_cache1.c5819
-rw-r--r--tools/h5recover/h5recover.c8
51 files changed, 194 insertions, 63213 deletions
diff --git a/MANIFEST b/MANIFEST
index 4aa430e..2b72f39 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -441,10 +441,6 @@
./src/H5Apkg.h
./src/H5Aprivate.h
./src/H5Apublic.h
-./src/H5AC1.c
-./src/H5AC1pkg.h
-./src/H5AC1private.h
-./src/H5AC1public.h
./src/H5AC.c
./src/H5ACpkg.h
./src/H5ACprivate.h
@@ -463,10 +459,6 @@
./src/H5B2public.h
./src/H5B2stat.c
./src/H5B2test.c
-./src/H5C1.c
-./src/H5C1pkg.h
-./src/H5C1private.h
-./src/H5C1public.h
./src/H5C.c
./src/H5Cjournal.c
./src/H5Cpkg.h
@@ -767,13 +759,9 @@
./test/big.c
./test/bittests.c
./test/btree2.c
-./test/cache1.c
./test/cache.c
-./test/cache1_api.c
./test/cache_api.c
-./test/cache1_common.c
./test/cache_common.c
-./test/cache1_common.h
./test/cache_common.h
./test/cache_jnl_file_marking.c
./test/cache_journal.c
@@ -957,7 +945,6 @@
./testpar/COPYING
./testpar/Makefile.am
./testpar/Makefile.in
-./testpar/t_cache1.c
./testpar/t_cache.c
./testpar/t_dset.c
./testpar/t_file.c
diff --git a/bin/trace b/bin/trace
index 370ceb6..db4e788 100755
--- a/bin/trace
+++ b/bin/trace
@@ -90,7 +90,7 @@ $Source = "";
"H5A_operator1_t" => "x",
"H5A_operator2_t" => "x",
"H5A_info_t" => "x",
- "H5AC1_cache_config_t" => "x",
+ "H5AC_cache_config_t" => "x",
"H5D_operator_t" => "x",
"H5E_auto_t" => "x",
"H5E_auto1_t" => "x",
diff --git a/src/H5.c b/src/H5.c
index 3ce0b2e..795e30e 100644
--- a/src/H5.c
+++ b/src/H5.c
@@ -22,7 +22,6 @@
/* Headers */
/***********/
#include "H5private.h" /* Generic Functions */
-#include "H5AC1private.h" /* Metadata cache */
#include "H5Dprivate.h" /* Datasets */
#include "H5Eprivate.h" /* Error handling */
#include "H5FLprivate.h" /* Free lists */
@@ -173,8 +172,6 @@ H5_init_library(void)
HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize datatype interface")
if(H5D_init() < 0)
HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize dataset interface")
- if(H5AC1_init() < 0)
- HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize metadata caching interface")
if(H5AC_init() < 0)
HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize metadata caching interface")
if(H5L_init() < 0)
@@ -263,7 +260,6 @@ H5_term_library(void)
* that depend on them. -QAK
*/
if(pending == 0) {
- pending += DOWN(AC1);
pending += DOWN(AC);
pending += DOWN(Z);
pending += DOWN(FD);
diff --git a/src/H5AC1.c b/src/H5AC1.c
deleted file mode 100644
index 99dffd6..0000000
--- a/src/H5AC1.c
+++ /dev/null
@@ -1,4741 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*-------------------------------------------------------------------------
- *
- * Created: H5AC1.c
- * Jul 9 1997
- * Robb Matzke <matzke@llnl.gov>
- *
- * Purpose: Functions in this file implement a cache for
- * things which exist on disk. All "things" associated
- * with a particular HDF file share the same cache; each
- * HDF file has it's own cache.
- *
- * Modifications:
- *
- * Robb Matzke, 4 Aug 1997
- * Added calls to H5E.
- *
- * Quincey Koziol, 22 Apr 2000
- * Turned on "H5AC1_SORT_BY_ADDR"
- *
- * John Mainzer, 5/19/04
- * Complete redesign and rewrite. See the header comments for
- * H5AC1_t for an overview of what is going on.
- *
- * John Mainzer, 6/4/04
- * Factored the new cache code into a separate file (H5C.c) to
- * facilitate re-use. Re-worked this file again to use H5C.
- *
- *-------------------------------------------------------------------------
- */
-
-#define H5AC1_PACKAGE /*suppress error about including H5ACpkg */
-#define H5C1_PACKAGE /*suppress error about including H5Cpkg */
-#define H5F_PACKAGE /*suppress error about including H5Fpkg */
-
-/* Interface initialization */
-#define H5_INTERFACE_INIT_FUNC H5AC1_init_interface
-
-#ifdef H5_HAVE_PARALLEL
-#include <mpi.h>
-#endif /* H5_HAVE_PARALLEL */
-
-#include "H5private.h" /* Generic Functions */
-#include "H5AC1pkg.h" /* Metadata cache */
-#include "H5C1pkg.h" /* Cache */
-#include "H5Dprivate.h" /* Dataset functions */
-#include "H5Eprivate.h" /* Error handling */
-#include "H5Fpkg.h" /* Files */
-#include "H5FDprivate.h" /* File drivers */
-#include "H5FLprivate.h" /* Free Lists */
-#include "H5Iprivate.h" /* IDs */
-#include "H5MMprivate.h" /* Memory management */
-#include "H5Pprivate.h" /* Property lists */
-
-
-#ifdef H5_HAVE_PARALLEL
-
-/* Declare a free list to manage the H5AC1_aux_t struct */
-H5FL_DEFINE_STATIC(H5AC1_aux_t);
-
-#endif /* H5_HAVE_PARALLEL */
-
-/****************************************************************************
- *
- * structure H5AC1_slist_entry_t
- *
- * The dirty entry list maintained via the d_slist_ptr field of H5AC1_aux_t
- * and the cleaned entry list maintained via the c_slist_ptr field of
- * H5AC1_aux_t are just lists of the file offsets of the dirty/cleaned
- * entries. Unfortunately, the slist code makes us define a dynamically
- * allocated structure to store these offsets in. This structure serves
- * that purpose. Its fields are as follows:
- *
- * magic: Unsigned 32 bit integer always set to
- * H5AC1__H5AC1_SLIST_ENTRY_T_MAGIC. This field is used to
- * validate pointers to instances of H5AC1_slist_entry_t.
- *
- * addr: file offset of a metadata entry. Entries are added to this
- * list (if they aren't there already) when they are marked
- * dirty in an unprotect, inserted, or renamed. They are
- * removed when they appear in a clean entries broadcast.
- *
- ****************************************************************************/
-
-#ifdef H5_HAVE_PARALLEL
-
-#define H5AC1__H5AC1_SLIST_ENTRY_T_MAGIC 0x00D0A02
-
-typedef struct H5AC1_slist_entry_t
-{
- uint32_t magic;
-
- haddr_t addr;
-} H5AC1_slist_entry_t;
-
-/* Declare a free list to manage the H5AC1_slist_entry_t struct */
-H5FL_DEFINE_STATIC(H5AC1_slist_entry_t);
-
-#endif /* H5_HAVE_PARALLEL */
-
-
-/*
- * Private file-scope variables.
- */
-
-/* Default dataset transfer property list for metadata I/O calls */
-/* (Collective set, "block before metadata write" set and "library internal" set) */
-/* (Global variable definition, declaration is in H5ACprivate.h also) */
-hid_t H5AC1_dxpl_id=(-1);
-
-/* Private dataset transfer property list for metadata I/O calls */
-/* (Collective set and "library internal" set) */
-/* (Static variable definition) */
-static hid_t H5AC1_noblock_dxpl_id=(-1);
-
-/* Dataset transfer property list for independent metadata I/O calls */
-/* (just "library internal" set - i.e. independent transfer mode) */
-/* (Global variable definition, declaration is in H5ACprivate.h also) */
-hid_t H5AC1_ind_dxpl_id=(-1);
-
-
-/*
- * Private file-scope function declarations:
- */
-
-static herr_t H5AC1_check_if_write_permitted(const H5F_t *f,
- hid_t dxpl_id,
- hbool_t * write_permitted_ptr);
-
-#ifdef H5_HAVE_PARALLEL
-static herr_t H5AC1_broadcast_clean_list(H5AC1_t * cache_ptr);
-#endif /* JRM */
-
-static herr_t H5AC1_ext_config_2_int_config(H5AC1_cache_config_t * ext_conf_ptr,
- H5C1_auto_size_ctl_t * int_conf_ptr);
-
-#ifdef H5_HAVE_PARALLEL
-static herr_t H5AC1_log_deleted_entry(H5AC1_t * cache_ptr,
- H5AC1_info_t * entry_ptr,
- haddr_t addr,
- unsigned int flags);
-
-static herr_t H5AC1_log_dirtied_entry(H5AC1_t * cache_ptr,
- H5C1_cache_entry_t * entry_ptr,
- haddr_t addr,
- hbool_t size_changed,
- size_t new_size);
-
-static herr_t H5AC1_log_flushed_entry(H5C1_t * cache_ptr,
- haddr_t addr,
- hbool_t was_dirty,
- unsigned flags,
- int type_id);
-
-#if 0 /* this is useful debugging code -- JRM */
-static herr_t H5AC1_log_flushed_entry_dummy(H5C1_t * cache_ptr,
- haddr_t addr,
- hbool_t was_dirty,
- unsigned flags,
- int type_id);
-#endif /* JRM */
-
-static herr_t H5AC1_log_inserted_entry(H5F_t * f,
- H5AC1_t * cache_ptr,
- H5AC1_info_t * entry_ptr,
- const H5AC1_class_t * type,
- haddr_t addr);
-
-static herr_t H5AC1_propagate_flushed_and_still_clean_entries_list(H5F_t * f,
- hid_t dxpl_id,
- H5AC1_t * cache_ptr,
- hbool_t do_barrier);
-
-static herr_t H5AC1_receive_and_apply_clean_list(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5AC1_t * cache_ptr);
-
-static herr_t H5AC1_log_renamed_entry(H5AC1_t * cache_ptr,
- haddr_t old_addr,
- haddr_t new_addr);
-#endif /* H5_HAVE_PARALLEL */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_init
- *
- * Purpose: Initialize the interface from some other layer.
- *
- * Return: Success: non-negative
- *
- * Failure: negative
- *
- * Programmer: Quincey Koziol
- * Saturday, January 18, 2003
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5AC1_init(void)
-{
- herr_t ret_value=SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5AC1_init, FAIL)
- /* FUNC_ENTER() does all the work */
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-}
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_init_interface
- *
- * Purpose: Initialize interface-specific information
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Quincey Koziol
- * Thursday, July 18, 2002
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5AC1_init_interface(void)
-{
-#ifdef H5_HAVE_PARALLEL
- H5P_genclass_t *xfer_pclass; /* Dataset transfer property list class object */
- H5P_genplist_t *xfer_plist; /* Dataset transfer property list object */
- unsigned block_before_meta_write; /* "block before meta write" property value */
- unsigned library_internal=1; /* "library internal" property value */
- H5FD_mpio_xfer_t xfer_mode; /* I/O transfer mode property value */
- herr_t ret_value=SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT(H5AC1_init_interface)
-
- /* Sanity check */
- HDassert(H5P_CLS_DATASET_XFER_g!=(-1));
-
- /* Get the dataset transfer property list class object */
- if (NULL == (xfer_pclass = H5I_object(H5P_CLS_DATASET_XFER_g)))
- HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get property list class")
-
- /* Get an ID for the blocking, collective H5AC dxpl */
- if ((H5AC1_dxpl_id=H5P_create_id(xfer_pclass)) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
-
- /* Get the property list object */
- if (NULL == (xfer_plist = H5I_object(H5AC1_dxpl_id)))
- HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
-
- /* Insert 'block before metadata write' property */
- block_before_meta_write=1;
- if(H5P_insert(xfer_plist,H5AC1_BLOCK_BEFORE_META_WRITE_NAME,H5AC1_BLOCK_BEFORE_META_WRITE_SIZE,&block_before_meta_write,NULL,NULL,NULL,NULL,NULL,NULL)<0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
-
- /* Insert 'library internal' property */
- if(H5P_insert(xfer_plist,H5AC1_LIBRARY_INTERNAL_NAME,H5AC1_LIBRARY_INTERNAL_SIZE,&library_internal,NULL,NULL,NULL,NULL,NULL,NULL)<0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
-
- /* Set the transfer mode */
- xfer_mode=H5FD_MPIO_COLLECTIVE;
- if (H5P_set(xfer_plist,H5D_XFER_IO_XFER_MODE_NAME,&xfer_mode)<0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value")
-
- /* Get an ID for the non-blocking, collective H5AC dxpl */
- if ((H5AC1_noblock_dxpl_id=H5P_create_id(xfer_pclass)) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
-
- /* Get the property list object */
- if (NULL == (xfer_plist = H5I_object(H5AC1_noblock_dxpl_id)))
- HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
-
- /* Insert 'block before metadata write' property */
- block_before_meta_write=0;
- if(H5P_insert(xfer_plist,H5AC1_BLOCK_BEFORE_META_WRITE_NAME,H5AC1_BLOCK_BEFORE_META_WRITE_SIZE,&block_before_meta_write,NULL,NULL,NULL,NULL,NULL,NULL)<0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
-
- /* Insert 'library internal' property */
- if(H5P_insert(xfer_plist,H5AC1_LIBRARY_INTERNAL_NAME,H5AC1_LIBRARY_INTERNAL_SIZE,&library_internal,NULL,NULL,NULL,NULL,NULL,NULL)<0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
-
- /* Set the transfer mode */
- xfer_mode=H5FD_MPIO_COLLECTIVE;
- if (H5P_set(xfer_plist,H5D_XFER_IO_XFER_MODE_NAME,&xfer_mode)<0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value")
-
- /* Get an ID for the non-blocking, independent H5AC dxpl */
- if ((H5AC1_ind_dxpl_id=H5P_create_id(xfer_pclass)) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
-
- /* Get the property list object */
- if (NULL == (xfer_plist = H5I_object(H5AC1_ind_dxpl_id)))
- HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
-
- /* Insert 'block before metadata write' property */
- block_before_meta_write=0;
- if(H5P_insert(xfer_plist,H5AC1_BLOCK_BEFORE_META_WRITE_NAME,H5AC1_BLOCK_BEFORE_META_WRITE_SIZE,&block_before_meta_write,NULL,NULL,NULL,NULL,NULL,NULL)<0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
-
- /* Insert 'library internal' property */
- if(H5P_insert(xfer_plist,H5AC1_LIBRARY_INTERNAL_NAME,H5AC1_LIBRARY_INTERNAL_SIZE,&library_internal,NULL,NULL,NULL,NULL,NULL,NULL)<0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
-
- /* Set the transfer mode */
- xfer_mode=H5FD_MPIO_INDEPENDENT;
- if (H5P_set(xfer_plist,H5D_XFER_IO_XFER_MODE_NAME,&xfer_mode)<0)
- HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value")
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-
-#else /* H5_HAVE_PARALLEL */
- FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5AC1_init_interface)
-
- /* Sanity check */
- assert(H5P_LST_DATASET_XFER_g!=(-1));
-
- H5AC1_dxpl_id=H5P_DATASET_XFER_DEFAULT;
- H5AC1_noblock_dxpl_id=H5P_DATASET_XFER_DEFAULT;
- H5AC1_ind_dxpl_id=H5P_DATASET_XFER_DEFAULT;
-
- FUNC_LEAVE_NOAPI(SUCCEED)
-#endif /* H5_HAVE_PARALLEL */
-} /* end H5AC1_init_interface() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_term_interface
- *
- * Purpose: Terminate this interface.
- *
- * Return: Success: Positive if anything was done that might
- * affect other interfaces; zero otherwise.
- *
- * Failure: Negative.
- *
- * Programmer: Quincey Koziol
- * Thursday, July 18, 2002
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-int
-H5AC1_term_interface(void)
-{
- int n=0;
-
- FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5AC1_term_interface)
-
- if (H5_interface_initialize_g) {
-#ifdef H5_HAVE_PARALLEL
- if(H5AC1_dxpl_id>0 || H5AC1_noblock_dxpl_id>0 || H5AC1_ind_dxpl_id>0) {
- /* Indicate more work to do */
- n = 1; /* H5I */
-
- /* Close H5AC dxpl */
- if (H5I_dec_ref(H5AC1_dxpl_id) < 0 ||
- H5I_dec_ref(H5AC1_noblock_dxpl_id) < 0 ||
- H5I_dec_ref(H5AC1_ind_dxpl_id) < 0)
- H5E_clear_stack(NULL); /*ignore error*/
- else {
- /* Reset static IDs */
- H5AC1_dxpl_id=(-1);
- H5AC1_noblock_dxpl_id=(-1);
- H5AC1_ind_dxpl_id=(-1);
-
- /* Reset interface initialization flag */
- H5_interface_initialize_g = 0;
- } /* end else */
- } /* end if */
- else
-#else /* H5_HAVE_PARALLEL */
- /* Reset static IDs */
- H5AC1_dxpl_id=(-1);
- H5AC1_noblock_dxpl_id=(-1);
- H5AC1_ind_dxpl_id=(-1);
-
-#endif /* H5_HAVE_PARALLEL */
- /* Reset interface initialization flag */
- H5_interface_initialize_g = 0;
- } /* end if */
-
- FUNC_LEAVE_NOAPI(n)
-} /* end H5AC1_term_interface() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_create
- *
- * Purpose: Initialize the cache just after a file is opened. The
- * SIZE_HINT is the number of cache slots desired. If you
- * pass an invalid value then H5AC1_NSLOTS is used. You can
- * turn off caching by using 1 for the SIZE_HINT value.
- *
- * Return: Success: Number of slots actually used.
- *
- * Failure: Negative
- *
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Jul 9 1997
- *
- * Modifications:
- *
- * Complete re-design and re-write to support the re-designed
- * metadata cache.
- *
- * At present, the size_hint is ignored, and the
- * max_cache_size and min_clean_size fields are hard
- * coded. This should be fixed, but a parameter
- * list change will be required, so I will leave it
- * for now.
- *
- * Since no-one seems to care, the function now returns
- * one on success.
- * JRM - 4/28/04
- *
- * Reworked the function again after abstracting its guts to
- * the similar function in H5C.c. The function is now a
- * wrapper for H5C1_create().
- * JRM - 6/4/04
- *
- * Deleted the old size_hint parameter and added the
- * max_cache_size, and min_clean_size parameters.
- *
- * JRM - 3/10/05
- *
- * Deleted the max_cache_size, and min_clean_size parameters,
- * and added the config_ptr parameter. Added code to
- * validate the resize configuration before we do anything.
- *
- * JRM - 3/24/05
- *
- * Changed the type of config_ptr from H5AC1_auto_size_ctl_t *
- * to H5AC1_cache_config_t *. Propagated associated changes
- * through the function.
- * JRM - 4/7/05
- *
- * Added code allocating and initializing the auxilary
- * structure (an instance of H5AC1_aux_t), and linking it
- * to the instance of H5C1_t created by H5C1_create(). At
- * present, the auxilary structure is only used in PHDF5.
- *
- * JRM - 6/28/05
- *
- * Added code to set the prefix if required.
- *
- * JRM - 1/20/06
- *
- * Added code to initialize the new write_done field.
- *
- * JRM - 5/11/06
- *
- *-------------------------------------------------------------------------
- */
-
-static const char * H5AC1_entry_type_names[H5AC1_NTYPES] =
-{
- "B-tree nodes",
- "symbol table nodes",
- "local heaps",
- "global heaps",
- "object headers",
- "v2 B-tree headers",
- "v2 B-tree internal nodes",
- "v2 B-tree leaf nodes",
- "fractal heap headers",
- "fractal heap direct blocks",
- "fractal heap indirect blocks",
- "free space headers",
- "free space sections",
- "shared OH message master table",
- "shared OH message index",
- "test entry" /* for testing only -- not used for actual files */
-};
-
-herr_t
-H5AC1_create(const H5F_t *f,
- H5AC1_cache_config_t *config_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- herr_t result;
-#ifdef H5_HAVE_PARALLEL
- char prefix[H5C1__PREFIX_LEN] = "";
- MPI_Comm mpi_comm = MPI_COMM_NULL;
- int mpi_rank = -1;
- int mpi_size = -1;
- H5AC1_aux_t * aux_ptr = NULL;
-#endif /* H5_HAVE_PARALLEL */
-
- FUNC_ENTER_NOAPI(H5AC1_create, FAIL)
-
- HDassert(f);
- HDassert(NULL == f->shared->cache1);
- HDassert(config_ptr != NULL);
- HDcompile_assert(NELMTS(H5AC1_entry_type_names) == H5AC1_NTYPES);
- HDcompile_assert(H5C1__MAX_NUM_TYPE_IDS == H5AC1_NTYPES);
-
- result = H5AC1_validate_config(config_ptr);
-
- if ( result != SUCCEED ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Bad cache configuration");
- }
-
-#ifdef H5_HAVE_PARALLEL
- if ( IS_H5FD_MPI(f) ) {
-
- if ( (mpi_comm = H5F_mpi_get_comm(f)) == MPI_COMM_NULL ) {
-
- HGOTO_ERROR(H5E_VFL, H5E_CANTGET, FAIL, \
- "can't get MPI communicator")
- }
-
- if ( (mpi_rank = H5F_mpi_get_rank(f)) < 0 ) {
-
- HGOTO_ERROR(H5E_VFL, H5E_CANTGET, FAIL, "can't get mpi rank")
- }
-
- if ( (mpi_size = H5F_mpi_get_size(f)) < 0 ) {
-
- HGOTO_ERROR(H5E_VFL, H5E_CANTGET, FAIL, "can't get mpi size")
- }
-
- /* There is no point in setting up the auxilary structure if size
- * is less than or equal to 1, as there will never be any processes
- * to broadcast the clean lists to.
- */
- if ( mpi_size > 1 ) {
-
- if ( NULL == (aux_ptr = H5FL_CALLOC(H5AC1_aux_t)) ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, \
- "Can't allocate H5AC auxilary structure.")
-
- } else {
-
- aux_ptr->magic = H5AC1__H5AC1_AUX_T_MAGIC;
- aux_ptr->mpi_comm = mpi_comm;
- aux_ptr->mpi_rank = mpi_rank;
- aux_ptr->mpi_size = mpi_size;
- aux_ptr->write_permitted = FALSE;
- aux_ptr->dirty_bytes_threshold =
- H5AC1__DEFAULT_DIRTY_BYTES_THRESHOLD;
- aux_ptr->dirty_bytes = 0;
-#if H5AC1_DEBUG_DIRTY_BYTES_CREATION
- aux_ptr->dirty_bytes_propagations = 0;
- aux_ptr->unprotect_dirty_bytes = 0;
- aux_ptr->unprotect_dirty_bytes_updates = 0;
- aux_ptr->insert_dirty_bytes = 0;
- aux_ptr->insert_dirty_bytes_updates = 0;
- aux_ptr->rename_dirty_bytes = 0;
- aux_ptr->rename_dirty_bytes_updates = 0;
-#endif /* H5AC1_DEBUG_DIRTY_BYTES_CREATION */
- aux_ptr->d_slist_ptr = NULL;
- aux_ptr->d_slist_len = 0;
- aux_ptr->c_slist_ptr = NULL;
- aux_ptr->c_slist_len = 0;
- aux_ptr->write_done = NULL;
-
- sprintf(prefix, "%d:", mpi_rank);
- }
-
- if ( mpi_rank == 0 ) {
-
- aux_ptr->d_slist_ptr =
- H5SL_create(H5SL_TYPE_HADDR,0.5,(size_t)16);
-
- if ( aux_ptr->d_slist_ptr == NULL ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL,
- "can't create dirtied entry list.")
- }
-
- aux_ptr->c_slist_ptr =
- H5SL_create(H5SL_TYPE_HADDR,0.5,(size_t)16);
-
- if ( aux_ptr->c_slist_ptr == NULL ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL,
- "can't create cleaned entry list.")
- }
- }
- }
-
- if ( aux_ptr != NULL ) {
-
- if ( aux_ptr->mpi_rank == 0 ) {
-
- f->shared->cache1 = H5C1_create(H5AC1__DEFAULT_MAX_CACHE_SIZE,
- H5AC1__DEFAULT_MIN_CLEAN_SIZE,
- (H5AC1_NTYPES - 1),
- (const char **)H5AC1_entry_type_names,
- H5AC1_check_if_write_permitted,
- TRUE,
- H5AC1_log_flushed_entry,
- (void *)aux_ptr);
-
- } else {
-
- f->shared->cache1 = H5C1_create(H5AC1__DEFAULT_MAX_CACHE_SIZE,
- H5AC1__DEFAULT_MIN_CLEAN_SIZE,
- (H5AC1_NTYPES - 1),
- (const char **)H5AC1_entry_type_names,
- NULL,
- FALSE,
-#if 0 /* this is useful debugging code -- keep it for a while */ /* JRM */
- H5AC1_log_flushed_entry_dummy,
-#else /* JRM */
- NULL,
-#endif /* JRM */
- (void *)aux_ptr);
- }
-
- } else {
-
- f->shared->cache1 = H5C1_create(H5AC1__DEFAULT_MAX_CACHE_SIZE,
- H5AC1__DEFAULT_MIN_CLEAN_SIZE,
- (H5AC1_NTYPES - 1),
- (const char **)H5AC1_entry_type_names,
- H5AC1_check_if_write_permitted,
- TRUE,
- NULL,
- NULL);
- }
- } else {
-#endif /* H5_HAVE_PARALLEL */
- /* The default max cache size and min clean size will frequently be
- * overwritten shortly by the subsequent set resize config call.
- * -- JRM
- */
- f->shared->cache1 = H5C1_create(H5AC1__DEFAULT_MAX_CACHE_SIZE,
- H5AC1__DEFAULT_MIN_CLEAN_SIZE,
- (H5AC1_NTYPES - 1),
- (const char **)H5AC1_entry_type_names,
- H5AC1_check_if_write_permitted,
- TRUE,
- NULL,
- NULL);
-#ifdef H5_HAVE_PARALLEL
- }
-#endif /* H5_HAVE_PARALLEL */
-
- if ( NULL == f->shared->cache1 ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
-
- }
-#ifdef H5_HAVE_PARALLEL
- else if ( aux_ptr != NULL ) {
-
- result = H5C1_set_prefix(f->shared->cache1, prefix);
-
- if ( result != SUCCEED ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, \
- "H5C1_set_prefix() failed")
- }
- }
-#endif /* H5_HAVE_PARALLEL */
-
- result = H5AC1_set_cache_auto_resize_config(f->shared->cache1, config_ptr);
-
- if ( result != SUCCEED ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, \
- "auto resize configuration failed")
- }
-
-done:
-
-#ifdef H5_HAVE_PARALLEL
-
- /* if there is a failure, try to tidy up the auxilary structure */
-
- if ( ret_value != SUCCEED ) {
-
- if ( aux_ptr != NULL ) {
-
- if ( aux_ptr->d_slist_ptr != NULL ) {
-
- H5SL_close(aux_ptr->d_slist_ptr);
- }
-
- if ( aux_ptr->c_slist_ptr != NULL ) {
-
- H5SL_close(aux_ptr->c_slist_ptr);
- }
-
- aux_ptr->magic = 0;
- H5FL_FREE(H5AC1_aux_t, aux_ptr);
- aux_ptr = NULL;
- }
- }
-#endif /* H5_HAVE_PARALLEL */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_create() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_dest
- *
- * Purpose: Flushes all data to disk and destroys the cache.
- * This function fails if any object are protected since the
- * resulting file might not be consistent.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Jul 9 1997
- *
- * Modifications:
- *
- * Complete re-design and re-write to support the re-designed
- * metadata cache.
- * JRM - 5/12/04
- *
- * Abstracted the guts of the function to H5C1_dest() in H5C.c,
- * and then re-wrote the function as a wrapper for H5C1_dest().
- *
- * JRM - 6/7/04
- *
- * Added code to free the auxiliary structure and its
- * associated slist if present.
- * JRM - 6/28/05
- *
- * Added code to close the trace file if it is present.
- *
- * JRM - 6/8/06
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5AC1_dest(H5F_t *f, hid_t dxpl_id)
-{
- H5AC1_t *cache = NULL;
- herr_t ret_value=SUCCEED; /* Return value */
-#ifdef H5_HAVE_PARALLEL
- H5AC1_aux_t * aux_ptr = NULL;
-#endif /* H5_HAVE_PARALLEL */
-
- FUNC_ENTER_NOAPI(H5AC1_dest, FAIL)
-
- assert(f);
- assert(f->shared->cache1);
- cache = f->shared->cache1;
-#ifdef H5_HAVE_PARALLEL
- aux_ptr = cache->aux_ptr;
-
- if ( aux_ptr != NULL ) {
-
- HDassert ( aux_ptr->magic == H5AC1__H5AC1_AUX_T_MAGIC );
- }
-#endif /* H5_HAVE_PARALLEL */
-
-#if H5AC1__TRACE_FILE_ENABLED
- if ( H5AC1_close_trace_file(cache) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5AC1_close_trace_file() failed.")
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- if ( H5C1_dest(f, dxpl_id, H5AC1_noblock_dxpl_id, cache) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFREE, FAIL, "can't destroy cache")
- }
-
- f->shared->cache1 = NULL;
-
-#ifdef H5_HAVE_PARALLEL
- if ( aux_ptr != NULL ) {
-
- if ( aux_ptr->d_slist_ptr != NULL ) {
-
- H5SL_close(aux_ptr->d_slist_ptr);
- }
-
- if ( aux_ptr->c_slist_ptr != NULL ) {
-
- H5SL_close(aux_ptr->c_slist_ptr);
- }
-
- aux_ptr->magic = 0;
- H5FL_FREE(H5AC1_aux_t, aux_ptr);
- aux_ptr = NULL;
- }
-#endif /* H5_HAVE_PARALLEL */
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_dest() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_expunge_entry
- *
- * Purpose: Expunge the target entry from the cache without writing it
- * to disk even if it is dirty. The entry must not be either
- * pinned or protected.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 6/30/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5AC1_expunge_entry(H5F_t *f,
- hid_t dxpl_id,
- const H5AC1_class_t *type,
- haddr_t addr)
-{
- herr_t result;
- herr_t ret_value=SUCCEED; /* Return value */
- H5AC1_t * cache_ptr = NULL;
-#if H5AC1__TRACE_FILE_ENABLED
- char trace[128] = "";
- FILE * trace_file_ptr = NULL;
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_ENTER_NOAPI(H5AC1_expunge_entry, FAIL)
-
- HDassert(f);
- HDassert(f->shared);
- HDassert(f->shared->cache1);
- HDassert(type);
- HDassert(type->clear);
- HDassert(type->dest);
- HDassert(H5F_addr_defined(addr));
-
- cache_ptr = f->shared->cache1;
-
-#if H5AC1__TRACE_FILE_ENABLED
- /* For the expunge entry call, only the addr, and type id are really
- * necessary in the trace file. Write the return value to catch occult
- * errors.
- */
- if ( ( cache_ptr != NULL ) &&
- ( H5C1_get_trace_file_ptr(cache_ptr, &trace_file_ptr) >= 0 ) &&
- ( trace_file_ptr != NULL ) ) {
-
- sprintf(trace, "H5AC1_expunge_entry %lx %d",
- (unsigned long)addr,
- (int)(type->id));
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- result = H5C1_expunge_entry(f,
- dxpl_id,
- H5AC1_noblock_dxpl_id,
- cache_ptr,
- type,
- addr);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTEXPUNGE, FAIL, \
- "H5C1_expunge_entry() failed.")
- }
-
-done:
-
-#if H5AC1__TRACE_FILE_ENABLED
- if ( trace_file_ptr != NULL ) {
-
- HDfprintf(trace_file_ptr, "%s %d\n", trace, (int)ret_value);
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_expunge_entry() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_flush
- *
- * Purpose: Flush (and possibly destroy) the metadata cache associated
- * with the specified file.
- *
- * This is a re-write of an earlier version of the function
- * which was reputedly capable of flushing (and destroying
- * if requested) individual entries, individual entries if
- * they match the supplied type, all entries of a given type,
- * as well as all entries in the cache.
- *
- * As only this last capability is actually used at present,
- * I have not implemented the other capabilities in this
- * version of the function.
- *
- * The type and addr parameters are retained to avoid source
- * code changed, but values other than NULL and HADDR_UNDEF
- * respectively are errors. If all goes well, they should
- * be removed, and the function renamed to something more
- * descriptive -- perhaps H5AC1_flush_cache.
- *
- * If the cache contains protected entries, the function will
- * fail, as protected entries cannot be flushed. However
- * all unprotected entries should be flushed before the
- * function returns failure.
- *
- * For historical purposes, the original version of the
- * purpose section is reproduced below:
- *
- * ============ Original Version of "Purpose:" ============
- *
- * Flushes (and destroys if DESTROY is non-zero) the specified
- * entry from the cache. If the entry TYPE is CACHE_FREE and
- * ADDR is HADDR_UNDEF then all types of entries are
- * flushed. If TYPE is CACHE_FREE and ADDR is defined then
- * whatever is cached at ADDR is flushed. Otherwise the thing
- * at ADDR is flushed if it is the correct type.
- *
- * If there are protected objects they will not be flushed.
- * However, an attempt will be made to flush all non-protected
- * items before this function returns failure.
- *
- * Return: Non-negative on success/Negative on failure if there was a
- * request to flush all items and something was protected.
- *
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Jul 9 1997
- *
- * Modifications:
- * Robb Matzke, 1999-07-27
- * The ADDR argument is passed by value.
- *
- * Complete re-write. See above for details. -- JRM 5/11/04
- *
- * Abstracted the guts of the function to H5C1_flush_cache()
- * in H5C.c, and then re-wrote the function as a wrapper for
- * H5C1_flush_cache().
- *
- * JRM - 6/7/04
- *
- * JRM - 7/5/05
- * Modified function as part of a fix for a cache coherency
- * bug in PHDF5. See the header comments on the H5AC1_aux_t
- * structure for details.
- *
- * JRM -- 5/11/06
- * Added call to the write_done callback.
- *
- * JRM -- 6/6/06
- * Added trace file support.
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5AC1_flush(H5F_t *f, hid_t dxpl_id, unsigned flags)
-{
- herr_t status;
- herr_t ret_value = SUCCEED; /* Return value */
-#ifdef H5_HAVE_PARALLEL
- H5AC1_aux_t * aux_ptr = NULL;
- int mpi_code;
-#endif /* H5_HAVE_PARALLEL */
-#if H5AC1__TRACE_FILE_ENABLED
- char trace[128] = "";
- FILE * trace_file_ptr = NULL;
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
-
- FUNC_ENTER_NOAPI(H5AC1_flush, FAIL)
-
- HDassert(f);
- HDassert(f->shared->cache1);
-
-#if H5AC1__TRACE_FILE_ENABLED
- /* For the flush, only the flags are really necessary in the trace file.
- * Write the result to catch occult errors.
- */
- if ( ( f != NULL ) &&
- ( f->shared != NULL ) &&
- ( f->shared->cache1 != NULL ) &&
- ( H5C1_get_trace_file_ptr(f->shared->cache1, &trace_file_ptr) >= 0 ) &&
- ( trace_file_ptr != NULL ) ) {
-
- sprintf(trace, "H5AC1_flush 0x%x", flags);
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
-#ifdef H5_HAVE_PARALLEL
- aux_ptr = f->shared->cache1->aux_ptr;
-
- if ( aux_ptr != NULL ) {
-
-#if H5AC1_DEBUG_DIRTY_BYTES_CREATION
- HDfprintf(stdout,
- "%d::H5AC1_flush: (u/uu/i/iu/r/ru) = %d/%d/%d/%d/%d/%d\n",
- (int)(aux_ptr->mpi_rank),
- (int)(aux_ptr->unprotect_dirty_bytes),
- (int)(aux_ptr->unprotect_dirty_bytes_updates),
- (int)(aux_ptr->insert_dirty_bytes),
- (int)(aux_ptr->insert_dirty_bytes_updates),
- (int)(aux_ptr->rename_dirty_bytes),
- (int)(aux_ptr->rename_dirty_bytes_updates));
-#endif /* H5AC1_DEBUG_DIRTY_BYTES_CREATION */
-
- /* to prevent "messages from the future" we must synchronize all
- * processes before we start the flush. Hence the following
- * barrier.
- */
- if ( MPI_SUCCESS != (mpi_code = MPI_Barrier(aux_ptr->mpi_comm)) ) {
-
- HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_code)
- }
-
- /* if the clear only flag is set, this flush will not involve any
- * disk I/O. In such cases, it is not necessary to let process 0
- * flush first.
- */
- if ( ( aux_ptr->mpi_rank == 0 ) &&
- ( (flags & H5AC1__FLUSH_CLEAR_ONLY_FLAG) == 0 ) ) {
-
- unsigned init_flush_flags = H5AC1__NO_FLAGS_SET;
-
- if ( ( (flags & H5AC1__FLUSH_MARKED_ENTRIES_FLAG) != 0 ) &&
- ( (flags & H5AC1__FLUSH_INVALIDATE_FLAG) == 0 ) ) {
-
- init_flush_flags |= H5AC1__FLUSH_MARKED_ENTRIES_FLAG;
- }
-
- aux_ptr->write_permitted = TRUE;
-
- status = H5C1_flush_cache(f,
- H5AC1_noblock_dxpl_id,
- H5AC1_noblock_dxpl_id,
- f->shared->cache1,
- init_flush_flags);
-
- aux_ptr->write_permitted = FALSE;
-
- if ( status < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush.")
- }
-
- if ( aux_ptr->write_done != NULL ) {
-
- (aux_ptr->write_done)();
- }
-
- } /* end if ( aux_ptr->mpi_rank == 0 ) */
-
- status = H5AC1_propagate_flushed_and_still_clean_entries_list(f,
- H5AC1_noblock_dxpl_id,
- f->shared->cache1,
- FALSE);
- } /* end if ( aux_ptr != NULL ) */
-#endif /* H5_HAVE_PARALLEL */
-
- status = H5C1_flush_cache(f,
- dxpl_id,
- H5AC1_noblock_dxpl_id,
- f->shared->cache1,
- flags);
-
- if ( status < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush entry.")
- }
-
-done:
-
-#if H5AC1__TRACE_FILE_ENABLED
- if ( trace_file_ptr != NULL ) {
-
- HDfprintf(trace_file_ptr, "%s %d\n", trace, (int)ret_value);
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_flush() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_get_entry_status
- *
- * Purpose: Given a file address, determine whether the metadata
- * cache contains an entry at that location. If it does,
- * also determine whether the entry is dirty, protected,
- * pinned, etc. and return that information to the caller
- * in *status_ptr.
- *
- * If the specified entry doesn't exist, set *status_ptr
- * to zero.
- *
- * On error, the value of *status_ptr is undefined.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 4/27/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5AC1_get_entry_status(H5F_t * f,
- haddr_t addr,
- unsigned * status_ptr)
-{
- H5C1_t *cache_ptr = f->shared->cache1;
- herr_t ret_value = SUCCEED; /* Return value */
- herr_t result;
- hbool_t in_cache;
- hbool_t is_dirty;
- hbool_t is_protected;
- hbool_t is_pinned;
- size_t entry_size;
- unsigned status = 0;
-
- FUNC_ENTER_NOAPI(H5AC1_get_entry_status, FAIL)
-
- if ( ( cache_ptr == NULL ) ||
- ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ||
- ( ! H5F_addr_defined(addr) ) ||
- ( status_ptr == NULL ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad param(s) on entry.")
- }
-
- result = H5C1_get_entry_status(cache_ptr, addr, &entry_size, &in_cache,
- &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_get_entry_status() failed.")
- }
-
- if ( in_cache ) {
-
- status |= H5AC1_ES__IN_CACHE;
-
- if ( is_dirty )
- status |= H5AC1_ES__IS_DIRTY;
-
- if ( is_protected )
- status |= H5AC1_ES__IS_PROTECTED;
-
- if ( is_pinned )
- status |= H5AC1_ES__IS_PINNED;
- }
-
- *status_ptr = status;
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_get_entry_status() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_set
- *
- * Purpose: Adds the specified thing to the cache. The thing need not
- * exist on disk yet, but it must have an address and disk
- * space reserved.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Jul 9 1997
- *
- * Modifications:
- * Robb Matzke, 1999-07-27
- * The ADDR argument is passed by value.
- *
- * Bill Wendling, 2003-09-16
- * Added automatic "flush" if the FPHDF5 driver is being
- * used. This'll write the metadata to the SAP where other,
- * lesser processes can grab it.
- *
- * JRM - 5/13/04
- * Complete re-write for the new metadata cache. The new
- * code is functionally almost identical to the old, although
- * the sanity check for a protected entry is now an assert
- * at the beginning of the function.
- *
- * JRM - 6/7/04
- * Abstracted the guts of the function to H5C1_insert_entry()
- * in H5C.c, and then re-wrote the function as a wrapper for
- * H5C1_insert_entry().
- *
- * JRM - 1/6/05
- * Added the flags parameter. At present, this parameter is
- * only used to set the new flush_marker field on the new
- * entry. Since this doesn't apply to the SAP code, no change
- * is needed there. Thus the only change to the body of the
- * code is to pass the flags parameter through to
- * H5C1_insert_entry().
- *
- * JRM - 6/6/05
- * Added code to force newly inserted entries to be dirty
- * in the flexible parallel case. The normal case is handled
- * in H5C.c. This is part of a series of changes directed at
- * moving management of the dirty flag on cache entries into
- * the cache code.
- *
- * JRM - 7/5/05
- * Added code to track dirty byte generation, and to trigger
- * clean entry list propagation when it exceeds a user
- * specified threshold. Note that this code only applies in
- * the PHDF5 case. It should have no effect on either the
- * serial or FPHSD5 cases.
- *
- * JRM - 6/6/06
- * Added trace file support.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5AC1_set(H5F_t *f, hid_t dxpl_id, const H5AC1_class_t *type, haddr_t addr, void *thing, unsigned int flags)
-{
- herr_t result;
- H5AC1_info_t *info;
- H5AC1_t *cache;
- herr_t ret_value=SUCCEED; /* Return value */
-#ifdef H5_HAVE_PARALLEL
- H5AC1_aux_t * aux_ptr = NULL;
-#endif /* H5_HAVE_PARALLEL */
-#if H5AC1__TRACE_FILE_ENABLED
- char trace[128] = "";
- size_t trace_entry_size = 0;
- FILE * trace_file_ptr = NULL;
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_ENTER_NOAPI(H5AC1_set, FAIL)
-
- HDassert(f);
- HDassert(f->shared->cache1);
- HDassert(type);
- HDassert(type->flush);
- HDassert(type->size);
- HDassert(H5F_addr_defined(addr));
- HDassert(thing);
-
-#if H5AC1__TRACE_FILE_ENABLED
- /* For the insert, only the addr, size, type id and flags are really
- * necessary in the trace file. Write the result to catch occult
- * errors.
- *
- * Note that some data is not available right now -- put what we can
- * in the trace buffer now, and fill in the rest at the end.
- */
- if ( ( f != NULL ) &&
- ( f->shared != NULL ) &&
- ( f->shared->cache1 != NULL ) &&
- ( H5C1_get_trace_file_ptr(f->shared->cache1, &trace_file_ptr) >= 0 ) &&
- ( trace_file_ptr != NULL ) ) {
-
- sprintf(trace, "H5AC1_set 0x%lx %d 0x%x",
- (unsigned long)addr,
- type->id,
- flags);
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- /* Get local copy of this information */
- cache = f->shared->cache1;
- info = (H5AC1_info_t *)thing;
-
- info->addr = addr;
- info->type = type;
- info->is_protected = FALSE;
-
-#ifdef H5_HAVE_PARALLEL
- if ( NULL != (aux_ptr = f->shared->cache1->aux_ptr) ) {
-
- result = H5AC1_log_inserted_entry(f,
- f->shared->cache1,
- (H5AC1_info_t *)thing,
- type,
- addr);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, \
- "H5AC1_log_inserted_entry() failed.")
- }
- }
-#endif /* H5_HAVE_PARALLEL */
-
- result = H5C1_insert_entry(f,
- dxpl_id,
- H5AC1_noblock_dxpl_id,
- cache,
- type,
- addr,
- thing,
- flags);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, "H5C1_insert_entry() failed")
- }
-
-#if H5AC1__TRACE_FILE_ENABLED
- if ( trace_file_ptr != NULL ) {
-
- /* make note of the entry size */
- trace_entry_size = ((H5C1_cache_entry_t *)thing)->size;
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
-#ifdef H5_HAVE_PARALLEL
- if ( ( aux_ptr != NULL ) &&
- ( aux_ptr->dirty_bytes >= aux_ptr->dirty_bytes_threshold ) ) {
-
- result = H5AC1_propagate_flushed_and_still_clean_entries_list(f,
- H5AC1_noblock_dxpl_id,
- f->shared->cache1,
- TRUE);
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "Can't propagate clean entries list.")
- }
- }
-#endif /* H5_HAVE_PARALLEL */
-
-done:
-
-#if H5AC1__TRACE_FILE_ENABLED
- if ( trace_file_ptr != NULL ) {
-
- HDfprintf(trace_file_ptr, "%s %d %d\n", trace,
- (int)trace_entry_size,
- (int)ret_value);
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_set() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_mark_pinned_entry_dirty
- *
- * Purpose: Mark a pinned entry as dirty. The target entry MUST be
- * be pinned, and MUST be unprotected.
- *
- * If the entry has changed size, the function updates
- * data structures for the size change.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 4/11/06
- *
- * Modifications:
- *
- * Added trace file support. JRM -- 6/6/06
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5AC1_mark_pinned_entry_dirty(H5F_t * f,
- void * thing,
- hbool_t size_changed,
- size_t new_size)
-{
- H5C1_t *cache_ptr = f->shared->cache1;
- herr_t result;
- herr_t ret_value = SUCCEED; /* Return value */
-#if H5AC1__TRACE_FILE_ENABLED
- char trace[128] = "";
- FILE * trace_file_ptr = NULL;
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_ENTER_NOAPI(H5AC1_mark_pinned_entry_dirty, FAIL)
-
-#if H5AC1__TRACE_FILE_ENABLED
- /* For the mark pinned entry dirty call, only the addr, size_changed,
- * and new_size are really necessary in the trace file. Write the result
- * to catch occult errors.
- */
- if ( ( f != NULL ) &&
- ( f->shared != NULL ) &&
- ( f->shared->cache1 != NULL ) &&
- ( H5C1_get_trace_file_ptr(f->shared->cache1, &trace_file_ptr) >= 0 ) &&
- ( trace_file_ptr != NULL ) ) {
-
- sprintf(trace, "H5AC1_mark_pinned_entry_dirty 0x%lx %d %d",
- (unsigned long)(((H5C1_cache_entry_t *)thing)->addr),
- (int)size_changed,
- (int)new_size);
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
-#ifdef H5_HAVE_PARALLEL
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( thing );
-
- if ( ( ((H5AC1_info_t *)thing)->is_dirty == FALSE ) &&
- ( NULL != cache_ptr->aux_ptr) ) {
-
- H5AC1_info_t * entry_ptr;
-
- HDassert( ( size_changed == TRUE ) || ( size_changed == FALSE ) );
-
- entry_ptr = (H5AC1_info_t *)thing;
-
- if ( ! ( entry_ptr->is_pinned ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, \
- "Entry isn't pinned??")
- }
-
- if ( entry_ptr->is_protected ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, \
- "Entry is protected??")
- }
-
- result = H5AC1_log_dirtied_entry(cache_ptr,
- entry_ptr,
- entry_ptr->addr,
- size_changed,
- new_size);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, \
- "H5AC1_log_dirtied_entry() failed.")
- }
- }
-#endif /* H5_HAVE_PARALLEL */
-
- result = H5C1_mark_pinned_entry_dirty(cache_ptr,
- thing,
- size_changed,
- new_size);
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, \
- "H5C1_mark_pinned_entry_dirty() failed.")
-
- }
-
-done:
-
-#if H5AC1__TRACE_FILE_ENABLED
- if ( trace_file_ptr != NULL ) {
-
- HDfprintf(trace_file_ptr, "%s %d\n", trace, (int)ret_value);
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_mark_pinned_entry_dirty() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_mark_pinned_or_protected_entry_dirty
- *
- * Purpose: Mark a pinned or protected entry as dirty. The target
- * entry MUST be either pinned, protected, or both.
- *
- * Unlike H5AC1_mark_pinned_entry_dirty(), this function does
- * not support size changes.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 5/16/06
- *
- * Modifications:
- *
- * Added trace file support. JRM -- 6/6/06
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5AC1_mark_pinned_or_protected_entry_dirty(H5F_t * f,
- void * thing)
-{
- H5C1_t * cache_ptr = f->shared->cache1;
-#ifdef H5_HAVE_PARALLEL
- H5AC1_info_t * info_ptr;
-#endif /* H5_HAVE_PARALLEL */
- herr_t result;
- herr_t ret_value = SUCCEED; /* Return value */
-#if H5AC1__TRACE_FILE_ENABLED
- char trace[128] = "";
- FILE * trace_file_ptr = NULL;
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_ENTER_NOAPI(H5AC1_mark_pinned_or_protected_entry_dirty, FAIL)
-
-#if H5AC1__TRACE_FILE_ENABLED
- /* For the mark pinned or protected entry dirty call, only the addr
- * is really necessary in the trace file. Write the result to catch
- * occult errors.
- */
- if ( ( f != NULL ) &&
- ( f->shared != NULL ) &&
- ( f->shared->cache1 != NULL ) &&
- ( H5C1_get_trace_file_ptr(f->shared->cache1, &trace_file_ptr) >= 0 ) &&
- ( trace_file_ptr != NULL ) ) {
-
- sprintf(trace, "H5AC1_mark_pinned_or_protected_entry_dirty %lx",
- (unsigned long)(((H5C1_cache_entry_t *)thing)->addr));
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
-#ifdef H5_HAVE_PARALLEL
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( thing );
-
- info_ptr = (H5AC1_info_t *)thing;
-
- if ( ( info_ptr->is_dirty == FALSE ) &&
- ( ! ( info_ptr->is_protected ) ) &&
- ( info_ptr->is_pinned ) &&
- ( NULL != cache_ptr->aux_ptr) ) {
-
- result = H5AC1_log_dirtied_entry(cache_ptr,
- info_ptr,
- info_ptr->addr,
- FALSE,
- 0);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, \
- "H5AC1_log_dirtied_entry() failed.")
- }
- }
-#endif /* H5_HAVE_PARALLEL */
-
- result = H5C1_mark_pinned_or_protected_entry_dirty(cache_ptr, thing);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, \
- "H5C1_mark_pinned_entry_dirty() failed.")
-
- }
-
-done:
-
-#if H5AC1__TRACE_FILE_ENABLED
- if ( trace_file_ptr != NULL ) {
-
- HDfprintf(trace_file_ptr, "%s %d\n", trace, (int)ret_value);
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_mark_pinned_entry_dirty() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_rename
- *
- * Purpose: Use this function to notify the cache that an object's
- * file address changed.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Jul 9 1997
- *
- * Modifications:
- * Robb Matzke, 1999-07-27
- * The OLD_ADDR and NEW_ADDR arguments are passed by value.
- *
- * JRM 5/17/04
- * Complete rewrite for the new meta-data cache.
- *
- * JRM - 6/7/04
- * Abstracted the guts of the function to H5C1_rename_entry()
- * in H5C.c, and then re-wrote the function as a wrapper for
- * H5C1_rename_entry().
- *
- * JRM - 7/5/05
- * Added code to track dirty byte generation, and to trigger
- * clean entry list propagation when it exceeds a user
- * specified threshold. Note that this code only applies in
- * the PHDF5 case. It should have no effect on either the
- * serial or FPHSD5 cases.
- *
- * Note that this code presumes that the renamed entry will
- * be present in all caches -- which it must be at present.
- * To maintain this invarient, only rename entries immediately
- * after you unprotect them.
- *
- * JRM - 6/6/06
- * Added trace file support.
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5AC1_rename(H5F_t *f, const H5AC1_class_t *type, haddr_t old_addr, haddr_t new_addr)
-{
- herr_t result;
- herr_t ret_value=SUCCEED; /* Return value */
-#ifdef H5_HAVE_PARALLEL
- H5AC1_aux_t * aux_ptr = NULL;
-#endif /* H5_HAVE_PARALLEL */
-#if H5AC1__TRACE_FILE_ENABLED
- char trace[128] = "";
- FILE * trace_file_ptr = NULL;
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_ENTER_NOAPI(H5AC1_rename, FAIL)
-
- HDassert(f);
- HDassert(f->shared->cache1);
- HDassert(type);
- HDassert(H5F_addr_defined(old_addr));
- HDassert(H5F_addr_defined(new_addr));
- HDassert(H5F_addr_ne(old_addr, new_addr));
-
-#if H5AC1__TRACE_FILE_ENABLED
- /* For the rename call, only the old addr and new addr are really
- * necessary in the trace file. Include the type id so we don't have to
- * look it up. Also write the result to catch occult errors.
- */
- if ( ( f != NULL ) &&
- ( f->shared != NULL ) &&
- ( f->shared->cache1 != NULL ) &&
- ( H5C1_get_trace_file_ptr(f->shared->cache1, &trace_file_ptr) >= 0 ) &&
- ( trace_file_ptr != NULL ) ) {
-
- sprintf(trace, "H5AC1_rename %lx %lx %d",
- (unsigned long)old_addr,
- (unsigned long)new_addr,
- (int)(type->id));
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
-#ifdef H5_HAVE_PARALLEL
- if ( NULL != (aux_ptr = f->shared->cache1->aux_ptr) ) {
-
- result = H5AC1_log_renamed_entry(f->shared->cache1,
- old_addr,
- new_addr);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "H5AC1_log_renamed_entry() failed.")
- }
- }
-#endif /* H5_HAVE_PARALLEL */
-
- result = H5C1_rename_entry(f->shared->cache1,
- type,
- old_addr,
- new_addr);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTRENAME, FAIL, \
- "H5C1_rename_entry() failed.")
- }
-
-#ifdef H5_HAVE_PARALLEL
- if ( ( aux_ptr != NULL ) &&
- ( aux_ptr->dirty_bytes >= aux_ptr->dirty_bytes_threshold ) ) {
-
- result = H5AC1_propagate_flushed_and_still_clean_entries_list(f,
- H5AC1_noblock_dxpl_id,
- f->shared->cache1,
- TRUE);
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "Can't propagate clean entries list.")
- }
- }
-#endif /* H5_HAVE_PARALLEL */
-
-done:
-
-#if H5AC1__TRACE_FILE_ENABLED
- if ( trace_file_ptr != NULL ) {
-
- HDfprintf(trace_file_ptr, "%s %d\n", trace, (int)ret_value);
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_rename() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_pin_protected_entry()
- *
- * Purpose: Pin a protected cache entry. The entry must be protected
- * at the time of call, and must be unpinned.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 4/27/06
- *
- * Modifications:
- *
- * Added trace file support. 6/6/06
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5AC1_pin_protected_entry(H5F_t * f,
- void * thing)
-{
- H5C1_t *cache_ptr = f->shared->cache1;
- herr_t result;
- herr_t ret_value = SUCCEED; /* Return value */
-#if H5AC1__TRACE_FILE_ENABLED
- char trace[128] = "";
- FILE * trace_file_ptr = NULL;
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_ENTER_NOAPI(H5AC1_pin_protected_entry, FAIL)
-
-#if H5AC1__TRACE_FILE_ENABLED
- /* For the pin protected entry call, only the addr is really necessary
- * in the trace file. Also write the result to catch occult errors.
- */
- if ( ( f != NULL ) &&
- ( f->shared != NULL ) &&
- ( f->shared->cache1 != NULL ) &&
- ( H5C1_get_trace_file_ptr(f->shared->cache1, &trace_file_ptr) >= 0 ) &&
- ( trace_file_ptr != NULL ) ) {
-
- sprintf(trace, "H5AC1_pin_protected_entry %lx",
- (unsigned long)(((H5C1_cache_entry_t *)thing)->addr));
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- result = H5C1_pin_protected_entry(cache_ptr, thing);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTPIN, FAIL, \
- "H5C1_pin_protected_entry() failed.")
- }
-
-done:
-
-#if H5AC1__TRACE_FILE_ENABLED
- if ( trace_file_ptr != NULL ) {
-
- HDfprintf(trace_file_ptr, "%s %d\n", trace, (int)ret_value);
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_pin_protected_entry() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_protect
- *
- * Purpose: If the target entry is not in the cache, load it. If
- * necessary, attempt to evict one or more entries to keep
- * the cache within its maximum size.
- *
- * Mark the target entry as protected, and return its address
- * to the caller. The caller must call H5AC1_unprotect() when
- * finished with the entry.
- *
- * While it is protected, the entry may not be either evicted
- * or flushed -- nor may it be accessed by another call to
- * H5AC1_protect. Any attempt to do so will result in a failure.
- *
- * This comment is a re-write of the original Purpose: section.
- * For historical interest, the original version is reproduced
- * below:
- *
- * Original Purpose section:
- *
- * Similar to H5AC1_find() except the object is removed from
- * the cache and given to the caller, preventing other parts
- * of the program from modifying the protected object or
- * preempting it from the cache.
- *
- * The caller must call H5AC1_unprotect() when finished with
- * the pointer.
- *
- * Return: Success: Ptr to the object.
- *
- * Failure: NULL
- *
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Sep 2 1997
- *
- * Modifications:
- * Robb Matzke, 1999-07-27
- * The ADDR argument is passed by value.
- *
- * Bill Wendling, 2003-09-10
- * Added parameter to indicate whether this is a READ or
- * WRITE type of protect.
- *
- * JRM -- 5/17/04
- * Complete re-write for the new client cache. See revised
- * Purpose section above.
- *
- * JRM - 6/7/04
- * Abstracted the guts of the function to H5C1_protect()
- * in H5C.c, and then re-wrote the function as a wrapper for
- * H5C1_protect().
- *
- * JRM - 6/6/06
- * Added trace file support.
- *
- * JRM - 3/18/07
- * Modified code to support the new flags parameter for
- * H5C1_protect(). For now, that means passing in the
- * H5C1_READ_ONLY_FLAG if rw == H5AC1_READ.
- *
- * Also updated the trace file output to save the
- * rw parameter, since we are now doing something with it.
- *
- *-------------------------------------------------------------------------
- */
-void *
-H5AC1_protect(H5F_t *f,
- hid_t dxpl_id,
- const H5AC1_class_t *type,
- haddr_t addr,
- const void *udata1,
- void *udata2,
- H5AC1_protect_t rw)
-{
- /* char * fcn_name = "H5AC1_protect"; */
- unsigned protect_flags = H5C1__NO_FLAGS_SET;
- void * thing = (void *)NULL;
- void * ret_value; /* Return value */
-#if H5AC1__TRACE_FILE_ENABLED
- char trace[128] = "";
- size_t trace_entry_size = 0;
- FILE * trace_file_ptr = NULL;
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_ENTER_NOAPI(H5AC1_protect, NULL)
-
- /* check args */
- HDassert(f);
- HDassert(f->shared);
- HDassert(f->shared->cache1);
- HDassert(type);
- HDassert(type->flush);
- HDassert(type->load);
- HDassert(H5F_addr_defined(addr));
-
- /* Check for invalid access request */
- if(0 == (f->intent & H5F_ACC_RDWR) && rw == H5AC1_WRITE)
- HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, NULL, "no write intent on file")
-
-#if H5AC1__TRACE_FILE_ENABLED
- /* For the protect call, only the addr and type id is really necessary
- * in the trace file. Include the size of the entry protected as a
- * sanity check. Also indicate whether the call was successful to
- * catch occult errors.
- */
- if ( ( f != NULL ) &&
- ( f->shared != NULL ) &&
- ( f->shared->cache1 != NULL ) &&
- ( H5C1_get_trace_file_ptr(f->shared->cache1, &trace_file_ptr) >= 0 ) &&
- ( trace_file_ptr != NULL ) ) {
-
- char * rw_string;
-
- if ( rw == H5AC1_WRITE ) {
-
- rw_string = "H5AC1_WRITE";
-
- } else if ( rw == H5AC1_READ ) {
-
- rw_string = "H5AC1_READ";
-
- } else {
-
- rw_string = "???";
- }
-
- sprintf(trace, "H5AC1_protect %lx %d %s",
- (unsigned long)addr,
- (int)(type->id),
- rw_string);
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- if ( rw == H5AC1_READ ) {
-
- protect_flags |= H5C1__READ_ONLY_FLAG;
- }
-
- thing = H5C1_protect(f,
- dxpl_id,
- H5AC1_noblock_dxpl_id,
- f->shared->cache1,
- type,
- addr,
- udata1,
- udata2,
- protect_flags);
-
- if ( thing == NULL ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTPROTECT, NULL, "H5C1_protect() failed.")
- }
-
-#if H5AC1__TRACE_FILE_ENABLED
- if ( trace_file_ptr != NULL ) {
-
- /* make note of the entry size */
- trace_entry_size = ((H5C1_cache_entry_t *)thing)->size;
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- /* Set return value */
- ret_value = thing;
-
-done:
-
-#if H5AC1__TRACE_FILE_ENABLED
- if ( trace_file_ptr != NULL ) {
-
- HDfprintf(trace_file_ptr, "%s %d %d\n", trace,
- (int)trace_entry_size,
- (int)(ret_value != NULL));
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_protect() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_resize_pinned_entry
- *
- * Purpose: Resize a pinned entry. The target entry MUST be
- * be pinned, and MUST not be unprotected.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 7/5/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5AC1_resize_pinned_entry(H5F_t * f,
- void * thing,
- size_t new_size)
-{
- H5C1_t *cache_ptr = f->shared->cache1;
- herr_t result;
- herr_t ret_value = SUCCEED; /* Return value */
-#if H5AC1__TRACE_FILE_ENABLED
- char trace[128] = "";
- FILE * trace_file_ptr = NULL;
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_ENTER_NOAPI(H5AC1_resize_pinned_entry, FAIL)
-
-#if H5AC1__TRACE_FILE_ENABLED
- /* For the resize pinned entry call, only the addr, and new_size are
- * really necessary in the trace file. Write the result to catch
- * occult errors.
- */
- if ( ( f != NULL ) &&
- ( f->shared != NULL ) &&
- ( f->shared->cache1 != NULL ) &&
- ( H5C1_get_trace_file_ptr(f->shared->cache1, &trace_file_ptr) >= 0 ) &&
- ( trace_file_ptr != NULL ) ) {
-
- sprintf(trace, "H5AC1_resize_pinned_entry 0x%lx %d",
- (unsigned long)(((H5C1_cache_entry_t *)thing)->addr),
- (int)new_size);
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
-#ifdef H5_HAVE_PARALLEL
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( thing );
-
- if ( ( ((H5AC1_info_t *)thing)->is_dirty == FALSE ) &&
- ( NULL != cache_ptr->aux_ptr) ) {
-
- H5AC1_info_t * entry_ptr;
-
- entry_ptr = (H5AC1_info_t *)thing;
-
- if ( ! ( entry_ptr->is_pinned ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTRESIZE, FAIL, \
- "Entry isn't pinned??")
- }
-
- if ( entry_ptr->is_protected ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTRESIZE, FAIL, \
- "Entry is protected??")
- }
-
- result = H5AC1_log_dirtied_entry(cache_ptr,
- entry_ptr,
- entry_ptr->addr,
- TRUE,
- new_size);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, \
- "H5AC1_log_dirtied_entry() failed.")
- }
- }
-#endif /* H5_HAVE_PARALLEL */
-
- result = H5C1_resize_pinned_entry(cache_ptr,
- thing,
- new_size);
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTRESIZE, FAIL, \
- "H5C1_resize_pinned_entry() failed.")
-
- }
-
-done:
-
-#if H5AC1__TRACE_FILE_ENABLED
- if ( trace_file_ptr != NULL ) {
-
- HDfprintf(trace_file_ptr, "%s %d\n", trace, (int)ret_value);
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_resize_pinned_entry() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_unpin_entry()
- *
- * Purpose: Unpin a cache entry. The entry must be unprotected at
- * the time of call, and must be pinned.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 4/11/06
- *
- * Modifications:
- *
- * Added code supporting the trace file. JRM -- 6/7/06
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5AC1_unpin_entry(H5F_t * f,
- void * thing)
-{
- H5C1_t *cache_ptr = f->shared->cache1;
- herr_t result;
- herr_t ret_value = SUCCEED; /* Return value */
-#if H5AC1__TRACE_FILE_ENABLED
- char trace[128] = "";
- FILE * trace_file_ptr = NULL;
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_ENTER_NOAPI(H5AC1_unpin_entry, FAIL)
-
-#if H5AC1__TRACE_FILE_ENABLED
- /* For the unpin entry call, only the addr is really necessary
- * in the trace file. Also write the result to catch occult errors.
- */
- if ( ( f != NULL ) &&
- ( f->shared != NULL ) &&
- ( f->shared->cache1 != NULL ) &&
- ( H5C1_get_trace_file_ptr(f->shared->cache1, &trace_file_ptr) >= 0 ) &&
- ( trace_file_ptr != NULL ) ) {
-
- sprintf(trace, "H5AC1_unpin_entry %lx",
- (unsigned long)(((H5C1_cache_entry_t *)thing)->addr));
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- result = H5C1_unpin_entry(cache_ptr, thing);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPIN, FAIL, "H5C1_unpin_entry() failed.")
- }
-
-done:
-
-#if H5AC1__TRACE_FILE_ENABLED
- if ( trace_file_ptr != NULL ) {
-
- HDfprintf(trace_file_ptr, "%s %d\n", trace, (int)ret_value);
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_unpin_entry() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_unprotect
- *
- * Purpose: Undo an H5AC1_protect() call -- specifically, mark the
- * entry as unprotected, remove it from the protected list,
- * and give it back to the replacement policy.
- *
- * The TYPE and ADDR arguments must be the same as those in
- * the corresponding call to H5AC1_protect() and the THING
- * argument must be the value returned by that call to
- * H5AC1_protect().
- *
- * If the deleted flag is TRUE, simply remove the target entry
- * from the cache, clear it, and free it without writing it to
- * disk.
- *
- * This verion of the function is a complete re-write to
- * use the new metadata cache. While there isn't all that
- * much difference between the old and new Purpose sections,
- * the original version is given below.
- *
- * Original purpose section:
- *
- * This function should be called to undo the effect of
- * H5AC1_protect(). The TYPE and ADDR arguments should be the
- * same as the corresponding call to H5AC1_protect() and the
- * THING argument should be the value returned by H5AC1_protect().
- * If the DELETED flag is set, then this object has been deleted
- * from the file and should not be returned to the cache.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Sep 2 1997
- *
- * Modifications:
- * Robb Matzke, 1999-07-27
- * The ADDR argument is passed by value.
- *
- * Quincey Koziol, 2003-03-19
- * Added "deleted" argument
- *
- * Bill Wendling, 2003-09-18
- * If this is an FPHDF5 driver and the data is dirty,
- * perform a "flush" that writes the data to the SAP.
- *
- * John Mainzer 5/19/04
- * Complete re-write for the new metadata cache.
- *
- * JRM - 6/7/04
- * Abstracted the guts of the function to H5C1_unprotect()
- * in H5C.c, and then re-wrote the function as a wrapper for
- * H5C1_unprotect().
- *
- * JRM - 1/6/05
- * Replaced the deleted parameter with the new flags parameter.
- * Since the deleted parameter is not used by the FPHDF5 code,
- * the only change in the body is to replace the deleted
- * parameter with the flags parameter in the call to
- * H5C1_unprotect().
- *
- * JRM - 6/6/05
- * Added the dirtied flag and supporting code. This is
- * part of a collection of changes directed at moving
- * management of cache entry dirty flags into the H5C code.
- *
- * JRM - 7/5/05
- * Added code to track dirty byte generation, and to trigger
- * clean entry list propagation when it exceeds a user
- * specified threshold. Note that this code only applies in
- * the PHDF5 case. It should have no effect on either the
- * serial or FPHSD5 cases.
- *
- * JRM - 9/8/05
- * Added code to track entry size changes. This is necessary
- * as it can effect dirty byte creation counts, thereby
- * throwing the caches out of sync in the PHDF5 case.
- *
- * JRM - 5/16/06
- * Added code to use the new dirtied field in
- * H5C1_cache_entry_t in the test to see if the entry has
- * been dirtied.
- *
- * JRM - 6/7/06
- * Added support for the trace file.
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5AC1_unprotect(H5F_t *f, hid_t dxpl_id, const H5AC1_class_t *type, haddr_t addr,
- void *thing, unsigned flags)
-{
- herr_t result;
- herr_t ret_value=SUCCEED; /* Return value */
- hbool_t size_changed = FALSE;
- hbool_t dirtied;
- size_t new_size = 0;
-#ifdef H5_HAVE_PARALLEL
- H5AC1_aux_t * aux_ptr = NULL;
-#endif /* H5_HAVE_PARALLEL */
-#if H5AC1__TRACE_FILE_ENABLED
- char trace[128] = "";
- size_t trace_new_size = 0;
- unsigned trace_flags = 0;
- FILE * trace_file_ptr = NULL;
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_ENTER_NOAPI(H5AC1_unprotect, FAIL)
-
- HDassert(f);
- HDassert(f->shared->cache1);
- HDassert(type);
- HDassert(type->clear);
- HDassert(type->flush);
- HDassert(H5F_addr_defined(addr));
- HDassert(thing);
- HDassert( ((H5AC1_info_t *)thing)->addr == addr );
- HDassert( ((H5AC1_info_t *)thing)->type == type );
-
-#if H5AC1__TRACE_FILE_ENABLED
- /* For the unprotect call, only the addr, type id, flags, and possible
- * new size are really necessary in the trace file. Write the return
- * value to catch occult errors.
- */
- if ( ( f != NULL ) &&
- ( f->shared != NULL ) &&
- ( f->shared->cache1 != NULL ) &&
- ( H5C1_get_trace_file_ptr(f->shared->cache1, &trace_file_ptr) >= 0 ) &&
- ( trace_file_ptr != NULL ) ) {
-
- sprintf(trace, "H5AC1_unprotect %lx %d",
- (unsigned long)addr,
- (int)(type->id));
-
- trace_flags = flags;
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- dirtied = (hbool_t)( ( (flags & H5AC1__DIRTIED_FLAG) == H5AC1__DIRTIED_FLAG ) ||
- ( ((H5AC1_info_t *)thing)->dirtied ) );
-
- if ( dirtied ) {
-
- if ( (type->size)(f, thing, &new_size) < 0 ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGETSIZE, FAIL, \
- "Can't get size of thing")
- }
-
- if ( ((H5AC1_info_t *)thing)->size != new_size ) {
-
- size_changed = TRUE;
- flags = flags | H5AC1__SIZE_CHANGED_FLAG;
-#if H5AC1__TRACE_FILE_ENABLED
- trace_flags = flags;
- trace_new_size = new_size;
-#endif /* H5AC1__TRACE_FILE_ENABLED */
- }
- }
-
-#ifdef H5_HAVE_PARALLEL
- if ( ( dirtied ) && ( ((H5AC1_info_t *)thing)->is_dirty == FALSE ) &&
- ( NULL != (aux_ptr = f->shared->cache1->aux_ptr) ) ) {
-
- result = H5AC1_log_dirtied_entry(f->shared->cache1,
- (H5AC1_info_t *)thing,
- addr,
- size_changed,
- new_size);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "H5AC1_log_dirtied_entry() failed.")
- }
- }
-
- if ( ( (flags & H5C1__DELETED_FLAG) != 0 ) &&
- ( NULL != (aux_ptr = f->shared->cache1->aux_ptr) ) &&
- ( aux_ptr->mpi_rank == 0 ) ) {
-
- result = H5AC1_log_deleted_entry(f->shared->cache1,
- (H5AC1_info_t *)thing,
- addr,
- flags);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "H5AC1_log_deleted_entry() failed.")
- }
- }
-#endif /* H5_HAVE_PARALLEL */
-
- result = H5C1_unprotect(f,
- dxpl_id,
- H5AC1_noblock_dxpl_id,
- f->shared->cache1,
- type,
- addr,
- thing,
- flags,
- new_size);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "H5C1_unprotect() failed.")
- }
-
-#ifdef H5_HAVE_PARALLEL
- if ( ( aux_ptr != NULL ) &&
- ( aux_ptr->dirty_bytes >= aux_ptr->dirty_bytes_threshold ) ) {
-
- result = H5AC1_propagate_flushed_and_still_clean_entries_list(f,
- H5AC1_noblock_dxpl_id,
- f->shared->cache1,
- TRUE);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "Can't propagate clean entries list.")
- }
- }
-#endif /* H5_HAVE_PARALLEL */
-
-done:
-
-#if H5AC1__TRACE_FILE_ENABLED
- if ( trace_file_ptr != NULL ) {
-
- HDfprintf(trace_file_ptr, "%s %d %x %d\n",
- trace,
- (int)trace_new_size,
- (unsigned)trace_flags,
- (int)ret_value);
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_unprotect() */
-
-
-/*-------------------------------------------------------------------------
- * Function: HA5C_set_write_done_callback
- *
- * Purpose: Set the value of the write_done callback. This callback
- * is used to improve performance of the parallel test bed
- * for the cache.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 5/11/06
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-#ifdef H5_HAVE_PARALLEL
-herr_t
-H5AC1_set_write_done_callback(H5C1_t * cache_ptr,
- void (* write_done)(void))
-{
- herr_t ret_value = SUCCEED; /* Return value */
- H5AC1_aux_t * aux_ptr = NULL;
-
- FUNC_ENTER_NOAPI(H5AC1_set_write_done_callback, FAIL)
-
- /* This would normally be an assert, but we need to use an HGOTO_ERROR
- * call to shut up the compiler.
- */
- if ( ( ! cache_ptr ) || ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr")
- }
-
- aux_ptr = cache_ptr->aux_ptr;
-
- HDassert( aux_ptr != NULL );
- HDassert( aux_ptr->magic == H5AC1__H5AC1_AUX_T_MAGIC );
-
- aux_ptr->write_done = write_done;
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_set_write_done_callback() */
-#endif /* H5_HAVE_PARALLEL */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_stats
- *
- * Purpose: Prints statistics about the cache.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Robb Matzke
- * Thursday, October 30, 1997
- *
- * Modifications:
- * John Mainzer 5/19/04
- * Re-write to support the new metadata cache.
- *
- * JRM - 6/7/04
- * Abstracted the guts of the function to H5C1_stats()
- * in H5C.c, and then re-wrote the function as a wrapper for
- * H5C1_stats().
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5AC1_stats(const H5F_t *f)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5AC1_stats, FAIL)
-
- HDassert(f);
- HDassert(f->shared->cache1);
-
- /* at present, this can't fail */
- (void)H5C1_stats(f->shared->cache1, f->name, FALSE);
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_stats() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_get_cache_auto_resize_config
- *
- * Purpose: Wrapper function for H5C1_get_cache_auto_resize_config().
- *
- * Return: SUCCEED on success, and FAIL on failure.
- *
- * Programmer: John Mainzer
- * 3/10/05
- *
- * Modifications:
- *
- * JRM - 4/6/05
- * Reworked for the addition of struct H5AC1_cache_config_t.
- *
- * JRM - 10/25/05
- * Added support for the new dirty_bytes_threshold field of
- * both H5AC1_cache_config_t and H5AC1_aux_t.
- *
- * JRM - 6/8/06
- * Added support for the new trace file related fields.
- *
- * JRM - 7/28/07
- * Added support for the new evictions enabled related fields.
- *
- * Observe that H5AC1_get_cache_auto_resize_config() and
- * H5AC1_set_cache_auto_resize_config() are becoming generic
- * metadata cache configuration routines as they gain
- * switches for functions that are only tenuously related
- * to auto resize configuration.
- *
- * JRM - 1/2/08
- * Added support for the new flash cache increment related
- * fields.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5AC1_get_cache_auto_resize_config(H5AC1_t * cache_ptr,
- H5AC1_cache_config_t *config_ptr)
-{
- herr_t result;
- herr_t ret_value = SUCCEED; /* Return value */
- hbool_t evictions_enabled;
- H5C1_auto_size_ctl_t internal_config;
-
- FUNC_ENTER_NOAPI(H5AC1_get_cache_auto_resize_config, FAIL)
-
- if ( ( cache_ptr == NULL )
- ||
-#ifdef H5_HAVE_PARALLEL
- ( ( cache_ptr->aux_ptr != NULL )
- &&
- ( ((H5AC1_aux_t *)(cache_ptr->aux_ptr))->magic
- !=
- H5AC1__H5AC1_AUX_T_MAGIC
- )
- )
- ||
-#endif /* H5_HAVE_PARALLEL */
- ( config_ptr == NULL )
- ||
- ( config_ptr->version != H5AC1__CURR_CACHE_CONFIG_VERSION )
- )
- {
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Bad cache_ptr or config_ptr on entry.")
-
- }
-
- result = H5C1_get_cache_auto_resize_config((H5C1_t *)cache_ptr,
- &internal_config);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_get_cache_auto_resize_config() failed.")
- }
-
- result = H5C1_get_evictions_enabled((H5C1_t *)cache_ptr, &evictions_enabled);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_get_resize_enabled() failed.")
- }
-
- if ( internal_config.rpt_fcn == NULL ) {
-
- config_ptr->rpt_fcn_enabled = FALSE;
-
- } else {
-
- config_ptr->rpt_fcn_enabled = TRUE;
- }
-
- config_ptr->open_trace_file = FALSE;
- config_ptr->close_trace_file = FALSE;
- config_ptr->trace_file_name[0] = '\0';
- config_ptr->evictions_enabled = evictions_enabled;
- config_ptr->set_initial_size = internal_config.set_initial_size;
- config_ptr->initial_size = internal_config.initial_size;
- config_ptr->min_clean_fraction = internal_config.min_clean_fraction;
- config_ptr->max_size = internal_config.max_size;
- config_ptr->min_size = internal_config.min_size;
- config_ptr->epoch_length = (long)(internal_config.epoch_length);
- config_ptr->incr_mode = internal_config.incr_mode;
- config_ptr->lower_hr_threshold = internal_config.lower_hr_threshold;
- config_ptr->increment = internal_config.increment;
- config_ptr->apply_max_increment = internal_config.apply_max_increment;
- config_ptr->max_increment = internal_config.max_increment;
- config_ptr->decr_mode = internal_config.decr_mode;
- config_ptr->upper_hr_threshold = internal_config.upper_hr_threshold;
- config_ptr->flash_incr_mode = internal_config.flash_incr_mode;
- config_ptr->flash_multiple = internal_config.flash_multiple;
- config_ptr->flash_threshold = internal_config.flash_threshold;
- config_ptr->decrement = internal_config.decrement;
- config_ptr->apply_max_decrement = internal_config.apply_max_decrement;
- config_ptr->max_decrement = internal_config.max_decrement;
- config_ptr->epochs_before_eviction =
- (int)(internal_config.epochs_before_eviction);
- config_ptr->apply_empty_reserve = internal_config.apply_empty_reserve;
- config_ptr->empty_reserve = internal_config.empty_reserve;
-
-#ifdef H5_HAVE_PARALLEL
- if ( cache_ptr->aux_ptr != NULL ) {
-
- config_ptr->dirty_bytes_threshold =
- ((H5AC1_aux_t *)(cache_ptr->aux_ptr))->dirty_bytes_threshold;
-
- } else {
-#endif /* H5_HAVE_PARALLEL */
-
- config_ptr->dirty_bytes_threshold = H5AC1__DEFAULT_DIRTY_BYTES_THRESHOLD;
-
-#ifdef H5_HAVE_PARALLEL
- }
-#endif /* H5_HAVE_PARALLEL */
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_get_cache_auto_resize_config() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_get_cache_size
- *
- * Purpose: Wrapper function for H5C1_get_cache_size().
- *
- * Return: SUCCEED on success, and FAIL on failure.
- *
- * Programmer: John Mainzer
- * 3/11/05
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5AC1_get_cache_size(H5AC1_t * cache_ptr,
- size_t * max_size_ptr,
- size_t * min_clean_size_ptr,
- size_t * cur_size_ptr,
- int32_t * cur_num_entries_ptr)
-{
- herr_t result;
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5AC1_get_cache_size, FAIL)
-
- result = H5C1_get_cache_size((H5C1_t *)cache_ptr,
- max_size_ptr,
- min_clean_size_ptr,
- cur_size_ptr,
- cur_num_entries_ptr);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_get_cache_size() failed.")
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_get_cache_size() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_get_cache_hit_rate
- *
- * Purpose: Wrapper function for H5C1_get_cache_hit_rate().
- *
- * Return: SUCCEED on success, and FAIL on failure.
- *
- * Programmer: John Mainzer
- * 3/10/05
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5AC1_get_cache_hit_rate(H5AC1_t * cache_ptr,
- double * hit_rate_ptr)
-
-{
- herr_t result;
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5AC1_get_cache_hit_rate, FAIL)
-
- result = H5C1_get_cache_hit_rate((H5C1_t *)cache_ptr, hit_rate_ptr);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_get_cache_hit_rate() failed.")
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_get_cache_hit_rate() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5AC1_reset_cache_hit_rate_stats()
- *
- * Purpose: Wrapper function for H5C1_reset_cache_hit_rate_stats().
- *
- * Return: SUCCEED on success, and FAIL on failure.
- *
- * Programmer: John Mainzer, 3/10/05
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5AC1_reset_cache_hit_rate_stats(H5AC1_t * cache_ptr)
-{
- herr_t result;
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5AC1_reset_cache_hit_rate_stats, FAIL)
-
- result = H5C1_reset_cache_hit_rate_stats((H5C1_t *)cache_ptr);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_reset_cache_hit_rate_stats() failed.")
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_reset_cache_hit_rate_stats() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_set_cache_auto_resize_config
- *
- * Purpose: Wrapper function for H5C1_set_cache_auto_resize_config().
- *
- * Return: SUCCEED on success, and FAIL on failure.
- *
- * Programmer: John Mainzer
- * 3/10/05
- *
- * Modifications:
- *
- * John Mainzer -- 4/6/05
- * Updated for the addition of H5AC1_cache_config_t.
- *
- * John Mainzer -- 10/25/05
- * Added support for the new dirty_bytes_threshold field of
- * both H5AC1_cache_config_t and H5AC1_aux_t.
- *
- * John Mainzer -- 6/7/06
- * Added trace file support.
- *
- * John Mainzer -- 7/28/07
- * Added support for the new evictions enabled related fields.
- *
- * Observe that H5AC1_get_cache_auto_resize_config() and
- * H5AC1_set_cache_auto_resize_config() are becoming generic
- * metadata cache configuration routines as they gain
- * switches for functions that are only tenuously related
- * to auto resize configuration.
- *
- * John Mainzer -- 1/3/07
- * Updated trace file code to record the new flash cache
- * size increase related fields.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5AC1_set_cache_auto_resize_config(H5AC1_t * cache_ptr,
- H5AC1_cache_config_t *config_ptr)
-{
- /* const char * fcn_name = "H5AC1_set_cache_auto_resize_config"; */
- herr_t result;
- herr_t ret_value = SUCCEED; /* Return value */
- H5C1_auto_size_ctl_t internal_config;
-#if H5AC1__TRACE_FILE_ENABLED
- H5AC1_cache_config_t trace_config = H5AC1__DEFAULT_CACHE_CONFIG;
- FILE * trace_file_ptr = NULL;
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_ENTER_NOAPI(H5AC1_set_cache_auto_resize_config, FAIL)
-
-#if H5AC1__TRACE_FILE_ENABLED
- /* Make note of the new configuration. Don't look up the trace file
- * pointer, as that may change before we use it.
- */
- if ( config_ptr != NULL ) {
-
- trace_config = *config_ptr;
-
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- if ( ( cache_ptr == NULL )
-#ifdef H5_HAVE_PARALLEL
- ||
- ( ( cache_ptr->aux_ptr != NULL )
- &&
- (
- ((H5AC1_aux_t *)(cache_ptr->aux_ptr))->magic
- !=
- H5AC1__H5AC1_AUX_T_MAGIC
- )
- )
-#endif /* H5_HAVE_PARALLEL */
- ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "bad cache_ptr on entry.")
- }
-
- result = H5AC1_validate_config(config_ptr);
-
- if ( result != SUCCEED ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Bad cache configuration");
- }
-
- if ( config_ptr->open_trace_file ) {
-
- FILE * file_ptr = NULL;
-
- if ( H5C1_get_trace_file_ptr(cache_ptr, &file_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_get_trace_file_ptr() failed.")
- }
-
- if ( ( ! ( config_ptr->close_trace_file ) ) &&
- ( file_ptr != NULL ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "Trace file already open.")
- }
- }
-
- if (
- (
- config_ptr->dirty_bytes_threshold
- <
- H5AC1__MIN_DIRTY_BYTES_THRESHOLD
- )
- ||
- (
- config_ptr->dirty_bytes_threshold
- >
- H5AC1__MAX_DIRTY_BYTES_THRESHOLD
- )
- ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "config_ptr->dirty_bytes_threshold out of range.")
- }
-
- if ( config_ptr->close_trace_file ) {
-
- if ( H5AC1_close_trace_file(cache_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5AC1_close_trace_file() failed.")
- }
- }
-
- if ( config_ptr->open_trace_file ) {
-
- if ( H5AC1_open_trace_file(cache_ptr, config_ptr->trace_file_name) < 0 )
- {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "H5AC1_open_trace_file() failed.")
- }
- }
-
- if ( H5AC1_ext_config_2_int_config(config_ptr, &internal_config) !=
- SUCCEED ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5AC1_ext_config_2_int_config() failed.")
- }
-
- result = H5C1_set_cache_auto_resize_config((H5C1_t *)cache_ptr,
- &internal_config);
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_set_cache_auto_resize_config() failed.")
- }
-
-
- result = H5C1_set_evictions_enabled((H5C1_t *)cache_ptr,
- config_ptr->evictions_enabled);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_set_evictions_enabled() failed.")
- }
-
-#ifdef H5_HAVE_PARALLEL
- if ( cache_ptr->aux_ptr != NULL ) {
-
- ((H5AC1_aux_t *)(cache_ptr->aux_ptr))->dirty_bytes_threshold =
- config_ptr->dirty_bytes_threshold;
- }
-#endif /* H5_HAVE_PARALLEL */
-
-done:
-
-#if H5AC1__TRACE_FILE_ENABLED
- /* For the set cache auto resize config call, only the contents
- * of the config is necessary in the trace file. Write the return
- * value to catch occult errors.
- */
- if ( ( cache_ptr != NULL ) &&
- ( H5C1_get_trace_file_ptr(cache_ptr, &trace_file_ptr) >= 0 ) &&
- ( trace_file_ptr != NULL ) ) {
-
- HDfprintf(trace_file_ptr,
- "%s %d %d %d %d \"%s\" %d %d %d %f %d %d %ld %d %f %f %d %f %f %d %d %d %f %f %d %d %d %d %f %d %d\n",
- "H5AC1_set_cache_auto_resize_config",
- trace_config.version,
- (int)(trace_config.rpt_fcn_enabled),
- (int)(trace_config.open_trace_file),
- (int)(trace_config.close_trace_file),
- trace_config.trace_file_name,
- (int)(trace_config.evictions_enabled),
- (int)(trace_config.set_initial_size),
- (int)(trace_config.initial_size),
- trace_config.min_clean_fraction,
- (int)(trace_config.max_size),
- (int)(trace_config.min_size),
- trace_config.epoch_length,
- (int)(trace_config.incr_mode),
- trace_config.lower_hr_threshold,
- trace_config.increment,
- (int)(trace_config.flash_incr_mode),
- trace_config.flash_multiple,
- trace_config.flash_threshold,
- (int)(trace_config.apply_max_increment),
- (int)(trace_config.max_increment),
- (int)(trace_config.decr_mode),
- trace_config.upper_hr_threshold,
- trace_config.decrement,
- (int)(trace_config.apply_max_decrement),
- (int)(trace_config.max_decrement),
- trace_config.epochs_before_eviction,
- (int)(trace_config.apply_empty_reserve),
- trace_config.empty_reserve,
- trace_config.dirty_bytes_threshold,
- (int)ret_value);
- }
-#endif /* H5AC1__TRACE_FILE_ENABLED */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_set_cache_auto_resize_config() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_validate_config()
- *
- * Purpose: Run a sanity check on the contents of the supplied
- * instance of H5AC1_cache_config_t.
- *
- * Do nothing and return SUCCEED if no errors are detected,
- * and flag an error and return FAIL otherwise.
- *
- * At present, this function operates by packing the data
- * from the instance of H5AC1_cache_config_t into an instance
- * of H5C1_auto_size_ctl_t, and then calling
- * H5C1_validate_resize_config(). As H5AC1_cache_config_t and
- * H5C1_auto_size_ctl_t diverge, we may have to change this.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 4/6/05
- *
- * Modifications:
- *
- * - Added code testing the trace file configuration fields.
- * These tests are not comprehensive, as many errors cannot
- * be caught until the directives contained in these fields
- * are applied.
- * JRM - 5/15/06
- *
- * - Added code testing the evictions enabled field. At
- * present this consists of verifying that if
- * evictions_enabled is FALSE, then automatic cache
- * resizing in disabled.
- *
- * JRM - 7/28/07
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5AC1_validate_config(H5AC1_cache_config_t * config_ptr)
-
-{
- herr_t result;
- herr_t ret_value = SUCCEED; /* Return value */
- size_t name_len;
- H5C1_auto_size_ctl_t internal_config;
-
- FUNC_ENTER_NOAPI(H5AC1_validate_config, FAIL)
-
- if ( config_ptr == NULL ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "NULL config_ptr on entry.")
- }
-
- if ( config_ptr->version != H5AC1__CURR_CACHE_CONFIG_VERSION ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Unknown config version.")
- }
-
- if ( ( config_ptr->rpt_fcn_enabled != TRUE ) &&
- ( config_ptr->rpt_fcn_enabled != FALSE ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "config_ptr->rpt_fcn_enabled must be either TRUE or FALSE.")
- }
-
- if ( ( config_ptr->open_trace_file != TRUE ) &&
- ( config_ptr->open_trace_file != FALSE ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "config_ptr->open_trace_file must be either TRUE or FALSE.")
- }
-
- if ( ( config_ptr->close_trace_file != TRUE ) &&
- ( config_ptr->close_trace_file != FALSE ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "config_ptr->close_trace_file must be either TRUE or FALSE.")
- }
-
- /* don't bother to test trace_file_name unless open_trace_file is TRUE */
- if ( config_ptr->open_trace_file ) {
-
- /* Can't really test the trace_file_name field without trying to
- * open the file, so we will content ourselves with a couple of
- * sanity checks on the length of the file name.
- */
- name_len = HDstrlen(config_ptr->trace_file_name);
-
- if ( name_len == 0 ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "config_ptr->trace_file_name is empty.")
-
- } else if ( name_len > H5AC1__MAX_TRACE_FILE_NAME_LEN ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "config_ptr->trace_file_name too long.")
- }
- }
-
- if ( ( config_ptr->evictions_enabled != TRUE ) &&
- ( config_ptr->evictions_enabled != FALSE ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "config_ptr->evictions_enabled must be either TRUE or FALSE.")
- }
-
- if ( ( config_ptr->evictions_enabled == FALSE ) &&
- ( ( config_ptr->incr_mode != H5C1_incr__off ) ||
- ( config_ptr->flash_incr_mode != H5C1_flash_incr__off ) ||
- ( config_ptr->decr_mode != H5C1_decr__off ) ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "Can't disable evictions while auto-resize is enabled.")
- }
-
- if ( config_ptr->dirty_bytes_threshold < H5AC1__MIN_DIRTY_BYTES_THRESHOLD ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "dirty_bytes_threshold too small.")
- } else
- if ( config_ptr->dirty_bytes_threshold > H5AC1__MAX_DIRTY_BYTES_THRESHOLD ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,
- "dirty_bytes_threshold too big.")
- }
-
- if ( H5AC1_ext_config_2_int_config(config_ptr, &internal_config) !=
- SUCCEED ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5AC1_ext_config_2_int_config() failed.")
- }
-
- result = H5C1_validate_resize_config(&internal_config,
- H5C1_RESIZE_CFG__VALIDATE_ALL);
-
- if ( result != SUCCEED ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "error(s) in new config.")
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_validate_config() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_close_trace_file()
- *
- * Purpose: If a trace file is open, stop logging calls to the cache,
- * and close the file.
- *
- * Note that the function does nothing if there is no trace
- * file.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 6/2/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5AC1_close_trace_file(H5AC1_t * cache_ptr)
-
-{
- herr_t ret_value = SUCCEED; /* Return value */
- FILE * trace_file_ptr = NULL;
-
- FUNC_ENTER_NOAPI(H5AC1_close_trace_file, FAIL)
-
- if ( cache_ptr == NULL ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "NULL cache_ptr on entry.")
- }
-
- if ( H5C1_get_trace_file_ptr(cache_ptr, &trace_file_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_get_trace_file_ptr() failed.")
- }
-
- if ( trace_file_ptr != NULL ) {
-
- if ( H5C1_set_trace_file_ptr(cache_ptr, NULL) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_set_trace_file_ptr() failed.")
- }
-
- if ( HDfclose(trace_file_ptr) != 0 ) {
-
- HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, \
- "can't close metadata cache trace file")
- }
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_close_trace_file() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_open_trace_file()
- *
- * Purpose: Open a trace file, and start logging calls to the cache.
- *
- * This logging is done at the H5C level, and will only take
- * place if H5C1_TRACE_FILE_ENABLED (defined in H5Cprivate.h)
- * is TRUE.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 6/1/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5AC1_open_trace_file(H5AC1_t * cache_ptr,
- const char * trace_file_name)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- char file_name[H5AC1__MAX_TRACE_FILE_NAME_LEN + H5C1__PREFIX_LEN + 2];
- FILE * file_ptr = NULL;
-#ifdef H5_HAVE_PARALLEL
- H5AC1_aux_t * aux_ptr = NULL;
-#endif /* H5_HAVE_PARALLEL */
-
- FUNC_ENTER_NOAPI(H5AC1_open_trace_file, FAIL)
-
- HDassert(cache_ptr);
-
- if ( cache_ptr == NULL ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "cache_ptr NULL on entry.")
- }
-
- if ( trace_file_name == NULL ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "NULL trace_file_name on entry.")
- }
-
- if ( HDstrlen(trace_file_name) > H5AC1__MAX_TRACE_FILE_NAME_LEN ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "trace file name too long.")
- }
-
- if ( H5C1_get_trace_file_ptr(cache_ptr, &file_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_get_trace_file_ptr() failed.")
- }
-
- if ( file_ptr != NULL ) {
-
- HGOTO_ERROR(H5E_FILE, H5E_FILEOPEN, FAIL, "trace file already open.")
- }
-
-#ifdef H5_HAVE_PARALLEL
-
- aux_ptr = (H5AC1_aux_t *)(cache_ptr->aux_ptr);
-
- if ( cache_ptr->aux_ptr == NULL ) {
-
- sprintf(file_name, "%s", trace_file_name);
-
- } else {
-
- if ( aux_ptr->magic != H5AC1__H5AC1_AUX_T_MAGIC ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad aux_ptr->magic.")
- }
-
- sprintf(file_name, "%s.%d", trace_file_name, aux_ptr->mpi_rank);
-
- }
-
- if ( HDstrlen(file_name) >
- H5AC1__MAX_TRACE_FILE_NAME_LEN + H5C1__PREFIX_LEN + 1 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "cooked trace file name too long.")
- }
-
-#else /* H5_HAVE_PARALLEL */
-
- sprintf(file_name, "%s", trace_file_name);
-
-#endif /* H5_HAVE_PARALLEL */
-
- if ( (file_ptr = HDfopen(file_name, "w")) == NULL ) {
-
- /* trace file open failed */
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "trace file open failed.")
- }
-
- HDfprintf(file_ptr, "### HDF5 metadata cache trace file version 1 ###\n");
-
- if ( H5C1_set_trace_file_ptr(cache_ptr, file_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_set_trace_file_ptr() failed.")
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_open_trace_file() */
-
-
-/*************************************************************************/
-/**************************** Private Functions: *************************/
-/*************************************************************************/
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5AC1_broadcast_clean_list()
- *
- * Purpose: Broadcast the contents of the process 0 cleaned entry
- * slist. In passing, also remove all entries from said
- * list, and also remove any matching entries from the dirtied
- * slist.
- *
- * This function must only be called by the process with
- * MPI_rank 0.
- *
- * Return SUCCEED on success, and FAIL on failure.
- *
- * Return: Non-negative on success/Negative on failure.
- *
- * Programmer: John Mainzer, 7/1/05
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-#ifdef H5_HAVE_PARALLEL
-static herr_t
-H5AC1_broadcast_clean_list(H5AC1_t * cache_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- haddr_t addr;
- H5AC1_aux_t * aux_ptr = NULL;
- H5SL_node_t * slist_node_ptr = NULL;
- H5AC1_slist_entry_t * slist_entry_ptr = NULL;
- MPI_Offset * buf_ptr = NULL;
- size_t buf_size;
- int i = 0;
- int mpi_result;
- int num_entries;
-
- FUNC_ENTER_NOAPI(H5AC1_broadcast_clean_list, FAIL)
-
- HDassert( cache_ptr != NULL );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
-
- aux_ptr = cache_ptr->aux_ptr;
-
- HDassert( aux_ptr != NULL );
- HDassert( aux_ptr->magic == H5AC1__H5AC1_AUX_T_MAGIC );
- HDassert( aux_ptr->mpi_rank == 0 );
- HDassert( aux_ptr->c_slist_ptr != NULL );
- HDassert( H5SL_count(aux_ptr->c_slist_ptr) ==
- (size_t)(aux_ptr->c_slist_len) );
-
-
- /* First broadcast the number of entries in the list so that the
- * receives can set up a buffer to receive them. If there aren't
- * any, we are done.
- */
- num_entries = aux_ptr->c_slist_len;
-
- mpi_result = MPI_Bcast(&num_entries, 1, MPI_INT, 0, aux_ptr->mpi_comm);
-
- if ( mpi_result != MPI_SUCCESS ) {
-
- HMPI_GOTO_ERROR(FAIL, "MPI_Bcast failed 1", mpi_result)
-
- }
-
- if ( num_entries > 0 )
- {
- /* allocate a buffer to store the list of entry base addresses in */
-
- buf_size = sizeof(MPI_Offset) * (size_t)num_entries;
-
- buf_ptr = (MPI_Offset *)H5MM_malloc(buf_size);
-
- if ( buf_ptr == NULL ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, \
- "memory allocation failed for clean entry buffer")
- }
-
- /* now load the entry base addresses into the buffer, emptying the
- * cleaned entry list in passing
- */
-
- while ( NULL != (slist_node_ptr = H5SL_first(aux_ptr->c_slist_ptr) ) )
- {
- slist_entry_ptr = H5SL_item(slist_node_ptr);
-
- HDassert(slist_entry_ptr->magic == H5AC1__H5AC1_SLIST_ENTRY_T_MAGIC);
-
- HDassert( i < num_entries );
-
- addr = slist_entry_ptr->addr;
-
- if ( H5FD_mpi_haddr_to_MPIOff(addr, &(buf_ptr[i])) < 0 ) {
-
- HGOTO_ERROR(H5E_INTERNAL, H5E_BADRANGE, FAIL, \
- "can't convert from haddr to MPI off")
- }
-
- i++;
-
- /* now remove the entry from the cleaned entry list */
- if ( H5SL_remove(aux_ptr->c_slist_ptr, (void *)(&addr))
- != slist_entry_ptr ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTDELETE, FAIL, \
- "Can't delete entry from cleaned entry slist.")
- }
-
- slist_entry_ptr->magic = 0;
- H5FL_FREE(H5AC1_slist_entry_t, slist_entry_ptr);
- slist_entry_ptr = NULL;
-
- aux_ptr->c_slist_len -= 1;
-
- HDassert( aux_ptr->c_slist_len >= 0 );
-
- /* and also remove the matching entry from the dirtied list
- * if it exists.
- */
- if ( (slist_entry_ptr = H5SL_search(aux_ptr->d_slist_ptr,
- (void *)(&addr))) != NULL ) {
-
- HDassert( slist_entry_ptr->magic ==
- H5AC1__H5AC1_SLIST_ENTRY_T_MAGIC );
- HDassert( slist_entry_ptr->addr == addr );
-
- if ( H5SL_remove(aux_ptr->d_slist_ptr, (void *)(&addr))
- != slist_entry_ptr ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTDELETE, FAIL, \
- "Can't delete entry from dirty entry slist.")
- }
-
- slist_entry_ptr->magic = 0;
- H5FL_FREE(H5AC1_slist_entry_t, slist_entry_ptr);
- slist_entry_ptr = NULL;
-
- aux_ptr->d_slist_len -= 1;
-
- HDassert( aux_ptr->d_slist_len >= 0 );
- }
-
- } /* while */
-
-
- /* Now broadcast the list of cleaned entries -- if there is one.
- *
- * The peculiar structure of the following call to MPI_Bcast is
- * due to MPI's (?) failure to believe in the MPI_Offset type.
- * Thus the element type is MPI_BYTE, with size equal to the
- * buf_size computed above.
- */
-
- mpi_result = MPI_Bcast((void *)buf_ptr, (int)buf_size, MPI_BYTE, 0,
- aux_ptr->mpi_comm);
-
- if ( mpi_result != MPI_SUCCESS ) {
-
- HMPI_GOTO_ERROR(FAIL, "MPI_Bcast failed 2", mpi_result)
- }
- }
-
-done:
-
- if ( buf_ptr != NULL ) {
-
- buf_ptr = (MPI_Offset *)H5MM_xfree((void *)buf_ptr);
- }
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_broadcast_clean_list() */
-#endif /* H5_HAVE_PARALLEL */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5AC1_check_if_write_permitted
- *
- * Purpose: Determine if a write is permitted under the current
- * circumstances, and set *write_permitted_ptr accordingly.
- * As a general rule it is, but when we are running in parallel
- * mode with collective I/O, we must ensure that a read cannot
- * cause a write.
- *
- * In the event of failure, the value of *write_permitted_ptr
- * is undefined.
- *
- * Return: Non-negative on success/Negative on failure.
- *
- * Programmer: John Mainzer, 5/15/04
- *
- * Modifications:
- *
- * John Mainzer, 9/23/05
- * Rewrote function to return the value of the
- * write_permitted field in aux structure if the structure
- * exists and mpi_rank is 0.
- *
- * If the aux structure exists, but mpi_rank isn't 0, the
- * function now returns FALSE.
- *
- * In all other cases, the function returns TRUE.
- *
- *-------------------------------------------------------------------------
- */
-
-#ifdef H5_HAVE_PARALLEL
-static herr_t
-H5AC1_check_if_write_permitted(const H5F_t *f,
- hid_t UNUSED dxpl_id,
- hbool_t * write_permitted_ptr)
-#else /* H5_HAVE_PARALLEL */
-static herr_t
-H5AC1_check_if_write_permitted(const H5F_t UNUSED * f,
- hid_t UNUSED dxpl_id,
- hbool_t * write_permitted_ptr)
-#endif /* H5_HAVE_PARALLEL */
-{
- hbool_t write_permitted = TRUE;
- herr_t ret_value = SUCCEED; /* Return value */
-#ifdef H5_HAVE_PARALLEL
- H5AC1_aux_t * aux_ptr = NULL;
-#endif /* H5_HAVE_PARALLEL */
-
-
- FUNC_ENTER_NOAPI(H5AC1_check_if_write_permitted, FAIL)
-
-#ifdef H5_HAVE_PARALLEL
- HDassert( f != NULL );
- HDassert( f->shared != NULL );
- HDassert( f->shared->cache1 != NULL );
-
- aux_ptr = (H5AC1_aux_t *)(f->shared->cache1->aux_ptr);
-
- if ( aux_ptr != NULL ) {
-
- HDassert( aux_ptr->magic == H5AC1__H5AC1_AUX_T_MAGIC );
-
- if ( aux_ptr->mpi_rank == 0 ) {
-
- write_permitted = aux_ptr->write_permitted;
-
- } else {
-
- write_permitted = FALSE;
- }
- }
-#endif /* H5_HAVE_PARALLEL */
-
- *write_permitted_ptr = write_permitted;
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_check_if_write_permitted() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_ext_config_2_int_config()
- *
- * Purpose: Utility function to translate an instance of
- * H5AC1_cache_config_t to an instance of H5C1_auto_size_ctl_t.
- *
- * Places translation in *int_conf_ptr and returns SUCCEED
- * if successful. Returns FAIL on failure.
- *
- * Does only minimal sanity checking.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 1/26/06
- *
- * Modifications:
- *
- * Updated function for flash cache increment fields.
- *
- * JRM -- 1/2/08
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5AC1_ext_config_2_int_config(H5AC1_cache_config_t * ext_conf_ptr,
- H5C1_auto_size_ctl_t * int_conf_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5AC1_ext_config_2_int_config, FAIL)
-
- if ( ( ext_conf_ptr == NULL ) ||
- ( ext_conf_ptr->version != H5AC1__CURR_CACHE_CONFIG_VERSION ) ||
- ( int_conf_ptr == NULL ) ) {
-
- }
-
- int_conf_ptr->version = H5C1__CURR_AUTO_SIZE_CTL_VER;
-
- if ( ext_conf_ptr->rpt_fcn_enabled ) {
-
- int_conf_ptr->rpt_fcn = H5C1_def_auto_resize_rpt_fcn;
-
- } else {
-
- int_conf_ptr->rpt_fcn = NULL;
- }
-
- int_conf_ptr->set_initial_size = ext_conf_ptr->set_initial_size;
- int_conf_ptr->initial_size = ext_conf_ptr->initial_size;
- int_conf_ptr->min_clean_fraction = ext_conf_ptr->min_clean_fraction;
- int_conf_ptr->max_size = ext_conf_ptr->max_size;
- int_conf_ptr->min_size = ext_conf_ptr->min_size;
- int_conf_ptr->epoch_length =
- (int64_t)(ext_conf_ptr->epoch_length);
-
- int_conf_ptr->incr_mode = ext_conf_ptr->incr_mode;
- int_conf_ptr->lower_hr_threshold = ext_conf_ptr->lower_hr_threshold;
- int_conf_ptr->increment = ext_conf_ptr->increment;
- int_conf_ptr->apply_max_increment = ext_conf_ptr->apply_max_increment;
- int_conf_ptr->max_increment = ext_conf_ptr->max_increment;
- int_conf_ptr->flash_incr_mode = ext_conf_ptr->flash_incr_mode;
- int_conf_ptr->flash_multiple = ext_conf_ptr->flash_multiple;
- int_conf_ptr->flash_threshold = ext_conf_ptr->flash_threshold;
-
- int_conf_ptr->decr_mode = ext_conf_ptr->decr_mode;
- int_conf_ptr->upper_hr_threshold = ext_conf_ptr->upper_hr_threshold;
- int_conf_ptr->decrement = ext_conf_ptr->decrement;
- int_conf_ptr->apply_max_decrement = ext_conf_ptr->apply_max_decrement;
- int_conf_ptr->max_decrement = ext_conf_ptr->max_decrement;
- int_conf_ptr->epochs_before_eviction =
- (int32_t)(ext_conf_ptr->epochs_before_eviction);
- int_conf_ptr->apply_empty_reserve = ext_conf_ptr->apply_empty_reserve;
- int_conf_ptr->empty_reserve = ext_conf_ptr->empty_reserve;
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_ext_config_2_int_config() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5AC1_log_deleted_entry()
- *
- * Purpose: Log an entry for which H5C1__DELETED_FLAG has been set.
- *
- * If mpi_rank is 0, we must make sure that the entry doesn't
- * appear in the cleaned or dirty entry lists. Otherwise,
- * we have nothing to do.
- *
- * Return SUCCEED on success, and FAIL on failure.
- *
- * Return: Non-negative on success/Negative on failure.
- *
- * Programmer: John Mainzer, 6/29/05
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-#ifdef H5_HAVE_PARALLEL
-static herr_t
-H5AC1_log_deleted_entry(H5AC1_t * cache_ptr,
- H5AC1_info_t * entry_ptr,
- haddr_t addr,
- unsigned int flags)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- H5AC1_aux_t * aux_ptr = NULL;
- H5AC1_slist_entry_t * slist_entry_ptr = NULL;
-
- FUNC_ENTER_NOAPI(H5AC1_log_deleted_entry, FAIL)
-
- HDassert( cache_ptr != NULL );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
-
- aux_ptr = cache_ptr->aux_ptr;
-
- HDassert( aux_ptr != NULL );
- HDassert( aux_ptr->magic == H5AC1__H5AC1_AUX_T_MAGIC );
-
- HDassert( entry_ptr != NULL );
- HDassert( entry_ptr->addr == addr );
-
- HDassert( (flags & H5C1__DELETED_FLAG) != 0 );
-
- if ( aux_ptr->mpi_rank == 0 ) {
-
- HDassert( aux_ptr->d_slist_ptr != NULL );
- HDassert( aux_ptr->c_slist_ptr != NULL );
-
- /* if the entry appears in the dirtied entry slist, remove it. */
- if ( (slist_entry_ptr = H5SL_search(aux_ptr->d_slist_ptr,
- (void *)(&addr))) != NULL ) {
-
- HDassert( slist_entry_ptr->magic ==
- H5AC1__H5AC1_SLIST_ENTRY_T_MAGIC );
- HDassert( slist_entry_ptr->addr == addr );
-
- if ( H5SL_remove(aux_ptr->d_slist_ptr, (void *)(&addr))
- != slist_entry_ptr ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTDELETE, FAIL, \
- "Can't delete entry from dirty entry slist.")
- }
-
- slist_entry_ptr->magic = 0;
- H5FL_FREE(H5AC1_slist_entry_t, slist_entry_ptr);
- slist_entry_ptr = NULL;
-
- aux_ptr->d_slist_len -= 1;
-
- HDassert( aux_ptr->d_slist_len >= 0 );
- }
-
- /* if the entry appears in the cleaned entry slist, remove it. */
- if ( (slist_entry_ptr = H5SL_search(aux_ptr->c_slist_ptr,
- (void *)(&addr))) != NULL ) {
-
- HDassert( slist_entry_ptr->magic ==
- H5AC1__H5AC1_SLIST_ENTRY_T_MAGIC );
- HDassert( slist_entry_ptr->addr == addr );
-
- if ( H5SL_remove(aux_ptr->c_slist_ptr, (void *)(&addr))
- != slist_entry_ptr ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTDELETE, FAIL, \
- "Can't delete entry from cleaned entry slist.")
- }
-
- slist_entry_ptr->magic = 0;
- H5FL_FREE(H5AC1_slist_entry_t, slist_entry_ptr);
- slist_entry_ptr = NULL;
-
- aux_ptr->c_slist_len -= 1;
-
- HDassert( aux_ptr->c_slist_len >= 0 );
- }
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_log_deleted_entry() */
-#endif /* H5_HAVE_PARALLEL */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5AC1_log_dirtied_entry()
- *
- * Purpose: Update the dirty_bytes count for a newly dirtied entry.
- *
- * If mpi_rank isnt 0, this simply means adding the size
- * of the entries to the dirty_bytes count.
- *
- * If mpi_rank is 0, we must first check to see if the entry
- * appears in the dirty entries slist. If it is, do nothing.
- * If it isn't, add the size to th dirty_bytes count, add the
- * entry to the dirty entries slist, and remove it from the
- * cleaned list (if it is present there).
- *
- * Return SUCCEED on success, and FAIL on failure.
- *
- * Return: Non-negative on success/Negative on failure.
- *
- * Programmer: John Mainzer, 6/29/05
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-#ifdef H5_HAVE_PARALLEL
-static herr_t
-H5AC1_log_dirtied_entry(H5AC1_t * cache_ptr,
- H5AC1_info_t * entry_ptr,
- haddr_t addr,
- hbool_t size_changed,
- size_t new_size)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- size_t entry_size;
- H5AC1_aux_t * aux_ptr = NULL;
- H5AC1_slist_entry_t * slist_entry_ptr = NULL;
-
- FUNC_ENTER_NOAPI(H5AC1_log_dirtied_entry, FAIL)
-
- HDassert( cache_ptr != NULL );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
-
- aux_ptr = cache_ptr->aux_ptr;
-
- HDassert( aux_ptr != NULL );
- HDassert( aux_ptr->magic == H5AC1__H5AC1_AUX_T_MAGIC );
-
- HDassert( entry_ptr != NULL );
- HDassert( entry_ptr->addr == addr );
- HDassert( entry_ptr->is_dirty == FALSE );
-
- if ( size_changed ) {
-
- entry_size = new_size;
-
- } else {
-
- entry_size = entry_ptr->size;
- }
-
- if ( aux_ptr->mpi_rank == 0 ) {
-
- HDassert( aux_ptr->d_slist_ptr != NULL );
- HDassert( aux_ptr->c_slist_ptr != NULL );
-
- if ( H5SL_search(aux_ptr->d_slist_ptr, (void *)(&addr)) == NULL ) {
-
- /* insert the address of the entry in the dirty entry list, and
- * add its size to the dirty_bytes count.
- */
- if ( NULL == (slist_entry_ptr = H5FL_CALLOC(H5AC1_slist_entry_t)) ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, \
- "Can't allocate dirty slist entry .")
- }
-
- slist_entry_ptr->magic = H5AC1__H5AC1_SLIST_ENTRY_T_MAGIC;
- slist_entry_ptr->addr = addr;
-
- if ( H5SL_insert(aux_ptr->d_slist_ptr, slist_entry_ptr,
- &(slist_entry_ptr->addr)) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTINSERT, FAIL, \
- "can't insert entry into dirty entry slist.")
- }
-
- aux_ptr->d_slist_len += 1;
- aux_ptr->dirty_bytes += entry_size;
-#if H5AC1_DEBUG_DIRTY_BYTES_CREATION
- aux_ptr->unprotect_dirty_bytes += entry_size;
- aux_ptr->unprotect_dirty_bytes_updates += 1;
-#endif /* H5AC1_DEBUG_DIRTY_BYTES_CREATION */
- }
-
- if ( H5SL_search(aux_ptr->c_slist_ptr, (void *)(&addr)) != NULL ) {
-
- /* the entry is dirty. If it exists on the cleaned entries list,
- * remove it.
- */
- if ( (slist_entry_ptr = H5SL_search(aux_ptr->c_slist_ptr,
- (void *)(&addr))) != NULL ) {
-
- HDassert( slist_entry_ptr->magic ==
- H5AC1__H5AC1_SLIST_ENTRY_T_MAGIC );
- HDassert( slist_entry_ptr->addr == addr );
-
- if ( H5SL_remove(aux_ptr->c_slist_ptr, (void *)(&addr))
- != slist_entry_ptr ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTDELETE, FAIL, \
- "Can't delete entry from clean entry slist.")
- }
-
- slist_entry_ptr->magic = 0;
- H5FL_FREE(H5AC1_slist_entry_t, slist_entry_ptr);
- slist_entry_ptr = NULL;
-
- aux_ptr->c_slist_len -= 1;
-
- HDassert( aux_ptr->c_slist_len >= 0 );
- }
- }
- } else {
-
- aux_ptr->dirty_bytes += entry_size;
-#if H5AC1_DEBUG_DIRTY_BYTES_CREATION
- aux_ptr->unprotect_dirty_bytes += entry_size;
- aux_ptr->unprotect_dirty_bytes_updates += 1;
-#endif /* H5AC1_DEBUG_DIRTY_BYTES_CREATION */
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_log_dirtied_entry() */
-#endif /* H5_HAVE_PARALLEL */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5AC1_log_flushed_entry()
- *
- * Purpose: Update the clean entry slist for the flush of an entry --
- * specifically, if the entry has been cleared, remove it
- * from both the cleaned and dirtied lists if it is present.
- * Otherwise, if the entry was dirty, insert the indicated
- * entry address in the clean slist if it isn't there already.
- *
- * This function is only used in PHDF5, and should only
- * be called for the process with mpi rank 0.
- *
- * Return SUCCEED on success, and FAIL on failure.
- *
- * Return: Non-negative on success/Negative on failure.
- *
- * Programmer: John Mainzer, 6/29/05
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-#ifdef H5_HAVE_PARALLEL
-#if 0 /* This is useful debugging code. -- JRM */
-static herr_t
-H5AC1_log_flushed_entry_dummy(H5C1_t * cache_ptr,
- haddr_t addr,
- hbool_t was_dirty,
- unsigned flags,
- int type_id)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- H5AC1_aux_t * aux_ptr = NULL;
-
- FUNC_ENTER_NOAPI(H5AC1_log_flushed_entry_dummy, FAIL)
-
- aux_ptr = cache_ptr->aux_ptr;
-
- if ( ( was_dirty ) && ( (flags & H5C1__FLUSH_CLEAR_ONLY_FLAG) == 0 ) ) {
-
- HDfprintf(stdout,
- "%d:H5AC1_log_flushed_entry(): addr = %d, flags = %x, was_dirty = %d, type_id = %d\n",
- (int)(aux_ptr->mpi_rank), (int)addr, flags, (int)was_dirty, type_id);
- }
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_log_flushed_entry_dummy() */
-#endif /* JRM */
-
-static herr_t
-H5AC1_log_flushed_entry(H5C1_t * cache_ptr,
- haddr_t addr,
- hbool_t was_dirty,
- unsigned flags,
- int UNUSED type_id)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- hbool_t cleared;
- H5AC1_aux_t * aux_ptr;
- H5AC1_slist_entry_t * slist_entry_ptr = NULL;
-
-
- FUNC_ENTER_NOAPI(H5AC1_log_flushed_entry, FAIL)
-
- HDassert( cache_ptr != NULL );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
-
- aux_ptr = cache_ptr->aux_ptr;
-
- HDassert( aux_ptr != NULL );
- HDassert( aux_ptr->magic == H5AC1__H5AC1_AUX_T_MAGIC );
- HDassert( aux_ptr->mpi_rank == 0 );
- HDassert( aux_ptr->c_slist_ptr != NULL );
-
- cleared = ( (flags & H5C1__FLUSH_CLEAR_ONLY_FLAG) != 0 );
-
- if ( cleared ) {
-
- /* If the entry has been cleared, must remove it from both the
- * cleaned list and the dirtied list.
- */
-
- if ( (slist_entry_ptr = H5SL_search(aux_ptr->c_slist_ptr,
- (void *)(&addr))) != NULL ) {
-
- HDassert( slist_entry_ptr->magic == H5AC1__H5AC1_SLIST_ENTRY_T_MAGIC);
- HDassert( slist_entry_ptr->addr == addr );
-
- if ( H5SL_remove(aux_ptr->c_slist_ptr, (void *)(&addr))
- != slist_entry_ptr ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTDELETE, FAIL, \
- "Can't delete entry from clean entry slist.")
- }
-
- slist_entry_ptr->magic = 0;
- H5FL_FREE(H5AC1_slist_entry_t, slist_entry_ptr);
- slist_entry_ptr = NULL;
-
- aux_ptr->c_slist_len -= 1;
-
- HDassert( aux_ptr->c_slist_len >= 0 );
- }
-
- if ( (slist_entry_ptr = H5SL_search(aux_ptr->d_slist_ptr,
- (void *)(&addr))) != NULL ) {
-
- HDassert( slist_entry_ptr->magic == H5AC1__H5AC1_SLIST_ENTRY_T_MAGIC);
- HDassert( slist_entry_ptr->addr == addr );
-
- if ( H5SL_remove(aux_ptr->d_slist_ptr, (void *)(&addr))
- != slist_entry_ptr ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTDELETE, FAIL, \
- "Can't delete entry from dirty entry slist.")
- }
-
- slist_entry_ptr->magic = 0;
- H5FL_FREE(H5AC1_slist_entry_t, slist_entry_ptr);
- slist_entry_ptr = NULL;
-
- aux_ptr->d_slist_len -= 1;
-
- HDassert( aux_ptr->d_slist_len >= 0 );
- }
- } else if ( was_dirty ) {
-
- if ( H5SL_search(aux_ptr->c_slist_ptr, (void *)(&addr)) == NULL ) {
-
- /* insert the address of the entry in the clean entry list. */
-
- if ( NULL == (slist_entry_ptr = H5FL_CALLOC(H5AC1_slist_entry_t)) ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, \
- "Can't allocate clean slist entry .")
- }
-
- slist_entry_ptr->magic = H5AC1__H5AC1_SLIST_ENTRY_T_MAGIC;
- slist_entry_ptr->addr = addr;
-
- if ( H5SL_insert(aux_ptr->c_slist_ptr, slist_entry_ptr,
- &(slist_entry_ptr->addr)) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTINSERT, FAIL, \
- "can't insert entry into clean entry slist.")
- }
-
- aux_ptr->c_slist_len += 1;
- }
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_log_flushed_entry() */
-#endif /* H5_HAVE_PARALLEL */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5AC1_log_inserted_entry()
- *
- * Purpose: Update the dirty_bytes count for a newly inserted entry.
- *
- * If mpi_rank isnt 0, this simply means adding the size
- * of the entry to the dirty_bytes count.
- *
- * If mpi_rank is 0, we must also add the entry to the
- * dirty entries slist.
- *
- * Return SUCCEED on success, and FAIL on failure.
- *
- * Return: Non-negative on success/Negative on failure.
- *
- * Programmer: John Mainzer, 6/30/05
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-#ifdef H5_HAVE_PARALLEL
-static herr_t
-H5AC1_log_inserted_entry(H5F_t * f,
- H5AC1_t * cache_ptr,
- H5AC1_info_t * entry_ptr,
- const H5AC1_class_t * type,
- haddr_t addr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- size_t size;
- H5AC1_aux_t * aux_ptr = NULL;
- H5AC1_slist_entry_t * slist_entry_ptr = NULL;
-
- FUNC_ENTER_NOAPI(H5AC1_log_inserted_entry, FAIL)
-
- HDassert( cache_ptr != NULL );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
-
- aux_ptr = cache_ptr->aux_ptr;
-
- HDassert( aux_ptr != NULL );
- HDassert( aux_ptr->magic == H5AC1__H5AC1_AUX_T_MAGIC );
-
- HDassert( entry_ptr != NULL );
- HDassert( entry_ptr->addr == addr );
- HDassert( entry_ptr->type == type );
-
- /* the size field of the entry will not have been set yet, so we
- * have to obtain it directly.
- */
- if ( (type->size)(f, (void *)entry_ptr, &size) < 0 ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGETSIZE, FAIL, \
- "Can't get size of entry to be inserted.")
- }
-
- if ( aux_ptr->mpi_rank == 0 ) {
-
- HDassert( aux_ptr->d_slist_ptr != NULL );
- HDassert( aux_ptr->c_slist_ptr != NULL );
-
- if ( H5SL_search(aux_ptr->d_slist_ptr, (void *)(&addr)) == NULL ) {
-
- /* insert the address of the entry in the dirty entry list, and
- * add its size to the dirty_bytes count.
- */
- if ( NULL == (slist_entry_ptr = H5FL_CALLOC(H5AC1_slist_entry_t)) ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, \
- "Can't allocate dirty slist entry .")
- }
-
- slist_entry_ptr->magic = H5AC1__H5AC1_SLIST_ENTRY_T_MAGIC;
- slist_entry_ptr->addr = addr;
-
- if ( H5SL_insert(aux_ptr->d_slist_ptr, slist_entry_ptr,
- &(slist_entry_ptr->addr)) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTINSERT, FAIL, \
- "can't insert entry into dirty entry slist.")
- }
-
- aux_ptr->d_slist_len += 1;
-
- } else {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Inserted entry already in dirty slist.")
- }
-
- if ( H5SL_search(aux_ptr->c_slist_ptr, (void *)(&addr)) != NULL ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Inserted entry in clean slist.")
- }
- }
-
- aux_ptr->dirty_bytes += size;
-
-#if H5AC1_DEBUG_DIRTY_BYTES_CREATION
- aux_ptr->insert_dirty_bytes += size;
- aux_ptr->insert_dirty_bytes_updates += 1;
-#endif /* H5AC1_DEBUG_DIRTY_BYTES_CREATION */
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_log_inserted_entry() */
-#endif /* H5_HAVE_PARALLEL */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5AC1_log_renamed_entry()
- *
- * Purpose: Update the dirty_bytes count for a renamed entry.
- *
- * WARNING
- *
- * At present, the way that the rename call is used ensures
- * that the renamed entry is present in all caches by
- * renaming in a collective operation and immediately after
- * unprotecting the target entry.
- *
- * This function uses this invarient, and will cause arcane
- * failures if it is not met. If maintaining this invarient
- * becomes impossible, we will have to rework this function
- * extensively, and likely include a bit of IPC for
- * synchronization. A better option might be to subsume
- * rename in the unprotect operation.
- *
- * Given that the target entry is in all caches, the function
- * proceeds as follows:
- *
- * For processes with mpi rank other 0, it simply checks to
- * see if the entry was dirty prior to the rename, and adds
- * the entries size to the dirty bytes count.
- *
- * In the process with mpi rank 0, the function first checks
- * to see if the entry was dirty prior to the rename. If it
- * was, and if the entry doesn't appear in the dirtied list
- * under its old address, it adds the entry's size to the
- * dirty bytes count.
- *
- * The rank 0 process then removes any references to the
- * entry under its old address from the cleands and dirtied
- * lists, and inserts an entry in the dirtied list under the
- * new address.
- *
- * Return SUCCEED on success, and FAIL on failure.
- *
- * Return: Non-negative on success/Negative on failure.
- *
- * Programmer: John Mainzer, 6/30/05
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-#ifdef H5_HAVE_PARALLEL
-static herr_t
-H5AC1_log_renamed_entry(H5AC1_t * cache_ptr,
- haddr_t old_addr,
- haddr_t new_addr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- hbool_t entry_in_cache;
- hbool_t entry_dirty;
- size_t entry_size;
- H5AC1_aux_t * aux_ptr = NULL;
- H5AC1_slist_entry_t * slist_entry_ptr = NULL;
-
- FUNC_ENTER_NOAPI(H5AC1_log_renamed_entry, FAIL)
-
- HDassert( cache_ptr != NULL );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
-
- aux_ptr = cache_ptr->aux_ptr;
-
- HDassert( aux_ptr != NULL );
- HDassert( aux_ptr->magic == H5AC1__H5AC1_AUX_T_MAGIC );
-
- /* get entry status, size, etc here */
- if ( H5C1_get_entry_status(cache_ptr, old_addr, &entry_size, &entry_in_cache,
- &entry_dirty, NULL, NULL) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't get entry status.")
-
- } else if ( ! entry_in_cache ) {
-
- HDassert( entry_in_cache );
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "entry not in cache.")
- }
-
- if ( aux_ptr->mpi_rank == 0 ) {
-
- HDassert( aux_ptr->d_slist_ptr != NULL );
- HDassert( aux_ptr->c_slist_ptr != NULL );
-
- /* if the entry appears in the cleaned entry slist, under its old
- * address, remove it.
- */
- if ( (slist_entry_ptr = H5SL_search(aux_ptr->c_slist_ptr,
- (void *)(&old_addr))) != NULL ) {
-
- HDassert( slist_entry_ptr->magic ==
- H5AC1__H5AC1_SLIST_ENTRY_T_MAGIC );
- HDassert( slist_entry_ptr->addr == old_addr );
-
- if ( H5SL_remove(aux_ptr->c_slist_ptr, (void *)(&old_addr))
- != slist_entry_ptr ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTDELETE, FAIL, \
- "Can't delete entry from cleaned entry slist.")
- }
-
- slist_entry_ptr->magic = 0;
- H5FL_FREE(H5AC1_slist_entry_t, slist_entry_ptr);
- slist_entry_ptr = NULL;
-
- aux_ptr->c_slist_len -= 1;
-
- HDassert( aux_ptr->c_slist_len >= 0 );
- }
-
- /* if the entry appears in the dirtied entry slist under its old
- * address, remove it, but don't free it. Set addr to new_addr.
- */
- if ( (slist_entry_ptr = H5SL_search(aux_ptr->d_slist_ptr,
- (void *)(&old_addr))) != NULL ) {
-
- HDassert( slist_entry_ptr->magic ==
- H5AC1__H5AC1_SLIST_ENTRY_T_MAGIC );
- HDassert( slist_entry_ptr->addr == old_addr );
-
- if ( H5SL_remove(aux_ptr->d_slist_ptr, (void *)(&old_addr))
- != slist_entry_ptr ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTDELETE, FAIL, \
- "Can't delete entry from dirty entry slist.")
- }
-
- slist_entry_ptr->addr = new_addr;
-
- aux_ptr->d_slist_len -= 1;
-
- HDassert( aux_ptr->d_slist_len >= 0 );
-
- } else {
-
- /* otherwise, allocate a new entry that is ready
- * for insertion, and increment dirty_bytes.
- *
- * Note that the fact that the entry wasn't in the dirtied
- * list under its old address implies that it must have
- * been clean to start with.
- */
-
- HDassert( !entry_dirty );
-
- if ( NULL == (slist_entry_ptr = H5FL_CALLOC(H5AC1_slist_entry_t)) ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, \
- "Can't allocate dirty slist entry .")
- }
-
- slist_entry_ptr->magic = H5AC1__H5AC1_SLIST_ENTRY_T_MAGIC;
- slist_entry_ptr->addr = new_addr;
-
- aux_ptr->dirty_bytes += entry_size;
-
-#if H5AC1_DEBUG_DIRTY_BYTES_CREATION
- aux_ptr->rename_dirty_bytes += entry_size;
- aux_ptr->rename_dirty_bytes_updates += 1;
-#endif /* H5AC1_DEBUG_DIRTY_BYTES_CREATION */
- }
-
- /* verify that there is no entry at new_addr in the dirty slist */
- if ( H5SL_search(aux_ptr->d_slist_ptr, (void *)(&new_addr)) != NULL ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "dirty slist already contains entry at new_addr.")
- }
-
- /* insert / reinsert the entry in the dirty slist */
- if ( H5SL_insert(aux_ptr->d_slist_ptr, slist_entry_ptr,
- &(slist_entry_ptr->addr)) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTINSERT, FAIL, \
- "can't insert entry into dirty entry slist.")
- }
-
- aux_ptr->d_slist_len += 1;
-
- } else if ( ! entry_dirty ) {
-
- aux_ptr->dirty_bytes += entry_size;
-
-#if H5AC1_DEBUG_DIRTY_BYTES_CREATION
- aux_ptr->rename_dirty_bytes += entry_size;
- aux_ptr->rename_dirty_bytes_updates += 1;
-#endif /* H5AC1_DEBUG_DIRTY_BYTES_CREATION */
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_log_renamed_entry() */
-#endif /* H5_HAVE_PARALLEL */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5AC1_propagate_flushed_and_still_clean_entries_list
- *
- * Purpose: In PHDF5, only the metadata cache with mpi rank 0 is allowed
- * to write to file. All other metadata caches on processes
- * with rank greater than 0 must retain dirty entries until
- * they are notified that the entry is now clean.
- *
- * This function is the main routine for that proceedure.
- * It must be called simultaniously on all processes that
- * have the relevant file open. To this end, there must
- * be a barrier immediately prior to this call.
- *
- * Typicaly, this will be done one of two ways:
- *
- * 1) Dirty byte creation exceeds some user specified value.
- *
- * While metadata reads may occur independently, all
- * operations writing metadata must be collective. Thus
- * all metadata caches see the same sequence of operations,
- * and therefore the same dirty data creation.
- *
- * This fact is used to synchronize the caches for purposes
- * of propagating the list of flushed and still clean
- * entries, by simply calling this function from all
- * caches whenever some user specified threshold on dirty
- * data is exceeded.
- *
- * 2) Under direct user control -- this operation must be
- * collective.
- *
- * The operations to be managed by this function are as
- * follows:
- *
- * For the process with mpi rank 0:
- *
- * 1) Enable writes, flush the cache to its min clean size,
- * and then disable writes again.
- *
- * 2) Load the contents of the flushed and still clean entries
- * list (c_slist_ptr) into a buffer, and broadcast that
- * buffer to all the other caches.
- *
- * 3) Clear the flushed and still clean entries list
- * (c_slist_ptr).
- *
- *
- * For all processes with mpi rank greater than 0:
- *
- * 1) Receive the flushed and still clean entries list broadcast
- *
- * 2) Mark the specified entries as clean.
- *
- *
- * For all processes:
- *
- * 1) Reset the dirtied bytes count to 0.
- *
- * Return: Success: non-negative
- *
- * Failure: negative
- *
- * Programmer: John Mainzer
- * July 5, 2005
- *
- * Modifications:
- *
- * JRM -- 5/11/06
- * Added code to call the write_done callback.
- *
- *-------------------------------------------------------------------------
- */
-
-#ifdef H5_HAVE_PARALLEL
-herr_t
-H5AC1_propagate_flushed_and_still_clean_entries_list(H5F_t * f,
- hid_t dxpl_id,
- H5AC1_t * cache_ptr,
- hbool_t do_barrier)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- herr_t result;
- int mpi_code;
- H5AC1_aux_t * aux_ptr = NULL;
-
- FUNC_ENTER_NOAPI(H5AC1_propagate_flushed_and_still_clean_entries_list, FAIL)
-
- HDassert( cache_ptr != NULL );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
-
- aux_ptr = cache_ptr->aux_ptr;
-
- HDassert( aux_ptr != NULL );
- HDassert( aux_ptr->magic == H5AC1__H5AC1_AUX_T_MAGIC );
-
-#if H5AC1_DEBUG_DIRTY_BYTES_CREATION
- HDfprintf(stdout,
- "%d:H5AC1_propagate...:%d: (u/uu/i/iu/r/ru) = %d/%d/%d/%d/%d/%d\n",
- (int)(aux_ptr->mpi_rank),
- (int)(aux_ptr->dirty_bytes_propagations),
- (int)(aux_ptr->unprotect_dirty_bytes),
- (int)(aux_ptr->unprotect_dirty_bytes_updates),
- (int)(aux_ptr->insert_dirty_bytes),
- (int)(aux_ptr->insert_dirty_bytes_updates),
- (int)(aux_ptr->rename_dirty_bytes),
- (int)(aux_ptr->rename_dirty_bytes_updates));
-#endif /* H5AC1_DEBUG_DIRTY_BYTES_CREATION */
-
- if ( do_barrier ) {
-
- /* to prevent "messages from the future" we must synchronize all
- * processes before we start the flush. This synchronization may
- * already be done -- hence the do_barrier parameter.
- */
-
- if ( MPI_SUCCESS != (mpi_code = MPI_Barrier(aux_ptr->mpi_comm)) ) {
-
- HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_code)
- }
- }
-
- if ( aux_ptr->mpi_rank == 0 ) {
-
- aux_ptr->write_permitted = TRUE;
-
- result = H5C1_flush_to_min_clean(f, dxpl_id, H5AC1_noblock_dxpl_id,
- cache_ptr);
-
- aux_ptr->write_permitted = FALSE;
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_flush_to_min_clean() failed.")
- }
-
- if ( aux_ptr->write_done != NULL ) {
-
- (aux_ptr->write_done)();
- }
-
- if ( H5AC1_broadcast_clean_list(cache_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Can't broadcast clean slist.")
- }
-
- HDassert( aux_ptr->c_slist_len == 0 );
-
- } else {
-
- if ( H5AC1_receive_and_apply_clean_list(f, dxpl_id,
- H5AC1_noblock_dxpl_id,
- cache_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Can't receive and/or process clean slist broadcast.")
- }
- }
-
- aux_ptr->dirty_bytes = 0;
-#if H5AC1_DEBUG_DIRTY_BYTES_CREATION
- aux_ptr->dirty_bytes_propagations += 1;
- aux_ptr->unprotect_dirty_bytes = 0;
- aux_ptr->unprotect_dirty_bytes_updates = 0;
- aux_ptr->insert_dirty_bytes = 0;
- aux_ptr->insert_dirty_bytes_updates = 0;
- aux_ptr->rename_dirty_bytes = 0;
- aux_ptr->rename_dirty_bytes_updates = 0;
-#endif /* H5AC1_DEBUG_DIRTY_BYTES_CREATION */
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_propagate_flushed_and_still_clean_entries_list() */
-#endif /* H5_HAVE_PARALLEL */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5AC1_receive_and_apply_clean_list()
- *
- * Purpose: Receive the list of cleaned entries from process 0,
- * and mark the specified entries as clean.
- *
- * This function must only be called by the process with
- * MPI_rank greater than 0.
- *
- * Return SUCCEED on success, and FAIL on failure.
- *
- * Return: Non-negative on success/Negative on failure.
- *
- * Programmer: John Mainzer, 7/4/05
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-#ifdef H5_HAVE_PARALLEL
-static herr_t
-H5AC1_receive_and_apply_clean_list(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5AC1_t * cache_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- H5AC1_aux_t * aux_ptr = NULL;
- haddr_t * haddr_buf_ptr = NULL;
- MPI_Offset * MPI_Offset_buf_ptr = NULL;
- size_t buf_size;
- int i = 0;
- int mpi_result;
- int num_entries;
-
- FUNC_ENTER_NOAPI(H5AC1_receive_and_apply_clean_list, FAIL)
-
- HDassert( cache_ptr != NULL );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
-
- aux_ptr = cache_ptr->aux_ptr;
-
- HDassert( aux_ptr != NULL );
- HDassert( aux_ptr->magic == H5AC1__H5AC1_AUX_T_MAGIC );
- HDassert( aux_ptr->mpi_rank != 0 );
-
- /* First receive the number of entries in the list so that we
- * can set up a buffer to receive them. If there aren't
- * any, we are done.
- */
- mpi_result = MPI_Bcast(&num_entries, 1, MPI_INT, 0, aux_ptr->mpi_comm);
-
- if ( mpi_result != MPI_SUCCESS ) {
-
- HMPI_GOTO_ERROR(FAIL, "MPI_Bcast failed 1", mpi_result)
- }
-
- if ( num_entries > 0 )
- {
- /* allocate a buffers to store the list of entry base addresses in */
-
- buf_size = sizeof(MPI_Offset) * (size_t)num_entries;
-
- MPI_Offset_buf_ptr = (MPI_Offset *)H5MM_malloc(buf_size);
-
- if ( MPI_Offset_buf_ptr == NULL ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, \
- "memory allocation failed for receive buffer")
- }
-
- haddr_buf_ptr = (haddr_t *)H5MM_malloc(sizeof(haddr_t) *
- (size_t)num_entries);
-
- if ( haddr_buf_ptr == NULL ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, \
- "memory allocation failed for haddr buffer")
- }
-
-
- /* Now receive the list of cleaned entries
- *
- * The peculiar structure of the following call to MPI_Bcast is
- * due to MPI's (?) failure to believe in the MPI_Offset type.
- * Thus the element type is MPI_BYTE, with size equal to the
- * buf_size computed above.
- */
-
- mpi_result = MPI_Bcast((void *)MPI_Offset_buf_ptr, (int)buf_size,
- MPI_BYTE, 0, aux_ptr->mpi_comm);
-
- if ( mpi_result != MPI_SUCCESS ) {
-
- HMPI_GOTO_ERROR(FAIL, "MPI_Bcast failed 2", mpi_result)
- }
-
-
- /* translate the MPI_Offsets to haddr_t */
- i = 0;
- while ( i < num_entries )
- {
- haddr_buf_ptr[i] = H5FD_mpi_MPIOff_to_haddr(MPI_Offset_buf_ptr[i]);
-
- if ( haddr_buf_ptr[i] == HADDR_UNDEF ) {
-
- HGOTO_ERROR(H5E_INTERNAL, H5E_BADRANGE, FAIL, \
- "can't convert MPI off to haddr")
- }
-
- i++;
- }
-
-
- /* mark the indicated entries as clean */
- if ( H5C1_mark_entries_as_clean(f, primary_dxpl_id, secondary_dxpl_id,
- cache_ptr, (int32_t)num_entries,
- &(haddr_buf_ptr[0])) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Can't mark entries clean.")
-
- }
- }
-
-done:
-
- if ( MPI_Offset_buf_ptr != NULL ) {
-
- MPI_Offset_buf_ptr =
- (MPI_Offset *)H5MM_xfree((void *)MPI_Offset_buf_ptr);
- }
-
- if ( haddr_buf_ptr != NULL ) {
-
- haddr_buf_ptr = (haddr_t *)H5MM_xfree((void *)haddr_buf_ptr);
- }
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5AC1_receive_and_apply_clean_list() */
-#endif /* H5_HAVE_PARALLEL */
-
diff --git a/src/H5AC1pkg.h b/src/H5AC1pkg.h
deleted file mode 100644
index c685632..0000000
--- a/src/H5AC1pkg.h
+++ /dev/null
@@ -1,325 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*
- * Programmer: John Mainzer -- 4/19/06
- *
- * Purpose: This file contains declarations which are normally visible
- * only within the H5AC package (just H5AC1.c at present).
- *
- * Source files outside the H5AC package should include
- * H5AC1private.h instead.
- *
- * The one exception to this rule is testpar/t_cache1.c. The
- * test code is easier to write if it can look at H5AC1_aux_t.
- * Indeed, this is the main reason why this file was created.
- */
-
-#ifndef H5AC1_PACKAGE
-#error "Do not include this file outside the H5AC package!"
-#endif
-
-#ifndef _H5AC1pkg_H
-#define _H5AC1pkg_H
-
-/* Get package's private header */
-#include "H5AC1private.h"
-
-
-/* Get needed headers */
-#include "H5C1private.h" /* Cache */
-#include "H5SLprivate.h" /* Skip lists */
-
-
-#define H5AC1_DEBUG_DIRTY_BYTES_CREATION 0
-
-/*-------------------------------------------------------------------------
- * It is a bit difficult to set ranges of allowable values on the
- * dirty_bytes_threshold field of H5AC1_aux_t. The following are
- * probably broader than they should be.
- *-------------------------------------------------------------------------
- */
-
-#define H5AC1__MIN_DIRTY_BYTES_THRESHOLD (int32_t) \
- (H5C1__MIN_MAX_CACHE_SIZE / 2)
-#define H5AC1__DEFAULT_DIRTY_BYTES_THRESHOLD (256 * 1024)
-#define H5AC1__MAX_DIRTY_BYTES_THRESHOLD (int32_t) \
- (H5C1__MAX_MAX_CACHE_SIZE / 4)
-
-/****************************************************************************
- *
- * structure H5AC1_aux_t
- *
- * While H5AC has become a wrapper for the cache implemented in H5C.c, there
- * are some features of the metadata cache that are specific to it, and which
- * therefore do not belong in the more generic H5C cache code.
- *
- * In particular, there is the matter of synchronizing writes from the
- * metadata cache to disk in the PHDF5 case.
- *
- * Prior to this update, the presumption was that all metadata caches would
- * write the same data at the same time since all operations modifying
- * metadata must be performed collectively. Given this assumption, it was
- * safe to allow only the writes from process 0 to actually make it to disk,
- * while metadata writes from all other processes were discarded.
- *
- * Unfortunately, this presumption is in error as operations that read
- * metadata need not be collective, but can change the location of dirty
- * entries in the metadata cache LRU lists. This can result in the same
- * metadata write operation triggering writes from the metadata caches on
- * some processes, but not all (causing a hang), or in different sets of
- * entries being written from different caches (potentially resulting in
- * metadata corruption in the file).
- *
- * To deal with this issue, I decided to apply a paradigm shift to the way
- * metadata is written to disk.
- *
- * With this set of changes, only the metadata cache on process 0 is able
- * to write metadata to disk, although metadata caches on all other
- * processes can read metadata from disk as before.
- *
- * To keep all the other caches from getting plugged up with dirty metadata,
- * process 0 periodically broadcasts a list of entries that it has flushed
- * since that last notice, and which are currently clean. The other caches
- * mark these entries as clean as well, which allows them to evict the
- * entries as needed.
- *
- * One obvious problem in this approach is synchronizing the broadcasts
- * and receptions, as different caches may see different amounts of
- * activity.
- *
- * The current solution is for the caches to track the number of bytes
- * of newly generated dirty metadata, and to broadcast and receive
- * whenever this value exceeds some user specified threshold.
- *
- * Maintaining this count is easy for all processes not on process 0 --
- * all that is necessary is to add the size of the entry to the total
- * whenever there is an insertion, a rename of a previously clean entry,
- * or whever a previously clean entry is marked dirty in an unprotect.
- *
- * On process 0, we have to be careful not to count dirty bytes twice.
- * If an entry is marked dirty, flushed, and marked dirty again, all
- * within a single reporting period, it only th first marking should
- * be added to the dirty bytes generated tally, as that is all that
- * the other processes will see.
- *
- * At present, this structure exists to maintain the fields needed to
- * implement the above scheme, and thus is only used in the parallel
- * case. However, other uses may arise in the future.
- *
- * Instance of this structure are associated with metadata caches via
- * the aux_ptr field of H5C1_t (see H5Cpkg.h). The H5AC code is
- * responsible for allocating, maintaining, and discarding instances
- * of H5AC1_aux_t.
- *
- * The remainder of this header comments documents the individual fields
- * of the structure.
- *
- * JRM - 6/27/05
- *
- * magic: Unsigned 32 bit integer always set to
- * H5AC1__H5AC1_AUX_T_MAGIC. This field is used to validate
- * pointers to instances of H5AC1_aux_t.
- *
- * mpi_comm: MPI communicator associated with the file for which the
- * cache has been created.
- *
- * mpi_rank: MPI rank of this process within mpi_comm.
- *
- * mpi_size: Number of processes in mpi_comm.
- *
- * write_permitted: Boolean flag used to control whether the cache
- * is permitted to write to file.
- *
- * dirty_bytes_threshold: Integer field containing the dirty bytes
- * generation threashold. Whenever dirty byte creation
- * exceeds this value, the metadata cache on process 0
- * broadcasts a list of the entries it has flushed since
- * the last broadcast (or since the beginning of execution)
- * and which are currently clean (if they are still in the
- * cache)
- *
- * Similarly, metadata caches on processes other than process
- * 0 will attempt to receive a list of clean entries whenever
- * the threshold is exceeded.
- *
- * dirty_bytes: Integer field containing the number of bytes of dirty
- * metadata generated since the beginning of the computation,
- * or (more typically) since the last clean entries list
- * broadcast. This field is reset to zero after each such
- * broadcast.
- *
- * dirty_bytes_propagations: This field only exists when the
- * H5AC1_DEBUG_DIRTY_BYTES_CREATION #define is TRUE.
- *
- * It is used to track the number of times the cleaned list
- * has been propagated from process 0 to the other
- * processes.
- *
- * unprotect_dirty_bytes: This field only exists when the
- * H5AC1_DEBUG_DIRTY_BYTES_CREATION #define is TRUE.
- *
- * It is used to track the number of dirty bytes created
- * via unprotect operations since the last time the cleaned
- * list was propagated.
- *
- * unprotect_dirty_bytes_updates: This field only exists when the
- * H5AC1_DEBUG_DIRTY_BYTES_CREATION #define is TRUE.
- *
- * It is used to track the number of times dirty bytes have
- * been created via unprotect operations since the last time
- * the cleaned list was propagated.
- *
- * insert_dirty_bytes: This field only exists when the
- * H5AC1_DEBUG_DIRTY_BYTES_CREATION #define is TRUE.
- *
- * It is used to track the number of dirty bytes created
- * via insert operations since the last time the cleaned
- * list was propagated.
- *
- * insert_dirty_bytes_updates: This field only exists when the
- * H5AC1_DEBUG_DIRTY_BYTES_CREATION #define is TRUE.
- *
- * It is used to track the number of times dirty bytes have
- * been created via insert operations since the last time
- * the cleaned list was propagated.
- *
- * rename_dirty_bytes: This field only exists when the
- * H5AC1_DEBUG_DIRTY_BYTES_CREATION #define is TRUE.
- *
- * It is used to track the number of dirty bytes created
- * via rename operations since the last time the cleaned
- * list was propagated.
- *
- * rename_dirty_bytes_updates: This field only exists when the
- * H5AC1_DEBUG_DIRTY_BYTES_CREATION #define is TRUE.
- *
- * It is used to track the number of times dirty bytes have
- * been created via rename operations since the last time
- * the cleaned list was propagated.
- *
- * d_slist_ptr: Pointer to an instance of H5SL_t used to maintain a list
- * of entries that have been dirtied since the last time they
- * were listed in a clean entries broadcast. This list is
- * only maintained by the metadata cache on process 0 -- it
- * it used to maintain a view of the dirty entries as seen
- * by the other caches, so as to keep the dirty bytes count
- * in synchronization with them.
- *
- * Thus on process 0, the dirty_bytes count is incremented
- * only if either
- *
- * 1) an entry is inserted in the metadata cache, or
- *
- * 2) a previously clean entry is renamed, and it does not
- * already appear in the dirty entry list, or
- *
- * 3) a previously clean entry is unprotected with the
- * dirtied flag set and the entry does not already appear
- * in the dirty entry list.
- *
- * Entries are added to the dirty entry list whever they cause
- * the dirty bytes count to be increased. They are removed
- * when they appear in a clean entries broadcast. Note that
- * renames must be reflected in the dirty entry list.
- *
- * To reitterate, this field is only used on process 0 -- it
- * should be NULL on all other processes.
- *
- * d_slist_len: Integer field containing the number of entries in the
- * dirty entry list. This field should always contain the
- * value 0 on all processes other than process 0. It exists
- * primarily for sanity checking.
- *
- * c_slist_ptr: Pointer to an instance of H5SL_t used to maintain a list
- * of entries that were dirty, have been flushed
- * to disk since the last clean entries broadcast, and are
- * still clean. Since only process 0 can write to disk, this
- * list only exists on process 0.
- *
- * In essence, this slist is used to assemble the contents of
- * the next clean entries broadcast. The list emptied after
- * each broadcast.
- *
- * c_slist_len: Integer field containing the number of entries in the clean
- * entries list (*c_slist_ptr). This field should always
- * contain the value 0 on all processes other than process 0.
- * It exists primarily for sanity checking.
- *
- * write_done: In the parallel test bed, it is necessary to ensure that
- * all writes to the server process from cache 0 complete
- * before it enters the barrier call with the other caches.
- *
- * The write_done callback allows t_cache to do this without
- * requiring an ACK on each write. Since these ACKs greatly
- * increase the run time on some platforms, this is a
- * significant optimization.
- *
- * This field must be set to NULL when the callback is not
- * needed.
- *
- ****************************************************************************/
-
-#ifdef H5_HAVE_PARALLEL
-
-#define H5AC1__H5AC1_AUX_T_MAGIC (unsigned)0x00D0A00
-
-typedef struct H5AC1_aux_t
-{
- uint32_t magic;
-
- MPI_Comm mpi_comm;
-
- int mpi_rank;
-
- int mpi_size;
-
- hbool_t write_permitted;
-
- int32_t dirty_bytes_threshold;
-
- int32_t dirty_bytes;
-
-#if H5AC1_DEBUG_DIRTY_BYTES_CREATION
-
- int32_t dirty_bytes_propagations;
-
- int32_t unprotect_dirty_bytes;
- int32_t unprotect_dirty_bytes_updates;
-
- int32_t insert_dirty_bytes;
- int32_t insert_dirty_bytes_updates;
-
- int32_t rename_dirty_bytes;
- int32_t rename_dirty_bytes_updates;
-
-#endif /* H5AC1_DEBUG_DIRTY_BYTES_CREATION */
-
- H5SL_t * d_slist_ptr;
-
- int32_t d_slist_len;
-
- H5SL_t * c_slist_ptr;
-
- int32_t c_slist_len;
-
- void (* write_done)(void);
-
-} H5AC1_aux_t; /* struct H5AC1_aux_t */
-
-#endif /* H5_HAVE_PARALLEL */
-
-#endif /* _H5AC1pkg_H */
-
diff --git a/src/H5AC1private.h b/src/H5AC1private.h
deleted file mode 100644
index 96af3e1..0000000
--- a/src/H5AC1private.h
+++ /dev/null
@@ -1,328 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*-------------------------------------------------------------------------
- *
- * Created: H5AC1private.h
- * Jul 9 1997
- * Robb Matzke <matzke@llnl.gov>
- *
- * Purpose: Constants and typedefs available to the rest of the
- * library.
- *
- * Modifications: JRM - 6/4/04
- * Complete re-write for a new caching algorithm
- * located in H5C.c
- *
- *-------------------------------------------------------------------------
- */
-
-#ifndef _H5AC1private_H
-#define _H5AC1private_H
-
-#include "H5AC1public.h" /*public prototypes */
-
-/* Pivate headers needed by this header */
-#include "H5private.h" /* Generic Functions */
-#include "H5Fprivate.h" /* File access */
-#include "H5C1private.h" /* cache */
-
-#ifdef H5_METADATA_TRACE_FILE
-#define H5AC1__TRACE_FILE_ENABLED 1
-#else /* H5_METADATA_TRACE_FILE */
-#define H5AC1__TRACE_FILE_ENABLED 0
-#endif /* H5_METADATA_TRACE_FILE */
-
-/* Types of metadata objects cached */
-typedef enum {
- H5AC1_BT_ID = 0, /*B-tree nodes */
- H5AC1_SNODE_ID, /*symbol table nodes */
- H5AC1_LHEAP_ID, /*local heap */
- H5AC1_GHEAP_ID, /*global heap */
- H5AC1_OHDR_ID, /*object header */
- H5AC1_BT2_HDR_ID, /*v2 B-tree header */
- H5AC1_BT2_INT_ID, /*v2 B-tree internal node */
- H5AC1_BT2_LEAF_ID, /*v2 B-tree leaf node */
- H5AC1_FHEAP_HDR_ID, /*fractal heap header */
- H5AC1_FHEAP_DBLOCK_ID, /*fractal heap direct block */
- H5AC1_FHEAP_IBLOCK_ID, /*fractal heap indirect block */
- H5AC1_FSPACE_HDR_ID, /*free space header */
- H5AC1_FSPACE_SINFO_ID,/*free space sections */
- H5AC1_SOHM_TABLE_ID, /*shared object header message master table */
- H5AC1_SOHM_LIST_ID, /*shared message index stored as a list */
- H5AC1_TEST_ID, /*test entry -- not used for actual files */
- H5AC1_NTYPES /* Number of types, must be last */
-} H5AC1_type_t;
-
-/* H5AC1_DUMP_STATS_ON_CLOSE should always be FALSE when
- * H5C1_COLLECT_CACHE_STATS is FALSE.
- *
- * When H5C1_COLLECT_CACHE_STATS is TRUE, H5AC1_DUMP_STATS_ON_CLOSE must
- * be FALSE for "make check" to succeed, but may be set to TRUE at other
- * times for debugging purposes.
- *
- * Hence the following, somewhat odd set of #defines.
- */
-#if H5C1_COLLECT_CACHE_STATS
-
-#define H5AC1_DUMP_STATS_ON_CLOSE 0
-
-#else /* H5C1_COLLECT_CACHE_STATS */
-
-#define H5AC1_DUMP_STATS_ON_CLOSE 0
-
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
-/* Default max metadata cache size and min clean size are give here.
- * At present, these are the same as those given in H5Cprivate.h.
- */
-
-#define H5AC1__DEFAULT_MAX_CACHE_SIZE H5C1__DEFAULT_MAX_CACHE_SIZE
-#define H5AC1__DEFAULT_MIN_CLEAN_SIZE H5C1__DEFAULT_MIN_CLEAN_SIZE
-
-
-/*
- * Class methods pertaining to caching. Each type of cached object will
- * have a constant variable with permanent life-span that describes how
- * to cache the object. That variable will be of type H5AC1_class_t and
- * have the following required fields...
- *
- * LOAD: Loads an object from disk to memory. The function
- * should allocate some data structure and return it.
- *
- * FLUSH: Writes some data structure back to disk. It would be
- * wise for the data structure to include dirty flags to
- * indicate whether it really needs to be written. This
- * function is also responsible for freeing memory allocated
- * by the LOAD method if the DEST argument is non-zero (by
- * calling the DEST method).
- *
- * DEST: Just frees memory allocated by the LOAD method.
- *
- * CLEAR: Just marks object as non-dirty.
- *
- * SIZE: Report the size (on disk) of the specified cache object.
- * Note that the space allocated on disk may not be contiguous.
- */
-
-#define H5AC1_CALLBACK__NO_FLAGS_SET H5C1_CALLBACK__NO_FLAGS_SET
-#define H5AC1_CALLBACK__SIZE_CHANGED_FLAG H5C1_CALLBACK__SIZE_CHANGED_FLAG
-#define H5AC1_CALLBACK__RENAMED_FLAG H5C1_CALLBACK__RENAMED_FLAG
-
-typedef H5C1_load_func_t H5AC1_load_func_t;
-typedef H5C1_flush_func_t H5AC1_flush_func_t;
-typedef H5C1_dest_func_t H5AC1_dest_func_t;
-typedef H5C1_clear_func_t H5AC1_clear_func_t;
-typedef H5C1_size_func_t H5AC1_size_func_t;
-
-typedef H5C1_class_t H5AC1_class_t;
-
-
-/* The H5AC1_NSLOTS #define is now obsolete, as the metadata cache no longer
- * uses slots. However I am leaving it in for now to avoid modifying the
- * interface between the metadata cache and the rest of HDF. It should
- * be removed when we get to dealing with the size_hint parameter in
- * H5AC1_create().
- * JRM - 5/20/04
- *
- * Old comment on H5AC1_NSLOTS follows:
- *
- * A cache has a certain number of entries. Objects are mapped into a
- * cache entry by hashing the object's file address. Each file has its
- * own cache, an array of slots.
- */
-#define H5AC1_NSLOTS 10330 /* The library "likes" this number... */
-
-
-typedef H5C1_cache_entry_t H5AC1_info_t;
-
-
-/*===----------------------------------------------------------------------===
- * Protect Types
- *===----------------------------------------------------------------------===
- *
- * These are for the wrapper functions to H5AC1_protect. They specify what
- * type of operation you're planning on doing to the metadata. The
- * Flexible Parallel HDF5 locking can then act accordingly.
- */
-
-typedef enum H5AC1_protect_t {
- H5AC1_WRITE, /* Protect object for writing */
- H5AC1_READ /* Protect object for reading */
-} H5AC1_protect_t;
-
-
-/* Typedef for metadata cache (defined in H5Cpkg.h) */
-typedef H5C1_t H5AC1_t;
-
-/* Metadata specific properties for FAPL */
-/* (Only used for parallel I/O) */
-#ifdef H5_HAVE_PARALLEL
-/* Definitions for "block before metadata write" property */
-#define H5AC1_BLOCK_BEFORE_META_WRITE_NAME "H5AC1_block_before_meta_write"
-#define H5AC1_BLOCK_BEFORE_META_WRITE_SIZE sizeof(unsigned)
-#define H5AC1_BLOCK_BEFORE_META_WRITE_DEF 0
-
-/* Definitions for "library internal" property */
-#define H5AC1_LIBRARY_INTERNAL_NAME "H5AC1_library_internal"
-#define H5AC1_LIBRARY_INTERNAL_SIZE sizeof(unsigned)
-#define H5AC1_LIBRARY_INTERNAL_DEF 0
-#endif /* H5_HAVE_PARALLEL */
-
-/* Dataset transfer property list for flush calls */
-/* (Collective set, "block before metadata write" set and "library internal" set) */
-/* (Global variable declaration, definition is in H5AC.c) */
-extern hid_t H5AC1_dxpl_id;
-
-/* Dataset transfer property list for independent metadata I/O calls */
-/* (just "library internal" set - i.e. independent transfer mode) */
-/* (Global variable declaration, definition is in H5AC.c) */
-extern hid_t H5AC1_ind_dxpl_id;
-
-
-/* Default cache configuration. */
-
-#define H5AC1__DEFAULT_CACHE_CONFIG \
-{ \
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER, \
- /* hbool_t rpt_fcn_enabled = */ FALSE, \
- /* hbool_t open_trace_file = */ FALSE, \
- /* hbool_t close_trace_file = */ FALSE, \
- /* char trace_file_name[] = */ "", \
- /* hbool_t evictions_enabled = */ TRUE, \
- /* hbool_t set_initial_size = */ TRUE, \
- /* size_t initial_size = */ ( 1 * 1024 * 1024), \
- /* double min_clean_fraction = */ 0.5, \
- /* size_t max_size = */ (16 * 1024 * 1024), \
- /* size_t min_size = */ ( 1 * 1024 * 1024), \
- /* long int epoch_length = */ 50000, \
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold, \
- /* double lower_hr_threshold = */ 0.9, \
- /* double increment = */ 2.0, \
- /* hbool_t apply_max_increment = */ TRUE, \
- /* size_t max_increment = */ (4 * 1024 * 1024), \
- /* enum H5C1_cache_flash_incr_mode */ \
- /* flash_incr_mode = */ H5C1_flash_incr__add_space, \
- /* double flash_multiple = */ 1.0, \
- /* double flash_threshold = */ 0.25, \
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,\
- /* double upper_hr_threshold = */ 0.999, \
- /* double decrement = */ 0.9, \
- /* hbool_t apply_max_decrement = */ TRUE, \
- /* size_t max_decrement = */ (1 * 1024 * 1024), \
- /* int epochs_before_eviction = */ 3, \
- /* hbool_t apply_empty_reserve = */ TRUE, \
- /* double empty_reserve = */ 0.1, \
- /* int dirty_bytes_threshold = */ (256 * 1024) \
-}
-
-
-/*
- * Library prototypes.
- */
-
-/* #defines of flags used in the flags parameters in some of the
- * following function calls. Note that they are just copies of
- * the equivalent flags from H5Cprivate.h.
- */
-
-#define H5AC1__NO_FLAGS_SET H5C1__NO_FLAGS_SET
-#define H5AC1__SET_FLUSH_MARKER_FLAG H5C1__SET_FLUSH_MARKER_FLAG
-#define H5AC1__DELETED_FLAG H5C1__DELETED_FLAG
-#define H5AC1__DIRTIED_FLAG H5C1__DIRTIED_FLAG
-#define H5AC1__SIZE_CHANGED_FLAG H5C1__SIZE_CHANGED_FLAG
-#define H5AC1__PIN_ENTRY_FLAG H5C1__PIN_ENTRY_FLAG
-#define H5AC1__UNPIN_ENTRY_FLAG H5C1__UNPIN_ENTRY_FLAG
-#define H5AC1__FLUSH_INVALIDATE_FLAG H5C1__FLUSH_INVALIDATE_FLAG
-#define H5AC1__FLUSH_CLEAR_ONLY_FLAG H5C1__FLUSH_CLEAR_ONLY_FLAG
-#define H5AC1__FLUSH_MARKED_ENTRIES_FLAG H5C1__FLUSH_MARKED_ENTRIES_FLAG
-#define H5AC1__FLUSH_IGNORE_PROTECTED_FLAG H5C1__FLUSH_IGNORE_PROTECTED_FLAG
-
-
-/* #defines of flags used to report entry status in the
- * H5AC1_get_entry_status() call.
- */
-
-#define H5AC1_ES__IN_CACHE 0x0001
-#define H5AC1_ES__IS_DIRTY 0x0002
-#define H5AC1_ES__IS_PROTECTED 0x0004
-#define H5AC1_ES__IS_PINNED 0x0008
-
-
-/* external function declarations: */
-
-H5_DLL herr_t H5AC1_init(void);
-H5_DLL herr_t H5AC1_create(const H5F_t *f, H5AC1_cache_config_t *config_ptr);
-H5_DLL herr_t H5AC1_get_entry_status(H5F_t * f, haddr_t addr,
- unsigned * status_ptr);
-H5_DLL herr_t H5AC1_set(H5F_t *f, hid_t dxpl_id, const H5AC1_class_t *type,
- haddr_t addr, void *thing, unsigned int flags);
-H5_DLL herr_t H5AC1_pin_protected_entry(H5F_t * f, void * thing);
-H5_DLL void * H5AC1_protect(H5F_t *f, hid_t dxpl_id, const H5AC1_class_t *type,
- haddr_t addr, const void *udata1, void *udata2,
- H5AC1_protect_t rw);
-H5_DLL herr_t H5AC1_resize_pinned_entry(H5F_t * f,
- void * thing,
- size_t new_size);
-H5_DLL herr_t H5AC1_unpin_entry(H5F_t * f,
- void * thing);
-H5_DLL herr_t H5AC1_unprotect(H5F_t *f, hid_t dxpl_id,
- const H5AC1_class_t *type, haddr_t addr,
- void *thing, unsigned flags);
-H5_DLL herr_t H5AC1_flush(H5F_t *f, hid_t dxpl_id, unsigned flags);
-H5_DLL herr_t H5AC1_mark_pinned_entry_dirty(H5F_t * f,
- void * thing,
- hbool_t size_changed,
- size_t new_size);
-H5_DLL herr_t H5AC1_mark_pinned_or_protected_entry_dirty(H5F_t * f,
- void * thing);
-H5_DLL herr_t H5AC1_rename(H5F_t *f, const H5AC1_class_t *type,
- haddr_t old_addr, haddr_t new_addr);
-
-H5_DLL herr_t H5AC1_dest(H5F_t *f, hid_t dxpl_id);
-
-H5_DLL herr_t H5AC1_expunge_entry(H5F_t *f, hid_t dxpl_id,
- const H5AC1_class_t *type, haddr_t addr);
-
-H5_DLL herr_t H5AC1_set_write_done_callback(H5C1_t * cache_ptr,
- void (* write_done)(void));
-H5_DLL herr_t H5AC1_stats(const H5F_t *f);
-
-H5_DLL herr_t H5AC1_get_cache_auto_resize_config(H5AC1_t * cache_ptr,
- H5AC1_cache_config_t *config_ptr);
-
-H5_DLL herr_t H5AC1_get_cache_size(H5AC1_t * cache_ptr,
- size_t * max_size_ptr,
- size_t * min_clean_size_ptr,
- size_t * cur_size_ptr,
- int32_t * cur_num_entries_ptr);
-
-H5_DLL herr_t H5AC1_get_cache_hit_rate(H5AC1_t * cache_ptr,
- double * hit_rate_ptr);
-
-H5_DLL herr_t H5AC1_reset_cache_hit_rate_stats(H5AC1_t * cache_ptr);
-
-H5_DLL herr_t H5AC1_set_cache_auto_resize_config(H5AC1_t * cache_ptr,
- H5AC1_cache_config_t *config_ptr);
-
-H5_DLL herr_t H5AC1_validate_config(H5AC1_cache_config_t * config_ptr);
-
-H5_DLL herr_t H5AC1_close_trace_file( H5AC1_t * cache_ptr);
-
-H5_DLL herr_t H5AC1_open_trace_file(H5AC1_t * cache_ptr,
- const char * trace_file_name);
-
-#endif /* !_H5AC1private_H */
-
diff --git a/src/H5AC1public.h b/src/H5AC1public.h
deleted file mode 100644
index 731e49a..0000000
--- a/src/H5AC1public.h
+++ /dev/null
@@ -1,453 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*-------------------------------------------------------------------------
- *
- * Created: H5AC1public.h
- * Jul 10 1997
- * Robb Matzke <matzke@llnl.gov>
- *
- * Purpose: Public include file for cache functions.
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-#ifndef _H5AC1public_H
-#define _H5AC1public_H
-
-/* Public headers needed by this file */
-#include "H5public.h"
-#include "H5C1public.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define H5AC1__MAX_TRACE_FILE_NAME_LEN 1024
-#define H5AC1__MAX_JOURNAL_FILE_NAME_LEN 1024
-
-/****************************************************************************
- *
- * structure H5AC1_cache_config_t
- *
- * H5AC1_cache_config_t is a public structure intended for use in public APIs.
- * At least in its initial incarnation, it is basicaly a copy of struct
- * H5C1_auto_size_ctl_t, minus the report_fcn field, and plus the
- * dirty_bytes_threshold field.
- *
- * The report_fcn field is omitted, as including it would require us to
- * make H5C1_t structure public.
- *
- * The dirty_bytes_threshold field does not appear in H5C1_auto_size_ctl_t,
- * as synchronization between caches on different processes is handled at
- * the H5AC level, not at the level of H5C. Note however that there is
- * considerable interaction between this value and the other fields in this
- * structure.
- *
- * Similarly, the open_trace_file, close_trace_file, and trace_file_name
- * fields do not appear in H5C1_auto_size_ctl_t, as most trace file
- * issues are handled at the H5AC level. The one exception is storage of
- * the pointer to the trace file, which is handled by H5C.
- *
- * The structure is in H5ACpublic.h as we may wish to allow different
- * configuration options for metadata and raw data caches.
- *
- * The fields of the structure are discussed individually below:
- *
- * version: Integer field containing the version number of this version
- * of the H5AC1_cache_config_t structure. Any instance of
- * H5AC1_cache_config_t passed to the cache must have a known
- * version number, or an error will be flagged.
- *
- * rpt_fcn_enabled: Boolean field used to enable and disable the default
- * reporting function. This function is invoked every time the
- * automatic cache resize code is run, and reports on its activities.
- *
- * This is a debugging function, and should normally be turned off.
- *
- * open_trace_file: Boolean field indicating whether the trace_file_name
- * field should be used to open a trace file for the cache.
- *
- * The trace file is a debuging feature that allow the capture of
- * top level metadata cache requests for purposes of debugging and/or
- * optimization. This field should normally be set to FALSE, as
- * trace file collection imposes considerable overhead.
- *
- * This field should only be set to TRUE when the trace_file_name
- * contains the full path of the desired trace file, and either
- * there is no open trace file on the cache, or the close_trace_file
- * field is also TRUE.
- *
- * close_trace_file: Boolean field indicating whether the current trace
- * file (if any) should be closed.
- *
- * See the above comments on the open_trace_file field. This field
- * should be set to FALSE unless there is an open trace file on the
- * cache that you wish to close.
- *
- * trace_file_name: Full path of the trace file to be opened if the
- * open_trace_file field is TRUE.
- *
- * In the parallel case, an ascii representation of the mpi rank of
- * the process will be appended to the file name to yield a unique
- * trace file name for each process.
- *
- * The length of the path must not exceed H5AC1__MAX_TRACE_FILE_NAME_LEN
- * characters.
- *
- * evictions_enabled: Boolean field used to either report the current
- * evictions enabled status of the cache, or to set the cache's
- * evictions enabled status.
- *
- * In general, the metadata cache should always be allowed to
- * evict entries. However, in some cases it is advantageous to
- * disable evictions briefly, and thereby postpone metadata
- * writes. However, this must be done with care, as the cache
- * can grow quickly. If you do this, re-enable evictions as
- * soon as possible and monitor cache size.
- *
- * At present, evictions can only be disabled if automatic
- * cache resizing is also disabled (that is, ( incr_mode ==
- * H5C1_incr__off ) && ( decr_mode == H5C1_decr__off )). There
- * is no logical reason why this should be so, but it simplifies
- * implementation and testing, and I can't think of any reason
- * why it would be desireable. If you can think of one, I'll
- * revisit the issue.
- *
- * set_initial_size: Boolean flag indicating whether the size of the
- * initial size of the cache is to be set to the value given in
- * the initial_size field. If set_initial_size is FALSE, the
- * initial_size field is ignored.
- *
- * initial_size: If enabled, this field contain the size the cache is
- * to be set to upon receipt of this structure. Needless to say,
- * initial_size must lie in the closed interval [min_size, max_size].
- *
- * min_clean_fraction: double in the range 0 to 1 indicating the fraction
- * of the cache that is to be kept clean. This field is only used
- * in parallel mode. Typical values are 0.1 to 0.5.
- *
- * max_size: Maximum size to which the cache can be adjusted. The
- * supplied value must fall in the closed interval
- * [MIN_MAX_CACHE_SIZE, MAX_MAX_CACHE_SIZE]. Also, max_size must
- * be greater than or equal to min_size.
- *
- * min_size: Minimum size to which the cache can be adjusted. The
- * supplied value must fall in the closed interval
- * [H5C1__MIN_MAX_CACHE_SIZE, H5C1__MAX_MAX_CACHE_SIZE]. Also, min_size
- * must be less than or equal to max_size.
- *
- * epoch_length: Number of accesses on the cache over which to collect
- * hit rate stats before running the automatic cache resize code,
- * if it is enabled.
- *
- * At the end of an epoch, we discard prior hit rate data and start
- * collecting afresh. The epoch_length must lie in the closed
- * interval [H5C1__MIN_AR_EPOCH_LENGTH, H5C1__MAX_AR_EPOCH_LENGTH].
- *
- *
- * Cache size increase control fields:
- *
- * incr_mode: Instance of the H5C1_cache_incr_mode enumerated type whose
- * value indicates how we determine whether the cache size should be
- * increased. At present there are two possible values:
- *
- * H5C1_incr__off: Don't attempt to increase the size of the cache
- * automatically.
- *
- * When this increment mode is selected, the remaining fields
- * in the cache size increase section ar ignored.
- *
- * H5C1_incr__threshold: Attempt to increase the size of the cache
- * whenever the average hit rate over the last epoch drops
- * below the value supplied in the lower_hr_threshold
- * field.
- *
- * Note that this attempt will fail if the cache is already
- * at its maximum size, or if the cache is not already using
- * all available space.
- *
- * Note that you must set decr_mode to H5C1_incr__off if you
- * disable metadata cache entry evictions.
- *
- * lower_hr_threshold: Lower hit rate threshold. If the increment mode
- * (incr_mode) is H5C1_incr__threshold and the hit rate drops below the
- * value supplied in this field in an epoch, increment the cache size by
- * size_increment. Note that cache size may not be incremented above
- * max_size, and that the increment may be further restricted by the
- * max_increment field if it is enabled.
- *
- * When enabled, this field must contain a value in the range [0.0, 1.0].
- * Depending on the incr_mode selected, it may also have to be less than
- * upper_hr_threshold.
- *
- * increment: Double containing the multiplier used to derive the new
- * cache size from the old if a cache size increment is triggered.
- * The increment must be greater than 1.0, and should not exceed 2.0.
- *
- * The new cache size is obtained my multiplying the current max cache
- * size by the increment, and then clamping to max_size and to stay
- * within the max_increment as necessary.
- *
- * apply_max_increment: Boolean flag indicating whether the max_increment
- * field should be used to limit the maximum cache size increment.
- *
- * max_increment: If enabled by the apply_max_increment field described
- * above, this field contains the maximum number of bytes by which the
- * cache size can be increased in a single re-size.
- *
- * flash_incr_mode: Instance of the H5C1_cache_flash_incr_mode enumerated
- * type whose value indicates whether and by which algorithm we should
- * make flash increases in the size of the cache to accomodate insertion
- * of large entries and large increases in the size of a single entry.
- *
- * The addition of the flash increment mode was occasioned by performance
- * problems that appear when a local heap is increased to a size in excess
- * of the current cache size. While the existing re-size code dealt with
- * this eventually, performance was very bad for the remainder of the
- * epoch.
- *
- * At present, there are two possible values for the flash_incr_mode:
- *
- * H5C1_flash_incr__off: Don't perform flash increases in the size of
- * the cache.
- *
- * H5C1_flash_incr__add_space: Let x be either the size of a newly
- * newly inserted entry, or the number of bytes by which the
- * size of an existing entry has been increased.
- *
- * If
- * x > flash_threshold * current max cache size,
- *
- * increase the current maximum cache size by x * flash_multiple
- * less any free space in the cache, and star a new epoch. For
- * now at least, pay no attention to the maximum increment.
- *
- * In both of the above cases, the flash increment pays no attention to
- * the maximum increment (at least in this first incarnation), but DOES
- * stay within max_size.
- *
- * With a little thought, it should be obvious that the above flash
- * cache size increase algorithm is not sufficient for all circumstances --
- * for example, suppose the user round robins through
- * (1/flash_threshold) +1 groups, adding one data set to each on each
- * pass. Then all will increase in size at about the same time, requiring
- * the max cache size to at least double to maintain acceptable
- * performance, however the above flash increment algorithm will not be
- * triggered.
- *
- * Hopefully, the add space algorithms detailed above will be sufficient
- * for the performance problems encountered to date. However, we should
- * expect to revisit the issue.
- *
- * flash_multiple: Double containing the multiple described above in the
- * H5C1_flash_incr__add_space section of the discussion of the
- * flash_incr_mode section. This field is ignored unless flash_incr_mode
- * is H5C1_flash_incr__add_space.
- *
- * flash_threshold: Double containing the factor by which current max cache size
- * is multiplied to obtain the size threshold for the add_space flash
- * increment algorithm. The field is ignored unless flash_incr_mode is
- * H5C1_flash_incr__add_space.
- *
- *
- *
- * Cache size decrease control fields:
- *
- * decr_mode: Instance of the H5C1_cache_decr_mode enumerated type whose
- * value indicates how we determine whether the cache size should be
- * decreased. At present there are four possibilities.
- *
- * H5C1_decr__off: Don't attempt to decrease the size of the cache
- * automatically.
- *
- * When this increment mode is selected, the remaining fields
- * in the cache size decrease section are ignored.
- *
- * H5C1_decr__threshold: Attempt to decrease the size of the cache
- * whenever the average hit rate over the last epoch rises
- * above the value supplied in the upper_hr_threshold
- * field.
- *
- * H5C1_decr__age_out: At the end of each epoch, search the cache for
- * entries that have not been accessed for at least the number
- * of epochs specified in the epochs_before_eviction field, and
- * evict these entries. Conceptually, the maximum cache size
- * is then decreased to match the new actual cache size. However,
- * this reduction may be modified by the min_size, the
- * max_decrement, and/or the empty_reserve.
- *
- * H5C1_decr__age_out_with_threshold: Same as age_out, but we only
- * attempt to reduce the cache size when the hit rate observed
- * over the last epoch exceeds the value provided in the
- * upper_hr_threshold field.
- *
- * Note that you must set decr_mode to H5C1_decr__off if you
- * disable metadata cache entry evictions.
- *
- * upper_hr_threshold: Upper hit rate threshold. The use of this field
- * varies according to the current decr_mode:
- *
- * H5C1_decr__off or H5C1_decr__age_out: The value of this field is
- * ignored.
- *
- * H5C1_decr__threshold: If the hit rate exceeds this threshold in any
- * epoch, attempt to decrement the cache size by size_decrement.
- *
- * Note that cache size may not be decremented below min_size.
- *
- * Note also that if the upper_threshold is 1.0, the cache size
- * will never be reduced.
- *
- * H5C1_decr__age_out_with_threshold: If the hit rate exceeds this
- * threshold in any epoch, attempt to reduce the cache size
- * by evicting entries that have not been accessed for more
- * than the specified number of epochs.
- *
- * decrement: This field is only used when the decr_mode is
- * H5C1_decr__threshold.
- *
- * The field is a double containing the multiplier used to derive the
- * new cache size from the old if a cache size decrement is triggered.
- * The decrement must be in the range 0.0 (in which case the cache will
- * try to contract to its minimum size) to 1.0 (in which case the
- * cache will never shrink).
- *
- * apply_max_decrement: Boolean flag used to determine whether decrements
- * in cache size are to be limited by the max_decrement field.
- *
- * max_decrement: Maximum number of bytes by which the cache size can be
- * decreased in a single re-size. Note that decrements may also be
- * restricted by the min_size of the cache, and (in age out modes) by
- * the empty_reserve field.
- *
- * epochs_before_eviction: Integer field used in H5C1_decr__age_out and
- * H5C1_decr__age_out_with_threshold decrement modes.
- *
- * This field contains the number of epochs an entry must remain
- * unaccessed before it is evicted in an attempt to reduce the
- * cache size. If applicable, this field must lie in the range
- * [1, H5C1__MAX_EPOCH_MARKERS].
- *
- * apply_empty_reserve: Boolean field controlling whether the empty_reserve
- * field is to be used in computing the new cache size when the
- * decr_mode is H5C1_decr__age_out or H5C1_decr__age_out_with_threshold.
- *
- * empty_reserve: To avoid a constant racheting down of cache size by small
- * amounts in the H5C1_decr__age_out and H5C1_decr__age_out_with_threshold
- * modes, this field allows one to require that any cache size
- * reductions leave the specified fraction of unused space in the cache.
- *
- * The value of this field must be in the range [0.0, 1.0]. I would
- * expect typical values to be in the range of 0.01 to 0.1.
- *
- *
- * Parallel Configuration Fields:
- *
- * In PHDF5, all operations that modify metadata must be executed collectively.
- * We used to think that this was enough to ensure consistency across the
- * metadata caches, but since we allow processes to read metadata individually,
- * the order of dirty entries in the LRU list can vary across processes,
- * which can result in inconsistencies between the caches.
- *
- * To prevent this, only the metadata cache on process 0 is allowed to write
- * to file, and then only after synchronizing with the other caches. After
- * it writes entries to file, it sends the base addresses of the now clean
- * entries to the other caches, so they can mark these entries clean as well.
- *
- * The different caches know when to synchronize caches by counting the
- * number of bytes of dirty metadata created by the collective operations
- * modifying metadata. Whenever this count exceeds a user specified
- * threshold (see below), process 0 flushes down to its minimum clean size,
- * and then sends the list of newly cleaned entries to the other caches.
- *
- * dirty_bytes_threshold: Threshold of dirty byte creation used to
- * synchronize updates between caches. (See above for outline and
- * motivation.)
- *
- * This value MUST be consistant across all processes accessing the
- * file. This field is ignored unless HDF5 has been compiled for
- * parallel.
- *
- ****************************************************************************/
-
-#define H5AC1__CURR_CACHE_CONFIG_VERSION 1
-
-typedef struct H5AC1_cache_config_t
-{
- /* general configuration fields: */
- int version;
-
- hbool_t rpt_fcn_enabled;
-
- hbool_t open_trace_file;
- hbool_t close_trace_file;
- char trace_file_name[H5AC1__MAX_TRACE_FILE_NAME_LEN + 1];
-
- hbool_t evictions_enabled;
-
- hbool_t set_initial_size;
- size_t initial_size;
-
- double min_clean_fraction;
-
- size_t max_size;
- size_t min_size;
-
- long int epoch_length;
-
-
- /* size increase control fields: */
- enum H5C1_cache_incr_mode incr_mode;
-
- double lower_hr_threshold;
-
- double increment;
-
- hbool_t apply_max_increment;
- size_t max_increment;
-
- enum H5C1_cache_flash_incr_mode flash_incr_mode;
- double flash_multiple;
- double flash_threshold;
-
-
- /* size decrease control fields: */
- enum H5C1_cache_decr_mode decr_mode;
-
- double upper_hr_threshold;
-
- double decrement;
-
- hbool_t apply_max_decrement;
- size_t max_decrement;
-
- int epochs_before_eviction;
-
- hbool_t apply_empty_reserve;
- double empty_reserve;
-
-
- /* parallel configuration fields: */
- int dirty_bytes_threshold;
-
-} H5AC1_cache_config_t;
-
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/H5B2cache.c b/src/H5B2cache.c
index 67493f8..21523f3 100644
--- a/src/H5B2cache.c
+++ b/src/H5B2cache.c
@@ -69,21 +69,21 @@ static void *H5B2_cache_hdr_deserialize(haddr_t addr, size_t len,
static herr_t H5B2_cache_hdr_serialize(const H5F_t *f, hid_t dxpl_id,
haddr_t addr, size_t len, void *image, void *thing, unsigned *flags,
haddr_t *new_addr, size_t *new_len, void **new_image);
-static herr_t H5B2_cache_hdr_free_icr(haddr_t addr, size_t len, void *thing);
+static herr_t H5B2_cache_hdr_free_icr(void *thing);
static void *H5B2_cache_internal_deserialize(haddr_t addr, size_t len,
const void *image, void *udata, hbool_t *dirty);
static herr_t H5B2_cache_internal_serialize(const H5F_t *f, hid_t dxpl_id,
haddr_t addr, size_t len, void *image, void *thing, unsigned *flags,
haddr_t *new_addr, size_t *new_len, void **new_image);
-static herr_t H5B2_cache_internal_free_icr(haddr_t addr, size_t len, void *thing);
+static herr_t H5B2_cache_internal_free_icr(void *thing);
static void *H5B2_cache_leaf_deserialize(haddr_t addr, size_t len,
const void *image, void *udata, hbool_t *dirty);
static herr_t H5B2_cache_leaf_serialize(const H5F_t *f, hid_t dxpl_id,
haddr_t addr, size_t len, void *image, void *thing, unsigned *flags,
haddr_t *new_addr, size_t *new_len, void **new_image);
-static herr_t H5B2_cache_leaf_free_icr(haddr_t addr, size_t len, void *thing);
+static herr_t H5B2_cache_leaf_free_icr(void *thing);
/*********************/
/* Package Variables */
@@ -98,7 +98,6 @@ const H5AC_class_t H5AC_BT2_HDR[1] = {{
NULL,
H5B2_cache_hdr_serialize,
H5B2_cache_hdr_free_icr,
- NULL,
}};
/* H5B2 inherits cache-like properties from H5AC */
@@ -110,7 +109,6 @@ const H5AC_class_t H5AC_BT2_INT[1] = {{
NULL,
H5B2_cache_internal_serialize,
H5B2_cache_internal_free_icr,
- NULL,
}};
/* H5B2 inherits cache-like properties from H5AC */
@@ -122,7 +120,6 @@ const H5AC_class_t H5AC_BT2_LEAF[1] = {{
NULL,
H5B2_cache_leaf_serialize,
H5B2_cache_leaf_free_icr,
- NULL,
}};
/*****************************/
@@ -347,7 +344,7 @@ H5B2_cache_hdr_serialize(const H5F_t *f, hid_t UNUSED dxpl_id,
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_cache_hdr_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
+H5B2_cache_hdr_free_icr(void *thing)
{
herr_t ret_value = SUCCEED; /* Return value */
@@ -602,7 +599,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_cache_internal_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
+H5B2_cache_internal_free_icr(void *thing)
{
herr_t ret_value = SUCCEED; /* Return value */
@@ -824,7 +821,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5B2_cache_leaf_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
+H5B2_cache_leaf_free_icr(void *thing)
{
herr_t ret_value = SUCCEED; /* Return value */
diff --git a/src/H5B2test.c b/src/H5B2test.c
index 2d1144e..9e81551 100644
--- a/src/H5B2test.c
+++ b/src/H5B2test.c
@@ -403,7 +403,7 @@ H5B2_get_node_info_test(H5F_t *f, hid_t dxpl_id, const H5B2_class_t *type, haddr
cache_leaf_udata.f = f;
cache_leaf_udata.nrec = &(curr_node_ptr.node_nrec);
cache_leaf_udata.bt2_shared = bt2_shared;
- if(NULL == (leaf = (H5B2_leaf_t *)H5AC_protect(f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, (size_t)shared->node_size, &cache_udata, H5AC_READ)))
+ if(NULL == (leaf = (H5B2_leaf_t *)H5AC_protect(f, dxpl_id, H5AC_BT2_LEAF, curr_node_ptr.addr, (size_t)shared->node_size, &cache_leaf_udata, H5AC_READ)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTPROTECT, FAIL, "unable to load B-tree internal node")
/* Locate record */
diff --git a/src/H5Bcache.c b/src/H5Bcache.c
index 26299b0..cca5886 100644
--- a/src/H5Bcache.c
+++ b/src/H5Bcache.c
@@ -59,7 +59,7 @@ static void *H5B_deserialize(haddr_t addr, size_t len, const void *image,
static herr_t H5B_serialize(const H5F_t *f, hid_t dxpl_id, haddr_t addr,
size_t len, void *image, void *thing, unsigned *flags, haddr_t *new_addr,
size_t *new_len, void **new_image);
-static herr_t H5B_free_icr(haddr_t addr, size_t len, void *thing);
+static herr_t H5B_free_icr(void *thing);
/*********************/
@@ -75,7 +75,6 @@ const H5AC_class_t H5AC_BT[1] = {{
NULL,
H5B_serialize,
H5B_free_icr,
- NULL
}};
/*******************/
@@ -286,7 +285,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5B_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
+H5B_free_icr(void *thing)
{
herr_t ret_value = SUCCEED; /* Return value */
diff --git a/src/H5C.c b/src/H5C.c
index dd5f976..3d566ef 100644
--- a/src/H5C.c
+++ b/src/H5C.c
@@ -217,12 +217,7 @@ static herr_t H5C_epoch_marker_serialize(const H5F_t *f,
haddr_t * new_addr_ptr,
size_t * new_len_ptr,
void ** new_image_ptr_ptr);
-static herr_t H5C_epoch_marker_free_icr(haddr_t addr,
- size_t len,
- void * thing);
-static herr_t H5C_epoch_marker_clear_dirty_bits(haddr_t addr,
- size_t len,
- void * thing);
+static herr_t H5C_epoch_marker_free_icr(void * thing);
const H5C_class_t epoch_marker_class =
{
@@ -233,7 +228,6 @@ const H5C_class_t epoch_marker_class =
/* image_len = */ &H5C_epoch_marker_image_len,
/* serialize = */ &H5C_epoch_marker_serialize,
/* free_icr = */ &H5C_epoch_marker_free_icr,
- /* clear_dirty_bits = */ &H5C_epoch_marker_clear_dirty_bits,
};
@@ -303,9 +297,7 @@ done:
}
static herr_t
-H5C_epoch_marker_free_icr(haddr_t UNUSED addr,
- size_t UNUSED len,
- void UNUSED * thing)
+H5C_epoch_marker_free_icr(void UNUSED * thing)
{
herr_t ret_value = FAIL; /* Return value */
@@ -318,22 +310,6 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
}
-static herr_t
-H5C_epoch_marker_clear_dirty_bits(haddr_t UNUSED addr,
- size_t UNUSED len,
- void UNUSED * thing)
-{
- herr_t ret_value = FAIL; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C_epoch_marker_clear_dirty_bits, FAIL)
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "called unreachable fcn.")
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-}
-
/*-------------------------------------------------------------------------
@@ -8203,25 +8179,7 @@ H5C_flush_single_entry(const H5F_t * f,
/* Clear the dirty flag only, if requested */
if ( clear_only ) {
- if ( entry_ptr->is_dirty )
- {
-#ifndef NDEBUG
- /* only call the clear_dirty_bits callback if debugging
- * is enabled.
- */
- if ( entry_ptr->type->clear_dirty_bits && entry_ptr->type->clear_dirty_bits(addr,
- entry_ptr->size,
- (void *)entry_ptr)
- != SUCCEED )
- {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "clear_dirty_bits() failed.")
- }
-#endif /* NDEBUG */
- }
entry_ptr->is_dirty = FALSE;
-
}
else if ( entry_ptr->is_dirty )
{
@@ -8498,13 +8456,8 @@ H5C_flush_single_entry(const H5F_t * f,
#endif /* NDEBUG */
entry_ptr->cache_ptr = NULL;
- if ( type_ptr->free_icr(entry_ptr->addr, entry_ptr->size,
- (void *)entry_ptr) != SUCCEED )
- {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "free_icr callback failed.")
- }
+ if(type_ptr->free_icr((void *)entry_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "free_icr callback failed.")
}
else /* just flushing or clearing */
{
@@ -8685,20 +8638,12 @@ H5C_load_entry(H5F_t * f,
/* If the thing's image needs to be bigger, free the thing
* and retry with new length
*/
- if ( new_len > len)
- {
- if ( type->free_icr(addr, len, thing) != SUCCEED )
- {
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, NULL, \
- "free_icr callback failed.")
- }
-
- if ( H5F_block_read(f, type->mem_type, addr, new_len,
- dxpl_id, image_ptr) < 0 ) {
+ if(new_len > len) {
+ if(type->free_icr(thing) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, NULL, "free_icr callback failed.")
- HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, NULL, \
- "Can't read image")
- }
+ if(H5F_block_read(f, type->mem_type, addr, new_len, dxpl_id, image_ptr) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, NULL, "Can't read image")
thing = type->deserialize(addr, new_len, image_ptr,
udata, &dirty);
diff --git a/src/H5C1.c b/src/H5C1.c
deleted file mode 100644
index b1e3d9c..0000000
--- a/src/H5C1.c
+++ /dev/null
@@ -1,8782 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*-------------------------------------------------------------------------
- *
- * Created: H5C1.c
- * June 1 2004
- * John Mainzer
- *
- * Purpose: Functions in this file implement a generic cache for
- * things which exist on disk, and which may be
- * unambiguously referenced by their disk addresses.
- *
- * The code in this module was initially written in
- * support of a complete re-write of the metadata cache
- * in H5AC.c However, other uses for the cache code
- * suggested themselves, and thus this file was created
- * in an attempt to support re-use.
- *
- * For a detailed overview of the cache, please see the
- * header comment for H5C1_t in H5Cpkg.h.
- *
- * Modifications:
- *
- * QAK - 11/27/2004
- * Switched over to using skip list routines instead of TBBT
- * routines.
- *
- * JRM - 12/15/04
- * Added code supporting manual and automatic cache resizing.
- * See the header for H5C1_auto_size_ctl_t in H5Cprivate.h for
- * an overview.
- *
- * Some elements of the automatic cache resize code depend on
- * the LRU list. Thus if we ever choose to support a new
- * replacement policy, we will either have to disable those
- * elements of the auto resize code when running the new
- * policy, or modify them to make use of similar information
- * maintained by the new policy code.
- *
- *-------------------------------------------------------------------------
- */
-
-/**************************************************************************
- *
- * To Do:
- *
- * Code Changes:
- *
- * - Remove extra functionality in H5C1_flush_single_entry()?
- *
- * - Change protect/unprotect to lock/unlock.
- *
- * - Change the way the dirty flag is set. Probably pass it in
- * as a parameter in unprotect & insert.
- *
- * - Size should also be passed in as a parameter in insert and
- * unprotect -- or some other way should be found to advise the
- * cache of changes in entry size.
- *
- * - Flush entries in increasing address order in
- * H5C1_make_space_in_cache().
- *
- * - Also in H5C1_make_space_in_cache(), use high and low water marks
- * to reduce the number of I/O calls.
- *
- * - When flushing, attempt to combine contiguous entries to reduce
- * I/O overhead. Can't do this just yet as some entries are not
- * contiguous. Do this in parallel only or in serial as well?
- *
- * - Create MPI type for dirty objects when flushing in parallel.
- *
- * - Now that TBBT routines aren't used, fix nodes in memory to
- * point directly to the skip list node from the LRU list, eliminating
- * skip list lookups when evicting objects from the cache.
- *
- * Tests:
- *
- * - Trim execution time. (This is no longer a major issue with the
- * shift from the TBBT to a hash table for indexing.)
- *
- * - Add random tests.
- *
- **************************************************************************/
-
-#define H5C1_PACKAGE /*suppress error about including H5Cpkg */
-#define H5F_PACKAGE /*suppress error about including H5Fpkg */
-
-
-#include "H5private.h" /* Generic Functions */
-#include "H5C1pkg.h" /* Cache */
-#include "H5Dprivate.h" /* Dataset functions */
-#include "H5Eprivate.h" /* Error handling */
-#include "H5Fpkg.h" /* Files */
-#include "H5FDprivate.h" /* File drivers */
-#include "H5FLprivate.h" /* Free Lists */
-#include "H5Iprivate.h" /* IDs */
-#include "H5MMprivate.h" /* Memory management */
-#include "H5Pprivate.h" /* Property lists */
-#include "H5SLprivate.h" /* Skip lists */
-
-
-/*
- * Private file-scope variables.
- */
-
-/* Declare a free list to manage the H5C1_t struct */
-H5FL_DEFINE_STATIC(H5C1_t);
-
-/*
- * Private file-scope function declarations:
- */
-
-static herr_t H5C1__auto_adjust_cache_size(H5C1_t * cache_ptr,
- H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- hbool_t write_permitted,
- hbool_t * first_flush_ptr);
-
-static herr_t H5C1__autoadjust__ageout(H5C1_t * cache_ptr,
- double hit_rate,
- enum H5C1_resize_status * status_ptr,
- size_t * new_max_cache_size_ptr,
- H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- hbool_t write_permitted,
- hbool_t * first_flush_ptr);
-
-static herr_t H5C1__autoadjust__ageout__cycle_epoch_marker(H5C1_t * cache_ptr);
-
-static herr_t H5C1__autoadjust__ageout__evict_aged_out_entries(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- hbool_t write_permitted,
- hbool_t * first_flush_ptr);
-
-static herr_t H5C1__autoadjust__ageout__insert_new_marker(H5C1_t * cache_ptr);
-
-static herr_t H5C1__autoadjust__ageout__remove_all_markers(H5C1_t * cache_ptr);
-
-static herr_t H5C1__autoadjust__ageout__remove_excess_markers(H5C1_t * cache_ptr);
-
-static herr_t H5C1__flash_increase_cache_size(H5C1_t * cache_ptr,
- size_t old_entry_size,
- size_t new_entry_size);
-
-static herr_t H5C1_flush_single_entry(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- const H5C1_class_t * type_ptr,
- haddr_t addr,
- unsigned flags,
- hbool_t * first_flush_ptr,
- hbool_t del_entry_from_slist_on_destroy);
-
-static herr_t H5C1_flush_invalidate_cache(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- unsigned flags);
-
-static void * H5C1_load_entry(H5F_t * f,
- hid_t dxpl_id,
- const H5C1_class_t * type,
- haddr_t addr,
- const void * udata1,
- void * udata2,
- hbool_t skip_file_checks);
-
-static herr_t H5C1_make_space_in_cache(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- size_t space_needed,
- hbool_t write_permitted,
- hbool_t * first_flush_ptr);
-#if H5C1_DO_EXTREME_SANITY_CHECKS
-static herr_t H5C1_validate_lru_list(H5C1_t * cache_ptr);
-static herr_t H5C1_verify_not_in_index(H5C1_t * cache_ptr,
- H5C1_cache_entry_t * entry_ptr);
-#endif /* H5C1_DO_EXTREME_SANITY_CHECKS */
-
-
-/****************************************************************************
- *
- * #defines and declarations for epoch marker cache entries.
- *
- * As a strategy for automatic cache size reduction, the cache may insert
- * marker entries in the LRU list at the end of each epoch. These markers
- * are then used to identify entries that have not been accessed for n
- * epochs so that they can be evicted from the cache.
- *
- ****************************************************************************/
-
-/* Note that H5C1__MAX_EPOCH_MARKERS is defined in H5Cpkg.h, not here because
- * it is needed to dimension arrays in H5C1_t.
- */
-
-#define H5C1__EPOCH_MARKER_TYPE H5C1__MAX_NUM_TYPE_IDS
-
-static void *H5C1_epoch_marker_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2);
-static herr_t H5C1_epoch_marker_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
- haddr_t addr, void *thing,
- unsigned *flags_ptr);
-static herr_t H5C1_epoch_marker_dest(H5F_t *f, void *thing);
-static herr_t H5C1_epoch_marker_clear(H5F_t *f, void *thing, hbool_t dest);
-static herr_t H5C1_epoch_marker_size(const H5F_t *f, const void *thing, size_t *size_ptr);
-
-const H5C1_class_t epoch_marker_class1 =
-{
- /* id = */ H5C1__EPOCH_MARKER_TYPE,
- /* load = */ &H5C1_epoch_marker_load,
- /* flush = */ &H5C1_epoch_marker_flush,
- /* dest = */ &H5C1_epoch_marker_dest,
- /* clear = */ &H5C1_epoch_marker_clear,
- /* size = */ &H5C1_epoch_marker_size
-};
-
-/***************************************************************************
- * Class functions for H5C1__EPOCH_MAKER_TYPE:
- *
- * None of these functions should ever be called, so there is no point in
- * documenting them separately.
- * JRM - 11/16/04
- *
- ***************************************************************************/
-
-static void *
-H5C1_epoch_marker_load(H5F_t UNUSED * f,
- hid_t UNUSED dxpl_id,
- haddr_t UNUSED addr,
- const void UNUSED * udata1,
- void UNUSED * udata2)
-{
- void * ret_value = NULL; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_epoch_marker_load, NULL)
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, NULL, "called unreachable fcn.")
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-}
-
-static herr_t
-H5C1_epoch_marker_flush(H5F_t UNUSED *f,
- hid_t UNUSED dxpl_id,
- hbool_t UNUSED dest,
- haddr_t UNUSED addr,
- void UNUSED *thing,
- unsigned UNUSED * flags_ptr)
-{
- herr_t ret_value = FAIL; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_epoch_marker_flush, FAIL)
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "called unreachable fcn.")
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-}
-
-static herr_t
-H5C1_epoch_marker_dest(H5F_t UNUSED * f,
- void UNUSED * thing)
-{
- herr_t ret_value = FAIL; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_epoch_marker_dest, FAIL)
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "called unreachable fcn.")
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-}
-
-static herr_t
-H5C1_epoch_marker_clear(H5F_t UNUSED * f,
- void UNUSED * thing,
- hbool_t UNUSED dest)
-{
- herr_t ret_value = FAIL; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_epoch_marker_clear, FAIL)
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "called unreachable fcn.")
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-}
-
-static herr_t
-H5C1_epoch_marker_size(const H5F_t UNUSED * f,
- const void UNUSED * thing,
- size_t UNUSED * size_ptr)
-{
- herr_t ret_value = FAIL; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_epoch_marker_size, FAIL)
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "called unreachable fcn.")
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-}
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_create
- *
- * Purpose: Allocate, initialize, and return the address of a new
- * instance of H5C1_t.
- *
- * In general, the max_cache_size parameter must be positive,
- * and the min_clean_size parameter must lie in the closed
- * interval [0, max_cache_size].
- *
- * The check_write_permitted parameter must either be NULL,
- * or point to a function of type H5C1_write_permitted_func_t.
- * If it is NULL, the cache will use the write_permitted
- * flag to determine whether writes are permitted.
- *
- * Return: Success: Pointer to the new instance.
- *
- * Failure: NULL
- *
- * Programmer: John Mainzer
- * 6/2/04
- *
- * Modifications:
- *
- * JRM -- 7/20/04
- * Updated for the addition of the hash table.
- *
- * JRM -- 10/5/04
- * Added call to H5C1_reset_cache_hit_rate_stats(). Also
- * added initialization for cache_is_full flag and for
- * resize_ctl.
- *
- * JRM -- 11/12/04
- * Added initialization for the new size_decreased field.
- *
- * JRM -- 11/17/04
- * Added/updated initialization for the automatic cache
- * size control data structures.
- *
- * JRM -- 6/24/05
- * Added support for the new write_permitted field of
- * the H5C1_t structure.
- *
- * JRM -- 7/5/05
- * Added the new log_flush parameter and supporting code.
- *
- * JRM -- 9/21/05
- * Added the new aux_ptr parameter and supporting code.
- *
- * JRM -- 1/20/06
- * Added initialization of the new prefix field in H5C1_t.
- *
- * JRM -- 3/16/06
- * Added initialization for the pinned entry related fields.
- *
- * JRM -- 5/31/06
- * Added initialization for the trace_file_ptr field.
- *
- * JRM -- 8/19/06
- * Added initialization for the flush_in_progress field.
- *
- * JRM -- 8/25/06
- * Added initialization for the slist_len_increase and
- * slist_size_increase fields. These fields are used
- * for sanity checking in the flush process, and are not
- * compiled in unless H5C1_DO_SANITY_CHECKS is TRUE.
- *
- * JRM -- 3/28/07
- * Added initialization for the new is_read_only and
- * ro_ref_count fields.
- *
- * JRM -- 7/27/07
- * Added initialization for the new evictions_enabled
- * field of H5C1_t.
- *
- * JRM -- 12/31/07
- * Added initialization for the new flash cache size increase
- * related fields of H5C1_t.
- *
- *-------------------------------------------------------------------------
- */
-
-H5C1_t *
-H5C1_create(size_t max_cache_size,
- size_t min_clean_size,
- int max_type_id,
- const char * (* type_name_table_ptr),
- H5C1_write_permitted_func_t check_write_permitted,
- hbool_t write_permitted,
- H5C1_log_flush_func_t log_flush,
- void * aux_ptr)
-{
- int i;
- H5C1_t * cache_ptr = NULL;
- H5C1_t * ret_value = NULL; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_create, NULL)
-
- HDassert( max_cache_size >= H5C1__MIN_MAX_CACHE_SIZE );
- HDassert( max_cache_size <= H5C1__MAX_MAX_CACHE_SIZE );
- HDassert( min_clean_size <= max_cache_size );
-
- HDassert( max_type_id >= 0 );
- HDassert( max_type_id < H5C1__MAX_NUM_TYPE_IDS );
- HDassert( type_name_table_ptr );
-
- HDassert( ( write_permitted == TRUE ) || ( write_permitted == FALSE ) );
-
- for ( i = 0; i <= max_type_id; i++ ) {
-
- HDassert( (type_name_table_ptr)[i] );
- HDassert( HDstrlen(( type_name_table_ptr)[i]) > 0 );
- }
-
-
- if ( NULL == (cache_ptr = H5FL_CALLOC(H5C1_t)) ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, \
- "memory allocation failed")
- }
-
- if ( (cache_ptr->slist_ptr = H5SL_create(H5SL_TYPE_HADDR,0.5,(size_t)16))
- == NULL ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, NULL, "can't create skip list.")
- }
-
- /* If we get this far, we should succeed. Go ahead and initialize all
- * the fields.
- */
-
- cache_ptr->magic = H5C1__H5C1_T_MAGIC;
-
- cache_ptr->flush_in_progress = FALSE;
-
- cache_ptr->trace_file_ptr = NULL;
-
- cache_ptr->aux_ptr = aux_ptr;
-
- cache_ptr->max_type_id = max_type_id;
- cache_ptr->type_name_table_ptr = type_name_table_ptr;
-
- cache_ptr->max_cache_size = max_cache_size;
- cache_ptr->min_clean_size = min_clean_size;
-
- cache_ptr->check_write_permitted = check_write_permitted;
- cache_ptr->write_permitted = write_permitted;
-
- cache_ptr->log_flush = log_flush;
-
- cache_ptr->evictions_enabled = TRUE;
-
- cache_ptr->index_len = 0;
- cache_ptr->index_size = (size_t)0;
-
- cache_ptr->slist_len = 0;
- cache_ptr->slist_size = (size_t)0;
-
-#if H5C1_DO_SANITY_CHECKS
- cache_ptr->slist_len_increase = 0;
- cache_ptr->slist_size_increase = 0;
-#endif /* H5C1_DO_SANITY_CHECKS */
-
- for ( i = 0; i < H5C1__HASH_TABLE_LEN; i++ )
- {
- (cache_ptr->index)[i] = NULL;
- }
-
- cache_ptr->pl_len = 0;
- cache_ptr->pl_size = (size_t)0;
- cache_ptr->pl_head_ptr = NULL;
- cache_ptr->pl_tail_ptr = NULL;
-
- cache_ptr->pel_len = 0;
- cache_ptr->pel_size = (size_t)0;
- cache_ptr->pel_head_ptr = NULL;
- cache_ptr->pel_tail_ptr = NULL;
-
- cache_ptr->LRU_list_len = 0;
- cache_ptr->LRU_list_size = (size_t)0;
- cache_ptr->LRU_head_ptr = NULL;
- cache_ptr->LRU_tail_ptr = NULL;
-
- cache_ptr->cLRU_list_len = 0;
- cache_ptr->cLRU_list_size = (size_t)0;
- cache_ptr->cLRU_head_ptr = NULL;
- cache_ptr->cLRU_tail_ptr = NULL;
-
- cache_ptr->dLRU_list_len = 0;
- cache_ptr->dLRU_list_size = (size_t)0;
- cache_ptr->dLRU_head_ptr = NULL;
- cache_ptr->dLRU_tail_ptr = NULL;
-
- cache_ptr->size_increase_possible = FALSE;
- cache_ptr->flash_size_increase_possible = FALSE;
- cache_ptr->flash_size_increase_threshold = 0;
- cache_ptr->size_decrease_possible = FALSE;
- cache_ptr->resize_enabled = FALSE;
- cache_ptr->cache_full = FALSE;
- cache_ptr->size_decreased = FALSE;
-
- (cache_ptr->resize_ctl).version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- (cache_ptr->resize_ctl).rpt_fcn = NULL;
- (cache_ptr->resize_ctl).set_initial_size = FALSE;
- (cache_ptr->resize_ctl).initial_size = H5C1__DEF_AR_INIT_SIZE;
- (cache_ptr->resize_ctl).min_clean_fraction = H5C1__DEF_AR_MIN_CLEAN_FRAC;
- (cache_ptr->resize_ctl).max_size = H5C1__DEF_AR_MAX_SIZE;
- (cache_ptr->resize_ctl).min_size = H5C1__DEF_AR_MIN_SIZE;
- (cache_ptr->resize_ctl).epoch_length = H5C1__DEF_AR_EPOCH_LENGTH;
-
- (cache_ptr->resize_ctl).incr_mode = H5C1_incr__off;
- (cache_ptr->resize_ctl).lower_hr_threshold = H5C1__DEF_AR_LOWER_THRESHHOLD;
- (cache_ptr->resize_ctl).increment = H5C1__DEF_AR_INCREMENT;
- (cache_ptr->resize_ctl).apply_max_increment = TRUE;
- (cache_ptr->resize_ctl).max_increment = H5C1__DEF_AR_MAX_INCREMENT;
-
- (cache_ptr->resize_ctl).flash_incr_mode = H5C1_flash_incr__off;
- (cache_ptr->resize_ctl).flash_multiple = 1.0;
- (cache_ptr->resize_ctl).flash_threshold = 0.25;
-
-
- (cache_ptr->resize_ctl).decr_mode = H5C1_decr__off;
- (cache_ptr->resize_ctl).upper_hr_threshold = H5C1__DEF_AR_UPPER_THRESHHOLD;
- (cache_ptr->resize_ctl).decrement = H5C1__DEF_AR_DECREMENT;
- (cache_ptr->resize_ctl).apply_max_decrement = TRUE;
- (cache_ptr->resize_ctl).max_decrement = H5C1__DEF_AR_MAX_DECREMENT;
- (cache_ptr->resize_ctl).epochs_before_eviction = H5C1__DEF_AR_EPCHS_B4_EVICT;
- (cache_ptr->resize_ctl).apply_empty_reserve = TRUE;
- (cache_ptr->resize_ctl).empty_reserve = H5C1__DEF_AR_EMPTY_RESERVE;
-
- cache_ptr->epoch_markers_active = 0;
-
- /* no need to initialize the ring buffer itself */
- cache_ptr->epoch_marker_ringbuf_first = 1;
- cache_ptr->epoch_marker_ringbuf_last = 0;
- cache_ptr->epoch_marker_ringbuf_size = 0;
-
- for ( i = 0; i < H5C1__MAX_EPOCH_MARKERS; i++ )
- {
- (cache_ptr->epoch_marker_active)[i] = FALSE;
-#ifndef NDEBUG
- ((cache_ptr->epoch_markers)[i]).magic =
- H5C1__H5C1_CACHE_ENTRY_T_MAGIC;
-#endif /* NDEBUG */
- ((cache_ptr->epoch_markers)[i]).addr = (haddr_t)i;
- ((cache_ptr->epoch_markers)[i]).size = (size_t)0;
- ((cache_ptr->epoch_markers)[i]).type = &epoch_marker_class1;
- ((cache_ptr->epoch_markers)[i]).is_dirty = FALSE;
- ((cache_ptr->epoch_markers)[i]).dirtied = FALSE;
- ((cache_ptr->epoch_markers)[i]).is_protected = FALSE;
- ((cache_ptr->epoch_markers)[i]).is_read_only = FALSE;
- ((cache_ptr->epoch_markers)[i]).ro_ref_count = 0;
- ((cache_ptr->epoch_markers)[i]).is_pinned = FALSE;
- ((cache_ptr->epoch_markers)[i]).in_slist = FALSE;
- ((cache_ptr->epoch_markers)[i]).ht_next = NULL;
- ((cache_ptr->epoch_markers)[i]).ht_prev = NULL;
- ((cache_ptr->epoch_markers)[i]).next = NULL;
- ((cache_ptr->epoch_markers)[i]).prev = NULL;
- ((cache_ptr->epoch_markers)[i]).aux_next = NULL;
- ((cache_ptr->epoch_markers)[i]).aux_prev = NULL;
-#if H5C1_COLLECT_CACHE_ENTRY_STATS
- ((cache_ptr->epoch_markers)[i]).accesses = 0;
- ((cache_ptr->epoch_markers)[i]).clears = 0;
- ((cache_ptr->epoch_markers)[i]).flushes = 0;
- ((cache_ptr->epoch_markers)[i]).pins = 0;
-#endif /* H5C1_COLLECT_CACHE_ENTRY_STATS */
- }
-
- if ( H5C1_reset_cache_hit_rate_stats(cache_ptr) != SUCCEED ) {
-
- /* this should be impossible... */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, NULL, \
- "H5C1_reset_cache_hit_rate_stats failed.")
- }
-
- H5C1_stats__reset(cache_ptr);
-
- cache_ptr->skip_file_checks = FALSE;
- cache_ptr->skip_dxpl_id_checks = FALSE;
- cache_ptr->prefix[0] = '\0'; /* empty string */
-
- /* Set return value */
- ret_value = cache_ptr;
-
-done:
-
- if ( ret_value == 0 ) {
-
- if ( cache_ptr != NULL ) {
-
- if ( cache_ptr->slist_ptr != NULL )
- H5SL_close(cache_ptr->slist_ptr);
-
- cache_ptr->magic = 0;
- H5FL_FREE(H5C1_t, cache_ptr);
- cache_ptr = NULL;
-
- } /* end if */
-
- } /* end if */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_create() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_def_auto_resize_rpt_fcn
- *
- * Purpose: Print results of a automatic cache resize.
- *
- * This function should only be used where HDprintf() behaves
- * well -- i.e. not on Windows.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 10/27/04
- *
- * Modifications:
- *
- * JRM -- 11/22/04
- * Reworked function to adapt it to the addition of the
- * ageout method of cache size reduction.
- *
- * JRM -- 1/19/06
- * Updated function for display the new prefix field of
- * H5C1_t in output.
- *
- * JRM 12/31/07
- * Updated function to handle flash size increases.
- *
- *-------------------------------------------------------------------------
- */
-void
-H5C1_def_auto_resize_rpt_fcn(H5C1_t * cache_ptr,
-#ifndef NDEBUG
- int32_t version,
-#else /* NDEBUG */
- int32_t UNUSED version,
-#endif /* NDEBUG */
- double hit_rate,
- enum H5C1_resize_status status,
- size_t old_max_cache_size,
- size_t new_max_cache_size,
- size_t old_min_clean_size,
- size_t new_min_clean_size)
-{
- HDassert( cache_ptr != NULL );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( version == H5C1__CURR_AUTO_RESIZE_RPT_FCN_VER );
-
- switch ( status )
- {
- case in_spec:
- HDfprintf(stdout,
- "%sAuto cache resize -- no change. (hit rate = %lf)\n",
- cache_ptr->prefix, hit_rate);
- break;
-
- case increase:
- HDassert( hit_rate < (cache_ptr->resize_ctl).lower_hr_threshold );
- HDassert( old_max_cache_size < new_max_cache_size );
-
- HDfprintf(stdout,
- "%sAuto cache resize -- hit rate (%lf) out of bounds low (%6.5lf).\n",
- cache_ptr->prefix, hit_rate,
- (cache_ptr->resize_ctl).lower_hr_threshold);
-
- HDfprintf(stdout,
- "%s cache size increased from (%Zu/%Zu) to (%Zu/%Zu).\n",
- cache_ptr->prefix,
- old_max_cache_size,
- old_min_clean_size,
- new_max_cache_size,
- new_min_clean_size);
- break;
-
- case flash_increase:
- HDassert( old_max_cache_size < new_max_cache_size );
-
- HDfprintf(stdout,
- "%sflash cache resize(%d) -- size threshold = %Zu.\n",
- cache_ptr->prefix,
- (int)((cache_ptr->resize_ctl).flash_incr_mode),
- cache_ptr->flash_size_increase_threshold);
-
- HDfprintf(stdout,
- "%s cache size increased from (%Zu/%Zu) to (%Zu/%Zu).\n",
- cache_ptr->prefix,
- old_max_cache_size,
- old_min_clean_size,
- new_max_cache_size,
- new_min_clean_size);
- break;
-
- case decrease:
- HDassert( old_max_cache_size > new_max_cache_size );
-
- switch ( (cache_ptr->resize_ctl).decr_mode )
- {
- case H5C1_decr__threshold:
- HDassert( hit_rate >
- (cache_ptr->resize_ctl).upper_hr_threshold );
-
- HDfprintf(stdout,
- "%sAuto cache resize -- decrease by threshold. HR = %lf > %6.5lf\n",
- cache_ptr->prefix, hit_rate,
- (cache_ptr->resize_ctl).upper_hr_threshold);
-
- HDfprintf(stdout, "%sout of bounds high (%6.5lf).\n",
- cache_ptr->prefix,
- (cache_ptr->resize_ctl).upper_hr_threshold);
- break;
-
- case H5C1_decr__age_out:
- HDfprintf(stdout,
- "%sAuto cache resize -- decrease by ageout. HR = %lf\n",
- cache_ptr->prefix, hit_rate);
- break;
-
- case H5C1_decr__age_out_with_threshold:
- HDassert( hit_rate >
- (cache_ptr->resize_ctl).upper_hr_threshold );
-
- HDfprintf(stdout,
- "%sAuto cache resize -- decrease by ageout with threshold. HR = %lf > %6.5lf\n",
- cache_ptr->prefix, hit_rate,
- (cache_ptr->resize_ctl).upper_hr_threshold);
- break;
-
- default:
- HDfprintf(stdout,
- "%sAuto cache resize -- decrease by unknown mode. HR = %lf\n",
- cache_ptr->prefix, hit_rate);
- }
-
- HDfprintf(stdout,
- "%s cache size decreased from (%Zu/%Zu) to (%Zu/%Zu).\n",
- cache_ptr->prefix,
- old_max_cache_size,
- old_min_clean_size,
- new_max_cache_size,
- new_min_clean_size);
- break;
-
- case at_max_size:
- HDfprintf(stdout,
- "%sAuto cache resize -- hit rate (%lf) out of bounds low (%6.5lf).\n",
- cache_ptr->prefix, hit_rate,
- (cache_ptr->resize_ctl).lower_hr_threshold);
- HDfprintf(stdout,
- "%s cache already at maximum size so no change.\n",
- cache_ptr->prefix);
- break;
-
- case at_min_size:
- HDfprintf(stdout,
- "%sAuto cache resize -- hit rate (%lf) -- can't decrease.\n",
- cache_ptr->prefix, hit_rate);
- HDfprintf(stdout, "%s cache already at minimum size.\n",
- cache_ptr->prefix);
- break;
-
- case increase_disabled:
- HDfprintf(stdout,
- "%sAuto cache resize -- increase disabled -- HR = %lf.",
- cache_ptr->prefix, hit_rate);
- break;
-
- case decrease_disabled:
- HDfprintf(stdout,
- "%sAuto cache resize -- decrease disabled -- HR = %lf.\n",
- cache_ptr->prefix, hit_rate);
- break;
-
- case not_full:
- HDassert( hit_rate < (cache_ptr->resize_ctl).lower_hr_threshold );
-
- HDfprintf(stdout,
- "%sAuto cache resize -- hit rate (%lf) out of bounds low (%6.5lf).\n",
- cache_ptr->prefix, hit_rate,
- (cache_ptr->resize_ctl).lower_hr_threshold);
- HDfprintf(stdout,
- "%s cache not full so no increase in size.\n",
- cache_ptr->prefix);
- break;
-
- default:
- HDfprintf(stdout, "%sAuto cache resize -- unknown status code.\n",
- cache_ptr->prefix);
- break;
- }
-
- return;
-
-} /* H5C1_def_auto_resize_rpt_fcn() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_dest
- *
- * Purpose: Flush all data to disk and destroy the cache.
- *
- * This function fails if any object are protected since the
- * resulting file might not be consistent.
- *
- * The primary_dxpl_id and secondary_dxpl_id parameters
- * specify the dxpl_ids used on the first write occasioned
- * by the destroy (primary_dxpl_id), and on all subsequent
- * writes (secondary_dxpl_id). This is useful in the metadata
- * cache, but may not be needed elsewhere. If so, just use the
- * same dxpl_id for both parameters.
- *
- * Note that *cache_ptr has been freed upon successful return.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 6/2/04
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5C1_dest(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_dest, FAIL)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( cache_ptr->skip_file_checks || f );
-
- if ( H5C1_flush_cache(f, primary_dxpl_id, secondary_dxpl_id,
- cache_ptr, H5C1__FLUSH_INVALIDATE_FLAG) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush cache")
- }
-
- if ( cache_ptr->slist_ptr != NULL ) {
-
- H5SL_close(cache_ptr->slist_ptr);
- cache_ptr->slist_ptr = NULL;
- }
-
- cache_ptr->magic = 0;
-
- H5FL_FREE(H5C1_t, cache_ptr);
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_dest() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_dest_empty
- *
- * Purpose: Destroy an empty cache.
- *
- * This function fails if the cache is not empty on entry.
- *
- * Note that *cache_ptr has been freed upon successful return.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 6/2/04
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5C1_dest_empty(H5C1_t * cache_ptr)
-{
- herr_t ret_value=SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_dest_empty, FAIL)
-
- /* This would normally be an assert, but we need to use an HGOTO_ERROR
- * call to shut up the compiler.
- */
- if ( ( ! cache_ptr ) ||
- ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ||
- ( cache_ptr->index_len != 0 ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Bad cache_ptr or non-empty cache on entry.")
- }
-
-
- if ( cache_ptr->slist_ptr != NULL ) {
-
- H5SL_close(cache_ptr->slist_ptr);
- cache_ptr->slist_ptr = NULL;
- }
-
- cache_ptr->magic = 0;
-
- H5FL_FREE(H5C1_t, cache_ptr);
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_dest_empty() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1_expunge_entry
- *
- * Purpose: Use this function to tell the cache to expunge an entry
- * from the cache without writing it to disk even if it is
- * dirty. The entry may not be either pinned or protected.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 6/29/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5C1_expunge_entry(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- const H5C1_class_t * type,
- haddr_t addr)
-{
- herr_t result;
- herr_t ret_value = SUCCEED; /* Return value */
- hbool_t first_flush = TRUE;
- H5C1_cache_entry_t * entry_ptr = NULL;
-
- FUNC_ENTER_NOAPI(H5C1_expunge_entry, FAIL)
-
- HDassert( H5F_addr_defined(addr) );
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( type );
- HDassert( type->clear );
- HDassert( type->dest );
-
-#if H5C1_DO_EXTREME_SANITY_CHECKS
- if ( H5C1_validate_lru_list(cache_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
-#endif /* H5C1_DO_EXTREME_SANITY_CHECKS */
-
- H5C1__SEARCH_INDEX(cache_ptr, addr, entry_ptr, FAIL)
-
- if ( ( entry_ptr == NULL ) || ( entry_ptr->type != type ) ) {
-
- /* the target doesn't exist in the cache, so we are done. */
- HGOTO_DONE(SUCCEED)
- }
-
- HDassert( entry_ptr->addr == addr );
- HDassert( entry_ptr->type == type );
-
- if ( entry_ptr->is_protected ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTEXPUNGE, FAIL, \
- "Target entry is protected.")
- }
-
- if ( entry_ptr->is_pinned ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTEXPUNGE, FAIL, \
- "Target entry is pinned.")
- }
-
- /* If we get this far, call H5C1_flush_single_entry() with the
- * H5C1__FLUSH_INVALIDATE_FLAG and the H5C1__FLUSH_CLEAR_ONLY_FLAG.
- * This will clear the entry, and then delete it from the cache.
- */
-
- result = H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- entry_ptr->type,
- entry_ptr->addr,
- H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- &first_flush,
- TRUE);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTEXPUNGE, FAIL, \
- "H5C1_flush_single_entry() failed.")
- }
-
-done:
-
-#if H5C1_DO_EXTREME_SANITY_CHECKS
- if ( H5C1_validate_lru_list(cache_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
-#endif /* H5C1_DO_EXTREME_SANITY_CHECKS */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_expunge_entry() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_flush_cache
- *
- * Purpose: Flush (and possibly destroy) the entries contained in the
- * specified cache.
- *
- * If the cache contains protected entries, the function will
- * fail, as protected entries cannot be flushed. However
- * all unprotected entries should be flushed before the
- * function returns failure.
- *
- * The primary_dxpl_id and secondary_dxpl_id parameters
- * specify the dxpl_ids used on the first write occasioned
- * by the flush (primary_dxpl_id), and on all subsequent
- * writes (secondary_dxpl_id). This is useful in the metadata
- * cache, but may not be needed elsewhere. If so, just use the
- * same dxpl_id for both parameters.
- *
- * Return: Non-negative on success/Negative on failure or if there was
- * a request to flush all items and something was protected.
- *
- * Programmer: John Mainzer
- * 6/2/04
- *
- * Modifications:
- *
- * JRM -- 7/20/04
- * Modified the function for the addition of the hash table.
- *
- * JRM -- 11/22/04
- * Added code to remove all epoch markers (if any) from the
- * LRU list before a destroy. Strictly speaking, this isn't
- * necessary, as the marker entries reside only in the LRU
- * list, never in the index or in the tree. However, it
- * never hurts to tidy up.
- *
- * JRM -- 1/6/05
- * Reworked code to support the new
- * H5C1__FLUSH_MARKED_ENTRIES_FLAG, and for the replacement of
- * H5F_FLUSH_INVALIDATE flag with H5C1__FLUSH_INVALIDATE_FLAG.
- *
- * Note that the H5C1__FLUSH_INVALIDATE_FLAG takes precidence
- * over the H5C1__FLUSH_MARKED_ENTRIES_FLAG. Thus if both are
- * set, the functions behaves as if just the
- * H5C1__FLUSH_INVALIDATE_FLAG was set.
- *
- * The H5C1__FLUSH_CLEAR_ONLY_FLAG flag can co-exist with
- * either the H5C1__FLUSH_MARKED_ENTRIES_FLAG, or the
- * H5C1__FLUSH_INVALIDATE_FLAG. In all cases, it is simply
- * passed along to H5C1_flush_single_entry(). In the case of
- * H5C1__FLUSH_MARKED_ENTRIES_FLAG, it will only apply to
- * the marked entries.
- *
- * JRM -- 10/15/05
- * Added code supporting the new
- * H5C1__FLUSH_IGNORE_PROTECTED_FLAG. We need this flag, as
- * we now use this function to flush large number of entries
- * in increasing address order. We do this by marking the
- * entries to be flushed, calling this function to flush them,
- * and then restoring LRU order.
- *
- * However, it is possible that the cache will contain other,
- * unmarked protected entries, when we make this call. This
- * new flag allows us to ignore them.
- *
- * Note that even with this flag set, it is still an error
- * to try to flush a protected entry.
- *
- * JRM -- 3/25/06
- * Updated function to handle pinned entries.
- *
- * JRM -- 8/19/06
- * Added code managing the new flush_in_progress field of
- * H5C1_t.
- *
- * Also reworked function to allow for the possibility that
- * entries will be dirtied, resized, or renamed during flush
- * callbacks. As a result, we may have to make multiple
- * passes through the skip list before the cache is flushed.
- *
- * JRM -- 10/13/07
- * Added code to detect and manage the case in which a
- * flush callback changes the s-list out from under
- * the function. The only way I can think of in which this
- * can happen is if a flush function loads an entry
- * into the cache that isn't there already. Quincey tells
- * me that this will never happen, but I'm not sure I
- * believe him.
- *
- * Note that this is a pretty bad scenario if it ever
- * happens. The code I have added should allow us to
- * handle the situation under all but the worst conditions,
- * but one can argue that I should just scream and die if I
- * ever detect the condidtion.
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5C1_flush_cache(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- unsigned flags)
-{
- herr_t status;
- herr_t ret_value = SUCCEED;
- hbool_t destroy;
- hbool_t flushed_entries_last_pass;
- hbool_t flush_marked_entries;
- hbool_t first_flush = TRUE;
- hbool_t ignore_protected;
- hbool_t tried_to_flush_protected_entry = FALSE;
- int32_t passes = 0;
- int32_t protected_entries = 0;
- H5SL_node_t * node_ptr = NULL;
- H5C1_cache_entry_t * entry_ptr = NULL;
- H5C1_cache_entry_t * next_entry_ptr = NULL;
-#if H5C1_DO_SANITY_CHECKS
- int64_t flushed_entries_count;
- size_t flushed_entries_size;
- int64_t initial_slist_len;
- size_t initial_slist_size;
-#endif /* H5C1_DO_SANITY_CHECKS */
-
- FUNC_ENTER_NOAPI(H5C1_flush_cache, FAIL)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( cache_ptr->skip_file_checks || f );
- HDassert( cache_ptr->slist_ptr );
-
- ignore_protected = ( (flags & H5C1__FLUSH_IGNORE_PROTECTED_FLAG) != 0 );
-
- destroy = ( (flags & H5C1__FLUSH_INVALIDATE_FLAG) != 0 );
-
- /* note that flush_marked_entries is set to FALSE if destroy is TRUE */
- flush_marked_entries = ( ( (flags & H5C1__FLUSH_MARKED_ENTRIES_FLAG) != 0 )
- &&
- ( ! destroy )
- );
-
- HDassert( ! ( destroy && ignore_protected ) );
-
- HDassert( ! ( cache_ptr->flush_in_progress ) );
-
- cache_ptr->flush_in_progress = TRUE;
-
- if ( destroy ) {
-
- status = H5C1_flush_invalidate_cache(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- flags);
-
- if ( status < 0 ) {
-
- /* This shouldn't happen -- if it does, we are toast so
- * just scream and die.
- */
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "flush invalidate failed.")
- }
- } else {
- /* When we are only flushing marked entries, the slist will usually
- * still contain entries when we have flushed everything we should.
- * Thus we track whether we have flushed any entries in the last
- * pass, and terminate if we haven't.
- */
-
- flushed_entries_last_pass = TRUE;
-
- while ( ( passes < H5C1__MAX_PASSES_ON_FLUSH ) &&
- ( cache_ptr->slist_len != 0 ) &&
- ( protected_entries == 0 ) &&
- ( flushed_entries_last_pass ) )
- {
- flushed_entries_last_pass = FALSE;
- node_ptr = H5SL_first(cache_ptr->slist_ptr);
-
- if ( node_ptr != NULL ) {
-
- next_entry_ptr = (H5C1_cache_entry_t *)H5SL_item(node_ptr);
-
- if ( next_entry_ptr == NULL ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "next_entry_ptr == NULL 1 ?!?!");
- }
-#ifndef NDEBUG
- HDassert( next_entry_ptr->magic ==
- H5C1__H5C1_CACHE_ENTRY_T_MAGIC );
-#endif /* NDEBUG */
- HDassert( next_entry_ptr->is_dirty );
- HDassert( next_entry_ptr->in_slist );
-
- } else {
-
- next_entry_ptr = NULL;
-
- }
-
- HDassert( node_ptr != NULL );
-
-#if H5C1_DO_SANITY_CHECKS
- /* For sanity checking, try to verify that the skip list has
- * the expected size and number of entries at the end of each
- * internal while loop (see below).
- *
- * Doing this get a bit tricky, as depending on flags, we may
- * or may not flush all the entries in the slist.
- *
- * To make things more entertaining, with the advent of the
- * fractal heap, the entry flush callback can cause entries
- * to be dirtied, resized, and/or renamed.
- *
- * To deal with this, we first make note of the initial
- * skip list length and size:
- */
- initial_slist_len = cache_ptr->slist_len;
- initial_slist_size = cache_ptr->slist_size;
-
- /* We then zero counters that we use to track the number
- * and total size of entries flushed:
- */
- flushed_entries_count = 0;
- flushed_entries_size = 0;
-
- /* As mentioned above, there is the possibility that
- * entries will be dirtied, resized, and/or flushed during
- * our pass through the skip list. To capture the number
- * of entries added, and the skip list size delta,
- * zero the slist_len_increase and slist_size_increase of
- * the cache's instance of H5C1_t. These fields will be
- * updated elsewhere to account for slist insertions and/or
- * dirty entry size changes.
- */
- cache_ptr->slist_len_increase = 0;
- cache_ptr->slist_size_increase = 0;
-
- /* at the end of the loop, use these values to compute the
- * expected slist length and size and compare this with the
- * value recorded in the cache's instance of H5C1_t.
- */
-#endif /* H5C1_DO_SANITY_CHECKS */
-
- while ( node_ptr != NULL )
- {
- entry_ptr = next_entry_ptr;
-
- /* With the advent of the fractal heap, it is possible
- * that the flush callback will dirty and/or resize
- * other entries in the cache. In particular, while
- * Quincey has promised me that this will never happen,
- * it is possible that the flush callback for an
- * entry may protect an entry that is not in the cache,
- * perhaps causing the cache to flush and possibly
- * evict the entry associated with node_ptr to make
- * space for the new entry.
- *
- * Thus we do a bit of extra sanity checking on entry_ptr,
- * and break out of this scan of the skip list if we
- * detect minor problems. We have a bit of leaway on the
- * number of passes though the skip list, so this shouldn't
- * be an issue in the flush in and of itself, as it should
- * be all but impossible for this to happen more than once
- * in any flush.
- *
- * Observe that that breaking out of the scan early
- * shouldn't break the sanity checks just after the end
- * of this while loop.
- *
- * If an entry has merely been marked clean and removed from
- * the s-list, we simply break out of the scan.
- *
- * If the entry has been evicted, we flag an error and
- * exit.
- */
-#ifndef NDEBUG
- if ( entry_ptr->magic != H5C1__H5C1_CACHE_ENTRY_T_MAGIC ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "entry_ptr->magic invalid ?!?!");
-
- } else
-#endif /* NDEBUG */
- if ( ( ! entry_ptr->is_dirty ) ||
- ( ! entry_ptr->in_slist ) ) {
-
- /* the s-list has been modified out from under us.
- * set node_ptr to NULL and break out of the loop.
- */
- node_ptr = NULL;
- break;
- }
-
- /* increment node pointer now, before we delete its target
- * from the slist.
- */
- node_ptr = H5SL_next(node_ptr);
-
- if ( node_ptr != NULL ) {
- next_entry_ptr = (H5C1_cache_entry_t *)H5SL_item(node_ptr);
-
- if ( next_entry_ptr == NULL ) {
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "next_entry_ptr == NULL 2 ?!?!");
- }
-#ifndef NDEBUG
- HDassert( next_entry_ptr->magic ==
- H5C1__H5C1_CACHE_ENTRY_T_MAGIC );
-#endif /* NDEBUG */
- HDassert( next_entry_ptr->is_dirty );
- HDassert( next_entry_ptr->in_slist );
- } else {
- next_entry_ptr = NULL;
- }
-
- HDassert( entry_ptr != NULL );
- HDassert( entry_ptr->in_slist );
-
- if ( ( ! flush_marked_entries ) ||
- ( entry_ptr->flush_marker ) ) {
-
- if ( entry_ptr->is_protected ) {
-
- /* we probably have major problems -- but lets flush
- * everything we can before we decide whether to flag
- * an error.
- */
- tried_to_flush_protected_entry = TRUE;
- protected_entries++;
-
- } else if ( entry_ptr->is_pinned ) {
- /* Test to see if we are can flush the entry now.
- * If we can, go ahead and flush. Note that we
- * aren't trying to do a destroy here, so that
- * is not an issue.
- */
- if ( TRUE ) { /* When we get to multithreaded cache,
- * we will need either locking code,
- * and/or a test to see if the entry
- * is in flushable condition here.
- */
-#if H5C1_DO_SANITY_CHECKS
- flushed_entries_count++;
- flushed_entries_size += entry_ptr->size;
-#endif /* H5C1_DO_SANITY_CHECKS */
- status = H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- NULL,
- entry_ptr->addr,
- flags,
- &first_flush,
- FALSE);
- if ( status < 0 ) {
-
- /* This shouldn't happen -- if it does, we are
- * toast so just scream and die.
- */
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "dirty pinned entry flush failed.")
- }
- flushed_entries_last_pass = TRUE;
- }
- } else {
-#if H5C1_DO_SANITY_CHECKS
- flushed_entries_count++;
- flushed_entries_size += entry_ptr->size;
-#endif /* H5C1_DO_SANITY_CHECKS */
- status = H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- NULL,
- entry_ptr->addr,
- flags,
- &first_flush,
- FALSE);
- if ( status < 0 ) {
-
- /* This shouldn't happen -- if it does, we are
- * toast so just scream and die.
- */
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "Can't flush entry.")
- }
- flushed_entries_last_pass = TRUE;
- }
- }
- } /* while ( node_ptr != NULL ) */
-
-#if H5C1_DO_SANITY_CHECKS
- /* Verify that the slist size and length are as expected. */
-
- HDassert( (initial_slist_len + cache_ptr->slist_len_increase -
- flushed_entries_count) == cache_ptr->slist_len );
- HDassert( (initial_slist_size + cache_ptr->slist_size_increase -
- flushed_entries_size) == cache_ptr->slist_size );
-#endif /* H5C1_DO_SANITY_CHECKS */
-
- passes++;
-
- } /* while */
-
- HDassert( protected_entries <= cache_ptr->pl_len );
-
- if ( ( ( cache_ptr->pl_len > 0 ) && ( !ignore_protected ) )
- ||
- ( tried_to_flush_protected_entry ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "cache has protected items")
- }
-
- if ( ( cache_ptr->slist_len != 0 ) &&
- ( passes >= H5C1__MAX_PASSES_ON_FLUSH ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "flush pass limit exceeded.")
- }
-
-#if H5C1_DO_SANITY_CHECKS
- if ( ! flush_marked_entries ) {
-
- HDassert( cache_ptr->slist_len == 0 );
- HDassert( cache_ptr->slist_size == 0 );
- }
-#endif /* H5C1_DO_SANITY_CHECKS */
-
- }
-
-done:
-
- cache_ptr->flush_in_progress = FALSE;
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_flush_cache() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_flush_to_min_clean
- *
- * Purpose: Flush dirty entries until the caches min clean size is
- * attained.
- *
- * This function is used in the implementation of the
- * metadata cache in PHDF5. To avoid "messages from the
- * future", the cache on process 0 can't be allowed to
- * flush entries until the other processes have reached
- * the same point in the calculation. If this constraint
- * is not met, it is possible that the other processes will
- * read metadata generated at a future point in the
- * computation.
- *
- *
- * Return: Non-negative on success/Negative on failure or if
- * write is not permitted.
- *
- * Programmer: John Mainzer
- * 9/16/05
- *
- * Modifications:
- *
- * Re-wrote function to flush dirty entries in increasing
- * address order, while maintaining LRU order in the LRU list
- * upon return.
- *
- * Do this by scanning up the dirty LRU list for entries to
- * flush to reach min clean size, setting their flush_marker
- * flags, and recording their addresses in the order
- * encountered.
- *
- * Then call H5C1_flush_cache() to flush the marked entries.
- *
- * Finally, use the list of marked entries to force the
- * correct LRU list order after the flush.
- *
- * JRM - 10/13/05
- *
- * This change had the oposite of the desired effect. Lets
- * leave it in (albeit commented out for now). If we can't
- * find a case where it helps, lets get rid of it.
- *
- *
- * Added some sanity checks to the change which verify the
- * expected values of the new is_read_only and ro_ref_count
- * fields.
- * JRM - 3/29/07
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5C1_flush_to_min_clean(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr)
-{
- herr_t result;
- herr_t ret_value = SUCCEED;
- hbool_t first_flush = TRUE;
- hbool_t write_permitted;
-#if 0 /* modified code -- commented out for now */
- int i;
- int flushed_entries_count = 0;
- size_t flushed_entries_size = 0;
- size_t space_needed = 0;
- haddr_t * flushed_entries_list = NULL;
- H5C1_cache_entry_t * entry_ptr = NULL;
-#endif /* JRM */
-
- FUNC_ENTER_NOAPI(H5C1_flush_to_min_clean, FAIL)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( cache_ptr->skip_file_checks || f );
-
- if ( cache_ptr->check_write_permitted != NULL ) {
-
- result = (cache_ptr->check_write_permitted)(f,
- primary_dxpl_id,
- &write_permitted);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Can't get write_permitted")
- }
- } else {
-
- write_permitted = cache_ptr->write_permitted;
- }
-
- if ( ! write_permitted ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "cache write is not permitted!?!\n");
- }
-#if 1 /* original code */
- result = H5C1_make_space_in_cache(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- (size_t)0,
- write_permitted,
- &first_flush);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_make_space_in_cache failed.")
- }
-#else /* modified code -- commented out for now */
- if ( cache_ptr->max_cache_size > cache_ptr->index_size ) {
-
- if ( ((cache_ptr->max_cache_size - cache_ptr->index_size) +
- cache_ptr->cLRU_list_size) >= cache_ptr->min_clean_size ) {
-
- space_needed = 0;
-
- } else {
-
- space_needed = cache_ptr->min_clean_size -
- ((cache_ptr->max_cache_size - cache_ptr->index_size) +
- cache_ptr->cLRU_list_size);
- }
- } else {
-
- if ( cache_ptr->min_clean_size <= cache_ptr->cLRU_list_size ) {
-
- space_needed = 0;
-
- } else {
-
- space_needed = cache_ptr->min_clean_size -
- cache_ptr->cLRU_list_size;
- }
- }
-
- if ( space_needed > 0 ) { /* we have work to do */
-
- HDassert( cache_ptr->slist_len > 0 );
-
- /* allocate an array to keep a list of the entries that we
- * mark for flush. We need this list to touch up the LRU
- * list after the flush.
- */
- flushed_entries_list = (haddr_t *)H5MM_malloc(sizeof(haddr_t) *
- (size_t)(cache_ptr->slist_len));
-
- if ( flushed_entries_list == NULL ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, \
- "memory allocation failed for flushed entries list")
- }
-
- /* Scan the dirty LRU list from tail forward and mark sufficient
- * entries to free up the necessary space. Keep a list of the
- * entries marked in the order in which they are encountered.
- */
- entry_ptr = cache_ptr->dLRU_tail_ptr;
-
- while ( ( flushed_entries_size < space_needed ) &&
- ( flushed_entries_count < cache_ptr->slist_len ) &&
- ( entry_ptr != NULL ) )
- {
- HDassert( ! (entry_ptr->is_protected) );
- HDassert( ! (entry_ptr->is_read_only) );
- HDassert( entry_ptr->ro_ref_count == 0 );
- HDassert( entry_ptr->is_dirty );
- HDassert( entry_ptr->in_slist );
-
- entry_ptr->flush_marker = TRUE;
- flushed_entries_size += entry_ptr->size;
- flushed_entries_list[flushed_entries_count] = entry_ptr->addr;
- flushed_entries_count++;
- entry_ptr = entry_ptr->aux_prev;
- }
-
- if ( ( flushed_entries_count > cache_ptr->slist_len) ||
- ( flushed_entries_size < space_needed ) ) {
- HDfprintf(stdout, "flushed_entries_count = %d <= %d = slist_size\n",
- (int)flushed_entries_count, (int)(cache_ptr->slist_size));
- HDfprintf(stdout,
- "flushed_entries_size = %d < %d = space_needed.\n",
- (int)flushed_entries_size, (int)space_needed);
- }
-
- HDassert( flushed_entries_count <= cache_ptr->slist_len );
- HDassert( flushed_entries_size >= space_needed );
-
-
- /* Flush the marked entries */
- result = H5C1_flush_cache(f, primary_dxpl_id, secondary_dxpl_id,
- cache_ptr, H5C1__FLUSH_MARKED_ENTRIES_FLAG |
- H5C1__FLUSH_IGNORE_PROTECTED_FLAG);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "H5C1_flush_cache failed.")
- }
-
- /* Now touch up the LRU list so as to place the flushed entries in
- * the order they they would be in if we had flushed them in the
- * order we encountered them in.
- */
-
- i = 0;
- while ( i < flushed_entries_count )
- {
- H5C1__SEARCH_INDEX_NO_STATS(cache_ptr, flushed_entries_list[i], \
- entry_ptr, FAIL)
-
- /* At present, the above search must always succeed. However,
- * that may change. Write the code so we need only remove the
- * following assert in that event.
- */
- HDassert( entry_ptr != NULL );
- H5C1__FAKE_RP_FOR_MOST_RECENT_ACCESS(cache_ptr, entry_ptr, FAIL)
- i++;
- }
- } /* if ( space_needed > 0 ) */
-#endif /* end modified code -- commented out for now */
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_flush_to_min_clean() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_get_cache_auto_resize_config
- *
- * Purpose: Copy the current configuration of the cache automatic
- * re-sizing function into the instance of H5C1_auto_size_ctl_t
- * pointed to by config_ptr.
- *
- * Return: SUCCEED on success, and FAIL on failure.
- *
- * Programmer: John Mainzer
- * 10/8/04
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5C1_get_cache_auto_resize_config(H5C1_t * cache_ptr,
- H5C1_auto_size_ctl_t *config_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_get_cache_auto_resize_config, FAIL)
-
- if ( ( cache_ptr == NULL ) || ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr on entry.")
- }
-
- if ( config_ptr == NULL ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad config_ptr on entry.")
- }
-
- *config_ptr = cache_ptr->resize_ctl;
-
- config_ptr->set_initial_size = FALSE;
- config_ptr->initial_size = cache_ptr->max_cache_size;
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_get_cache_auto_resize_config() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_get_cache_size
- *
- * Purpose: Return the cache maximum size, the minimum clean size, the
- * current size, and the current number of entries in
- * *max_size_ptr, *min_clean_size_ptr, *cur_size_ptr, and
- * *cur_num_entries_ptr respectively. If any of these
- * parameters are NULL, skip that value.
- *
- * Return: SUCCEED on success, and FAIL on failure.
- *
- * Programmer: John Mainzer
- * 10/8/04
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5C1_get_cache_size(H5C1_t * cache_ptr,
- size_t * max_size_ptr,
- size_t * min_clean_size_ptr,
- size_t * cur_size_ptr,
- int32_t * cur_num_entries_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_get_cache_size, FAIL)
-
- if ( ( cache_ptr == NULL ) || ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr on entry.")
- }
-
- if ( max_size_ptr != NULL ) {
-
- *max_size_ptr = cache_ptr->max_cache_size;
- }
-
- if ( min_clean_size_ptr != NULL ) {
-
- *min_clean_size_ptr = cache_ptr->min_clean_size;
- }
-
- if ( cur_size_ptr != NULL ) {
-
- *cur_size_ptr = cache_ptr->index_size;
- }
-
- if ( cur_num_entries_ptr != NULL ) {
-
- *cur_num_entries_ptr = cache_ptr->index_len;
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_get_cache_size() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_get_cache_hit_rate
- *
- * Purpose: Compute and return the current cache hit rate in
- * *hit_rate_ptr. If there have been no accesses since the
- * last time the cache hit rate stats were reset, set
- * *hit_rate_ptr to 0.0. On error, *hit_rate_ptr is
- * undefined.
- *
- * Return: SUCCEED on success, and FAIL on failure.
- *
- * Programmer: John Mainzer
- * 10/7/04
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5C1_get_cache_hit_rate(H5C1_t * cache_ptr,
- double * hit_rate_ptr)
-
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_get_cache_hit_rate, FAIL)
-
- if ( ( cache_ptr == NULL ) || ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr on entry.")
- }
-
- if ( hit_rate_ptr == NULL ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad hit_rate_ptr on entry.")
- }
-
- HDassert( cache_ptr->cache_hits >= 0 );
- HDassert( cache_ptr->cache_accesses >= cache_ptr->cache_hits );
-
- if ( cache_ptr->cache_accesses > 0 ) {
-
- *hit_rate_ptr = ((double)(cache_ptr->cache_hits)) /
- ((double)(cache_ptr->cache_accesses));
-
- } else {
-
- *hit_rate_ptr = 0.0;
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_get_cache_hit_rate() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1_get_entry_status
- *
- * Purpose: This function is used to determine whether the cache
- * contains an entry with the specified base address. If
- * the entry exists, it also reports some status information
- * on the entry.
- *
- * Status information is reported in the locations pointed
- * to by the size_ptr, in_cache_ptr, is_dirty_ptr, and
- * is_protected_ptr. While in_cache_ptr must be defined,
- * the remaining pointers may be NULL, in which case the
- * associated data is not reported.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 7/1/05
- *
- * Modifications:
- *
- * JRM -- 4/26/06
- * Added the is_pinned_ptr parameter and supporting code.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5C1_get_entry_status(H5C1_t * cache_ptr,
- haddr_t addr,
- size_t * size_ptr,
- hbool_t * in_cache_ptr,
- hbool_t * is_dirty_ptr,
- hbool_t * is_protected_ptr,
- hbool_t * is_pinned_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- H5C1_cache_entry_t * entry_ptr = NULL;
-
- FUNC_ENTER_NOAPI(H5C1_get_entry_status, FAIL)
-
- HDassert( cache_ptr != NULL );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( H5F_addr_defined(addr) );
- HDassert( in_cache_ptr != NULL );
-
- /* this test duplicates tow of the above asserts, but we need an
- * invocation of HGOTO_ERROR to keep the compiler happy.
- */
- if ( ( cache_ptr == NULL ) || ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr on entry.")
- }
-
- H5C1__SEARCH_INDEX(cache_ptr, addr, entry_ptr, FAIL)
-
- if ( entry_ptr == NULL ) {
-
- /* the entry doesn't exist in the cache -- report this
- * and quit.
- */
- *in_cache_ptr = FALSE;
-
- } else {
-
- *in_cache_ptr = TRUE;
-
- if ( size_ptr != NULL ) {
-
- *size_ptr = entry_ptr->size;
- }
-
- if ( is_dirty_ptr != NULL ) {
-
- *is_dirty_ptr = entry_ptr->is_dirty;
- }
-
- if ( is_protected_ptr != NULL ) {
-
- *is_protected_ptr = entry_ptr->is_protected;
- }
-
- if ( is_pinned_ptr != NULL ) {
-
- *is_pinned_ptr = entry_ptr->is_pinned;
- }
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_get_entry_status() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_get_evictions_enabled()
- *
- * Purpose: Copy the current value of cache_ptr->evictions_enabled into
- * *evictions_enabled_ptr.
- *
- * Return: SUCCEED on success, and FAIL on failure.
- *
- * Programmer: John Mainzer
- * 7/27/07
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5C1_get_evictions_enabled(H5C1_t * cache_ptr,
- hbool_t * evictions_enabled_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_get_evictions_enabled, FAIL)
-
- if ( ( cache_ptr == NULL ) || ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr on entry.")
- }
-
- if ( evictions_enabled_ptr == NULL ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Bad evictions_enabled_ptr on entry.")
- }
-
- *evictions_enabled_ptr = cache_ptr->evictions_enabled;
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_get_evictions_enabled() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_get_trace_file_ptr
- *
- * Purpose: Get the trace_file_ptr field from the cache.
- *
- * This field will either be NULL (which indicates that trace
- * file logging is turned off), or contain a pointer to the
- * open file to which trace file data is to be written.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 1/20/06
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5C1_get_trace_file_ptr(H5C1_t * cache_ptr,
- FILE ** trace_file_ptr_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_get_trace_file_ptr, FAIL)
-
- /* This would normally be an assert, but we need to use an HGOTO_ERROR
- * call to shut up the compiler.
- */
- if ( ( ! cache_ptr ) || ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr")
- }
-
- if ( trace_file_ptr_ptr == NULL ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "NULL trace_file_ptr_ptr")
- }
-
- *trace_file_ptr_ptr = cache_ptr->trace_file_ptr;
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_get_trace_file_ptr() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_insert_entry
- *
- * Purpose: Adds the specified thing to the cache. The thing need not
- * exist on disk yet, but it must have an address and disk
- * space reserved.
- *
- * The primary_dxpl_id and secondary_dxpl_id parameters
- * specify the dxpl_ids used on the first write occasioned
- * by the insertion (primary_dxpl_id), and on all subsequent
- * writes (secondary_dxpl_id). This is useful in the
- * metadata cache, but may not be needed elsewhere. If so,
- * just use the same dxpl_id for both parameters.
- *
- * The primary_dxpl_id is the dxpl_id passed to the
- * check_write_permitted function if such a function has been
- * provided.
- *
- * Observe that this function cannot occasion a read.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 6/2/04
- *
- * Modifications:
- *
- * JRM -- 7/21/04
- * Updated function for the addition of the hash table.
- *
- * JRM -- 10/28/04
- * Added code to set the cache_full flag to TRUE when ever
- * we need to make space in the cache.
- *
- * JRM -- 11/22/04
- * Updated function for the addition of the first_flush_ptr
- * parameter to H5C1_make_space_in_cache().
- *
- * JRM -- 1/6/05
- * Added the flags parameter, and code supporting
- * H5C1__SET_FLUSH_MARKER_FLAG. Note that this flag is
- * ignored unless the new entry is dirty.
- *
- * JRM -- 6/6/05
- * Added code to force all inserted entries to be dirty.
- * This is part of a set of changes moving management of the
- * is_dirty field of H5C1_cache_entry_t into the H5C code.
- *
- * JRM -- 6/24/05
- * Added support for the new write_permitted field of
- * the H5C1_t structure.
- *
- * JRM -- 3/16/06
- * Added initialization for the new is_pinned field of the
- * H5C1_cache_entry_t structure.
- *
- * JRM -- 5/3/06
- * Added initialization for the new dirtied field of the
- * H5C1_cache_entry_t structure.
- *
- * JRM -- 8/9/06
- * Added code supporting insertion of pinned entries.
- *
- * JRM -- 8/21/06
- * Added initialization for the new flush_in_progress and
- * destroy_in_progress fields.
- *
- * JRM -- 3/29/07
- * Added initialization for the new is_read_only and
- * ro_ref_count fields.
- *
- * JRM -- 8/1/07
- * Added code to disable evictions when the new
- * evictions_enabled field is FALSE.
- *
- * JRM -- 12/31/07
- * Added code supporting flash cache size increases.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5C1_insert_entry(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- const H5C1_class_t * type,
- haddr_t addr,
- void * thing,
- unsigned int flags)
-{
- /* const char * fcn_name = "H5C1_insert_entry()"; */
- herr_t result;
- herr_t ret_value = SUCCEED; /* Return value */
- hbool_t first_flush = TRUE;
- hbool_t insert_pinned;
- hbool_t set_flush_marker;
- hbool_t write_permitted = TRUE;
- H5C1_cache_entry_t * entry_ptr;
- H5C1_cache_entry_t * test_entry_ptr;
-
- FUNC_ENTER_NOAPI(H5C1_insert_entry, FAIL)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( cache_ptr->skip_file_checks || f );
- HDassert( type );
- HDassert( type->flush );
- HDassert( type->size );
- HDassert( H5F_addr_defined(addr) );
- HDassert( thing );
-
-#if H5C1_DO_EXTREME_SANITY_CHECKS
- if ( H5C1_verify_not_in_index(cache_ptr, (H5C1_cache_entry_t *)thing) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "thing already in index.\n");
- }
-#endif /* H5C1_DO_SANITY_CHECKS */
-
-#if H5C1_DO_EXTREME_SANITY_CHECKS
- if ( H5C1_validate_lru_list(cache_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
-#endif /* H5C1_DO_EXTREME_SANITY_CHECKS */
-
- set_flush_marker = ( (flags & H5C1__SET_FLUSH_MARKER_FLAG) != 0 );
- insert_pinned = ( (flags & H5C1__PIN_ENTRY_FLAG) != 0 );
-
- entry_ptr = (H5C1_cache_entry_t *)thing;
-#ifndef NDEBUG
- entry_ptr->magic = H5C1__H5C1_CACHE_ENTRY_T_MAGIC;
-#endif /* NDEBUG */
- entry_ptr->addr = addr;
- entry_ptr->type = type;
-
- /* newly inserted entries are assumed to be dirty */
- entry_ptr->is_dirty = TRUE;
-
- /* not protected, so can't be dirtied */
- entry_ptr->dirtied = FALSE;
-
- if ( (type->size)(f, thing, &(entry_ptr->size)) < 0 ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGETSIZE, FAIL, \
- "Can't get size of thing")
- }
-
- HDassert( entry_ptr->size < H5C1_MAX_ENTRY_SIZE );
-
- entry_ptr->in_slist = FALSE;
-
-#ifdef H5_HAVE_PARALLEL
- entry_ptr->clear_on_unprotect = FALSE;
-#endif /* H5_HAVE_PARALLEL */
-
- entry_ptr->flush_in_progress = FALSE;
- entry_ptr->destroy_in_progress = FALSE;
-
- entry_ptr->ht_next = NULL;
- entry_ptr->ht_prev = NULL;
-
- entry_ptr->next = NULL;
- entry_ptr->prev = NULL;
-
- entry_ptr->aux_next = NULL;
- entry_ptr->aux_prev = NULL;
-
- H5C1__RESET_CACHE_ENTRY_STATS(entry_ptr)
-
- if ( ( cache_ptr->flash_size_increase_possible ) &&
- ( entry_ptr->size > cache_ptr->flash_size_increase_threshold ) ) {
-
- result = H5C1__flash_increase_cache_size(cache_ptr, 0, entry_ptr->size);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, \
- "H5C1__flash_increase_cache_size failed.")
- }
- }
-
- if ( ( cache_ptr->evictions_enabled ) &&
- ( (cache_ptr->index_size + entry_ptr->size) >
- cache_ptr->max_cache_size ) ) {
-
- size_t space_needed;
-
- cache_ptr->cache_full = TRUE;
-
- if ( cache_ptr->check_write_permitted != NULL ) {
-
- result = (cache_ptr->check_write_permitted)(f,
- primary_dxpl_id,
- &write_permitted);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, \
- "Can't get write_permitted")
- }
- } else {
-
- write_permitted = cache_ptr->write_permitted;
- }
-
- HDassert( entry_ptr->size <= H5C1_MAX_ENTRY_SIZE );
-
- space_needed = entry_ptr->size;
-
- if ( space_needed > cache_ptr->max_cache_size ) {
-
- space_needed = cache_ptr->max_cache_size;
- }
-
- /* Note that space_needed is just the amount of space that
- * needed to insert the new entry without exceeding the cache
- * size limit. The subsequent call to H5C1_make_space_in_cache()
- * may evict the entries required to free more or less space
- * depending on conditions. It MAY be less if the cache is
- * currently undersized, or more if the cache is oversized.
- *
- * The cache can exceed its maximum size limit via the following
- * mechanisms:
- *
- * First, it is possible for the cache to grow without
- * bound as long as entries are protected and not unprotected.
- *
- * Second, when writes are not permitted it is also possible
- * for the cache to grow without bound.
- *
- * Finally, we usually don't check to see if the cache is
- * oversized at the end of an unprotect. As a result, it is
- * possible to have a vastly oversized cache with no protected
- * entries as long as all the protects preceed the unprotects.
- *
- * Since items 1 and 2 are not changing any time soon, I see
- * no point in worrying about the third.
- */
-
- result = H5C1_make_space_in_cache(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- space_needed,
- write_permitted,
- &first_flush);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, \
- "H5C1_make_space_in_cache failed.")
- }
- }
-
- /* verify that the new entry isn't already in the hash table -- scream
- * and die if it is.
- */
-
- H5C1__SEARCH_INDEX(cache_ptr, addr, test_entry_ptr, FAIL)
-
- if ( test_entry_ptr != NULL ) {
-
- if ( test_entry_ptr == entry_ptr ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, \
- "entry already in cache.")
-
- } else {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, \
- "duplicate entry in cache.")
- }
- }
-
- /* we don't initialize the protected field until here as it is
- * possible that the entry is already in the cache, and already
- * protected. If it is, we don't want to make things worse by
- * marking it unprotected.
- */
-
- entry_ptr->is_protected = FALSE;
- entry_ptr->is_read_only = FALSE;
- entry_ptr->ro_ref_count = 0;
-
- entry_ptr->is_pinned = insert_pinned;
-
- H5C1__INSERT_IN_INDEX(cache_ptr, entry_ptr, FAIL)
-
- /* New entries are presumed to be dirty, so this if statement is
- * unnecessary. Rework it once the rest of the code changes are
- * in and tested. -- JRM
- */
- if ( entry_ptr->is_dirty ) {
-
- entry_ptr->flush_marker = set_flush_marker;
- H5C1__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr, FAIL)
-
- } else {
-
- entry_ptr->flush_marker = FALSE;
- }
-
- H5C1__UPDATE_RP_FOR_INSERTION(cache_ptr, entry_ptr, FAIL)
-
-#if H5C1_DO_EXTREME_SANITY_CHECKS
- if ( H5C1_validate_lru_list(cache_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
-#endif /* H5C1_DO_EXTREME_SANITY_CHECKS */
-
- H5C1__UPDATE_STATS_FOR_INSERTION(cache_ptr, entry_ptr)
-
-done:
-
-#if H5C1_DO_EXTREME_SANITY_CHECKS
- if ( H5C1_validate_lru_list(cache_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
-#endif /* H5C1_DO_EXTREME_SANITY_CHECKS */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_insert_entry() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1_mark_entries_as_clean
- *
- * Purpose: When the H5C code is used to implement the metadata caches
- * in PHDF5, only the cache with MPI_rank 0 is allowed to
- * actually write entries to disk -- all other caches must
- * retain dirty entries until they are advised that the
- * entries are clean.
- *
- * This function exists to allow the H5C code to receive these
- * notifications.
- *
- * The function receives a list of entry base addresses
- * which must refer to dirty entries in the cache. If any
- * of the entries are either clean or don't exist, the
- * function flags an error.
- *
- * The function scans the list of entries and flushes all
- * those that are currently unprotected with the
- * H5C1__FLUSH_CLEAR_ONLY_FLAG. Those that are currently
- * protected are flagged for clearing when they are
- * unprotected.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 7/5/05
- *
- * Modifications:
- *
- * Reworked function to flush entries in LRU order instead
- * of increasing address order. The hope is that this will
- * improve the hit rate on the slave caches.
- *
- * JRM - 10/13/05
- *
- * Leave the old code in place for now (commented out) for
- * benchmarking.
- *
- * JRM -- 4/13/06
- * Updated function to deal with pinned entries.
- *
- *-------------------------------------------------------------------------
- */
-
-#ifdef H5_HAVE_PARALLEL
-herr_t
-H5C1_mark_entries_as_clean(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- int32_t ce_array_len,
- haddr_t * ce_array_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- hbool_t first_flush = TRUE;
- int entries_cleared;
- int entries_examined;
- int i;
- int initial_list_len;
- haddr_t addr;
-#if H5C1_DO_SANITY_CHECKS
- int pinned_entries_marked = 0;
- int protected_entries_marked = 0;
- int other_entries_marked = 0;
- haddr_t last_addr;
-#endif /* H5C1_DO_SANITY_CHECKS */
- H5C1_cache_entry_t * clear_ptr = NULL;
- H5C1_cache_entry_t * entry_ptr = NULL;
-
- FUNC_ENTER_NOAPI(H5C1_mark_entries_as_clean, FAIL)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( cache_ptr->skip_file_checks || f );
-
- HDassert( ce_array_len > 0 );
- HDassert( ce_array_ptr != NULL );
-
-#if H5C1_DO_EXTREME_SANITY_CHECKS
- if ( H5C1_validate_lru_list(cache_ptr) < 0 ) {
-
- HDassert(0);
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
-#endif /* H5C1_DO_EXTREME_SANITY_CHECKS */
-
- for ( i = 0; i < ce_array_len; i++ )
- {
- addr = ce_array_ptr[i];
-
-#if H5C1_DO_SANITY_CHECKS
- if ( i == 0 ) {
-
- last_addr = addr;
-
- } else {
-
- if ( last_addr == addr ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Duplicate entry in cleaned list.\n");
-
- } else if ( last_addr > addr ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "cleaned list not sorted.\n");
- }
- }
-
-#if H5C1_DO_EXTREME_SANITY_CHECKS
- if ( H5C1_validate_lru_list(cache_ptr) < 0 ) {
-
- HDassert(0);
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
-#endif /* H5C1_DO_EXTREME_SANITY_CHECKS */
-#endif /* H5C1_DO_SANITY_CHECKS */
-
- HDassert( H5F_addr_defined(addr) );
-
- H5C1__SEARCH_INDEX(cache_ptr, addr, entry_ptr, FAIL)
-
- if ( entry_ptr == NULL ) {
-#if H5C1_DO_SANITY_CHECKS
- HDfprintf(stdout,
- "H5C1_mark_entries_as_clean: entry[%d] = %ld not in cache.\n",
- (int)i,
- (long)addr);
-#endif /* H5C1_DO_SANITY_CHECKS */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Listed entry not in cache?!?!?.")
-
- } else if ( ! entry_ptr->is_dirty ) {
-
-#if H5C1_DO_SANITY_CHECKS
- HDfprintf(stdout,
- "H5C1_mark_entries_as_clean: entry %ld is not dirty!?!\n",
- (long)addr);
-#endif /* H5C1_DO_SANITY_CHECKS */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Listed entry not dirty?!?!?.")
-#if 0 /* original code */
- } else if ( entry_ptr->is_protected ) {
-
- entry_ptr->clear_on_unprotect = TRUE;
-
- } else {
-
- if ( H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- entry_ptr->type,
- addr,
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- &first_flush,
- TRUE) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't clear entry.")
- }
- }
-#else /* modified code */
- } else {
- /* Mark the entry to be cleared on unprotect. We will
- * scan the LRU list shortly, and clear all those entries
- * not currently protected.
- */
- entry_ptr->clear_on_unprotect = TRUE;
-#if H5C1_DO_SANITY_CHECKS
- if ( entry_ptr->is_protected ) {
-
- protected_entries_marked++;
-
- } else if ( entry_ptr->is_pinned ) {
-
- pinned_entries_marked++;
-
- } else {
-
- other_entries_marked++;
- }
-#endif /* H5C1_DO_SANITY_CHECKS */
- }
-#endif /* end modified code */
- }
-#if 1 /* modified code */
- /* Scan through the LRU list from back to front, and flush the
- * entries whose clear_on_unprotect flags are set. Observe that
- * any protected entries will not be on the LRU, and therefore
- * will not be flushed at this time.
- */
-
- entries_cleared = 0;
- entries_examined = 0;
- initial_list_len = cache_ptr->LRU_list_len;
- entry_ptr = cache_ptr->LRU_tail_ptr;
-
- while ( ( entry_ptr != NULL ) &&
- ( entries_examined <= initial_list_len ) &&
- ( entries_cleared < ce_array_len ) )
- {
- if ( entry_ptr->clear_on_unprotect ) {
-
- entry_ptr->clear_on_unprotect = FALSE;
- clear_ptr = entry_ptr;
- entry_ptr = entry_ptr->prev;
- entries_cleared++;
-
- if ( H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- clear_ptr->type,
- clear_ptr->addr,
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- &first_flush,
- TRUE) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't clear entry.")
- }
- } else {
-
- entry_ptr = entry_ptr->prev;
- }
- entries_examined++;
- }
-
-#if H5C1_DO_SANITY_CHECKS
- HDassert( entries_cleared == other_entries_marked );
-#endif /* H5C1_DO_SANITY_CHECKS */
-
- /* It is also possible that some of the cleared entries are on the
- * pinned list. Must scan that also.
- */
-
- entry_ptr = cache_ptr->pel_head_ptr;
-
- while ( entry_ptr != NULL )
- {
- if ( entry_ptr->clear_on_unprotect ) {
-
- entry_ptr->clear_on_unprotect = FALSE;
- clear_ptr = entry_ptr;
- entry_ptr = entry_ptr->next;
- entries_cleared++;
-
- if ( H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- clear_ptr->type,
- clear_ptr->addr,
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- &first_flush,
- TRUE) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't clear entry.")
- }
- } else {
-
- entry_ptr = entry_ptr->next;
- }
- }
-
-#if H5C1_DO_SANITY_CHECKS
- HDassert( entries_cleared == pinned_entries_marked + other_entries_marked );
- HDassert( entries_cleared + protected_entries_marked == ce_array_len );
-#endif /* H5C1_DO_SANITY_CHECKS */
-
- HDassert( ( entries_cleared == ce_array_len ) ||
- ( (ce_array_len - entries_cleared) <= cache_ptr->pl_len ) );
-
-#if H5C1_DO_SANITY_CHECKS
- i = 0;
- entry_ptr = cache_ptr->pl_head_ptr;
- while ( entry_ptr != NULL )
- {
- if ( entry_ptr->clear_on_unprotect ) {
-
- i++;
- }
- entry_ptr = entry_ptr->next;
- }
- HDassert( (entries_cleared + i) == ce_array_len );
-#endif /* H5C1_DO_SANITY_CHECKS */
-#endif /* modified code */
-
-done:
-
-#if H5C1_DO_EXTREME_SANITY_CHECKS
- if ( H5C1_validate_lru_list(cache_ptr) < 0 ) {
-
- HDassert(0);
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
-#endif /* H5C1_DO_EXTREME_SANITY_CHECKS */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_mark_entries_as_clean() */
-#endif /* H5_HAVE_PARALLEL */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_mark_pinned_entry_dirty
- *
- * Purpose: Mark a pinned entry as dirty. The target entry MUST be
- * be pinned, and MUST be unprotected.
- *
- * If the entry has changed size, the function updates
- * data structures for the size change.
- *
- * If the entry is not already dirty, the function places
- * the entry on the skip list.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 3/22/06
- *
- * Modifications:
- *
- * Added code to do a flash cache size increase if
- * appropriate.
- * JRM -- 1/11/08
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5C1_mark_pinned_entry_dirty(H5C1_t * cache_ptr,
- void * thing,
- hbool_t size_changed,
- size_t new_size)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- herr_t result;
- size_t size_increase;
- H5C1_cache_entry_t * entry_ptr;
-
- FUNC_ENTER_NOAPI(H5C1_mark_pinned_entry_dirty, FAIL)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( thing );
- HDassert( ( size_changed == TRUE ) || ( size_changed == FALSE ) );
-
- entry_ptr = (H5C1_cache_entry_t *)thing;
-
- if ( ! ( entry_ptr->is_pinned ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, \
- "Entry isn't pinned??")
- }
-
- if ( entry_ptr->is_protected ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, \
- "Entry is protected??")
- }
-
- /* mark the entry as dirty if it isn't already */
- entry_ptr->is_dirty = TRUE;
-
- /* update for change in entry size if necessary */
- if ( ( size_changed ) && ( entry_ptr->size != new_size ) ) {
-
- /* do a flash cache size increase if appropriate */
- if ( cache_ptr->flash_size_increase_possible ) {
-
- if ( new_size > entry_ptr->size ) {
-
- size_increase = new_size - entry_ptr->size;
-
- if ( size_increase >=
- cache_ptr->flash_size_increase_threshold ) {
-
- result = H5C1__flash_increase_cache_size(cache_ptr,
- entry_ptr->size,
- new_size);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "H5C1__flash_increase_cache_size failed.")
- }
- }
- }
- }
-
- /* update the protected entry list */
- H5C1__DLL_UPDATE_FOR_SIZE_CHANGE((cache_ptr->pel_len), \
- (cache_ptr->pel_size), \
- (entry_ptr->size), (new_size));
-
- /* update the hash table */
- H5C1__UPDATE_INDEX_FOR_SIZE_CHANGE((cache_ptr), (entry_ptr->size),\
- (new_size));
-
- /* if the entry is in the skip list, update that too */
- if ( entry_ptr->in_slist ) {
-
- H5C1__UPDATE_SLIST_FOR_SIZE_CHANGE((cache_ptr), (entry_ptr->size),\
- (new_size));
- }
-
- /* update statistics just before changing the entry size */
- H5C1__UPDATE_STATS_FOR_ENTRY_SIZE_CHANGE((cache_ptr), (entry_ptr), \
- (new_size));
-
- /* finally, update the entry size proper */
- entry_ptr->size = new_size;
- }
-
- if ( ! (entry_ptr->in_slist) ) {
-
- H5C1__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr, FAIL)
- }
-
- H5C1__UPDATE_STATS_FOR_DIRTY_PIN(cache_ptr, entry_ptr)
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_mark_pinned_entry_dirty() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_mark_pinned_or_protected_entry_dirty
- *
- * Purpose: Mark a pinned or protected entry as dirty. The target entry
- * MUST be either pinned or protected, and MAY be both.
- *
- * At present, this funtion does not support size change.
- *
- * In the protected case, this call is the functional
- * equivalent of setting the H5C1__DIRTIED_FLAG on an unprotect
- * call.
- *
- * In the pinned but not protected case, if the entry is not
- * already dirty, the function places function marks the entry
- * dirty and places it on the skip list.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 5/15/06
- *
- * Modifications:
- *
- * JRM -- 3/29/07
- * Added sanity check to verify that the pinned entry
- * is not protected read only.
- *
- * This sanity check is commented out for now -- uncomment
- * it once we deal with the problem of entries being protected
- * read only, and then dirtied.
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5C1_mark_pinned_or_protected_entry_dirty(H5C1_t * cache_ptr,
- void * thing)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- H5C1_cache_entry_t * entry_ptr;
-
- FUNC_ENTER_NOAPI(H5C1_mark_pinned_or_protected_entry_dirty, FAIL)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( thing );
-
- entry_ptr = (H5C1_cache_entry_t *)thing;
-
- if ( entry_ptr->is_protected ) {
-#if 0 /* JRM - uncomment this when possible */
- HDassert( ! ((entry_ptr)->is_read_only) );
-#endif
- /* set the dirtied flag */
- entry_ptr->dirtied = TRUE;
-
- } else if ( entry_ptr->is_pinned ) {
-
- /* mark the entry as dirty if it isn't already */
- entry_ptr->is_dirty = TRUE;
-
-
- if ( ! (entry_ptr->in_slist) ) {
-
- H5C1__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr, FAIL)
- }
-
- H5C1__UPDATE_STATS_FOR_DIRTY_PIN(cache_ptr, entry_ptr)
-
- } else {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, \
- "Entry is neither pinned nor protected??")
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_mark_pinned_or_protected_entry_dirty() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1_rename_entry
- *
- * Purpose: Use this function to notify the cache that an entry's
- * file address changed.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 6/2/04
- *
- * Modifications:
- *
- * JRM -- 7/21/04
- * Updated function for the addition of the hash table.
- *
- * JRM -- 6/6/05
- * Updated function to force all renamed entries to be
- * dirty. This is part of a series of code modifications
- * moving management of the is_dirty field of
- * H5C1_cache_entry_t into the H5C code.
- *
- * JRM -- 4/3/06
- * Updated function to disallow renaming of pinned entries.
- *
- * JRM -- 4/27/06
- * Updated function to support renaming of pinned entries.
- *
- * JRM -- 8/24/06
- * Updated function to refrain from alterning the index, the
- * replacement policy data structures, and skip list when
- * the function is called within the flush callback for the
- * target entry and the target entry is being destroyed.
- *
- * Note that in this case H5C1_flush_single_entry() will handle
- * all these details for us.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5C1_rename_entry(H5C1_t * cache_ptr,
- const H5C1_class_t * type,
- haddr_t old_addr,
- haddr_t new_addr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- hbool_t was_dirty;
- H5C1_cache_entry_t * entry_ptr = NULL;
- H5C1_cache_entry_t * test_entry_ptr = NULL;
-#if H5C1_DO_SANITY_CHECKS
- hbool_t removed_entry_from_slist = FALSE;
-#endif /* H5C1_DO_SANITY_CHECKS */
-
- FUNC_ENTER_NOAPI(H5C1_rename_entry, FAIL)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( type );
- HDassert( H5F_addr_defined(old_addr) );
- HDassert( H5F_addr_defined(new_addr) );
- HDassert( H5F_addr_ne(old_addr, new_addr) );
-
-#if H5C1_DO_EXTREME_SANITY_CHECKS
- if ( H5C1_validate_lru_list(cache_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
-#endif /* H5C1_DO_EXTREME_SANITY_CHECKS */
-
- H5C1__SEARCH_INDEX(cache_ptr, old_addr, entry_ptr, FAIL)
-
- if ( ( entry_ptr == NULL ) || ( entry_ptr->type != type ) ) {
-
- /* the old item doesn't exist in the cache, so we are done. */
- HGOTO_DONE(SUCCEED)
- }
-
- HDassert( entry_ptr->addr == old_addr );
- HDassert( entry_ptr->type == type );
-
- if ( entry_ptr->is_protected ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTRENAME, FAIL, \
- "Target entry is protected.")
- }
-
- H5C1__SEARCH_INDEX(cache_ptr, new_addr, test_entry_ptr, FAIL)
-
- if ( test_entry_ptr != NULL ) { /* we are hosed */
-
- if ( test_entry_ptr->type == type ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTRENAME, FAIL, \
- "Target already renamed & reinserted???.")
-
- } else {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTRENAME, FAIL, \
- "New address already in use?.")
-
- }
- }
-
- /* If we get this far we have work to do. Remove *entry_ptr from
- * the hash table (and skip list if necessary), change its address to the
- * new address, mark it as dirty (if it isn't already) and then re-insert.
- *
- * Update the replacement policy for a hit to avoid an eviction before
- * the renamed entry is touched. Update stats for a rename.
- *
- * Note that we do not check the size of the cache, or evict anything.
- * Since this is a simple re-name, cache size should be unaffected.
- *
- * Check to see if the target entry is in the process of being destroyed
- * before we delete from the index, etc. If it is, all we do is
- * change the addr. If the entry is only in the process of being flushed,
- * don't mark it as dirty either, lest we confuse the flush call back.
- */
-
- if ( ! ( entry_ptr->destroy_in_progress ) ) {
-
- H5C1__DELETE_FROM_INDEX(cache_ptr, entry_ptr)
-
- if ( entry_ptr->in_slist ) {
-
- HDassert( cache_ptr->slist_ptr );
-
- H5C1__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr)
-
-#if H5C1_DO_SANITY_CHECKS
-
- removed_entry_from_slist = TRUE;
-
-#endif /* H5C1_DO_SANITY_CHECKS */
- }
- }
-
- entry_ptr->addr = new_addr;
-
- if ( ! ( entry_ptr->destroy_in_progress ) ) {
-
- was_dirty = entry_ptr->is_dirty;
-
- if ( ! ( entry_ptr->flush_in_progress ) ) {
-
- entry_ptr->is_dirty = TRUE;
- }
-
- H5C1__INSERT_IN_INDEX(cache_ptr, entry_ptr, FAIL)
-
- if ( ! ( entry_ptr->flush_in_progress ) ) {
-
- H5C1__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr, FAIL)
-
-#if H5C1_DO_SANITY_CHECKS
-
- if ( removed_entry_from_slist ) {
-
- /* we just removed the entry from the slist. Thus we
- * must touch up cache_ptr->slist_len_increase and
- * cache_ptr->slist_size_increase to keep from skewing
- * the sanity checks.
- */
- HDassert( cache_ptr->slist_len_increase > 1 );
- HDassert( cache_ptr->slist_size_increase > entry_ptr->size );
-
- cache_ptr->slist_len_increase -= 1;
- cache_ptr->slist_size_increase -= entry_ptr->size;
- }
-
-#endif /* H5C1_DO_SANITY_CHECKS */
-
- H5C1__UPDATE_RP_FOR_RENAME(cache_ptr, entry_ptr, was_dirty, FAIL)
- }
- }
-
- H5C1__UPDATE_STATS_FOR_RENAME(cache_ptr, entry_ptr)
-
-done:
-
-#if H5C1_DO_EXTREME_SANITY_CHECKS
- if ( H5C1_validate_lru_list(cache_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
-#endif /* H5C1_DO_EXTREME_SANITY_CHECKS */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_rename_entry() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_resize_pinned_entry
- *
- * Purpose: Resize a pinned entry. The target entry MUST be
- * be pinned, and MUST not be unprotected.
- *
- * Resizing an entry dirties it, so if the entry is not
- * already dirty, the function places the entry on the
- * skip list.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 7/5/06
- *
- * Modifications:
- *
- * Added code to apply a flash cache size increment if
- * appropriate.
- * JRM -- 1/11/08
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5C1_resize_pinned_entry(H5C1_t * cache_ptr,
- void * thing,
- size_t new_size)
-{
- /* const char * fcn_name = "H5C1_resize_pinned_entry()"; */
- herr_t ret_value = SUCCEED; /* Return value */
- herr_t result;
- H5C1_cache_entry_t * entry_ptr;
- size_t size_increase;
-
- FUNC_ENTER_NOAPI(H5C1_resize_pinned_entry, FAIL)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( thing );
-
- entry_ptr = (H5C1_cache_entry_t *)thing;
-
- if ( new_size <= 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTRESIZE, FAIL, \
- "New size is non-positive.")
- }
-
- if ( ! ( entry_ptr->is_pinned ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTRESIZE, FAIL, \
- "Entry isn't pinned??")
- }
-
- if ( entry_ptr->is_protected ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTRESIZE, FAIL, \
- "Entry is protected??")
- }
-
- /* resizing dirties entries -- mark the entry as dirty if it
- * isn't already
- */
- entry_ptr->is_dirty = TRUE;
-
- /* update for change in entry size if necessary */
- if ( entry_ptr->size != new_size ) {
-
- /* do a flash cache size increase if appropriate */
- if ( cache_ptr->flash_size_increase_possible ) {
-
- if ( new_size > entry_ptr->size ) {
-
- size_increase = new_size - entry_ptr->size;
-
- if ( size_increase >=
- cache_ptr->flash_size_increase_threshold ) {
-
- result = H5C1__flash_increase_cache_size(cache_ptr,
- entry_ptr->size,
- new_size);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "H5C1__flash_increase_cache_size failed.")
- }
- }
- }
- }
-
- /* update the protected entry list */
- H5C1__DLL_UPDATE_FOR_SIZE_CHANGE((cache_ptr->pel_len), \
- (cache_ptr->pel_size), \
- (entry_ptr->size), (new_size));
-
- /* update the hash table */
- H5C1__UPDATE_INDEX_FOR_SIZE_CHANGE((cache_ptr), (entry_ptr->size),\
- (new_size));
-
- /* if the entry is in the skip list, update that too */
- if ( entry_ptr->in_slist ) {
-
- H5C1__UPDATE_SLIST_FOR_SIZE_CHANGE((cache_ptr), (entry_ptr->size),\
- (new_size));
- }
-
- /* update statistics just before changing the entry size */
- H5C1__UPDATE_STATS_FOR_ENTRY_SIZE_CHANGE((cache_ptr), (entry_ptr), \
- (new_size));
-
- /* finally, update the entry size proper */
- entry_ptr->size = new_size;
- }
-
- if ( ! (entry_ptr->in_slist) ) {
-
- H5C1__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr, FAIL)
- }
-
- H5C1__UPDATE_STATS_FOR_DIRTY_PIN(cache_ptr, entry_ptr)
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_resize_pinned_entry() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_pin_protected_entry()
- *
- * Purpose: Pin a protected cache entry. The entry must be protected
- * at the time of call, and must be unpinned.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 4/26/06
- *
- * Modifications:
- *
- * JRM -- 4/26/06
- * Modified routine to allow it to operate on protected
- * entries.
- *
- * JRM -- 2/16/07
- * Added conditional compile to avoid unused parameter
- * warning in production compile.
- *
- * JRM -- 4/4/07
- * Fixed typo -- canged macro call to
- * H5C1__UPDATE_STATS_FOR_UNPIN to call to
- * H5C1__UPDATE_STATS_FOR_PIN.
- *
- *-------------------------------------------------------------------------
- */
-#ifndef NDEBUG
-herr_t
-H5C1_pin_protected_entry(H5C1_t * cache_ptr,
- void * thing)
-#else
-herr_t
-H5C1_pin_protected_entry(H5C1_t UNUSED * cache_ptr,
- void * thing)
-#endif
-{
- herr_t ret_value = SUCCEED; /* Return value */
- H5C1_cache_entry_t * entry_ptr;
-
- FUNC_ENTER_NOAPI(H5C1_pin_protected_entry, FAIL)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( thing );
-
- entry_ptr = (H5C1_cache_entry_t *)thing;
-
- HDassert( H5F_addr_defined(entry_ptr->addr) );
-
- if ( ! ( entry_ptr->is_protected ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTPIN, FAIL, "Entry isn't protected")
- }
-
- if ( entry_ptr->is_pinned ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTPIN, FAIL, "Entry is already pinned")
- }
-
- entry_ptr->is_pinned = TRUE;
-
- H5C1__UPDATE_STATS_FOR_PIN(cache_ptr, entry_ptr)
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_pin_protected_entry() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_protect
- *
- * Purpose: If the target entry is not in the cache, load it. If
- * necessary, attempt to evict one or more entries to keep
- * the cache within its maximum size.
- *
- * Mark the target entry as protected, and return its address
- * to the caller. The caller must call H5C1_unprotect() when
- * finished with the entry.
- *
- * While it is protected, the entry may not be either evicted
- * or flushed -- nor may it be accessed by another call to
- * H5C1_protect. Any attempt to do so will result in a failure.
- *
- * The primary_dxpl_id and secondary_dxpl_id parameters
- * specify the dxpl_ids used on the first write occasioned
- * by the insertion (primary_dxpl_id), and on all subsequent
- * writes (secondary_dxpl_id). This is useful in the
- * metadata cache, but may not be needed elsewhere. If so,
- * just use the same dxpl_id for both parameters.
- *
- * All reads are performed with the primary_dxpl_id.
- *
- * Similarly, the primary_dxpl_id is passed to the
- * check_write_permitted function if it is called.
- *
- * Return: Success: Ptr to the desired entry
- *
- * Failure: NULL
- *
- * Programmer: John Mainzer - 6/2/04
- *
- * Modifications:
- *
- * JRM -- 7/21/04
- * Updated for the addition of the hash table.
- *
- * JRM -- 10/28/04
- * Added code to set cache_full to TRUE whenever we try to
- * make space in the cache.
- *
- * JRM -- 11/12/04
- * Added code to call to H5C1_make_space_in_cache() after the
- * call to H5C1__auto_adjust_cache_size() if that function
- * sets the size_decreased flag is TRUE.
- *
- * JRM -- 4/25/05
- * The size_decreased flag can also be set to TRUE in
- * H5C1_set_cache_auto_resize_config() if a new configuration
- * forces an immediate reduction in cache size. Modified
- * the code to deal with this eventuallity.
- *
- * JRM -- 6/24/05
- * Added support for the new write_permitted field of H5C1_t.
- *
- * JRM -- 10/22/05
- * Hand optimizations.
- *
- * JRM -- 5/3/06
- * Added code to set the new dirtied field in
- * H5C1_cache_entry_t to FALSE prior to return.
- *
- * JRM -- 6/23/06
- * Modified code to allow dirty entries to be loaded from
- * disk. This is necessary as a bug fix in the object
- * header code requires us to modify a header as it is read.
- *
- * JRM -- 3/28/07
- * Added the flags parameter and supporting code. At least
- * for now, this parameter is used to allow the entry to
- * be protected read only, thus allowing multiple protects.
- *
- * Also added code to allow multiple read only protects
- * of cache entries.
- *
- * JRM -- 7/27/07
- * Added code supporting the new evictions_enabled field
- * in H5C1_t.
- *
- * JRM -- 1/3/08
- * Added to do a flash cache size increase if appropriate
- * when a large entry is loaded.
- *
- *-------------------------------------------------------------------------
- */
-
-void *
-H5C1_protect(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- const H5C1_class_t * type,
- haddr_t addr,
- const void * udata1,
- void * udata2,
- unsigned flags)
-{
- /* const char * fcn_name = "H5C1_protect()"; */
- hbool_t hit;
- hbool_t first_flush;
- hbool_t have_write_permitted = FALSE;
- hbool_t read_only = FALSE;
- hbool_t write_permitted;
- herr_t result;
- void * thing;
- H5C1_cache_entry_t * entry_ptr;
- void * ret_value; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_protect, NULL)
-
- /* check args */
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( cache_ptr->skip_file_checks || f );
- HDassert( type );
- HDassert( type->flush );
- HDassert( type->load );
- HDassert( H5F_addr_defined(addr) );
-
-#if H5C1_DO_EXTREME_SANITY_CHECKS
- if ( H5C1_validate_lru_list(cache_ptr) < 0 ) {
-
- HDassert(0);
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, NULL, \
- "LRU sanity check failed.\n");
- }
-#endif /* H5C1_DO_EXTREME_SANITY_CHECKS */
-
- if ( (flags & H5C1__READ_ONLY_FLAG) != 0 )
- {
- read_only = TRUE;
- }
-
- /* first check to see if the target is in cache */
- H5C1__SEARCH_INDEX(cache_ptr, addr, entry_ptr, NULL)
-
- if ( entry_ptr != NULL ) {
-
- hit = TRUE;
- thing = (void *)entry_ptr;
-
- } else { /* must try to load the entry from disk. */
-
- hit = FALSE;
-
- thing = H5C1_load_entry(f, primary_dxpl_id, type, addr, udata1, udata2,
- cache_ptr->skip_file_checks);
-
- if ( thing == NULL ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, NULL, "can't load entry")
- }
-
- entry_ptr = (H5C1_cache_entry_t *)thing;
-
- /* If the entry is very large, and we are configured to allow it,
- * we may wish to perform a flash cache size increase.
- */
- if ( ( cache_ptr->flash_size_increase_possible ) &&
- ( entry_ptr->size > cache_ptr->flash_size_increase_threshold ) ) {
-
- result = H5C1__flash_increase_cache_size(cache_ptr, 0,
- entry_ptr->size);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTPROTECT, NULL, \
- "H5C1__flash_increase_cache_size failed.")
- }
- }
-
- /* try to free up some space if necessary and if evictions are
- * permitted
- */
- if ( ( cache_ptr->evictions_enabled ) &&
- ( (cache_ptr->index_size + entry_ptr->size) >
- cache_ptr->max_cache_size ) ) {
-
- size_t space_needed;
-
- cache_ptr->cache_full = TRUE;
-
- if ( cache_ptr->check_write_permitted != NULL ) {
-
- result = (cache_ptr->check_write_permitted)(f,
- primary_dxpl_id,
- &write_permitted);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTPROTECT, NULL, \
- "Can't get write_permitted 1")
-
- } else {
-
- have_write_permitted = TRUE;
-
- first_flush = TRUE;
- }
- } else {
-
- write_permitted = cache_ptr->write_permitted;
-
- have_write_permitted = TRUE;
-
- first_flush = TRUE;
- }
-
- HDassert( entry_ptr->size <= H5C1_MAX_ENTRY_SIZE );
-
- space_needed = entry_ptr->size;
-
- if ( space_needed > cache_ptr->max_cache_size ) {
-
- space_needed = cache_ptr->max_cache_size;
- }
-
- /* Note that space_needed is just the amount of space that
- * needed to insert the new entry without exceeding the cache
- * size limit. The subsequent call to H5C1_make_space_in_cache()
- * may evict the entries required to free more or less space
- * depending on conditions. It MAY be less if the cache is
- * currently undersized, or more if the cache is oversized.
- *
- * The cache can exceed its maximum size limit via the following
- * mechanisms:
- *
- * First, it is possible for the cache to grow without
- * bound as long as entries are protected and not unprotected.
- *
- * Second, when writes are not permitted it is also possible
- * for the cache to grow without bound.
- *
- * Finally, we usually don't check to see if the cache is
- * oversized at the end of an unprotect. As a result, it is
- * possible to have a vastly oversized cache with no protected
- * entries as long as all the protects preceed the unprotects.
- *
- * Since items 1 and 2 are not changing any time soon, I see
- * no point in worrying about the third.
- */
-
- result = H5C1_make_space_in_cache(f, primary_dxpl_id,
- secondary_dxpl_id, cache_ptr,
- space_needed, write_permitted,
- &first_flush);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTPROTECT, NULL, \
- "H5C1_make_space_in_cache failed 1.")
- }
- }
-
- /* Insert the entry in the hash table. It can't be dirty yet, so
- * we don't even check to see if it should go in the skip list.
- *
- * This is no longer true -- due to a bug fix, we may modify
- * data on load to repair a file.
- */
- H5C1__INSERT_IN_INDEX(cache_ptr, entry_ptr, NULL)
-
- if ( ( entry_ptr->is_dirty ) && ( ! (entry_ptr->in_slist) ) ) {
-
- H5C1__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr, NULL)
- }
-
- /* insert the entry in the data structures used by the replacement
- * policy. We are just going to take it out again when we update
- * the replacement policy for a protect, but this simplifies the
- * code. If we do this often enough, we may want to optimize this.
- */
- H5C1__UPDATE_RP_FOR_INSERTION(cache_ptr, entry_ptr, NULL)
- }
-
- HDassert( entry_ptr->addr == addr );
- HDassert( entry_ptr->type == type );
-
- if ( entry_ptr->is_protected ) {
-
- if ( ( read_only ) && ( entry_ptr->is_read_only ) ) {
-
- HDassert( entry_ptr->ro_ref_count > 0 );
-
- (entry_ptr->ro_ref_count)++;
-
- } else {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTPROTECT, NULL, \
- "Target already protected & not read only?!?.")
- }
- } else {
-
- H5C1__UPDATE_RP_FOR_PROTECT(cache_ptr, entry_ptr, NULL)
-
- entry_ptr->is_protected = TRUE;
-
- if ( read_only ) {
-
- entry_ptr->is_read_only = TRUE;
- entry_ptr->ro_ref_count = 1;
- }
-
- entry_ptr->dirtied = FALSE;
- }
-
- H5C1__UPDATE_CACHE_HIT_RATE_STATS(cache_ptr, hit)
-
- H5C1__UPDATE_STATS_FOR_PROTECT(cache_ptr, entry_ptr, hit)
-
- ret_value = thing;
-
- if ( ( cache_ptr->evictions_enabled ) &&
- ( ( cache_ptr->size_decreased ) ||
- ( ( cache_ptr->resize_enabled ) &&
- ( cache_ptr->cache_accesses >=
- (cache_ptr->resize_ctl).epoch_length ) ) ) ) {
-
- if ( ! have_write_permitted ) {
-
- if ( cache_ptr->check_write_permitted != NULL ) {
-
- result = (cache_ptr->check_write_permitted)(f,
- primary_dxpl_id,
- &write_permitted);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTPROTECT, NULL, \
- "Can't get write_permitted 2")
-
- } else {
-
- have_write_permitted = TRUE;
-
- first_flush = TRUE;
- }
- } else {
-
- write_permitted = cache_ptr->write_permitted;
-
- have_write_permitted = TRUE;
-
- first_flush = TRUE;
- }
- }
-
- if ( ( cache_ptr->resize_enabled ) &&
- ( cache_ptr->cache_accesses >=
- (cache_ptr->resize_ctl).epoch_length ) ) {
-
- result = H5C1__auto_adjust_cache_size(cache_ptr,
- f,
- primary_dxpl_id,
- secondary_dxpl_id,
- write_permitted,
- &first_flush);
- if ( result != SUCCEED ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTPROTECT, NULL, \
- "Cache auto-resize failed.")
- }
- }
-
- if ( cache_ptr->size_decreased ) {
-
- cache_ptr->size_decreased = FALSE;
-
- /* check to see if the cache is now oversized due to the cache
- * size reduction. If it is, try to evict enough entries to
- * bring the cache size down to the current maximum cache size.
- */
- if ( cache_ptr->index_size > cache_ptr->max_cache_size ) {
-
- cache_ptr->cache_full = TRUE;
-
- result = H5C1_make_space_in_cache(f, primary_dxpl_id,
- secondary_dxpl_id, cache_ptr,
- (size_t)0, write_permitted,
- &first_flush);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTPROTECT, NULL, \
- "H5C1_make_space_in_cache failed 2.")
- }
- }
- }
- }
-
-done:
-
-#if H5C1_DO_EXTREME_SANITY_CHECKS
- if ( H5C1_validate_lru_list(cache_ptr) < 0 ) {
-
- HDassert(0);
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, NULL, \
- "LRU sanity check failed.\n");
- }
-#endif /* H5C1_DO_EXTREME_SANITY_CHECKS */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_protect() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1_reset_cache_hit_rate_stats()
- *
- * Purpose: Reset the cache hit rate computation fields.
- *
- * Return: SUCCEED on success, and FAIL on failure.
- *
- * Programmer: John Mainzer, 10/5/04
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5C1_reset_cache_hit_rate_stats(H5C1_t * cache_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_reset_cache_hit_rate_stats, FAIL)
-
- if ( ( cache_ptr == NULL ) || ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr on entry.")
- }
-
- cache_ptr->cache_hits = 0;
- cache_ptr->cache_accesses = 0;
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_reset_cache_hit_rate_stats() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_set_cache_auto_resize_config
- *
- * Purpose: Set the cache automatic resize configuration to the
- * provided values if they are in range, and fail if they
- * are not.
- *
- * If the new configuration enables automatic cache resizing,
- * coerce the cache max size and min clean size into agreement
- * with the new policy and re-set the full cache hit rate
- * stats.
- *
- * Return: SUCCEED on success, and FAIL on failure.
- *
- * Programmer: John Mainzer
- * 10/8/04
- *
- * Modifications:
- *
- * JRM -- 11/18/04
- * Reworked function to match major changes in
- * H5C1_auto_size_ctl_t.
- *
- * JRM -- 4/25/05
- * Added code to set cache_ptr->size_decreased to TRUE
- * if the new configuration forces an immediate reduction
- * in cache size.
- *
- * JRM -- 12/31/07
- * Added code supporting the new flash cache size increase
- * code.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5C1_set_cache_auto_resize_config(H5C1_t * cache_ptr,
- H5C1_auto_size_ctl_t *config_ptr)
-{
- /* const char *fcn_name = "H5C1_set_cache_auto_resize_config()"; */
- herr_t ret_value = SUCCEED; /* Return value */
- herr_t result;
- size_t new_max_cache_size;
- size_t new_min_clean_size;
-
- FUNC_ENTER_NOAPI(H5C1_set_cache_auto_resize_config, FAIL)
-
- if ( ( cache_ptr == NULL ) || ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr on entry.")
- }
-
- if ( config_ptr == NULL ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "NULL config_ptr on entry.")
- }
-
- if ( config_ptr->version != H5C1__CURR_AUTO_SIZE_CTL_VER ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Unknown config version.")
- }
-
- /* check general configuration section of the config: */
- if ( SUCCEED != H5C1_validate_resize_config(config_ptr,
- H5C1_RESIZE_CFG__VALIDATE_GENERAL) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, \
- "error in general configuration fields of new config.")
- }
-
- /* check size increase control fields of the config: */
- if ( SUCCEED != H5C1_validate_resize_config(config_ptr,
- H5C1_RESIZE_CFG__VALIDATE_INCREMENT) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, \
- "error in the size increase control fields of new config.")
- }
-
- /* check size decrease control fields of the config: */
- if ( SUCCEED != H5C1_validate_resize_config(config_ptr,
- H5C1_RESIZE_CFG__VALIDATE_DECREMENT) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, \
- "error in the size decrease control fields of new config.")
- }
-
- /* check for conflicts between size increase and size decrease controls: */
- if ( SUCCEED != H5C1_validate_resize_config(config_ptr,
- H5C1_RESIZE_CFG__VALIDATE_INTERACTIONS) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, \
- "conflicting threshold fields in new config.")
- }
-
- /* will set the increase possible fields to FALSE later if needed */
- cache_ptr->size_increase_possible = TRUE;
- cache_ptr->flash_size_increase_possible = TRUE;
- cache_ptr->size_decrease_possible = TRUE;
-
- switch ( config_ptr->incr_mode )
- {
- case H5C1_incr__off:
- cache_ptr->size_increase_possible = FALSE;
- break;
-
- case H5C1_incr__threshold:
- if ( ( config_ptr->lower_hr_threshold <= 0.0 ) ||
- ( config_ptr->increment <= 1.0 ) ||
- ( ( config_ptr->apply_max_increment ) &&
- ( config_ptr->max_increment <= 0 ) ) ) {
-
- cache_ptr->size_increase_possible = FALSE;
- }
- break;
-
- default: /* should be unreachable */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Unknown incr_mode?!?!?.")
- }
-
- /* logically, this is were configuration for flash cache size increases
- * should go. However, this configuration depends on max_cache_size, so
- * we wait until the end of the function, when this field is set.
- */
-
- switch ( config_ptr->decr_mode )
- {
- case H5C1_decr__off:
- cache_ptr->size_decrease_possible = FALSE;
- break;
-
- case H5C1_decr__threshold:
- if ( ( config_ptr->upper_hr_threshold >= 1.0 ) ||
- ( config_ptr->decrement >= 1.0 ) ||
- ( ( config_ptr->apply_max_decrement ) &&
- ( config_ptr->max_decrement <= 0 ) ) ) {
-
- cache_ptr->size_decrease_possible = FALSE;
- }
- break;
-
- case H5C1_decr__age_out:
- if ( ( ( config_ptr->apply_empty_reserve ) &&
- ( config_ptr->empty_reserve >= 1.0 ) ) ||
- ( ( config_ptr->apply_max_decrement ) &&
- ( config_ptr->max_decrement <= 0 ) ) ) {
-
- cache_ptr->size_decrease_possible = FALSE;
- }
- break;
-
- case H5C1_decr__age_out_with_threshold:
- if ( ( ( config_ptr->apply_empty_reserve ) &&
- ( config_ptr->empty_reserve >= 1.0 ) ) ||
- ( ( config_ptr->apply_max_decrement ) &&
- ( config_ptr->max_decrement <= 0 ) ) ||
- ( config_ptr->upper_hr_threshold >= 1.0 ) ) {
-
- cache_ptr->size_decrease_possible = FALSE;
- }
- break;
-
- default: /* should be unreachable */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Unknown decr_mode?!?!?.")
- }
-
- if ( config_ptr->max_size == config_ptr->min_size ) {
-
- cache_ptr->size_increase_possible = FALSE;
- cache_ptr->flash_size_increase_possible = FALSE;
- cache_ptr->size_decrease_possible = FALSE;
- }
-
- /* flash_size_increase_possible is intentionally omitted from the
- * following:
- */
- cache_ptr->resize_enabled = cache_ptr->size_increase_possible ||
- cache_ptr->size_decrease_possible;
-
- cache_ptr->resize_ctl = *config_ptr;
-
- /* Resize the cache to the supplied initial value if requested, or as
- * necessary to force it within the bounds of the current automatic
- * cache resizing configuration.
- *
- * Note that the min_clean_fraction may have changed, so we
- * go through the exercise even if the current size is within
- * range and an initial size has not been provided.
- */
- if ( (cache_ptr->resize_ctl).set_initial_size ) {
-
- new_max_cache_size = (cache_ptr->resize_ctl).initial_size;
- }
- else if ( cache_ptr->max_cache_size > (cache_ptr->resize_ctl).max_size ) {
-
- new_max_cache_size = (cache_ptr->resize_ctl).max_size;
- }
- else if ( cache_ptr->max_cache_size < (cache_ptr->resize_ctl).min_size ) {
-
- new_max_cache_size = (cache_ptr->resize_ctl).min_size;
-
- } else {
-
- new_max_cache_size = cache_ptr->max_cache_size;
- }
-
- new_min_clean_size = (size_t)
- ((double)new_max_cache_size *
- ((cache_ptr->resize_ctl).min_clean_fraction));
-
-
- /* since new_min_clean_size is of type size_t, we have
- *
- * ( 0 <= new_min_clean_size )
- *
- * by definition.
- */
- HDassert( new_min_clean_size <= new_max_cache_size );
- HDassert( (cache_ptr->resize_ctl).min_size <= new_max_cache_size );
- HDassert( new_max_cache_size <= (cache_ptr->resize_ctl).max_size );
-
- if ( new_max_cache_size < cache_ptr->max_cache_size ) {
-
- cache_ptr->size_decreased = TRUE;
- }
-
- cache_ptr->max_cache_size = new_max_cache_size;
- cache_ptr->min_clean_size = new_min_clean_size;
-
- if ( H5C1_reset_cache_hit_rate_stats(cache_ptr) != SUCCEED ) {
-
- /* this should be impossible... */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_reset_cache_hit_rate_stats failed.")
- }
-
- /* remove excess epoch markers if any */
- if ( ( config_ptr->decr_mode == H5C1_decr__age_out_with_threshold ) ||
- ( config_ptr->decr_mode == H5C1_decr__age_out ) ) {
-
- if ( cache_ptr->epoch_markers_active >
- (cache_ptr->resize_ctl).epochs_before_eviction ) {
-
- result =
- H5C1__autoadjust__ageout__remove_excess_markers(cache_ptr);
-
- if ( result != SUCCEED ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "can't remove excess epoch markers.")
- }
- }
- } else if ( cache_ptr->epoch_markers_active > 0 ) {
-
- result = H5C1__autoadjust__ageout__remove_all_markers(cache_ptr);
-
- if ( result != SUCCEED ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "error removing all epoch markers.")
- }
- }
-
- /* configure flash size increase facility. We wait until the
- * end of the function, as we need the max_cache_size set before
- * we start to keep things simple.
- *
- * If we haven't already ruled out flash cache size increases above,
- * go ahead and configure it.
- */
-
- if ( cache_ptr->flash_size_increase_possible ) {
-
- switch ( config_ptr->flash_incr_mode )
- {
- case H5C1_flash_incr__off:
- cache_ptr->flash_size_increase_possible = FALSE;
- break;
-
- case H5C1_flash_incr__add_space:
- cache_ptr->flash_size_increase_possible = TRUE;
- cache_ptr->flash_size_increase_threshold =
- (size_t)
- (((double)(cache_ptr->max_cache_size)) *
- ((cache_ptr->resize_ctl).flash_threshold));
- break;
-
- default: /* should be unreachable */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Unknown flash_incr_mode?!?!?.")
- break;
- }
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_set_cache_auto_resize_config() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_set_evictions_enabled()
- *
- * Purpose: Set cache_ptr->evictions_enabled to the value of the
- * evictions enabled parameter.
- *
- * Return: SUCCEED on success, and FAIL on failure.
- *
- * Programmer: John Mainzer
- * 7/27/07
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5C1_set_evictions_enabled(H5C1_t * cache_ptr,
- hbool_t evictions_enabled)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_set_evictions_enabled, FAIL)
-
- if ( ( cache_ptr == NULL ) || ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr on entry.")
- }
-
- if ( ( evictions_enabled != TRUE ) && ( evictions_enabled != FALSE ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Bad evictions_enabled on entry.")
- }
-
- /* There is no fundamental reason why we should not permit
- * evictions to be disabled while automatic resize is enabled.
- * However, I can't think of any good reason why one would
- * want to, and allowing it would greatly complicate testing
- * the feature. Hence the following:
- */
- if ( ( evictions_enabled != TRUE ) &&
- ( ( cache_ptr->resize_ctl.incr_mode != H5C1_incr__off ) ||
- ( cache_ptr->resize_ctl.decr_mode != H5C1_decr__off ) ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Can't disable evictions when auto resize enabled.")
- }
-
- cache_ptr->evictions_enabled = evictions_enabled;
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_set_evictions_enabled() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_set_prefix
- *
- * Purpose: Set the values of the prefix field of H5C1_t. This
- * filed is used to label some debugging output.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 1/20/06
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5C1_set_prefix(H5C1_t * cache_ptr,
- char * prefix)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_set_prefix, FAIL)
-
- /* This would normally be an assert, but we need to use an HGOTO_ERROR
- * call to shut up the compiler.
- */
- if ( ( ! cache_ptr ) || ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr")
- }
-
- HDassert( prefix );
- HDassert( HDstrlen(prefix) < H5C1__PREFIX_LEN ) ;
-
- HDstrcpy(&(cache_ptr->prefix[0]), prefix);
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_set_prefix() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_set_skip_flags
- *
- * Purpose: Set the values of the skip sanity check flags.
- *
- * This function and the skip sanity check flags were created
- * for the convenience of the test bed. However it is
- * possible that there may be other uses for the flags.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 6/11/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5C1_set_skip_flags(H5C1_t * cache_ptr,
- hbool_t skip_file_checks,
- hbool_t skip_dxpl_id_checks)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_set_skip_flags, FAIL)
-
- /* This would normally be an assert, but we need to use an HGOTO_ERROR
- * call to shut up the compiler.
- */
- if ( ( ! cache_ptr ) || ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr")
- }
-
- cache_ptr->skip_file_checks = skip_file_checks;
- cache_ptr->skip_dxpl_id_checks = skip_dxpl_id_checks;
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_set_skip_flags() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_set_trace_file_ptr
- *
- * Purpose: Set the trace_file_ptr field for the cache.
- *
- * This field must either be NULL (which turns of trace
- * file logging), or be a pointer to an open file to which
- * trace file data is to be written.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 1/20/06
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5C1_set_trace_file_ptr(H5C1_t * cache_ptr,
- FILE * trace_file_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_set_trace_file_ptr, FAIL)
-
- /* This would normally be an assert, but we need to use an HGOTO_ERROR
- * call to shut up the compiler.
- */
- if ( ( ! cache_ptr ) || ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr")
- }
-
- cache_ptr->trace_file_ptr = trace_file_ptr;
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_set_trace_file_ptr() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_stats
- *
- * Purpose: Prints statistics about the cache.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 6/2/04
- *
- * Modifications:
- *
- * JRM -- 7/21/04
- * Updated function for the addition of the hash table.
- *
- * JRM -- 9/8/05
- * Updated function for the addition of cache entry size
- * change statistics.
- *
- * JRM -- 1/13/06
- * Added code to use the prefix field of H5C1_t to allow
- * tagging of statistics output.
- *
- * JRM -- 3/21/06
- * Added code supporting the pinned entry related stats.
- *
- * JRM -- 8/9/06
- * More code supporting pinned entry related stats.
- *
- * JRM -- 8/23/06
- * Added code supporting new flush related statistics.
- *
- * JRM -- 3/31/07
- * Added code supporting the new write_protects,
- * read_protects, and max_read_protects fields.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5C1_stats(H5C1_t * cache_ptr,
- const char * cache_name,
- hbool_t
-#if !H5C1_COLLECT_CACHE_STATS
- UNUSED
-#endif /* H5C1_COLLECT_CACHE_STATS */
- display_detailed_stats)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
-#if H5C1_COLLECT_CACHE_STATS
- int i;
- int64_t total_hits = 0;
- int64_t total_misses = 0;
- int64_t total_write_protects = 0;
- int64_t total_read_protects = 0;
- int64_t max_read_protects = 0;
- int64_t total_insertions = 0;
- int64_t total_pinned_insertions = 0;
- int64_t total_clears = 0;
- int64_t total_flushes = 0;
- int64_t total_evictions = 0;
- int64_t total_renames = 0;
- int64_t total_entry_flush_renames = 0;
- int64_t total_cache_flush_renames = 0;
- int64_t total_size_increases = 0;
- int64_t total_size_decreases = 0;
- int64_t total_entry_flush_size_changes = 0;
- int64_t total_cache_flush_size_changes = 0;
- int64_t total_pins = 0;
- int64_t total_unpins = 0;
- int64_t total_dirty_pins = 0;
- int64_t total_pinned_flushes = 0;
- int64_t total_pinned_clears = 0;
- int32_t aggregate_max_accesses = 0;
- int32_t aggregate_min_accesses = 1000000;
- int32_t aggregate_max_clears = 0;
- int32_t aggregate_max_flushes = 0;
- size_t aggregate_max_size = 0;
- int32_t aggregate_max_pins = 0;
- double hit_rate;
- double average_successful_search_depth = 0.0;
- double average_failed_search_depth = 0.0;
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
- FUNC_ENTER_NOAPI(H5C1_stats, FAIL)
-
- /* This would normally be an assert, but we need to use an HGOTO_ERROR
- * call to shut up the compiler.
- */
- if ( ( ! cache_ptr ) ||
- ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ||
- ( !cache_name ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr or cache_name")
- }
-
-#if H5C1_COLLECT_CACHE_STATS
-
- for ( i = 0; i <= cache_ptr->max_type_id; i++ ) {
-
- total_hits += cache_ptr->hits[i];
- total_misses += cache_ptr->misses[i];
- total_write_protects += cache_ptr->write_protects[i];
- total_read_protects += cache_ptr->read_protects[i];
- if ( max_read_protects < cache_ptr->max_read_protects[i] ) {
- max_read_protects = cache_ptr->max_read_protects[i];
- }
- total_insertions += cache_ptr->insertions[i];
- total_pinned_insertions += cache_ptr->pinned_insertions[i];
- total_clears += cache_ptr->clears[i];
- total_flushes += cache_ptr->flushes[i];
- total_evictions += cache_ptr->evictions[i];
- total_renames += cache_ptr->renames[i];
- total_entry_flush_renames
- += cache_ptr->entry_flush_renames[i];
- total_cache_flush_renames
- += cache_ptr->cache_flush_renames[i];
- total_size_increases += cache_ptr->size_increases[i];
- total_size_decreases += cache_ptr->size_decreases[i];
- total_entry_flush_size_changes
- += cache_ptr->entry_flush_size_changes[i];
- total_cache_flush_size_changes
- += cache_ptr->cache_flush_size_changes[i];
- total_pins += cache_ptr->pins[i];
- total_unpins += cache_ptr->unpins[i];
- total_dirty_pins += cache_ptr->dirty_pins[i];
- total_pinned_flushes += cache_ptr->pinned_flushes[i];
- total_pinned_clears += cache_ptr->pinned_clears[i];
-#if H5C1_COLLECT_CACHE_ENTRY_STATS
- if ( aggregate_max_accesses < cache_ptr->max_accesses[i] )
- aggregate_max_accesses = cache_ptr->max_accesses[i];
- if ( aggregate_min_accesses > aggregate_max_accesses )
- aggregate_min_accesses = aggregate_max_accesses;
- if ( aggregate_min_accesses > cache_ptr->min_accesses[i] )
- aggregate_min_accesses = cache_ptr->min_accesses[i];
- if ( aggregate_max_clears < cache_ptr->max_clears[i] )
- aggregate_max_clears = cache_ptr->max_clears[i];
- if ( aggregate_max_flushes < cache_ptr->max_flushes[i] )
- aggregate_max_flushes = cache_ptr->max_flushes[i];
- if ( aggregate_max_size < cache_ptr->max_size[i] )
- aggregate_max_size = cache_ptr->max_size[i];
- if ( aggregate_max_pins < cache_ptr->max_pins[i] )
- aggregate_max_pins = cache_ptr->max_pins[i];
-#endif /* H5C1_COLLECT_CACHE_ENTRY_STATS */
- }
-
- if ( ( total_hits > 0 ) || ( total_misses > 0 ) ) {
-
- hit_rate = 100.0 * ((double)(total_hits)) /
- ((double)(total_hits + total_misses));
- } else {
- hit_rate = 0.0;
- }
-
- if ( cache_ptr->successful_ht_searches > 0 ) {
-
- average_successful_search_depth =
- ((double)(cache_ptr->total_successful_ht_search_depth)) /
- ((double)(cache_ptr->successful_ht_searches));
- }
-
- if ( cache_ptr->failed_ht_searches > 0 ) {
-
- average_failed_search_depth =
- ((double)(cache_ptr->total_failed_ht_search_depth)) /
- ((double)(cache_ptr->failed_ht_searches));
- }
-
-
- HDfprintf(stdout, "\n%sH5C: cache statistics for %s\n",
- cache_ptr->prefix, cache_name);
-
- HDfprintf(stdout, "\n");
-
- HDfprintf(stdout,
- "%s hash table insertion / deletions = %ld / %ld\n",
- cache_ptr->prefix,
- (long)(cache_ptr->total_ht_insertions),
- (long)(cache_ptr->total_ht_deletions));
-
- HDfprintf(stdout,
- "%s HT successful / failed searches = %ld / %ld\n",
- cache_ptr->prefix,
- (long)(cache_ptr->successful_ht_searches),
- (long)(cache_ptr->failed_ht_searches));
-
- HDfprintf(stdout,
- "%s Av. HT suc / failed search depth = %f / %f\n",
- cache_ptr->prefix,
- average_successful_search_depth,
- average_failed_search_depth);
-
- HDfprintf(stdout,
- "%s current (max) index size / length = %ld (%ld) / %ld (%ld)\n",
- cache_ptr->prefix,
- (long)(cache_ptr->index_size),
- (long)(cache_ptr->max_index_size),
- (long)(cache_ptr->index_len),
- (long)(cache_ptr->max_index_len));
-
- HDfprintf(stdout,
- "%s current (max) slist size / length = %ld (%ld) / %ld (%ld)\n",
- cache_ptr->prefix,
- (long)(cache_ptr->slist_size),
- (long)(cache_ptr->max_slist_size),
- (long)(cache_ptr->slist_len),
- (long)(cache_ptr->max_slist_len));
-
- HDfprintf(stdout,
- "%s current (max) PL size / length = %ld (%ld) / %ld (%ld)\n",
- cache_ptr->prefix,
- (long)(cache_ptr->pl_size),
- (long)(cache_ptr->max_pl_size),
- (long)(cache_ptr->pl_len),
- (long)(cache_ptr->max_pl_len));
-
- HDfprintf(stdout,
- "%s current (max) PEL size / length = %ld (%ld) / %ld (%ld)\n",
- cache_ptr->prefix,
- (long)(cache_ptr->pel_size),
- (long)(cache_ptr->max_pel_size),
- (long)(cache_ptr->pel_len),
- (long)(cache_ptr->max_pel_len));
-
- HDfprintf(stdout,
- "%s current LRU list size / length = %ld / %ld\n",
- cache_ptr->prefix,
- (long)(cache_ptr->LRU_list_size),
- (long)(cache_ptr->LRU_list_len));
-
- HDfprintf(stdout,
- "%s current clean LRU size / length = %ld / %ld\n",
- cache_ptr->prefix,
- (long)(cache_ptr->cLRU_list_size),
- (long)(cache_ptr->cLRU_list_len));
-
- HDfprintf(stdout,
- "%s current dirty LRU size / length = %ld / %ld\n",
- cache_ptr->prefix,
- (long)(cache_ptr->dLRU_list_size),
- (long)(cache_ptr->dLRU_list_len));
-
- HDfprintf(stdout,
- "%s Total hits / misses / hit_rate = %ld / %ld / %f\n",
- cache_ptr->prefix,
- (long)total_hits,
- (long)total_misses,
- hit_rate);
-
- HDfprintf(stdout,
- "%s Total write / read (max) protects = %ld / %ld (%d)\n",
- cache_ptr->prefix,
- (long)total_write_protects,
- (long)total_read_protects,
- max_read_protects);
-
- HDfprintf(stdout,
- "%s Total clears / flushes / evictions = %ld / %ld / %ld\n",
- cache_ptr->prefix,
- (long)total_clears,
- (long)total_flushes,
- (long)total_evictions);
-
- HDfprintf(stdout,
- "%s Total insertions(pinned) / renames = %ld(%ld) / %ld\n",
- cache_ptr->prefix,
- (long)total_insertions,
- (long)total_pinned_insertions,
- (long)total_renames);
-
- HDfprintf(stdout,
- "%s Total entry / cache flush renames = %ld / %ld\n",
- cache_ptr->prefix,
- (long)total_entry_flush_renames,
- (long)total_cache_flush_renames);
-
- HDfprintf(stdout, "%s Total entry size incrs / decrs = %ld / %ld\n",
- cache_ptr->prefix,
- (long)total_size_increases,
- (long)total_size_decreases);
-
- HDfprintf(stdout, "%s Ttl entry/cache flush size changes = %ld / %ld\n",
- cache_ptr->prefix,
- (long)total_entry_flush_size_changes,
- (long)total_cache_flush_size_changes);
-
- HDfprintf(stdout,
- "%s Total entry pins (dirty) / unpins = %ld (%ld) / %ld\n",
- cache_ptr->prefix,
- (long)total_pins,
- (long)total_dirty_pins,
- (long)total_unpins);
-
- HDfprintf(stdout, "%s Total pinned flushes / clears = %ld / %ld\n",
- cache_ptr->prefix,
- (long)total_pinned_flushes,
- (long)total_pinned_clears);
-
-#if H5C1_COLLECT_CACHE_ENTRY_STATS
-
- HDfprintf(stdout, "%s aggregate max / min accesses = %d / %d\n",
- cache_ptr->prefix,
- (int)aggregate_max_accesses,
- (int)aggregate_min_accesses);
-
- HDfprintf(stdout, "%s aggregate max_clears / max_flushes = %d / %d\n",
- cache_ptr->prefix,
- (int)aggregate_max_clears,
- (int)aggregate_max_flushes);
-
- HDfprintf(stdout, "%s aggregate max_size / max_pins = %d / %d\n",
- cache_ptr->prefix,
- (int)aggregate_max_size,
- (int)aggregate_max_pins);
-
-#endif /* H5C1_COLLECT_CACHE_ENTRY_STATS */
-
- if ( display_detailed_stats )
- {
-
- for ( i = 0; i <= cache_ptr->max_type_id; i++ ) {
-
- HDfprintf(stdout, "\n");
-
- HDfprintf(stdout, "%s Stats on %s:\n",
- cache_ptr->prefix,
- ((cache_ptr->type_name_table_ptr))[i]);
-
- if ( ( cache_ptr->hits[i] > 0 ) || ( cache_ptr->misses[i] > 0 ) ) {
-
- hit_rate = 100.0 * ((double)(cache_ptr->hits[i])) /
- ((double)(cache_ptr->hits[i] + cache_ptr->misses[i]));
- } else {
- hit_rate = 0.0;
- }
-
- HDfprintf(stdout,
- "%s hits / misses / hit_rate = %ld / %ld / %f\n",
- cache_ptr->prefix,
- (long)(cache_ptr->hits[i]),
- (long)(cache_ptr->misses[i]),
- hit_rate);
-
- HDfprintf(stdout,
- "%s write / read (max) protects = %ld / %ld (%d)\n",
- cache_ptr->prefix,
- (long)(cache_ptr->write_protects[i]),
- (long)(cache_ptr->read_protects[i]),
- (int)(cache_ptr->max_read_protects[i]));
-
- HDfprintf(stdout,
- "%s clears / flushes / evictions = %ld / %ld / %ld\n",
- cache_ptr->prefix,
- (long)(cache_ptr->clears[i]),
- (long)(cache_ptr->flushes[i]),
- (long)(cache_ptr->evictions[i]));
-
- HDfprintf(stdout,
- "%s insertions(pinned) / renames = %ld(%ld) / %ld\n",
- cache_ptr->prefix,
- (long)(cache_ptr->insertions[i]),
- (long)(cache_ptr->pinned_insertions[i]),
- (long)(cache_ptr->renames[i]));
-
- HDfprintf(stdout,
- "%s entry / cache flush renames = %ld / %ld\n",
- cache_ptr->prefix,
- (long)(cache_ptr->entry_flush_renames[i]),
- (long)(cache_ptr->cache_flush_renames[i]));
-
- HDfprintf(stdout,
- "%s size increases / decreases = %ld / %ld\n",
- cache_ptr->prefix,
- (long)(cache_ptr->size_increases[i]),
- (long)(cache_ptr->size_decreases[i]));
-
- HDfprintf(stdout,
- "%s entry/cache flush size changes = %ld / %ld\n",
- cache_ptr->prefix,
- (long)(cache_ptr->entry_flush_size_changes[i]),
- (long)(cache_ptr->cache_flush_size_changes[i]));
-
-
- HDfprintf(stdout,
- "%s entry pins / unpins = %ld / %ld\n",
- cache_ptr->prefix,
- (long)(cache_ptr->pins[i]),
- (long)(cache_ptr->unpins[i]));
-
- HDfprintf(stdout,
- "%s entry dirty pins/pin'd flushes = %ld / %ld\n",
- cache_ptr->prefix,
- (long)(cache_ptr->dirty_pins[i]),
- (long)(cache_ptr->pinned_flushes[i]));
-
-#if H5C1_COLLECT_CACHE_ENTRY_STATS
-
- HDfprintf(stdout,
- "%s entry max / min accesses = %d / %d\n",
- cache_ptr->prefix,
- cache_ptr->max_accesses[i],
- cache_ptr->min_accesses[i]);
-
- HDfprintf(stdout,
- "%s entry max_clears / max_flushes = %d / %d\n",
- cache_ptr->prefix,
- cache_ptr->max_clears[i],
- cache_ptr->max_flushes[i]);
-
- HDfprintf(stdout,
- "%s entry max_size / max_pins = %d / %d\n",
- cache_ptr->prefix,
- (int)(cache_ptr->max_size[i]),
- (int)(cache_ptr->max_pins[i]));
-
-
-#endif /* H5C1_COLLECT_CACHE_ENTRY_STATS */
-
- }
- }
-
- HDfprintf(stdout, "\n");
-
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_stats() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1_stats__reset
- *
- * Purpose: Reset the stats fields to their initial values.
- *
- * Return: void
- *
- * Programmer: John Mainzer, 4/28/04
- *
- * Modifications:
- *
- * JRM - 7/21/04
- * Updated for hash table related statistics.
- *
- * JRM - 9/8/05
- * Updated for size increase / decrease statistics.
- *
- * JRM - 3/20/06
- * Updated for pin / unpin related statistics.
- *
- * JRM - 8/9/06
- * Further updates for pin related statistics.
- *
- * JRM 8/23/06
- * Added initialization code for new flush related statistics.
- *
- * JRM 2/16/07
- * Added conditional compile code to avoid unused parameter
- * warning in the production build.
- *
- * JRM 3/31/07
- * Added initialization for the new write_protects,
- * read_protects, and max_read_protects fields.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-#ifndef NDEBUG
-H5C1_stats__reset(H5C1_t * cache_ptr)
-#else /* NDEBUG */
-#if H5C1_COLLECT_CACHE_STATS
-H5C1_stats__reset(H5C1_t * cache_ptr)
-#else /* H5C1_COLLECT_CACHE_STATS */
-H5C1_stats__reset(H5C1_t UNUSED * cache_ptr)
-#endif /* H5C1_COLLECT_CACHE_STATS */
-#endif /* NDEBUG */
-{
-#if H5C1_COLLECT_CACHE_STATS
- int i;
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
-
-#if H5C1_COLLECT_CACHE_STATS
- for ( i = 0; i <= cache_ptr->max_type_id; i++ )
- {
- cache_ptr->hits[i] = 0;
- cache_ptr->misses[i] = 0;
- cache_ptr->write_protects[i] = 0;
- cache_ptr->read_protects[i] = 0;
- cache_ptr->max_read_protects[i] = 0;
- cache_ptr->insertions[i] = 0;
- cache_ptr->pinned_insertions[i] = 0;
- cache_ptr->clears[i] = 0;
- cache_ptr->flushes[i] = 0;
- cache_ptr->evictions[i] = 0;
- cache_ptr->renames[i] = 0;
- cache_ptr->entry_flush_renames[i] = 0;
- cache_ptr->cache_flush_renames[i] = 0;
- cache_ptr->pins[i] = 0;
- cache_ptr->unpins[i] = 0;
- cache_ptr->dirty_pins[i] = 0;
- cache_ptr->pinned_flushes[i] = 0;
- cache_ptr->pinned_clears[i] = 0;
- cache_ptr->size_increases[i] = 0;
- cache_ptr->size_decreases[i] = 0;
- cache_ptr->entry_flush_size_changes[i] = 0;
- cache_ptr->cache_flush_size_changes[i] = 0;
- }
-
- cache_ptr->total_ht_insertions = 0;
- cache_ptr->total_ht_deletions = 0;
- cache_ptr->successful_ht_searches = 0;
- cache_ptr->total_successful_ht_search_depth = 0;
- cache_ptr->failed_ht_searches = 0;
- cache_ptr->total_failed_ht_search_depth = 0;
-
- cache_ptr->max_index_len = 0;
- cache_ptr->max_index_size = (size_t)0;
-
- cache_ptr->max_slist_len = 0;
- cache_ptr->max_slist_size = (size_t)0;
-
- cache_ptr->max_pl_len = 0;
- cache_ptr->max_pl_size = (size_t)0;
-
- cache_ptr->max_pel_len = 0;
- cache_ptr->max_pel_size = (size_t)0;
-
-#if H5C1_COLLECT_CACHE_ENTRY_STATS
-
- for ( i = 0; i <= cache_ptr->max_type_id; i++ )
- {
- cache_ptr->max_accesses[i] = 0;
- cache_ptr->min_accesses[i] = 1000000;
- cache_ptr->max_clears[i] = 0;
- cache_ptr->max_flushes[i] = 0;
- cache_ptr->max_size[i] = (size_t)0;
- cache_ptr->max_pins[i] = 0;
- }
-
-#endif /* H5C1_COLLECT_CACHE_ENTRY_STATS */
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
- return;
-
-} /* H5C1_stats__reset() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_unpin_entry()
- *
- * Purpose: Unpin a cache entry. The entry must be unprotected at
- * the time of call, and must be pinned.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 3/22/06
- *
- * Modifications:
- *
- * JRM -- 4/26/06
- * Modified routine to allow it to operate on protected
- * entries.
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5C1_unpin_entry(H5C1_t * cache_ptr,
- void * thing)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- H5C1_cache_entry_t * entry_ptr;
-
- FUNC_ENTER_NOAPI(H5C1_unpin_entry, FAIL)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( thing );
-
- entry_ptr = (H5C1_cache_entry_t *)thing;
-
- if ( ! ( entry_ptr->is_pinned ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPIN, FAIL, "Entry isn't pinned")
- }
-
- if ( ! ( entry_ptr->is_protected ) ) {
-
- H5C1__UPDATE_RP_FOR_UNPIN(cache_ptr, entry_ptr, FAIL)
- }
-
- entry_ptr->is_pinned = FALSE;
-
- H5C1__UPDATE_STATS_FOR_UNPIN(cache_ptr, entry_ptr)
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_unpin_entry() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_unprotect
- *
- * Purpose: Undo an H5C1_protect() call -- specifically, mark the
- * entry as unprotected, remove it from the protected list,
- * and give it back to the replacement policy.
- *
- * The TYPE and ADDR arguments must be the same as those in
- * the corresponding call to H5C1_protect() and the THING
- * argument must be the value returned by that call to
- * H5C1_protect().
- *
- * The primary_dxpl_id and secondary_dxpl_id parameters
- * specify the dxpl_ids used on the first write occasioned
- * by the unprotect (primary_dxpl_id), and on all subsequent
- * writes (secondary_dxpl_id). Since an uprotect cannot
- * occasion a write at present, all this is moot for now.
- * However, things change, and in any case,
- * H5C1_flush_single_entry() needs primary_dxpl_id and
- * secondary_dxpl_id in its parameter list.
- *
- * The function can't cause a read either, so the dxpl_id
- * parameters are moot in this case as well.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * If the deleted flag is TRUE, simply remove the target entry
- * from the cache, clear it, and free it without writing it to
- * disk.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 6/2/04
- *
- * Modifications:
- *
- * JRM -- 7/21/04
- * Updated the function for the addition of the hash table.
- * In particular, we now add dirty entries to the tree if
- * they aren't in the tree already.
- *
- * JRM -- 1/6/05
- * Added the flags parameter, and code supporting
- * H5C1__SET_FLUSH_MARKER_FLAG. Note that this flag is
- * ignored unless the new entry is dirty. Also note that
- * once the flush_marker field of an entry is set, the
- * only way it can be reset is by being flushed.
- *
- * JRM -- 6/3/05
- * Added the dirtied parameter and supporting code. This
- * is part of an effort to move management of the is_dirty
- * field into the cache code. This has become necessary
- * to repair a cache coherency bug in PHDF5.
- *
- * JRM -- 7/5/05
- * Added code supporting the new clear_on_unprotect field
- * of H5C1_cache_entry_t. This change is also part of the
- * above mentioned cache coherency bug fix in PHDF5.
- *
- * JRM -- 9/8/05
- * Added the size_changed and new_size parameters and the
- * supporting code. Since the metadata cache synchronizes
- * on dirty bytes creation in the PHDF5 case, we must now
- * track changes in entry size.
- *
- * Note that the new_size parameter is ignored unless the
- * size_changed parameter is TRUE. In this case, the new_size
- * must be positive.
- *
- * Also observe that if size_changed is TRUE, dirtied must be
- * TRUE.
- *
- * JRM -- 9/23/05
- * Moved the size_changed parameter into flags.
- *
- * JRM -- 3/21/06
- * Unpdated function to pin and unpin entries as directed via
- * the new H5C1__PIN_ENTRY_FLAG and H5C1__UNPIN_ENTRY_FLAG flags.
- *
- * JRM -- 5/3/06
- * Added code to make use of the new dirtied field in
- * H5C1_cache_entry_t. If this field is TRUE, it is the
- * equivalent of setting the H5C1__DIRTIED_FLAG.
- *
- * JRM -- 3/29/07
- * Modified function to allow a entry to be protected
- * more than once if the entry is protected read only.
- *
- * Also added sanity checks using the new is_read_only and
- * ro_ref_count parameters.
- *
- * JRM -- 12/31/07
- * Modified funtion to support flash cache resizes.
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5C1_unprotect(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- const H5C1_class_t * type,
- haddr_t addr,
- void * thing,
- unsigned int flags,
- size_t new_size)
-{
- /* const char * fcn_name = "H5C1_unprotect()"; */
- hbool_t deleted;
- hbool_t dirtied;
- hbool_t set_flush_marker;
- hbool_t size_changed;
- hbool_t pin_entry;
- hbool_t unpin_entry;
-#ifdef H5_HAVE_PARALLEL
- hbool_t clear_entry = FALSE;
-#endif /* H5_HAVE_PARALLEL */
- herr_t ret_value = SUCCEED; /* Return value */
- herr_t result;
- size_t size_increase = 0;
- H5C1_cache_entry_t * entry_ptr;
- H5C1_cache_entry_t * test_entry_ptr;
-
- FUNC_ENTER_NOAPI(H5C1_unprotect, FAIL)
-
- deleted = ( (flags & H5C1__DELETED_FLAG) != 0 );
- dirtied = ( (flags & H5C1__DIRTIED_FLAG) != 0 );
- set_flush_marker = ( (flags & H5C1__SET_FLUSH_MARKER_FLAG) != 0 );
- size_changed = ( (flags & H5C1__SIZE_CHANGED_FLAG) != 0 );
- pin_entry = ( (flags & H5C1__PIN_ENTRY_FLAG) != 0 );
- unpin_entry = ( (flags & H5C1__UNPIN_ENTRY_FLAG) != 0 );
-
- /* Changing the size of an entry dirties it. Thus, set the
- * dirtied flag if the size_changed flag is set.
- */
-
- dirtied |= size_changed;
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( cache_ptr->skip_file_checks || f );
- HDassert( type );
- HDassert( type->clear );
- HDassert( type->flush );
- HDassert( H5F_addr_defined(addr) );
- HDassert( thing );
- HDassert( ( size_changed == TRUE ) || ( size_changed == FALSE ) );
- HDassert( ( ! size_changed ) || ( dirtied ) );
- HDassert( ( ! size_changed ) || ( new_size > 0 ) );
- HDassert( ! ( pin_entry && unpin_entry ) );
-
- entry_ptr = (H5C1_cache_entry_t *)thing;
-
- HDassert( entry_ptr->addr == addr );
- HDassert( entry_ptr->type == type );
-
- /* also set the dirtied variable if the dirtied field is set in
- * the entry.
- */
- dirtied |= entry_ptr->dirtied;
-
-#if H5C1_DO_EXTREME_SANITY_CHECKS
- if ( H5C1_validate_lru_list(cache_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
-#endif /* H5C1_DO_EXTREME_SANITY_CHECKS */
-
-
- /* if the entry has multiple read only protects, just decrement
- * the ro_ref_counter. Don't actually unprotect until the ref count
- * drops to zero.
- */
- if ( entry_ptr->ro_ref_count > 1 ) {
-
- HDassert( entry_ptr->is_protected );
- HDassert( entry_ptr->is_read_only );
-
- if ( dirtied ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "Read only entry modified(1)??")
- }
-
- (entry_ptr->ro_ref_count)--;
-
- /* Pin or unpin the entry as requested. */
- if ( pin_entry ) {
-
- if ( entry_ptr->is_pinned ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTPIN, FAIL, \
- "Entry already pinned???")
- }
- entry_ptr->is_pinned = TRUE;
- H5C1__UPDATE_STATS_FOR_PIN(cache_ptr, entry_ptr)
-
- } else if ( unpin_entry ) {
-
- if ( ! ( entry_ptr->is_pinned ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPIN, FAIL, \
- "Entry already unpinned???")
- }
- entry_ptr->is_pinned = FALSE;
- H5C1__UPDATE_STATS_FOR_UNPIN(cache_ptr, entry_ptr)
-
- }
-
- } else {
-
- if ( entry_ptr->is_read_only ) {
-
- HDassert( entry_ptr->ro_ref_count == 1 );
-
- if ( dirtied ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "Read only entry modified(2)??")
- }
-
- entry_ptr->is_read_only = FALSE;
- entry_ptr->ro_ref_count = 0;
- }
-
-#ifdef H5_HAVE_PARALLEL
- /* When the H5C code is used to implement the metadata cache in the
- * PHDF5 case, only the cache on process 0 is allowed to write to file.
- * All the other metadata caches must hold dirty entries until they
- * are told that the entries are clean.
- *
- * The clear_on_unprotect flag in the H5C1_cache_entry_t structure
- * exists to deal with the case in which an entry is protected when
- * its cache receives word that the entry is now clean. In this case,
- * the clear_on_unprotect flag is set, and the entry is flushed with
- * the H5C1__FLUSH_CLEAR_ONLY_FLAG.
- *
- * All this is a bit awkward, but until the metadata cache entries
- * are contiguous, with only one dirty flag, we have to let the supplied
- * functions deal with the reseting the is_dirty flag.
- */
- if ( entry_ptr->clear_on_unprotect ) {
-
- HDassert( entry_ptr->is_dirty );
-
- entry_ptr->clear_on_unprotect = FALSE;
-
- if ( ! dirtied ) {
-
- clear_entry = TRUE;
- }
- }
-#endif /* H5_HAVE_PARALLEL */
-
- if ( ! (entry_ptr->is_protected) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "Entry already unprotected??")
- }
-
- /* mark the entry as dirty if appropriate */
- entry_ptr->is_dirty = ( (entry_ptr->is_dirty) || dirtied );
-
- /* update for change in entry size if necessary */
- if ( ( size_changed ) && ( entry_ptr->size != new_size ) ) {
-
- /* do a flash cache size increase if appropriate */
- if ( cache_ptr->flash_size_increase_possible ) {
-
- if ( new_size > entry_ptr->size ) {
-
- size_increase = new_size - entry_ptr->size;
-
- if ( size_increase >=
- cache_ptr->flash_size_increase_threshold ) {
-
- result = H5C1__flash_increase_cache_size(cache_ptr,
- entry_ptr->size,
- new_size);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "H5C1__flash_increase_cache_size failed.")
- }
- }
- }
- }
-
- /* update the protected list */
- H5C1__DLL_UPDATE_FOR_SIZE_CHANGE((cache_ptr->pl_len), \
- (cache_ptr->pl_size), \
- (entry_ptr->size), (new_size));
-
- /* update the hash table */
- H5C1__UPDATE_INDEX_FOR_SIZE_CHANGE((cache_ptr), (entry_ptr->size),\
- (new_size));
-
- /* if the entry is in the skip list, update that too */
- if ( entry_ptr->in_slist ) {
-
- H5C1__UPDATE_SLIST_FOR_SIZE_CHANGE((cache_ptr), \
- (entry_ptr->size),\
- (new_size));
- }
-
- /* update statistics just before changing the entry size */
- H5C1__UPDATE_STATS_FOR_ENTRY_SIZE_CHANGE((cache_ptr), (entry_ptr), \
- (new_size));
-
- /* finally, update the entry size proper */
- entry_ptr->size = new_size;
- }
-
- /* Pin or unpin the entry as requested. */
- if ( pin_entry ) {
-
- if ( entry_ptr->is_pinned ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTPIN, FAIL, \
- "Entry already pinned???")
- }
- entry_ptr->is_pinned = TRUE;
- H5C1__UPDATE_STATS_FOR_PIN(cache_ptr, entry_ptr)
-
- } else if ( unpin_entry ) {
-
- if ( ! ( entry_ptr->is_pinned ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPIN, FAIL, \
- "Entry already unpinned???")
- }
- entry_ptr->is_pinned = FALSE;
- H5C1__UPDATE_STATS_FOR_UNPIN(cache_ptr, entry_ptr)
-
- }
-
- /* H5C1__UPDATE_RP_FOR_UNPROTECT will places the unprotected entry on
- * the pinned entry list if entry_ptr->is_pined is TRUE.
- */
- H5C1__UPDATE_RP_FOR_UNPROTECT(cache_ptr, entry_ptr, FAIL)
-
- entry_ptr->is_protected = FALSE;
-
- /* if the entry is dirty, 'or' its flush_marker with the set flush flag,
- * and then add it to the skip list if it isn't there already.
- */
-
- if ( entry_ptr->is_dirty ) {
-
- entry_ptr->flush_marker |= set_flush_marker;
-
- if ( ! (entry_ptr->in_slist) ) {
-
- H5C1__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr, FAIL)
- }
- }
-
- /* this implementation of the "deleted" option is a bit inefficient, as
- * we re-insert the entry to be deleted into the replacement policy
- * data structures, only to remove them again. Depending on how often
- * we do this, we may want to optimize a bit.
- *
- * On the other hand, this implementation is reasonably clean, and
- * makes good use of existing code.
- * JRM - 5/19/04
- */
- if ( deleted ) {
-
- /* the following first flush flag will never be used as we are
- * calling H5C1_flush_single_entry with both the
- * H5C1__FLUSH_CLEAR_ONLY_FLAG and H5C1__FLUSH_INVALIDATE_FLAG flags.
- * However, it is needed for the function call.
- */
- hbool_t dummy_first_flush = TRUE;
-
- /* we can't delete a pinned entry */
- HDassert ( ! (entry_ptr->is_pinned ) );
-
- /* verify that the target entry is in the cache. */
-
- H5C1__SEARCH_INDEX(cache_ptr, addr, test_entry_ptr, FAIL)
-
- if ( test_entry_ptr == NULL ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "entry not in hash table?!?.")
- }
- else if ( test_entry_ptr != entry_ptr ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "hash table contains multiple entries for addr?!?.")
- }
-
- if ( H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- type,
- addr,
- (H5C1__FLUSH_CLEAR_ONLY_FLAG |
- H5C1__FLUSH_INVALIDATE_FLAG),
- &dummy_first_flush,
- TRUE) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, "Can't flush.")
- }
- }
-#ifdef H5_HAVE_PARALLEL
- else if ( clear_entry ) {
-
- /* the following first flush flag will never be used as we are
- * calling H5C1_flush_single_entry with the
- * H5C1__FLUSH_CLEAR_ONLY_FLAG flag. However, it is needed for
- * the function call.
- */
- hbool_t dummy_first_flush = TRUE;
-
- /* verify that the target entry is in the cache. */
-
- H5C1__SEARCH_INDEX(cache_ptr, addr, test_entry_ptr, FAIL)
-
- if ( test_entry_ptr == NULL ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "entry not in hash table?!?.")
- }
- else if ( test_entry_ptr != entry_ptr ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
- "hash table contains multiple entries for addr?!?.")
- }
-
- if ( H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- type,
- addr,
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- &dummy_first_flush,
- TRUE) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, "Can't clear.")
- }
- }
-#endif /* H5_HAVE_PARALLEL */
- }
-
- H5C1__UPDATE_STATS_FOR_UNPROTECT(cache_ptr)
-
-done:
-
-#if H5C1_DO_EXTREME_SANITY_CHECKS
- if ( H5C1_validate_lru_list(cache_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
-#endif /* H5C1_DO_EXTREME_SANITY_CHECKS */
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_unprotect() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_validate_resize_config()
- *
- * Purpose: Run a sanity check on the specified sections of the
- * provided instance of struct H5C1_auto_size_ctl_t.
- *
- * Do nothing and return SUCCEED if no errors are detected,
- * and flag an error and return FAIL otherwise.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 3/23/05
- *
- * Modifications:
- *
- * Added validation for the flash increment fields.
- *
- * JRM -- 12/31/07
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-H5C1_validate_resize_config(H5C1_auto_size_ctl_t * config_ptr,
- unsigned int tests)
-{
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5C1_validate_resize_config, FAIL)
-
- if ( config_ptr == NULL ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "NULL config_ptr on entry.")
- }
-
- if ( config_ptr->version != H5C1__CURR_AUTO_SIZE_CTL_VER ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Unknown config version.")
- }
-
-
- if ( (tests & H5C1_RESIZE_CFG__VALIDATE_GENERAL) != 0 ) {
-
- if ( ( config_ptr->set_initial_size != TRUE ) &&
- ( config_ptr->set_initial_size != FALSE ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "set_initial_size must be either TRUE or FALSE");
- }
-
- if ( config_ptr->max_size > H5C1__MAX_MAX_CACHE_SIZE ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "max_size too big");
- }
-
- if ( config_ptr->min_size < H5C1__MIN_MAX_CACHE_SIZE ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "min_size too small");
- }
-
- if ( config_ptr->min_size > config_ptr->max_size ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "min_size > max_size");
- }
-
- if ( ( config_ptr->set_initial_size ) &&
- ( ( config_ptr->initial_size < config_ptr->min_size ) ||
- ( config_ptr->initial_size > config_ptr->max_size ) ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "initial_size must be in the interval [min_size, max_size]");
- }
-
- if ( ( config_ptr->min_clean_fraction < 0.0 ) ||
- ( config_ptr->min_clean_fraction > 1.0 ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "min_clean_fraction must be in the interval [0.0, 1.0]");
- }
-
- if ( config_ptr->epoch_length < H5C1__MIN_AR_EPOCH_LENGTH ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "epoch_length too small");
- }
-
- if ( config_ptr->epoch_length > H5C1__MAX_AR_EPOCH_LENGTH ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "epoch_length too big");
- }
- } /* H5C1_RESIZE_CFG__VALIDATE_GENERAL */
-
-
- if ( (tests & H5C1_RESIZE_CFG__VALIDATE_INCREMENT) != 0 ) {
-
- if ( ( config_ptr->incr_mode != H5C1_incr__off ) &&
- ( config_ptr->incr_mode != H5C1_incr__threshold ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Invalid incr_mode");
- }
-
- if ( config_ptr->incr_mode == H5C1_incr__threshold ) {
-
- if ( ( config_ptr->lower_hr_threshold < 0.0 ) ||
- ( config_ptr->lower_hr_threshold > 1.0 ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "lower_hr_threshold must be in the range [0.0, 1.0]");
- }
-
- if ( config_ptr->increment < 1.0 ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "increment must be greater than or equal to 1.0");
- }
-
- if ( ( config_ptr->apply_max_increment != TRUE ) &&
- ( config_ptr->apply_max_increment != FALSE ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "apply_max_increment must be either TRUE or FALSE");
- }
-
- /* no need to check max_increment, as it is a size_t,
- * and thus must be non-negative.
- */
- } /* H5C1_incr__threshold */
-
- switch ( config_ptr->flash_incr_mode )
- {
- case H5C1_flash_incr__off:
- /* nothing to do here */
- break;
-
- case H5C1_flash_incr__add_space:
- if ( ( config_ptr->flash_multiple < 0.1 ) ||
- ( config_ptr->flash_multiple > 10.0 ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "flash_multiple must be in the range [0.1, 10.0]");
- }
-
- if ( ( config_ptr->flash_threshold < 0.1 ) ||
- ( config_ptr->flash_threshold > 1.0 ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "flash_threshold must be in the range [0.1, 1.0]");
- }
- break;
-
- default:
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "Invalid flash_incr_mode");
- break;
- }
- } /* H5C1_RESIZE_CFG__VALIDATE_INCREMENT */
-
-
- if ( (tests & H5C1_RESIZE_CFG__VALIDATE_DECREMENT) != 0 ) {
-
- if ( ( config_ptr->decr_mode != H5C1_decr__off ) &&
- ( config_ptr->decr_mode != H5C1_decr__threshold ) &&
- ( config_ptr->decr_mode != H5C1_decr__age_out ) &&
- ( config_ptr->decr_mode != H5C1_decr__age_out_with_threshold )
- ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Invalid decr_mode");
- }
-
- if ( config_ptr->decr_mode == H5C1_decr__threshold ) {
-
- if ( config_ptr->upper_hr_threshold > 1.0 ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "upper_hr_threshold must be <= 1.0");
- }
-
- if ( ( config_ptr->decrement > 1.0 ) ||
- ( config_ptr->decrement < 0.0 ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "decrement must be in the interval [0.0, 1.0]");
- }
-
- /* no need to check max_decrement as it is a size_t
- * and thus must be non-negative.
- */
- } /* H5C1_decr__threshold */
-
- if ( ( config_ptr->decr_mode == H5C1_decr__age_out ) ||
- ( config_ptr->decr_mode == H5C1_decr__age_out_with_threshold )
- ) {
-
- if ( config_ptr->epochs_before_eviction < 1 ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "epochs_before_eviction must be positive");
- }
-
- if ( config_ptr->epochs_before_eviction > H5C1__MAX_EPOCH_MARKERS ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "epochs_before_eviction too big");
- }
-
- if ( ( config_ptr->apply_empty_reserve != TRUE ) &&
- ( config_ptr->apply_empty_reserve != FALSE ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "apply_empty_reserve must be either TRUE or FALSE");
- }
-
- if ( ( config_ptr->apply_empty_reserve ) &&
- ( ( config_ptr->empty_reserve > 1.0 ) ||
- ( config_ptr->empty_reserve < 0.0 ) ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "empty_reserve must be in the interval [0.0, 1.0]");
- }
-
- /* no need to check max_decrement as it is a size_t
- * and thus must be non-negative.
- */
- } /* H5C1_decr__age_out || H5C1_decr__age_out_with_threshold */
-
- if ( config_ptr->decr_mode == H5C1_decr__age_out_with_threshold ) {
-
- if ( ( config_ptr->upper_hr_threshold > 1.0 ) ||
- ( config_ptr->upper_hr_threshold < 0.0 ) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "upper_hr_threshold must be in the interval [0.0, 1.0]");
- }
- } /* H5C1_decr__age_out_with_threshold */
-
- } /* H5C1_RESIZE_CFG__VALIDATE_DECREMENT */
-
-
- if ( (tests & H5C1_RESIZE_CFG__VALIDATE_INTERACTIONS) != 0 ) {
-
- if ( ( config_ptr->incr_mode == H5C1_incr__threshold )
- &&
- ( ( config_ptr->decr_mode == H5C1_decr__threshold )
- ||
- ( config_ptr->decr_mode == H5C1_decr__age_out_with_threshold )
- )
- &&
- ( config_ptr->lower_hr_threshold
- >=
- config_ptr->upper_hr_threshold
- )
- ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
- "conflicting threshold fields in config.")
- }
- } /* H5C1_RESIZE_CFG__VALIDATE_INTERACTIONS */
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_validate_resize_config() */
-
-
-/*************************************************************************/
-/**************************** Private Functions: *************************/
-/*************************************************************************/
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1__auto_adjust_cache_size
- *
- * Purpose: Obtain the current full cache hit rate, and compare it
- * with the hit rate thresholds for modifying cache size.
- * If one of the thresholds has been crossed, adjusts the
- * size of the cache accordingly.
- *
- * The function then resets the full cache hit rate
- * statistics, and exits.
- *
- * Return: Non-negative on success/Negative on failure or if there was
- * an attempt to flush a protected item.
- *
- *
- * Programmer: John Mainzer, 10/7/04
- *
- * Modifications:
- *
- * JRM -- 11/18/04
- * Major re-write to support ageout method of cache size
- * reduction, and to adjust to changes in the
- * H5C1_auto_size_ctl_t structure.
- *
- * JRM -- 1/5/08
- * Added support for flash cache size increases.
- *
- *-------------------------------------------------------------------------
- */
-
-static herr_t
-H5C1__auto_adjust_cache_size(H5C1_t * cache_ptr,
- H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- hbool_t write_permitted,
- hbool_t * first_flush_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- herr_t result;
- hbool_t inserted_epoch_marker = FALSE;
- size_t new_max_cache_size = 0;
- size_t old_max_cache_size = 0;
- size_t new_min_clean_size = 0;
- size_t old_min_clean_size = 0;
- double hit_rate;
- enum H5C1_resize_status status = in_spec; /* will change if needed */
-
- FUNC_ENTER_NOAPI_NOINIT(H5C1__auto_adjust_cache_size)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( cache_ptr->cache_accesses >=
- (cache_ptr->resize_ctl).epoch_length );
- HDassert( 0.0 <= (cache_ptr->resize_ctl).min_clean_fraction );
- HDassert( (cache_ptr->resize_ctl).min_clean_fraction <= 100.0 );
-
- if ( !cache_ptr->resize_enabled ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Auto cache resize disabled.")
- }
-
- HDassert( ( (cache_ptr->resize_ctl).incr_mode != H5C1_incr__off ) || \
- ( (cache_ptr->resize_ctl).decr_mode != H5C1_decr__off ) );
-
- if ( H5C1_get_cache_hit_rate(cache_ptr, &hit_rate) != SUCCEED ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't get hit rate.")
- }
-
- HDassert( ( 0.0 <= hit_rate ) && ( hit_rate <= 1.0 ) );
-
- switch ( (cache_ptr->resize_ctl).incr_mode )
- {
- case H5C1_incr__off:
- if ( cache_ptr->size_increase_possible ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "size_increase_possible but H5C1_incr__off?!?!?")
- }
- break;
-
- case H5C1_incr__threshold:
- if ( hit_rate < (cache_ptr->resize_ctl).lower_hr_threshold ) {
-
- if ( ! cache_ptr->size_increase_possible ) {
-
- status = increase_disabled;
-
- } else if ( cache_ptr->max_cache_size >=
- (cache_ptr->resize_ctl).max_size ) {
-
- HDassert( cache_ptr->max_cache_size == \
- (cache_ptr->resize_ctl).max_size );
- status = at_max_size;
-
- } else if ( ! cache_ptr->cache_full ) {
-
- status = not_full;
-
- } else {
-
- new_max_cache_size = (size_t)
- (((double)(cache_ptr->max_cache_size)) *
- (cache_ptr->resize_ctl).increment);
-
- /* clip to max size if necessary */
- if ( new_max_cache_size >
- (cache_ptr->resize_ctl).max_size ) {
-
- new_max_cache_size = (cache_ptr->resize_ctl).max_size;
- }
-
- /* clip to max increment if necessary */
- if ( ( (cache_ptr->resize_ctl).apply_max_increment ) &&
- ( (cache_ptr->max_cache_size +
- (cache_ptr->resize_ctl).max_increment) <
- new_max_cache_size ) ) {
-
- new_max_cache_size = cache_ptr->max_cache_size +
- (cache_ptr->resize_ctl).max_increment;
- }
-
- status = increase;
- }
- }
- break;
-
- default:
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unknown incr_mode.")
- }
-
- /* If the decr_mode is either age out or age out with threshold, we
- * must run the marker maintenance code, whether we run the size
- * reduction code or not. We do this in two places -- here we
- * insert a new marker if the number of active epoch markers is
- * is less than the the current epochs before eviction, and after
- * the ageout call, we cycle the markers.
- *
- * However, we can't call the ageout code or cycle the markers
- * unless there was a full complement of markers in place on
- * entry. The inserted_epoch_marker flag is used to track this.
- */
-
- if ( ( ( (cache_ptr->resize_ctl).decr_mode == H5C1_decr__age_out )
- ||
- ( (cache_ptr->resize_ctl).decr_mode ==
- H5C1_decr__age_out_with_threshold
- )
- )
- &&
- ( cache_ptr->epoch_markers_active <
- (cache_ptr->resize_ctl).epochs_before_eviction
- )
- ) {
-
- result = H5C1__autoadjust__ageout__insert_new_marker(cache_ptr);
-
- if ( result != SUCCEED ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "can't insert new epoch marker.")
-
- } else {
-
- inserted_epoch_marker = TRUE;
- }
- }
-
- /* don't run the cache size decrease code unless the cache size
- * increase code is disabled, or the size increase code sees no need
- * for action. In either case, status == in_spec at this point.
- */
-
- if ( status == in_spec ) {
-
- switch ( (cache_ptr->resize_ctl).decr_mode )
- {
- case H5C1_decr__off:
- break;
-
- case H5C1_decr__threshold:
- if ( hit_rate > (cache_ptr->resize_ctl).upper_hr_threshold ) {
-
- if ( ! cache_ptr->size_decrease_possible ) {
-
- status = decrease_disabled;
-
- } else if ( cache_ptr->max_cache_size <=
- (cache_ptr->resize_ctl).min_size ) {
-
- HDassert( cache_ptr->max_cache_size ==
- (cache_ptr->resize_ctl).min_size );
- status = at_min_size;
-
- } else {
-
- new_max_cache_size = (size_t)
- (((double)(cache_ptr->max_cache_size)) *
- (cache_ptr->resize_ctl).decrement);
-
- /* clip to min size if necessary */
- if ( new_max_cache_size <
- (cache_ptr->resize_ctl).min_size ) {
-
- new_max_cache_size =
- (cache_ptr->resize_ctl).min_size;
- }
-
- /* clip to max decrement if necessary */
- if ( ( (cache_ptr->resize_ctl).apply_max_decrement ) &&
- ( ((cache_ptr->resize_ctl).max_decrement +
- new_max_cache_size) <
- cache_ptr->max_cache_size ) ) {
-
- new_max_cache_size = cache_ptr->max_cache_size -
- (cache_ptr->resize_ctl).max_decrement;
- }
-
- status = decrease;
- }
- }
- break;
-
- case H5C1_decr__age_out_with_threshold:
- case H5C1_decr__age_out:
- if ( ! inserted_epoch_marker ) {
-
- if ( ! cache_ptr->size_decrease_possible ) {
-
- status = decrease_disabled;
-
- } else {
-
- result = H5C1__autoadjust__ageout(cache_ptr,
- hit_rate,
- &status,
- &new_max_cache_size,
- f,
- primary_dxpl_id,
- secondary_dxpl_id,
- write_permitted,
- first_flush_ptr);
-
- if ( result != SUCCEED ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "ageout code failed.")
- }
- }
- }
- break;
-
- default:
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unknown incr_mode.")
- }
- }
-
- /* cycle the epoch markers here if appropriate */
- if ( ( ( (cache_ptr->resize_ctl).decr_mode == H5C1_decr__age_out )
- ||
- ( (cache_ptr->resize_ctl).decr_mode ==
- H5C1_decr__age_out_with_threshold
- )
- )
- &&
- ( ! inserted_epoch_marker )
- ) {
-
- /* move last epoch marker to the head of the LRU list */
- result = H5C1__autoadjust__ageout__cycle_epoch_marker(cache_ptr);
-
- if ( result != SUCCEED ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "error cycling epoch marker.")
- }
- }
-
- if ( ( status == increase ) || ( status == decrease ) ) {
-
- old_max_cache_size = cache_ptr->max_cache_size;
- old_min_clean_size = cache_ptr->min_clean_size;
-
- new_min_clean_size = (size_t)
- ((double)new_max_cache_size *
- ((cache_ptr->resize_ctl).min_clean_fraction));
-
- /* new_min_clean_size is of size_t, and thus must be non-negative.
- * Hence we have
- *
- * ( 0 <= new_min_clean_size ).
- *
- * by definition.
- */
- HDassert( new_min_clean_size <= new_max_cache_size );
- HDassert( (cache_ptr->resize_ctl).min_size <= new_max_cache_size );
- HDassert( new_max_cache_size <= (cache_ptr->resize_ctl).max_size );
-
- cache_ptr->max_cache_size = new_max_cache_size;
- cache_ptr->min_clean_size = new_min_clean_size;
-
- if ( status == increase ) {
-
- cache_ptr->cache_full = FALSE;
-
- } else if ( status == decrease ) {
-
- cache_ptr->size_decreased = TRUE;
- }
-
- /* update flash cache size increase fields as appropriate */
- if ( cache_ptr->flash_size_increase_possible ) {
-
- switch ( (cache_ptr->resize_ctl).flash_incr_mode )
- {
- case H5C1_flash_incr__off:
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "flash_size_increase_possible but H5C1_flash_incr__off?!")
- break;
-
- case H5C1_flash_incr__add_space:
- cache_ptr->flash_size_increase_threshold =
- (size_t)
- (((double)(cache_ptr->max_cache_size)) *
- ((cache_ptr->resize_ctl).flash_threshold));
- break;
-
- default: /* should be unreachable */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Unknown flash_incr_mode?!?!?.")
- break;
- }
- }
- }
-
- if ( (cache_ptr->resize_ctl).rpt_fcn != NULL ) {
-
- (*((cache_ptr->resize_ctl).rpt_fcn))
- (cache_ptr,
- H5C1__CURR_AUTO_RESIZE_RPT_FCN_VER,
- hit_rate,
- status,
- old_max_cache_size,
- new_max_cache_size,
- old_min_clean_size,
- new_min_clean_size);
- }
-
- if ( H5C1_reset_cache_hit_rate_stats(cache_ptr) != SUCCEED ) {
-
- /* this should be impossible... */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_reset_cache_hit_rate_stats failed.")
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1__auto_adjust_cache_size() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1__autoadjust__ageout
- *
- * Purpose: Implement the ageout automatic cache size decrement
- * algorithm. Note that while this code evicts aged out
- * entries, the code does not change the maximum cache size.
- * Instead, the function simply computes the new value (if
- * any change is indicated) and reports this value in
- * *new_max_cache_size_ptr.
- *
- * Return: Non-negative on success/Negative on failure or if there was
- * an attempt to flush a protected item.
- *
- *
- * Programmer: John Mainzer, 11/18/04
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static herr_t
-H5C1__autoadjust__ageout(H5C1_t * cache_ptr,
- double hit_rate,
- enum H5C1_resize_status * status_ptr,
- size_t * new_max_cache_size_ptr,
- H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- hbool_t write_permitted,
- hbool_t * first_flush_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- herr_t result;
- size_t test_size;
-
- FUNC_ENTER_NOAPI_NOINIT(H5C1__autoadjust__ageout)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( ( status_ptr ) && ( *status_ptr == in_spec ) );
- HDassert( ( new_max_cache_size_ptr ) && ( *new_max_cache_size_ptr == 0 ) );
-
- /* remove excess epoch markers if any */
- if ( cache_ptr->epoch_markers_active >
- (cache_ptr->resize_ctl).epochs_before_eviction ) {
-
- result = H5C1__autoadjust__ageout__remove_excess_markers(cache_ptr);
-
- if ( result != SUCCEED ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "can't remove excess epoch markers.")
- }
- }
-
- if ( ( (cache_ptr->resize_ctl).decr_mode == H5C1_decr__age_out )
- ||
- ( ( (cache_ptr->resize_ctl).decr_mode ==
- H5C1_decr__age_out_with_threshold
- )
- &&
- ( hit_rate >= (cache_ptr->resize_ctl).upper_hr_threshold )
- )
- ) {
-
- if ( cache_ptr->max_cache_size > (cache_ptr->resize_ctl).min_size ){
-
- /* evict aged out cache entries if appropriate... */
- result = H5C1__autoadjust__ageout__evict_aged_out_entries
- (
- f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- write_permitted,
- first_flush_ptr
- );
-
- if ( result != SUCCEED ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "error flushing aged out entries.")
- }
-
- /* ... and then reduce cache size if appropriate */
- if ( cache_ptr->index_size < cache_ptr->max_cache_size ) {
-
- if ( (cache_ptr->resize_ctl).apply_empty_reserve ) {
-
- test_size = (size_t)(((double)cache_ptr->index_size) /
- (1 - (cache_ptr->resize_ctl).empty_reserve));
-
- if ( test_size < cache_ptr->max_cache_size ) {
-
- *status_ptr = decrease;
- *new_max_cache_size_ptr = test_size;
- }
- } else {
-
- *status_ptr = decrease;
- *new_max_cache_size_ptr = cache_ptr->index_size;
- }
-
- if ( *status_ptr == decrease ) {
-
- /* clip to min size if necessary */
- if ( *new_max_cache_size_ptr <
- (cache_ptr->resize_ctl).min_size ) {
-
- *new_max_cache_size_ptr =
- (cache_ptr->resize_ctl).min_size;
- }
-
- /* clip to max decrement if necessary */
- if ( ( (cache_ptr->resize_ctl).apply_max_decrement ) &&
- ( ((cache_ptr->resize_ctl).max_decrement +
- *new_max_cache_size_ptr) <
- cache_ptr->max_cache_size ) ) {
-
- *new_max_cache_size_ptr = cache_ptr->max_cache_size -
- (cache_ptr->resize_ctl).max_decrement;
- }
- }
- }
- } else {
-
- *status_ptr = at_min_size;
- }
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1__autoadjust__ageout() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1__autoadjust__ageout__cycle_epoch_marker
- *
- * Purpose: Remove the oldest epoch marker from the LRU list,
- * and reinsert it at the head of the LRU list. Also
- * remove the epoch marker's index from the head of the
- * ring buffer, and re-insert it at the tail of the ring
- * buffer.
- *
- * Return: SUCCEED on success/FAIL on failure.
- *
- * Programmer: John Mainzer, 11/22/04
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static herr_t
-H5C1__autoadjust__ageout__cycle_epoch_marker(H5C1_t * cache_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- int i;
-
- FUNC_ENTER_NOAPI_NOINIT(H5C1__autoadjust__ageout__cycle_epoch_marker)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
-
- if ( cache_ptr->epoch_markers_active <= 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "No active epoch markers on entry?!?!?.")
- }
-
- /* remove the last marker from both the ring buffer and the LRU list */
-
- i = cache_ptr->epoch_marker_ringbuf[cache_ptr->epoch_marker_ringbuf_first];
-
- cache_ptr->epoch_marker_ringbuf_first =
- (cache_ptr->epoch_marker_ringbuf_first + 1) %
- (H5C1__MAX_EPOCH_MARKERS + 1);
-
- cache_ptr->epoch_marker_ringbuf_size -= 1;
-
- if ( cache_ptr->epoch_marker_ringbuf_size < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "ring buffer underflow.")
- }
-
- if ( (cache_ptr->epoch_marker_active)[i] != TRUE ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unused marker in LRU?!?")
- }
-
- H5C1__DLL_REMOVE((&((cache_ptr->epoch_markers)[i])), \
- (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, \
- (FAIL))
-
- /* now, re-insert it at the head of the LRU list, and at the tail of
- * the ring buffer.
- */
-
- HDassert( ((cache_ptr->epoch_markers)[i]).addr == (haddr_t)i );
- HDassert( ((cache_ptr->epoch_markers)[i]).next == NULL );
- HDassert( ((cache_ptr->epoch_markers)[i]).prev == NULL );
-
- cache_ptr->epoch_marker_ringbuf_last =
- (cache_ptr->epoch_marker_ringbuf_last + 1) %
- (H5C1__MAX_EPOCH_MARKERS + 1);
-
- (cache_ptr->epoch_marker_ringbuf)[cache_ptr->epoch_marker_ringbuf_last] = i;
-
- cache_ptr->epoch_marker_ringbuf_size += 1;
-
- if ( cache_ptr->epoch_marker_ringbuf_size > H5C1__MAX_EPOCH_MARKERS ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "ring buffer overflow.")
- }
-
- H5C1__DLL_PREPEND((&((cache_ptr->epoch_markers)[i])), \
- (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, \
- (FAIL))
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1__autoadjust__ageout__cycle_epoch_marker() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1__autoadjust__ageout__evict_aged_out_entries
- *
- * Purpose: Evict clean entries in the cache that haven't
- * been accessed for at least
- * (cache_ptr->resize_ctl).epochs_before_eviction epochs,
- * and flush dirty entries that haven't been accessed for
- * that amount of time.
- *
- * Depending on configuration, the function will either
- * flush or evict all such entries, or all such entries it
- * encounters until it has freed the maximum amount of space
- * allowed under the maximum decrement.
- *
- * If we are running in parallel mode, writes may not be
- * permitted. If so, the function simply skips any dirty
- * entries it may encounter.
- *
- * The function makes no attempt to maintain the minimum
- * clean size, as there is no guarantee that the cache size
- * will be changed.
- *
- * If there is no cache size change, the minimum clean size
- * constraint will be met through a combination of clean
- * entries and free space in the cache.
- *
- * If there is a cache size reduction, the minimum clean size
- * will be re-calculated, and will be enforced the next time
- * we have to make space in the cache.
- *
- * The primary_dxpl_id and secondary_dxpl_id parameters
- * specify the dxpl_ids used depending on the value of
- * *first_flush_ptr. The idea is to use the primary_dxpl_id
- * on the first write in a sequence of writes, and to use
- * the secondary_dxpl_id on all subsequent writes.
- *
- * This is useful in the metadata cache, but may not be
- * needed elsewhere. If so, just use the same dxpl_id for
- * both parameters.
- *
- * Observe that this function cannot occasion a read.
- *
- * Return: Non-negative on success/Negative on failure.
- *
- * Programmer: John Mainzer, 11/22/04
- *
- * Modifications:
- *
- * JRM -- 10/13/07
- * Added code to detect and manage the case in which a
- * flush callback changes the LRU-list out from under
- * the function. The only way I can think of in which this
- * can happen is if a flush function loads an entry
- * into the cache that isn't there already. Quincey tells
- * me that this will never happen, but I'm not sure I
- * believe him.
- *
- * Note that this is a pretty bad scenario if it ever
- * happens. The code I have added should allow us to
- * handle the situation under all but the worst conditions,
- * but one can argue that I should just scream and die if I
- * ever detect the condidtion.
- *
- *-------------------------------------------------------------------------
- */
-
-static herr_t
-H5C1__autoadjust__ageout__evict_aged_out_entries(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- hbool_t write_permitted,
- hbool_t * first_flush_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- herr_t result;
- size_t eviction_size_limit;
- size_t bytes_evicted = 0;
- hbool_t prev_is_dirty = FALSE;
- H5C1_cache_entry_t * entry_ptr;
- H5C1_cache_entry_t * next_ptr;
- H5C1_cache_entry_t * prev_ptr;
-
- FUNC_ENTER_NOAPI_NOINIT(H5C1__autoadjust__ageout__evict_aged_out_entries)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
-
- /* if there is a limit on the amount that the cache size can be decrease
- * in any one round of the cache size reduction algorithm, load that
- * limit into eviction_size_limit. Otherwise, set eviction_size_limit
- * to the equivalent of infinity. The current size of the index will
- * do nicely.
- */
- if ( (cache_ptr->resize_ctl).apply_max_decrement ) {
-
- eviction_size_limit = (cache_ptr->resize_ctl).max_decrement;
-
- } else {
-
- eviction_size_limit = cache_ptr->index_size; /* i.e. infinity */
- }
-
- if ( write_permitted ) {
-
- entry_ptr = cache_ptr->LRU_tail_ptr;
-
- while ( ( entry_ptr != NULL ) &&
- ( (entry_ptr->type)->id != H5C1__EPOCH_MARKER_TYPE ) &&
- ( bytes_evicted < eviction_size_limit ) )
- {
- HDassert( ! (entry_ptr->is_protected) );
-
- next_ptr = entry_ptr->next;
- prev_ptr = entry_ptr->prev;
-
- if ( prev_ptr != NULL ) {
-
- prev_is_dirty = prev_ptr->is_dirty;
- }
-
- if ( entry_ptr->is_dirty ) {
-
- result = H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- entry_ptr->type,
- entry_ptr->addr,
- H5C1__NO_FLAGS_SET,
- first_flush_ptr,
- FALSE);
- } else {
-
- bytes_evicted += entry_ptr->size;
-
- result = H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- entry_ptr->type,
- entry_ptr->addr,
- H5C1__FLUSH_INVALIDATE_FLAG,
- first_flush_ptr,
- TRUE);
- }
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "unable to flush entry")
- }
-
- if ( prev_ptr != NULL ) {
-#ifndef NDEBUG
- if ( prev_ptr->magic != H5C1__H5C1_CACHE_ENTRY_T_MAGIC ) {
-
- /* something horrible has happened to *prev_ptr --
- * scream and die.
- */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "*prev_ptr corrupt")
-
- } else
-#endif /* NDEBUG */
- if ( ( prev_ptr->is_dirty != prev_is_dirty )
- ||
- ( prev_ptr->next != next_ptr )
- ||
- ( prev_ptr->is_protected )
- ||
- ( prev_ptr->is_pinned ) ) {
-
- /* something has happened to the LRU -- start over
- * from the tail.
- */
- entry_ptr = cache_ptr->LRU_tail_ptr;
-
- } else {
-
- entry_ptr = prev_ptr;
-
- }
- } else {
-
- entry_ptr = NULL;
-
- }
- } /* end while */
-
- /* for now at least, don't bother to maintain the minimum clean size,
- * as the cache should now be less than its maximum size. Due to
- * the vaguries of the cache size reduction algorthim, we may not
- * reduce the size of the cache.
- *
- * If we do, we will calculate a new minimum clean size, which will
- * be enforced the next time we try to make space in the cache.
- *
- * If we don't, no action is necessary, as we have just evicted and/or
- * or flushed a bunch of entries and therefore the sum of the clean
- * and free space in the cache must be greater than or equal to the
- * min clean space requirement (assuming that requirement was met on
- * entry).
- */
-
- } else /* ! write_permitted */ {
-
- /* since we are not allowed to write, all we can do is evict
- * any clean entries that we may encounter before we either
- * hit the eviction size limit, or encounter the epoch marker.
- *
- * If we are operating read only, this isn't an issue, as there
- * will not be any dirty entries.
- *
- * If we are operating in R/W mode, all the dirty entries we
- * skip will be flushed the next time we attempt to make space
- * when writes are permitted. This may have some local
- * performance implications, but it shouldn't cause any net
- * slowdown.
- */
-
- HDassert( H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS );
-
- entry_ptr = cache_ptr->LRU_tail_ptr;
-
- while ( ( entry_ptr != NULL ) &&
- ( (entry_ptr->type)->id != H5C1__EPOCH_MARKER_TYPE ) &&
- ( bytes_evicted < eviction_size_limit ) )
- {
- HDassert( ! (entry_ptr->is_protected) );
-
- prev_ptr = entry_ptr->prev;
-
- if ( ! (entry_ptr->is_dirty) ) {
-
- result = H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- entry_ptr->type,
- entry_ptr->addr,
- H5C1__FLUSH_INVALIDATE_FLAG,
- first_flush_ptr,
- TRUE);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "unable to flush clean entry")
- }
- }
- /* just skip the entry if it is dirty, as we can't do
- * anything with it now since we can't write.
- */
-
- entry_ptr = prev_ptr;
-
- } /* end while */
- }
-
- if ( cache_ptr->index_size < cache_ptr->max_cache_size ) {
-
- cache_ptr->cache_full = FALSE;
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1__autoadjust__ageout__evict_aged_out_entries() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1__autoadjust__ageout__insert_new_marker
- *
- * Purpose: Find an unused marker cache entry, mark it as used, and
- * insert it at the head of the LRU list. Also add the
- * marker's index in the epoch_markers array.
- *
- * Return: SUCCEED on success/FAIL on failure.
- *
- * Programmer: John Mainzer, 11/19/04
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static herr_t
-H5C1__autoadjust__ageout__insert_new_marker(H5C1_t * cache_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- int i;
-
- FUNC_ENTER_NOAPI_NOINIT(H5C1__autoadjust__ageout__insert_new_marker)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
-
- if ( cache_ptr->epoch_markers_active >=
- (cache_ptr->resize_ctl).epochs_before_eviction ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Already have a full complement of markers.")
- }
-
- /* find an unused marker */
- i = 0;
- while ( ( (cache_ptr->epoch_marker_active)[i] ) &&
- ( i < H5C1__MAX_EPOCH_MARKERS ) )
- {
- i++;
- }
-
- HDassert( i < H5C1__MAX_EPOCH_MARKERS );
-
- if ( (cache_ptr->epoch_marker_active)[i] != FALSE ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't find unused marker.")
- }
-
- HDassert( ((cache_ptr->epoch_markers)[i]).addr == (haddr_t)i );
- HDassert( ((cache_ptr->epoch_markers)[i]).next == NULL );
- HDassert( ((cache_ptr->epoch_markers)[i]).prev == NULL );
-
- (cache_ptr->epoch_marker_active)[i] = TRUE;
-
- cache_ptr->epoch_marker_ringbuf_last =
- (cache_ptr->epoch_marker_ringbuf_last + 1) %
- (H5C1__MAX_EPOCH_MARKERS + 1);
-
- (cache_ptr->epoch_marker_ringbuf)[cache_ptr->epoch_marker_ringbuf_last] = i;
-
- cache_ptr->epoch_marker_ringbuf_size += 1;
-
- if ( cache_ptr->epoch_marker_ringbuf_size > H5C1__MAX_EPOCH_MARKERS ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "ring buffer overflow.")
- }
-
- H5C1__DLL_PREPEND((&((cache_ptr->epoch_markers)[i])), \
- (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, \
- (FAIL))
-
- cache_ptr->epoch_markers_active += 1;
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1__autoadjust__ageout__insert_new_marker() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1__autoadjust__ageout__remove_all_markers
- *
- * Purpose: Remove all epoch markers from the LRU list and mark them
- * as inactive.
- *
- * Return: SUCCEED on success/FAIL on failure.
- *
- * Programmer: John Mainzer, 11/22/04
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static herr_t
-H5C1__autoadjust__ageout__remove_all_markers(H5C1_t * cache_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- int i;
- int ring_buf_index;
-
- FUNC_ENTER_NOAPI_NOINIT(H5C1__autoadjust__ageout__remove_all_markers)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
-
- while ( cache_ptr->epoch_markers_active > 0 )
- {
- /* get the index of the last epoch marker in the LRU list
- * and remove it from the ring buffer.
- */
-
- ring_buf_index = cache_ptr->epoch_marker_ringbuf_first;
- i = (cache_ptr->epoch_marker_ringbuf)[ring_buf_index];
-
- cache_ptr->epoch_marker_ringbuf_first =
- (cache_ptr->epoch_marker_ringbuf_first + 1) %
- (H5C1__MAX_EPOCH_MARKERS + 1);
-
- cache_ptr->epoch_marker_ringbuf_size -= 1;
-
- if ( cache_ptr->epoch_marker_ringbuf_size < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "ring buffer underflow.")
- }
-
- if ( (cache_ptr->epoch_marker_active)[i] != TRUE ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unused marker in LRU?!?")
- }
-
- /* remove the epoch marker from the LRU list */
- H5C1__DLL_REMOVE((&((cache_ptr->epoch_markers)[i])), \
- (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, \
- (FAIL))
-
- /* mark the epoch marker as unused. */
- (cache_ptr->epoch_marker_active)[i] = FALSE;
-
- HDassert( ((cache_ptr->epoch_markers)[i]).addr == (haddr_t)i );
- HDassert( ((cache_ptr->epoch_markers)[i]).next == NULL );
- HDassert( ((cache_ptr->epoch_markers)[i]).prev == NULL );
-
- /* decrement the number of active epoch markers */
- cache_ptr->epoch_markers_active -= 1;
-
- HDassert( cache_ptr->epoch_markers_active == \
- cache_ptr->epoch_marker_ringbuf_size );
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1__autoadjust__ageout__remove_all_markers() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1__autoadjust__ageout__remove_excess_markers
- *
- * Purpose: Remove epoch markers from the end of the LRU list and
- * mark them as inactive until the number of active markers
- * equals the the current value of
- * (cache_ptr->resize_ctl).epochs_before_eviction.
- *
- * Return: SUCCEED on success/FAIL on failure.
- *
- * Programmer: John Mainzer, 11/19/04
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static herr_t
-H5C1__autoadjust__ageout__remove_excess_markers(H5C1_t * cache_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- int i;
- int ring_buf_index;
-
- FUNC_ENTER_NOAPI_NOINIT(H5C1__autoadjust__ageout__remove_excess_markers)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
-
- if ( cache_ptr->epoch_markers_active <=
- (cache_ptr->resize_ctl).epochs_before_eviction ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "no excess markers on entry.")
- }
-
- while ( cache_ptr->epoch_markers_active >
- (cache_ptr->resize_ctl).epochs_before_eviction )
- {
- /* get the index of the last epoch marker in the LRU list
- * and remove it from the ring buffer.
- */
-
- ring_buf_index = cache_ptr->epoch_marker_ringbuf_first;
- i = (cache_ptr->epoch_marker_ringbuf)[ring_buf_index];
-
- cache_ptr->epoch_marker_ringbuf_first =
- (cache_ptr->epoch_marker_ringbuf_first + 1) %
- (H5C1__MAX_EPOCH_MARKERS + 1);
-
- cache_ptr->epoch_marker_ringbuf_size -= 1;
-
- if ( cache_ptr->epoch_marker_ringbuf_size < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "ring buffer underflow.")
- }
-
- if ( (cache_ptr->epoch_marker_active)[i] != TRUE ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "unused marker in LRU?!?")
- }
-
- /* remove the epoch marker from the LRU list */
- H5C1__DLL_REMOVE((&((cache_ptr->epoch_markers)[i])), \
- (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, \
- (FAIL))
-
- /* mark the epoch marker as unused. */
- (cache_ptr->epoch_marker_active)[i] = FALSE;
-
- HDassert( ((cache_ptr->epoch_markers)[i]).addr == (haddr_t)i );
- HDassert( ((cache_ptr->epoch_markers)[i]).next == NULL );
- HDassert( ((cache_ptr->epoch_markers)[i]).prev == NULL );
-
- /* decrement the number of active epoch markers */
- cache_ptr->epoch_markers_active -= 1;
-
- HDassert( cache_ptr->epoch_markers_active == \
- cache_ptr->epoch_marker_ringbuf_size );
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1__autoadjust__ageout__remove_excess_markers() */
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1__flash_increase_cache_size
- *
- * Purpose: If there is not at least new_entry_size - old_entry_size
- * bytes of free space in the cache and the current
- * max_cache_size is less than (cache_ptr->resize_ctl).max_size,
- * perform a flash increase in the cache size and then reset
- * the full cache hit rate statistics, and exit.
- *
- * Return: Non-negative on success/Negative on failure.
- *
- * Programmer: John Mainzer, 12/31/07
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static herr_t
-H5C1__flash_increase_cache_size(H5C1_t * cache_ptr,
- size_t old_entry_size,
- size_t new_entry_size)
-{
- /* const char * fcn_name = "H5C1__flash_increase_cache_size()";*/
- herr_t ret_value = SUCCEED; /* Return value */
- size_t new_max_cache_size = 0;
- size_t old_max_cache_size = 0;
- size_t new_min_clean_size = 0;
- size_t old_min_clean_size = 0;
- size_t space_needed;
- enum H5C1_resize_status status = flash_increase; /* may change */
- double hit_rate;
-
- FUNC_ENTER_NOAPI_NOINIT(H5C1__flash_increase_cache_size)
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( cache_ptr->flash_size_increase_possible );
- HDassert( new_entry_size > cache_ptr->flash_size_increase_threshold );
- HDassert( old_entry_size < new_entry_size );
-
- if ( old_entry_size >= new_entry_size ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "old_entry_size >= new_entry_size")
- }
-
- space_needed = new_entry_size - old_entry_size;
-
- if ( ( (cache_ptr->index_size + space_needed) >
- cache_ptr->max_cache_size ) &&
- ( cache_ptr->max_cache_size < (cache_ptr->resize_ctl).max_size ) ) {
-
- /* we have work to do */
-
- switch ( (cache_ptr->resize_ctl).flash_incr_mode )
- {
- case H5C1_flash_incr__off:
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "flash_size_increase_possible but H5C1_flash_incr__off?!")
- break;
-
- case H5C1_flash_incr__add_space:
- if ( cache_ptr->index_size < cache_ptr->max_cache_size ) {
-
- HDassert( (cache_ptr->max_cache_size - cache_ptr->index_size)
- < space_needed );
- space_needed -= cache_ptr->max_cache_size - cache_ptr->index_size;
- }
- space_needed =
- (size_t)(((double)space_needed) *
- (cache_ptr->resize_ctl).flash_multiple);
-
- new_max_cache_size = cache_ptr->max_cache_size + space_needed;
-
- break;
-
- default: /* should be unreachable */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Unknown flash_incr_mode?!?!?.")
- break;
- }
-
- if ( new_max_cache_size > (cache_ptr->resize_ctl).max_size ) {
-
- new_max_cache_size = (cache_ptr->resize_ctl).max_size;
- }
-
- HDassert( new_max_cache_size > cache_ptr->max_cache_size );
-
- new_min_clean_size = (size_t)
- ((double)new_max_cache_size *
- ((cache_ptr->resize_ctl).min_clean_fraction));
-
- HDassert( new_min_clean_size <= new_max_cache_size );
-
- old_max_cache_size = cache_ptr->max_cache_size;
- old_min_clean_size = cache_ptr->min_clean_size;
-
- cache_ptr->max_cache_size = new_max_cache_size;
- cache_ptr->min_clean_size = new_min_clean_size;
-
- /* update flash cache size increase fields as appropriate */
- HDassert ( cache_ptr->flash_size_increase_possible );
-
- switch ( (cache_ptr->resize_ctl).flash_incr_mode )
- {
- case H5C1_flash_incr__off:
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "flash_size_increase_possible but H5C1_flash_incr__off?!")
- break;
-
- case H5C1_flash_incr__add_space:
- cache_ptr->flash_size_increase_threshold =
- (size_t)
- (((double)(cache_ptr->max_cache_size)) *
- ((cache_ptr->resize_ctl).flash_threshold));
- break;
-
- default: /* should be unreachable */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Unknown flash_incr_mode?!?!?.")
- break;
- }
-
- /* note that we don't cycle the epoch markers. We can
- * argue either way as to whether we should, but for now
- * we don't.
- */
-
- if ( (cache_ptr->resize_ctl).rpt_fcn != NULL ) {
-
- /* get the hit rate for the reporting function. Should still
- * be good as we havent reset the hit rate statistics.
- */
- if ( H5C1_get_cache_hit_rate(cache_ptr, &hit_rate) != SUCCEED ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Can't get hit rate.")
- }
-
- (*((cache_ptr->resize_ctl).rpt_fcn))
- (cache_ptr,
- H5C1__CURR_AUTO_RESIZE_RPT_FCN_VER,
- hit_rate,
- status,
- old_max_cache_size,
- new_max_cache_size,
- old_min_clean_size,
- new_min_clean_size);
- }
-
- if ( H5C1_reset_cache_hit_rate_stats(cache_ptr) != SUCCEED ) {
-
- /* this should be impossible... */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "H5C1_reset_cache_hit_rate_stats failed.")
- }
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1__flash_increase_cache_size() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5C1_flush_invalidate_cache
- *
- * Purpose: Flush and destroy the entries contained in the target
- * cache.
- *
- * If the cache contains protected entries, the function will
- * fail, as protected entries cannot be either flushed or
- * destroyed. However all unprotected entries should be
- * flushed and destroyed before the function returns failure.
- *
- * While pinned entries can usually be flushed, they cannot
- * be destroyed. However, they should be unpinned when all
- * the entries that reference them have been destroyed (thus
- * reduding the pinned entry's reference count to 0, allowing
- * it to be unpinned).
- *
- * If pinned entries are present, the function makes repeated
- * passes through the cache, flushing all dirty entries
- * (including the pinned dirty entries where permitted) and
- * destroying all unpinned entries. This process is repeated
- * until either the cache is empty, or the number of pinned
- * entries stops decreasing on each pass.
- *
- * The primary_dxpl_id and secondary_dxpl_id parameters
- * specify the dxpl_ids used on the first write occasioned
- * by the flush (primary_dxpl_id), and on all subsequent
- * writes (secondary_dxpl_id).
- *
- * Return: Non-negative on success/Negative on failure or if there was
- * a request to flush all items and something was protected.
- *
- * Programmer: John Mainzer
- * 3/24/065
- *
- * Modifications:
- *
- * To support the fractal heap, the cache must now deal with
- * entries being dirtied, resized, and/or renamed inside
- * flush callbacks. Updated function to support this.
- *
- * -- JRM 8/27/06
- *
- * Added code to detect and manage the case in which a
- * flush callback changes the s-list out from under
- * the function. The only way I can think of in which this
- * can happen is if a flush function loads an entry
- * into the cache that isn't there already. Quincey tells
- * me that this will never happen, but I'm not sure I
- * believe him.
- *
- * Note that this is a pretty bad scenario if it ever
- * happens. The code I have added should allow us to
- * handle the situation under all but the worst conditions,
- * but one can argue that I should just scream and die if I
- * ever detect the condidtion.
- *
- * -- JRM 10/13/07
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5C1_flush_invalidate_cache(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- unsigned flags)
-{
- herr_t status;
- herr_t ret_value = SUCCEED;
- hbool_t done = FALSE;
- hbool_t first_flush = TRUE;
- hbool_t first_pass = TRUE;
- hbool_t have_pinned_entries;
- int32_t protected_entries = 0;
- int32_t i;
- int32_t cur_pel_len;
- int32_t old_pel_len;
- int32_t passes = 0;
- unsigned cooked_flags;
- H5SL_node_t * node_ptr = NULL;
- H5C1_cache_entry_t * entry_ptr = NULL;
- H5C1_cache_entry_t * next_entry_ptr = NULL;
-#if H5C1_DO_SANITY_CHECKS
- int64_t actual_slist_len = 0;
- int64_t initial_slist_len = 0;
- size_t actual_slist_size = 0;
- size_t initial_slist_size = 0;
-#endif /* H5C1_DO_SANITY_CHECKS */
-
- FUNC_ENTER_NOAPI(H5C1_flush_invalidate_cache, FAIL)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( cache_ptr->skip_file_checks || f );
- HDassert( cache_ptr->slist_ptr );
-
- /* Filter out the flags that are not relevant to the flush/invalidate.
- * At present, only the H5C1__FLUSH_CLEAR_ONLY_FLAG is kept.
- */
- cooked_flags = flags & H5C1__FLUSH_CLEAR_ONLY_FLAG;
-
- /* remove ageout markers if present */
- if ( cache_ptr->epoch_markers_active > 0 ) {
-
- status = H5C1__autoadjust__ageout__remove_all_markers(cache_ptr);
-
- if ( status != SUCCEED ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "error removing all epoch markers.")
- }
- }
-
- /* The flush proceedure here is a bit strange.
- *
- * In the outer while loop we make at least one pass through the
- * cache, and then repeat until either all the pinned entries
- * unpin themselves, or until the number of pinned entries stops
- * declining. In this later case, we scream and die.
- *
- * Since the fractal heap can dirty, resize, and/or rename entries
- * in is flush callback, it is possible that the cache will still
- * contain dirty entries at this point. If so, we must make up to
- * H5C1__MAX_PASSES_ON_FLUSH more passes through the skip list
- * to allow it to empty. If is is not empty at this point, we again
- * scream and die.
- *
- * Further, since clean entries can be dirtied, resized, and/or renamed
- * as the result of a flush call back (either the entries own, or that
- * for some other cache entry), we can no longer promise to flush
- * the cache entries in increasing address order.
- *
- * Instead, we just do the best we can -- making a pass through
- * the skip list, and then a pass through the "clean" entries, and
- * then repeating as needed. Thus it is quite possible that an
- * entry will be evicted from the cache only to be re-loaded later
- * in the flush process (From what Quincey tells me, the pin
- * mechanism makes this impossible, but even it it is true now,
- * we shouldn't count on it in the future.)
- *
- * The bottom line is that entries will probably be flushed in close
- * to increasing address order, but there are no guarantees.
- */
-
- cur_pel_len = cache_ptr->pel_len;
- old_pel_len = cache_ptr->pel_len;
-
- while ( ! done )
- {
- first_pass = FALSE;
-
- have_pinned_entries = ( cur_pel_len > 0 );
-
- /* first, try to flush-destroy any dirty entries. Do this by
- * making a scan through the slist. Note that new dirty entries
- * may be created by the flush call backs. Thus it is possible
- * that the slist will not be empty after we finish the scan.
- */
-
- if ( cache_ptr->slist_len == 0 ) {
-
- node_ptr = NULL;
- HDassert( cache_ptr->slist_size == 0 );
-
- } else {
-
- node_ptr = H5SL_first(cache_ptr->slist_ptr);
-
- if ( node_ptr == NULL ) {
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "slist_len != 0 && node_ptr == NULL");
- }
-
- next_entry_ptr = (H5C1_cache_entry_t *)H5SL_item(node_ptr);
-
- if ( next_entry_ptr == NULL ) {
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "next_entry_ptr == NULL 1 ?!?!");
- }
-#ifndef NDEBUG
- HDassert( next_entry_ptr->magic == H5C1__H5C1_CACHE_ENTRY_T_MAGIC );
-#endif /* NDEBUG */
- HDassert( next_entry_ptr->is_dirty );
- HDassert( next_entry_ptr->in_slist );
-
- }
-#if H5C1_DO_SANITY_CHECKS
- /* Depending on circumstances, H5C1_flush_single_entry() will
- * remove dirty entries from the slist as it flushes them.
- * Thus for sanity checks we must make note of the initial
- * slist length and size before we do any flushes.
- */
- initial_slist_len = cache_ptr->slist_len;
- initial_slist_size = cache_ptr->slist_size;
-
- /* There is also the possibility that entries will be
- * dirtied, resized, and/or renamed as the result of
- * calls to the flush callbacks. We use the slist_len_increase
- * and slist_size_increase increase fields in struct H5C1_t
- * to track these changes for purpose of sanity checking.
- * To this end, we must zero these fields before we start
- * the pass through the slist.
- */
- cache_ptr->slist_len_increase = 0;
- cache_ptr->slist_size_increase = 0;
-
- /* Finally, reset the actual_slist_len and actual_slist_size
- * fields to zero, as these fields are used to accumulate
- * the slist lenght and size that we see as we scan through
- * the slist.
- */
- actual_slist_len = 0;
- actual_slist_size = 0;
-#endif /* H5C1_DO_SANITY_CHECKS */
-
- while ( node_ptr != NULL )
- {
- entry_ptr = next_entry_ptr;
-
- /* With the advent of the fractal heap, it is possible
- * that the flush callback will dirty and/or resize
- * other entries in the cache. In particular, while
- * Quincey has promised me that this will never happen,
- * it is possible that the flush callback for an
- * entry may protect an entry that is not in the cache,
- * perhaps causing the cache to flush and possibly
- * evict the entry associated with node_ptr to make
- * space for the new entry.
- *
- * Thus we do a bit of extra sanity checking on entry_ptr,
- * and break out of this scan of the skip list if we
- * detect major problems. We have a bit of leaway on the
- * number of passes though the skip list, so this shouldn't
- * be an issue in the flush in and of itself, as it should
- * be all but impossible for this to happen more than once
- * in any flush.
- *
- * Observe that that breaking out of the scan early
- * shouldn't break the sanity checks just after the end
- * of this while loop.
- *
- * If an entry has merely been marked clean and removed from
- * the s-list, we simply break out of the scan.
- *
- * If the entry has been evicted, we flag an error and
- * exit.
- */
-#ifndef NDEBUG
- if ( entry_ptr->magic != H5C1__H5C1_CACHE_ENTRY_T_MAGIC ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "entry_ptr->magic is invalid ?!?!");
-
- } else
-#endif /* NDEBUG */
- if ( ( ! entry_ptr->is_dirty ) ||
- ( ! entry_ptr->in_slist ) ) {
-
- /* the s-list has been modified out from under us.
- * break out of the loop.
- */
- break;
- }
-
- /* increment node pointer now, before we delete its target
- * from the slist.
- */
-
- node_ptr = H5SL_next(node_ptr);
- if ( node_ptr != NULL ) {
-
- next_entry_ptr = (H5C1_cache_entry_t *)H5SL_item(node_ptr);
-
- if ( next_entry_ptr == NULL ) {
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "next_entry_ptr == NULL 2 ?!?!");
- }
-#ifndef NDEBUG
- HDassert( next_entry_ptr->magic ==
- H5C1__H5C1_CACHE_ENTRY_T_MAGIC );
-#endif /* NDEBUG */
- HDassert( next_entry_ptr->is_dirty );
- HDassert( next_entry_ptr->in_slist );
-
- } else {
-
- next_entry_ptr = NULL;
- }
-
- /* Note that we now remove nodes from the slist as we flush
- * the associated entries, instead of leaving them there
- * until we are done, and then destroying all nodes in
- * the slist.
- *
- * While this optimization used to be easy, with the possibility
- * of new entries being added to the slist in the midst of the
- * flush, we must keep the slist in cannonical form at all
- * times.
- */
-
- HDassert( entry_ptr != NULL );
- HDassert( entry_ptr->in_slist );
-
-#if H5C1_DO_SANITY_CHECKS
- /* update actual_slist_len & actual_slist_size before
- * the flush. Note that the entry will be removed
- * from the slist after the flush, and thus may be
- * resized by the flush callback. This is OK, as
- * we will catch the size delta in
- * cache_ptr->slist_size_increase.
- *
- * Note that we include pinned entries in this count, even
- * though we will not actually flush them.
- */
- actual_slist_len++;
- actual_slist_size += entry_ptr->size;
-#endif /* H5C1_DO_SANITY_CHECKS */
-
- if ( entry_ptr->is_protected ) {
-
- /* we have major problems -- but lets flush
- * everything we can before we flag an error.
- */
- protected_entries++;
-
- } else if ( entry_ptr->is_pinned ) {
-
- /* Test to see if we are can flush the entry now.
- * If we can, go ahead and flush, but don't tell
- * H5C1_flush_single_entry() to destroy the entry
- * as pinned entries can't be evicted.
- */
- if ( TRUE ) { /* When we get to multithreaded cache,
- * we will need either locking code, and/or
- * a test to see if the entry is in flushable
- * condition here.
- */
-
- status = H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- NULL,
- entry_ptr->addr,
- H5C1__NO_FLAGS_SET,
- &first_flush,
- FALSE);
- if ( status < 0 ) {
-
- /* This shouldn't happen -- if it does, we are toast
- * so just scream and die.
- */
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "dirty pinned entry flush failed.")
- }
- }
- } else {
-
- status = H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- NULL,
- entry_ptr->addr,
- (cooked_flags |
- H5C1__FLUSH_INVALIDATE_FLAG),
- &first_flush,
- TRUE);
- if ( status < 0 ) {
-
- /* This shouldn't happen -- if it does, we are toast so
- * just scream and die.
- */
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "dirty entry flush destroy failed.")
- }
- }
- } /* end while loop scanning skip list */
-
-#if H5C1_DO_SANITY_CHECKS
- /* It is possible that entries were added to the slist during
- * the scan, either before or after scan pointer. The following
- * asserts take this into account.
- *
- * Don't bother with the sanity checks if node_ptr != NULL, as
- * in this case we broke out of the loop because it got changed
- * out from under us.
- */
-
- if ( node_ptr == NULL ) {
-
- HDassert( (actual_slist_len + cache_ptr->slist_len) ==
- (initial_slist_len + cache_ptr->slist_len_increase) );
- HDassert( (actual_slist_size + cache_ptr->slist_size) ==
- (initial_slist_size + cache_ptr->slist_size_increase) );
- }
-#endif /* H5C1_DO_SANITY_CHECKS */
-
- /* Since we are doing a destroy, we must make a pass through
- * the hash table and try to flush - destroy all entries that
- * remain.
- *
- * It used to be that all entries remaining in the cache at
- * this point had to be clean, but with the fractal heap mods
- * this may not be the case. If so, we will flush entries out
- * of increasing address order.
- *
- * Writes to disk are possible here.
- */
- for ( i = 0; i < H5C1__HASH_TABLE_LEN; i++ )
- {
- next_entry_ptr = cache_ptr->index[i];
-
- while ( next_entry_ptr != NULL )
- {
- entry_ptr = next_entry_ptr;
-
- next_entry_ptr = entry_ptr->ht_next;
-#ifndef NDEBUG
- HDassert ( ( next_entry_ptr == NULL ) ||
- ( next_entry_ptr->magic ==
- H5C1__H5C1_CACHE_ENTRY_T_MAGIC ) );
-#endif /* NDEBUG */
- if ( entry_ptr->is_protected ) {
-
- /* we have major problems -- but lets flush and destroy
- * everything we can before we flag an error.
- */
- protected_entries++;
-
- if ( ! entry_ptr->in_slist ) {
-
- HDassert( !(entry_ptr->is_dirty) );
- }
- } else if ( ! ( entry_ptr->is_pinned ) ) {
-
- status = H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- NULL,
- entry_ptr->addr,
- (cooked_flags |
- H5C1__FLUSH_INVALIDATE_FLAG),
- &first_flush,
- TRUE);
- if ( status < 0 ) {
-
- /* This shouldn't happen -- if it does, we are toast so
- * just scream and die.
- */
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "Entry flush destroy failed.")
- }
- }
- /* We can't do anything if the entry is pinned. The
- * hope is that the entry will be unpinned as the
- * result of destroys of entries that reference it.
- *
- * We detect this by noting the change in the number
- * of pinned entries from pass to pass. If it stops
- * shrinking before it hits zero, we scream and die.
- */
- /* if the flush function on the entry we last evicted
- * loaded an entry into cache (as Quincey has promised me
- * it never will), and if the cache was full, it is
- * possible that *next_entry_ptr was flushed or evicted.
- *
- * Test to see if this happened here. Note that if this
- * test is triggred, we are accessing a deallocated piece
- * of dynamically allocated memory, so we just scream and
- * die.
- */
-#ifndef NDEBUG
- if ( ( next_entry_ptr != NULL ) &&
- ( next_entry_ptr->magic !=
- H5C1__H5C1_CACHE_ENTRY_T_MAGIC ) ) {
-
- /* Something horrible has happened to
- * *next_entry_ptr -- scream and die.
- */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "next_entry_ptr->magic is invalid?!?!?.")
- }
-#endif /* NDEBUG */
- } /* end while loop scanning hash table bin */
- } /* end for loop scanning hash table */
-
- old_pel_len = cur_pel_len;
- cur_pel_len = cache_ptr->pel_len;
-
- if ( ( cur_pel_len > 0 ) && ( cur_pel_len >= old_pel_len ) ) {
-
- /* The number of pinned entries is positive, and it is not
- * declining. Scream and die.
- */
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "Can't unpin all pinned entries 1.")
-
- } else if ( ( cur_pel_len == 0 ) && ( old_pel_len == 0 ) ) {
-
- /* increment the pass count */
- passes++;
- }
-
- if ( passes >= H5C1__MAX_PASSES_ON_FLUSH ) {
-
- /* we have exceeded the maximum number of passes through the
- * cache to flush and destroy all entries. Scream and die.
- */
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "Maximum passes on flush exceeded.")
- }
-
- if ( cache_ptr->index_len <= 0 ) {
-
- done = TRUE;
- HDassert( cache_ptr->index_size == 0 );
- HDassert( cache_ptr->slist_len == 0 );
- HDassert( cache_ptr->slist_size == 0 );
- HDassert( cache_ptr->pel_len == 0 );
- HDassert( cache_ptr->pel_size == 0 );
- HDassert( cache_ptr->pl_len == 0 );
- HDassert( cache_ptr->pl_size == 0 );
- HDassert( cache_ptr->LRU_list_len == 0 );
- HDassert( cache_ptr->LRU_list_size == 0 );
- }
- } /* main while loop */
-
-
- HDassert( protected_entries <= cache_ptr->pl_len );
-
- if ( protected_entries > 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "Cache has protected entries.")
-
- } else if ( cur_pel_len > 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "Can't unpin all pinned entries 2.")
-
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_flush_invalidate_cache() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1_flush_single_entry
- *
- * Purpose: Flush or clear (and evict if requested) the cache entry
- * with the specified address and type. If the type is NULL,
- * any unprotected entry at the specified address will be
- * flushed (and possibly evicted).
- *
- * Attempts to flush a protected entry will result in an
- * error.
- *
- * *first_flush_ptr should be true if only one
- * flush is contemplated before the next load, or if this
- * is the first of a sequence of flushes that will be
- * completed before the next load. *first_flush_ptr is set
- * to false if a flush actually takes place, and should be
- * left false until the end of the sequence.
- *
- * The primary_dxpl_id is used if *first_flush_ptr is TRUE
- * on entry, and a flush actually takes place. The
- * secondary_dxpl_id is used in any subsequent flush where
- * *first_flush_ptr is FALSE on entry.
- *
- * If the H5C1__FLUSH_INVALIDATE_FLAG flag is set, the entry will
- * be cleared and not flushed -- in the case *first_flush_ptr,
- * primary_dxpl_id, and secondary_dxpl_id are all irrelevent,
- * and the call can't be part of a sequence of flushes.
- *
- * If the caller knows the address of the TBBT node at
- * which the target entry resides, it can avoid a lookup
- * by supplying that address in the tgt_node_ptr parameter.
- * If this parameter is NULL, the function will do a TBBT
- * search for the entry instead.
- *
- * The function does nothing silently if there is no entry
- * at the supplied address, or if the entry found has the
- * wrong type.
- *
- * Return: Non-negative on success/Negative on failure or if there was
- * an attempt to flush a protected item.
- *
- * Programmer: John Mainzer, 5/5/04
- *
- * Modifications:
- *
- * JRM -- 7/21/04
- * Updated function for the addition of the hash table.
- *
- * QAK -- 11/26/04
- * Updated function for the switch from TBBTs to skip lists.
- *
- * JRM -- 1/6/05
- * Updated function to reset the flush_marker field.
- * Also replace references to H5F_FLUSH_INVALIDATE and
- * H5F_FLUSH_CLEAR_ONLY with references to
- * H5C1__FLUSH_INVALIDATE_FLAG and H5C1__FLUSH_CLEAR_ONLY_FLAG
- * respectively.
- *
- * JRM -- 6/24/05
- * Added code to remove dirty entries from the slist after
- * they have been flushed. Also added a sanity check that
- * will scream if we attempt a write when writes are
- * completely disabled.
- *
- * JRM -- 7/5/05
- * Added code to call the new log_flush callback whenever
- * a dirty entry is written to disk. Note that the callback
- * is not called if the H5C1__FLUSH_CLEAR_ONLY_FLAG is set,
- * as there is no write to file in this case.
- *
- * JRM -- 8/21/06
- * Added code maintaining the flush_in_progress and
- * destroy_in_progress fields in H5C1_cache_entry_t.
- *
- * Also added flush_flags parameter to the call to
- * type_ptr->flush() so that the flush routine can report
- * whether the entry has been resized or renamed. Added
- * code using the flush_flags variable to detect the case
- * in which the target entry is resized during flush, and
- * update the caches data structures accordingly.
- *
- *
- * JRM -- 3/29/07
- * Added sanity checks on the new is_read_only and
- * ro_ref_count fields.
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5C1_flush_single_entry(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- const H5C1_class_t * type_ptr,
- haddr_t addr,
- unsigned flags,
- hbool_t * first_flush_ptr,
- hbool_t del_entry_from_slist_on_destroy)
-{
- hbool_t destroy;
- hbool_t clear_only;
- hbool_t was_dirty;
- herr_t ret_value = SUCCEED; /* Return value */
- herr_t status;
- int type_id;
- unsigned flush_flags = H5C1_CALLBACK__NO_FLAGS_SET;
- H5C1_cache_entry_t * entry_ptr = NULL;
-
- FUNC_ENTER_NOAPI_NOINIT(H5C1_flush_single_entry)
-
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( cache_ptr->skip_file_checks || f );
- HDassert( H5F_addr_defined(addr) );
- HDassert( first_flush_ptr );
-
- destroy = ( (flags & H5C1__FLUSH_INVALIDATE_FLAG) != 0 );
- clear_only = ( (flags & H5C1__FLUSH_CLEAR_ONLY_FLAG) != 0);
-
- /* attempt to find the target entry in the hash table */
- H5C1__SEARCH_INDEX(cache_ptr, addr, entry_ptr, FAIL)
-
-#if H5C1_DO_SANITY_CHECKS
- if ( entry_ptr != NULL ) {
-
- HDassert( ! ( ( destroy ) && ( entry_ptr->is_pinned ) ) );
-
- if ( entry_ptr->in_slist ) {
-
- if ( ( ( entry_ptr->flush_marker ) && ( ! entry_ptr->is_dirty ) ) ||
- ( entry_ptr->addr != addr ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "entry in slist failed sanity checks.")
- }
- } else {
-
- if ( ( entry_ptr->is_dirty ) ||
- ( entry_ptr->flush_marker ) ||
- ( entry_ptr->addr != addr ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "entry failed sanity checks.")
- }
- }
- }
-#if 0
- /* this should be useful for debugging from time to time.
- * lets leave it in for now. -- JRM 12/15/04
- */
- else {
- HDfprintf(stdout,
- "H5C1_flush_single_entry(): non-existant entry. addr = %a\n",
- addr);
- HDfflush(stdout);
- }
-#endif
-#endif /* H5C1_DO_SANITY_CHECKS */
-
- if ( ( entry_ptr != NULL ) && ( entry_ptr->is_protected ) )
- {
-
- /* Attempt to flush a protected entry -- scream and die. */
- HGOTO_ERROR(H5E_CACHE, H5E_PROTECT, FAIL, \
- "Attempt to flush a protected entry.")
- }
-
- if ( ( entry_ptr != NULL ) &&
- ( ( type_ptr == NULL ) || ( type_ptr->id == entry_ptr->type->id ) ) )
- {
- /* we have work to do */
-
- /* We will set flush_in_progress back to FALSE at the end if the
- * entry still exists at that point.
- */
- entry_ptr->flush_in_progress = TRUE;
-
-#ifdef H5_HAVE_PARALLEL
-#ifndef NDEBUG
-
- /* If MPI based VFD is used, do special parallel I/O sanity checks.
- * Note that we only do these sanity checks when the clear_only flag
- * is not set, and the entry to be flushed is dirty. Don't bother
- * otherwise as no file I/O can result.
- *
- * There are also cases (testing for instance) where it is convenient
- * to pass in dummy dxpl_ids. Since we don't use the dxpl_ids directly,
- * this isn't a problem -- but we do have to turn off sanity checks
- * involving them. We use cache_ptr->skip_dxpl_id_checks to do this.
- */
- if ( ( ! cache_ptr->skip_dxpl_id_checks ) &&
- ( ! clear_only ) &&
- ( entry_ptr->is_dirty ) &&
- ( IS_H5FD_MPI(f) ) ) {
-
- H5P_genplist_t *dxpl; /* Dataset transfer property list */
- H5FD_mpio_xfer_t xfer_mode; /* I/O xfer mode property value */
-
- /* Get the dataset transfer property list */
- if ( NULL == (dxpl = H5I_object(primary_dxpl_id)) ) {
-
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, \
- "not a dataset creation property list")
- }
-
- /* Get the transfer mode property */
- if( H5P_get(dxpl, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0 ) {
-
- HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, \
- "can't retrieve xfer mode")
- }
-
- /* Sanity check transfer mode */
- HDassert( xfer_mode == H5FD_MPIO_COLLECTIVE );
- }
-
-#endif /* NDEBUG */
-#endif /* H5_HAVE_PARALLEL */
-
- was_dirty = entry_ptr->is_dirty;
- type_id = entry_ptr->type->id;
-
- entry_ptr->flush_marker = FALSE;
-
- if ( clear_only ) {
- H5C1__UPDATE_STATS_FOR_CLEAR(cache_ptr, entry_ptr)
- } else {
- H5C1__UPDATE_STATS_FOR_FLUSH(cache_ptr, entry_ptr)
- }
-
- if ( destroy ) {
- H5C1__UPDATE_STATS_FOR_EVICTION(cache_ptr, entry_ptr)
- }
-
- /* Always remove the entry from the hash table on a destroy. On a
- * flush with destroy, it is cheaper to discard the skip list all at
- * once rather than remove the entries one by one, so we only delete
- * from the slist only if requested.
- *
- * We must do deletions now as the callback routines will free the
- * entry if destroy is true.
- *
- * Note that it is possible that the entry will be renamed during
- * its call to flush. This will upset H5C1_rename_entry() if we
- * don't tell it that it doesn't have to worry about updating the
- * index and SLIST. Use the destroy_in_progress field for this
- * purpose.
- */
- if ( destroy ) {
-
- entry_ptr->destroy_in_progress = TRUE;
-
- H5C1__DELETE_FROM_INDEX(cache_ptr, entry_ptr)
-
- if ( ( entry_ptr->in_slist ) &&
- ( del_entry_from_slist_on_destroy ) ) {
-
- H5C1__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr)
- }
- }
-
- /* Update the replacement policy for the flush or eviction.
- * Again, do this now so we don't have to reference freed
- * memory in the destroy case.
- */
- if ( destroy ) { /* AKA eviction */
-
-#if 0 /* JRM */
- /* This test code may come in handy -- lets keep it for a while */
- {
- if ( entry_ptr->is_dirty )
- {
- if ( cache_ptr->dLRU_head_ptr == NULL )
- HDfprintf(stdout,"cache_ptr->dLRU_head_ptr == NULL.\n");
-
- if ( cache_ptr->dLRU_tail_ptr == NULL )
- HDfprintf(stdout,"cache_ptr->dLRU_tail_ptr == NULL.\n");
-
- if ( cache_ptr->dLRU_list_len <= 0 )
- HDfprintf(stdout,"cache_ptr->dLRU_list_len <= 0.\n");
-
- if ( cache_ptr->dLRU_list_size <= 0 )
- HDfprintf(stdout,"cache_ptr->dLRU_list_size <= 0.\n");
-
- if ( cache_ptr->dLRU_list_size < entry_ptr->size )
- HDfprintf(stdout,
- "cache_ptr->dLRU_list_size < entry_ptr->size.\n");
-
- if ( ( (cache_ptr->dLRU_list_size) == entry_ptr->size ) &&
- ( ! ( (cache_ptr->dLRU_list_len) == 1 ) ) )
- HDfprintf(stdout,
- "dLRU_list_size == size && dLRU_list_len != 1\n");
-
- if ( ( entry_ptr->aux_prev == NULL ) &&
- ( cache_ptr->dLRU_head_ptr != entry_ptr ) )
- HDfprintf(stdout, "entry_ptr->aux_prev == NULL && dLRU_head_ptr != entry_ptr\n");
-
- if ( ( entry_ptr->aux_next == NULL ) &&
- ( cache_ptr->dLRU_tail_ptr != entry_ptr ) )
- HDfprintf(stdout, "entry_ptr->aux_next == NULL && dLRU_tail_ptr != entry_ptr\n");
-
- if ( ( cache_ptr->dLRU_list_len == 1 ) &&
- ( ! ( ( cache_ptr->dLRU_head_ptr == entry_ptr ) &&
- ( cache_ptr->dLRU_tail_ptr == entry_ptr ) &&
- ( entry_ptr->aux_next == NULL ) &&
- ( entry_ptr->aux_prev == NULL ) &&
- ( cache_ptr->dLRU_list_size == entry_ptr->size )
- )
- )
- )
- {
- HDfprintf(stdout, "single entry dlru sanity check fails\n");
- }
-
- }
- else
- {
- if ( cache_ptr->cLRU_head_ptr == NULL )
- HDfprintf(stdout,"cache_ptr->cLRU_head_ptr == NULL.\n");
-
- if ( cache_ptr->cLRU_tail_ptr == NULL )
- HDfprintf(stdout,"cache_ptr->cLRU_tail_ptr == NULL.\n");
-
- if ( cache_ptr->cLRU_list_len <= 0 )
- HDfprintf(stdout,"cache_ptr->cLRU_list_len <= 0.\n");
-
- if ( cache_ptr->cLRU_list_size <= 0 )
- HDfprintf(stdout,"cache_ptr->cLRU_list_size <= 0.\n");
-
- if ( cache_ptr->cLRU_list_size < entry_ptr->size )
- HDfprintf(stdout,
- "cache_ptr->cLRU_list_size < entry_ptr->size.\n");
-
- if ( ( (cache_ptr->cLRU_list_size) == entry_ptr->size ) &&
- ( ! ( (cache_ptr->cLRU_list_len) == 1 ) ) )
- HDfprintf(stdout,
- "cLRU_list_size == size && cLRU_list_len != 1\n");
-
- if ( ( entry_ptr->aux_prev == NULL ) &&
- ( cache_ptr->cLRU_head_ptr != entry_ptr ) )
- HDfprintf(stdout, "entry_ptr->aux_prev == NULL && cLRU_head_ptr != entry_ptr\n");
-
- if ( ( entry_ptr->aux_next == NULL ) &&
- ( cache_ptr->cLRU_tail_ptr != entry_ptr ) )
- HDfprintf(stdout, "entry_ptr->aux_next == NULL && cLRU_tail_ptr != entry_ptr\n");
-
- if ( ( cache_ptr->cLRU_list_len == 1 ) &&
- ( ! ( ( cache_ptr->cLRU_head_ptr == entry_ptr ) &&
- ( cache_ptr->cLRU_tail_ptr == entry_ptr ) &&
- ( entry_ptr->aux_next == NULL ) &&
- ( entry_ptr->aux_prev == NULL ) &&
- ( cache_ptr->cLRU_list_size == entry_ptr->size )
- )
- )
- )
- {
- HDfprintf(stdout, "single entry clru sanity check fails\n");
- }
- }
- }
-#endif /* JRM */
-
- H5C1__UPDATE_RP_FOR_EVICTION(cache_ptr, entry_ptr, FAIL)
-
- } else {
-
- H5C1__UPDATE_RP_FOR_FLUSH(cache_ptr, entry_ptr, FAIL)
- }
-
- /* Clear the dirty flag only, if requested */
- if ( clear_only ) {
-
-#ifndef NDEBUG
- if ( destroy ) {
- /* we are about to call the clear callback with the
- * destroy flag set -- this will result in *entry_ptr
- * being freed. Set the magic field to bad magic
- * so we can detect a freed cache entry if we see
- * one.
- */
- entry_ptr->magic = H5C1__H5C1_CACHE_ENTRY_T_BAD_MAGIC;
- }
-#endif /* NDEBUG */
- /* Call the callback routine to clear all dirty flags for object */
- if ( (entry_ptr->type->clear)(f, entry_ptr, destroy) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "can't clear entry")
- }
- } else {
-
-#if H5C1_DO_SANITY_CHECKS
- if ( ( entry_ptr->is_dirty ) &&
- ( cache_ptr->check_write_permitted == NULL ) &&
- ( ! (cache_ptr->write_permitted) ) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Write when writes are always forbidden!?!?!")
- }
-#endif /* H5C1_DO_SANITY_CHECKS */
-
-#ifndef NDEBUG
- if ( destroy ) {
- /* we are about to call the flush callback with the
- * destroy flag set -- this will result in *entry_ptr
- * being freed. Set the magic field to bad magic
- * so we can detect a freed cache entry if we see
- * one.
- */
- entry_ptr->magic = H5C1__H5C1_CACHE_ENTRY_T_BAD_MAGIC;
- }
-#endif /* NDEBUG */
-
- /* Only block for all the processes on the first piece of metadata
- */
-
- if ( *first_flush_ptr && entry_ptr->is_dirty ) {
-
- status = (entry_ptr->type->flush)(f, primary_dxpl_id, destroy,
- entry_ptr->addr, entry_ptr,
- &flush_flags);
- *first_flush_ptr = FALSE;
-
- } else {
-
- status = (entry_ptr->type->flush)(f, secondary_dxpl_id,
- destroy, entry_ptr->addr,
- entry_ptr, &flush_flags);
- }
-
- if ( status < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "unable to flush entry")
- }
-#ifdef H5_HAVE_PARALLEL
- if ( flush_flags != H5C1_CALLBACK__NO_FLAGS_SET ) {
-
- /* In the parallel case, flush operations can
- * cause problems. If they occur, scream and
- * die.
- *
- * At present, in the parallel case, the aux_ptr
- * will only be set if there is more than one
- * process. Thus we can use this to detect
- * the parallel case.
- *
- * This works for now, but if we start using the
- * aux_ptr for other purposes, we will have to
- * change this test accordingly.
- *
- * NB: While this test detects entryies that attempt
- * to resize or rename themselves during a flush
- * in the parallel case, it will not detect an
- * entry that dirties, resizes, and/or renames
- * other entries during its flush.
- *
- * From what Quincey tells me, this test is
- * sufficient for now, as any flush routine that
- * does the latter will also do the former.
- *
- * If that ceases to be the case, further
- * tests will be necessary.
- */
- if ( cache_ptr->aux_ptr != NULL ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Flush operation occured in the parallel case.")
-
- }
- }
-#endif /* H5_HAVE_PARALLEL */
- }
-
- if ( ( ! destroy ) && ( entry_ptr->in_slist ) ) {
-
- H5C1__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr)
- }
-
- if ( ! destroy ) { /* i.e. if the entry still exists */
-
- HDassert( !(entry_ptr->is_dirty) );
- HDassert( !(entry_ptr->flush_marker) );
- HDassert( !(entry_ptr->in_slist) );
- HDassert( !(entry_ptr->is_protected) );
- HDassert( !(entry_ptr->is_read_only) );
- HDassert( (entry_ptr->ro_ref_count) == 0 );
-
- if ( (flush_flags & H5C1_CALLBACK__SIZE_CHANGED_FLAG) != 0 ) {
-
- /* The entry size changed as a result of the flush.
- *
- * Most likely, the entry was compressed, and the
- * new version is of a different size than the old.
- *
- * In any case, we must update entry and cache size
- * accordingly.
- */
- size_t new_size;
-
- if ( (entry_ptr->type->size)(f, (void *)entry_ptr, &new_size)
- < 0 ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGETSIZE, FAIL, \
- "Can't get entry size after flush")
- }
-
- if ( new_size != entry_ptr->size ) {
-
- HDassert( entry_ptr->size < H5C1_MAX_ENTRY_SIZE );
-
- /* update the hash table for the size change*/
- H5C1__UPDATE_INDEX_FOR_SIZE_CHANGE((cache_ptr), \
- (entry_ptr->size),\
- (new_size));
-
- /* The entry can't be protected since we just flushed it.
- * Thus we must update the replacement policy data
- * structures for the size change. The macro deals
- * with the pinned case.
- */
- H5C1__UPDATE_RP_FOR_SIZE_CHANGE(cache_ptr, entry_ptr, \
- new_size)
-
- /* The entry can't be in the slist, so no need to update
- * the slist for the size change.
- */
-
- /* update stats for the size change */
- H5C1__UPDATE_STATS_FOR_ENTRY_SIZE_CHANGE(cache_ptr, \
- entry_ptr, \
- new_size)
-
- /* finally, update the entry size proper */
- entry_ptr->size = new_size;
- }
- }
-
- if ( (flush_flags & H5C1_CALLBACK__RENAMED_FLAG) != 0 ) {
-
- /* The entry was renamed as the result of the flush.
- *
- * Most likely, the entry was compressed, and the
- * new version is larger than the old and thus had
- * to be relocated.
- *
- * At preset, all processing for this case is
- * handled elsewhere. But lets keep the if statement
- * around just in case.
- */
-
- }
-
- entry_ptr->flush_in_progress = FALSE;
- }
-
- if ( cache_ptr->log_flush ) {
-
- status = (cache_ptr->log_flush)(cache_ptr, addr, was_dirty,
- flags, type_id);
-
- if ( status < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "log_flush callback failed.")
- }
- }
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_flush_single_entry() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1_load_entry
- *
- * Purpose: Attempt to load the entry at the specified disk address
- * and with the specified type into memory. If successful.
- * return the in memory address of the entry. Return NULL
- * on failure.
- *
- * Note that this function simply loads the entry into
- * core. It does not insert it into the cache.
- *
- * Return: Non-NULL on success / NULL on failure.
- *
- * Programmer: John Mainzer, 5/18/04
- *
- * Modifications:
- *
- * JRM - 7/21/04
- * Updated function for the addition of the hash table.
- *
- * JRM - 6/23/06
- * Deleted assertion that verified that a newly loaded
- * entry is clean. Due to a bug fix, this need not be
- * the case, as our code will attempt to repair errors
- * on load.
- *
- * JRM - 8/21/06
- * Added initialization for the new flush_in_progress and
- * destroy in progress fields.
- *
- * JRM - 3/29/07
- * Added initialization for the new is_read_only and
- * ro_ref_count fields.
- *
- *-------------------------------------------------------------------------
- */
-
-static void *
-H5C1_load_entry(H5F_t * f,
- hid_t dxpl_id,
- const H5C1_class_t * type,
- haddr_t addr,
- const void * udata1,
- void * udata2,
-#ifndef NDEBUG
- hbool_t skip_file_checks)
-#else /* NDEBUG */
- hbool_t UNUSED skip_file_checks)
-#endif /* NDEBUG */
-{
- void * thing = NULL;
- void * ret_value = NULL;
- H5C1_cache_entry_t * entry_ptr = NULL;
-
- FUNC_ENTER_NOAPI_NOINIT(H5C1_load_entry)
-
- HDassert( skip_file_checks || f );
- HDassert( type );
- HDassert( type->load );
- HDassert( type->size );
- HDassert( H5F_addr_defined(addr) );
-
- if ( NULL == (thing = (type->load)(f, dxpl_id, addr, udata1, udata2)) ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, NULL, "unable to load entry")
-
- }
-
- entry_ptr = (H5C1_cache_entry_t *)thing;
-
- /* In general, an entry should be clean just after it is loaded.
- *
- * However, when this code is used in the metadata cache, it is
- * possible that object headers will be dirty at this point, as
- * the load function will alter object headers if necessary to
- * fix an old bug.
- *
- * To support this bug fix, I have replace the old assert:
- *
- * HDassert( entry_ptr->is_dirty == FALSE );
- *
- * with:
- *
- * HDassert( ( entry_ptr->is_dirty == FALSE ) || ( type->id == 4 ) );
- *
- * Note that type id 4 is associated with object headers in the metadata
- * cache.
- *
- * When we get to using H5C for other purposes, we may wish to
- * tighten up the assert so that the loophole only applies to the
- * metadata cache.
- */
-
- HDassert( ( entry_ptr->is_dirty == FALSE ) || ( type->id == 4 ) );
-#ifndef NDEBUG
- entry_ptr->magic = H5C1__H5C1_CACHE_ENTRY_T_MAGIC;
-#endif /* NDEBUG */
- entry_ptr->addr = addr;
- entry_ptr->type = type;
- entry_ptr->is_protected = FALSE;
- entry_ptr->is_read_only = FALSE;
- entry_ptr->ro_ref_count = 0;
- entry_ptr->in_slist = FALSE;
- entry_ptr->flush_marker = FALSE;
-#ifdef H5_HAVE_PARALLEL
- entry_ptr->clear_on_unprotect = FALSE;
-#endif /* H5_HAVE_PARALLEL */
- entry_ptr->flush_in_progress = FALSE;
- entry_ptr->destroy_in_progress = FALSE;
-
- if ( (type->size)(f, thing, &(entry_ptr->size)) < 0 ) {
-
- HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGETSIZE, NULL, \
- "Can't get size of thing")
- }
-
- HDassert( entry_ptr->size < H5C1_MAX_ENTRY_SIZE );
-
- entry_ptr->ht_next = NULL;
- entry_ptr->ht_prev = NULL;
-
- entry_ptr->next = NULL;
- entry_ptr->prev = NULL;
-
- entry_ptr->aux_next = NULL;
- entry_ptr->aux_prev = NULL;
-
- H5C1__RESET_CACHE_ENTRY_STATS(entry_ptr);
-
- ret_value = thing;
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_load_entry() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1_make_space_in_cache
- *
- * Purpose: Attempt to evict cache entries until the index_size
- * is at least needed_space below max_cache_size.
- *
- * In passing, also attempt to bring cLRU_list_size to a
- * value greater than min_clean_size.
- *
- * Depending on circumstances, both of these goals may
- * be impossible, as in parallel mode, we must avoid generating
- * a write as part of a read (to avoid deadlock in collective
- * I/O), and in all cases, it is possible (though hopefully
- * highly unlikely) that the protected list may exceed the
- * maximum size of the cache.
- *
- * Thus the function simply does its best, returning success
- * unless an error is encountered.
- *
- * The primary_dxpl_id and secondary_dxpl_id parameters
- * specify the dxpl_ids used on the first write occasioned
- * by the call (primary_dxpl_id), and on all subsequent
- * writes (secondary_dxpl_id). This is useful in the metadata
- * cache, but may not be needed elsewhere. If so, just use the
- * same dxpl_id for both parameters.
- *
- * Observe that this function cannot occasion a read.
- *
- * Return: Non-negative on success/Negative on failure.
- *
- * Programmer: John Mainzer, 5/14/04
- *
- * Modifications:
- *
- * JRM --7/21/04
- * Minor modifications in support of the addition of a hash
- * table to facilitate lookups.
- *
- * JRM -- 11/22/04
- * Added the first_flush_ptr parameter, which replaces the
- * old first_flush local variable. This allows the function
- * to coordinate on the first flush issue with other functions.
- *
- * JRM -- 12/13/04
- * Added code to skip over epoch markers if present.
- *
- * JRM -- 1/3/06
- * Modified function to work correctly when the the cache
- * is not full. This case occurs when we need to flush to
- * min clean size before the cache has filled.
- *
- * JRM -- 3/29/07
- * Added sanity checks using the new is_read_only and
- * ro_ref_count fields.
- *
- * JRM -- 10/13/07
- * Added code to detect and manage the case in which a
- * flush callback changes the LRU-list out from under
- * the function. The only way I can think of in which this
- * can happen is if a flush function loads an entry
- * into the cache that isn't there already. Quincey tells
- * me that this will never happen, but I'm not sure I
- * believe him.
- *
- * Note that this is a pretty bad scenario if it ever
- * happens. The code I have added should allow us to
- * handle the situation under all but the worst conditions,
- * but one can argue that I should just scream and die if I
- * ever detect the condidtion.
- *
- *-------------------------------------------------------------------------
- */
-
-static herr_t
-H5C1_make_space_in_cache(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- size_t space_needed,
- hbool_t write_permitted,
- hbool_t * first_flush_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- herr_t result;
- int32_t entries_examined = 0;
- int32_t initial_list_len;
-#if H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
- size_t empty_space;
-#endif /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
- hbool_t prev_is_dirty = FALSE;
- hbool_t entry_is_epoch_maker = FALSE;
- H5C1_cache_entry_t * entry_ptr;
- H5C1_cache_entry_t * next_ptr;
- H5C1_cache_entry_t * prev_ptr;
-
- FUNC_ENTER_NOAPI_NOINIT(H5C1_make_space_in_cache)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( first_flush_ptr != NULL );
- HDassert( ( *first_flush_ptr == TRUE ) || ( *first_flush_ptr == FALSE ) );
-
- if ( write_permitted ) {
-
- initial_list_len = cache_ptr->LRU_list_len;
- entry_ptr = cache_ptr->LRU_tail_ptr;
-
- while ( ( (cache_ptr->index_size + space_needed)
- >
- cache_ptr->max_cache_size
- )
- &&
- ( entries_examined <= (2 * initial_list_len) )
- &&
- ( entry_ptr != NULL )
- )
- {
- HDassert( ! (entry_ptr->is_protected) );
- HDassert( ! (entry_ptr->is_read_only) );
- HDassert( (entry_ptr->ro_ref_count) == 0 );
-
- next_ptr = entry_ptr->next;
- prev_ptr = entry_ptr->prev;
-
- if ( prev_ptr != NULL ) {
-
- prev_is_dirty = prev_ptr->is_dirty;
- }
-
- if ( (entry_ptr->type)->id != H5C1__EPOCH_MARKER_TYPE ) {
-
- entry_is_epoch_maker = FALSE;
-
- if ( entry_ptr->is_dirty ) {
-
- result = H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- entry_ptr->type,
- entry_ptr->addr,
- H5C1__NO_FLAGS_SET,
- first_flush_ptr,
- FALSE);
- } else {
-
- result = H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- entry_ptr->type,
- entry_ptr->addr,
- H5C1__FLUSH_INVALIDATE_FLAG,
- first_flush_ptr,
- TRUE);
- }
- } else {
-
- /* Skip epoch markers. Set result to SUCCEED to avoid
- * triggering the error code below.
- */
- entry_is_epoch_maker = TRUE;
- result = SUCCEED;
- }
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "unable to flush entry")
- }
-
- if ( prev_ptr != NULL ) {
-#ifndef NDEBUG
- if ( prev_ptr->magic != H5C1__H5C1_CACHE_ENTRY_T_MAGIC ) {
-
- /* something horrible has happened to *prev_ptr --
- * scream and die.
- */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "*prev_ptr corrupt 1")
-
- }
-#endif /* NDEBUG */
- if ( entry_is_epoch_maker ) {
-
- entry_ptr = prev_ptr;
-
- } else if ( ( prev_ptr->is_dirty != prev_is_dirty )
- ||
- ( prev_ptr->next != next_ptr )
- ||
- ( prev_ptr->is_protected )
- ||
- ( prev_ptr->is_pinned ) ) {
-
- /* something has happened to the LRU -- start over
- * from the tail.
- */
-
- entry_ptr = cache_ptr->LRU_tail_ptr;
-
- } else {
-
- entry_ptr = prev_ptr;
-
- }
- } else {
-
- entry_ptr = NULL;
-
- }
-
- entries_examined++;
-
- }
-
-#if H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
-
- entries_examined = 0;
- initial_list_len = cache_ptr->dLRU_list_len;
- entry_ptr = cache_ptr->dLRU_tail_ptr;
-
- if ( cache_ptr->index_size < cache_ptr->max_cache_size ) {
-
- empty_space = cache_ptr->max_cache_size - cache_ptr->index_size;
-
- } else {
-
- empty_space = 0;
- }
-
- while ( ( (cache_ptr->cLRU_list_size + empty_space)
- < cache_ptr->min_clean_size ) &&
- ( entries_examined <= initial_list_len ) &&
- ( entry_ptr != NULL )
- )
- {
- HDassert( ! (entry_ptr->is_protected) );
- HDassert( ! (entry_ptr->is_read_only) );
- HDassert( (entry_ptr->ro_ref_count) == 0 );
- HDassert( entry_ptr->is_dirty );
- HDassert( entry_ptr->in_slist );
-
- prev_ptr = entry_ptr->aux_prev;
-
- next_ptr = entry_ptr->aux_next;
-
- if ( prev_ptr != NULL ) {
-
- HDassert( prev_ptr->is_dirty );
- }
-
- result = H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- entry_ptr->type,
- entry_ptr->addr,
- H5C1__NO_FLAGS_SET,
- first_flush_ptr,
- FALSE);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "unable to flush entry")
- }
-
- if ( prev_ptr != NULL ) {
-#ifndef NDEBUG
- if (prev_ptr->magic != H5C1__H5C1_CACHE_ENTRY_T_MAGIC) {
-
- /* something horrible has happened to *prev_ptr --
- * scream and die.
- */
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "*prev_ptr corrupt 2")
-
- } else
-#endif /* #ifndef NDEBUG */
- if ( ( ! ( prev_ptr->is_dirty ) )
- ||
- ( prev_ptr->aux_next != next_ptr )
- ||
- ( prev_ptr->is_protected )
- ||
- ( prev_ptr->is_pinned ) ) {
-
- /* something has happened to the dirty LRU -- start over
- * from the tail.
- */
-
-#if 0 /* This debuging code may be useful in the future -- keep it for now. */
- if ( ! ( prev_ptr->is_dirty ) ) {
- HDfprintf(stdout, "%s: ! prev_ptr->is_dirty\n",
- fcn_name);
- }
- if ( prev_ptr->aux_next != next_ptr ) {
- HDfprintf(stdout, "%s: prev_ptr->next != next_ptr\n",
- fcn_name);
- }
- if ( prev_ptr->is_protected ) {
- HDfprintf(stdout, "%s: prev_ptr->is_protected\n",
- fcn_name);
- }
- if ( prev_ptr->is_pinned ) {
- HDfprintf(stdout, "%s:prev_ptr->is_pinned\n",
- fcn_name);
- }
-
- HDfprintf(stdout, "%s: re-starting scan of dirty list\n",
- fcn_name);
-#endif /* JRM */
- entry_ptr = cache_ptr->dLRU_tail_ptr;
-
- } else {
-
- entry_ptr = prev_ptr;
-
- }
- } else {
-
- entry_ptr = NULL;
-
- }
-
- entries_examined++;
- }
-
-#endif /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
- } else {
-
- HDassert( H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS );
-
- initial_list_len = cache_ptr->cLRU_list_len;
- entry_ptr = cache_ptr->cLRU_tail_ptr;
-
- while ( ( (cache_ptr->index_size + space_needed)
- >
- cache_ptr->max_cache_size
- )
- &&
- ( entries_examined <= initial_list_len )
- &&
- ( entry_ptr != NULL )
- )
- {
- HDassert( ! (entry_ptr->is_protected) );
- HDassert( ! (entry_ptr->is_read_only) );
- HDassert( (entry_ptr->ro_ref_count) == 0 );
- HDassert( ! (entry_ptr->is_dirty) );
-
- prev_ptr = entry_ptr->aux_prev;
-
- result = H5C1_flush_single_entry(f,
- primary_dxpl_id,
- secondary_dxpl_id,
- cache_ptr,
- entry_ptr->type,
- entry_ptr->addr,
- H5C1__FLUSH_INVALIDATE_FLAG,
- first_flush_ptr,
- TRUE);
-
- if ( result < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
- "unable to flush entry")
- }
-
- entry_ptr = prev_ptr;
- entries_examined++;
- }
- }
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_make_space_in_cache() */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1_validate_lru_list
- *
- * Purpose: Debugging function that scans the LRU list for errors.
- *
- * If an error is detected, the function generates a
- * diagnostic and returns FAIL. If no error is detected,
- * the function returns SUCCEED.
- *
- * Return: FAIL if error is detected, SUCCEED otherwise.
- *
- * Programmer: John Mainzer, 7/14/05
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-#if H5C1_DO_EXTREME_SANITY_CHECKS
-
-static herr_t
-H5C1_validate_lru_list(H5C1_t * cache_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- int32_t len = 0;
- size_t size = 0;
- H5C1_cache_entry_t * entry_ptr = NULL;
-
- FUNC_ENTER_NOAPI_NOINIT(H5C1_validate_lru_list)
-
- HDassert( cache_ptr );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
-
- if ( ( ( cache_ptr->LRU_head_ptr == NULL )
- ||
- ( cache_ptr->LRU_tail_ptr == NULL )
- )
- &&
- ( cache_ptr->LRU_head_ptr != cache_ptr->LRU_tail_ptr )
- ) {
-
- HDfprintf(stdout,"H5C1_validate_lru_list: Check 1 failed.\n");
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 1 failed")
- }
-
- if ( ( cache_ptr->LRU_list_len < 0 ) || ( cache_ptr->LRU_list_size < 0 ) ) {
-
- HDfprintf(stdout,"H5C1_validate_lru_list: Check 2 failed.\n");
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 2 failed")
- }
-
- if ( ( cache_ptr->LRU_list_len == 1 )
- &&
- ( ( cache_ptr->LRU_head_ptr != cache_ptr->LRU_tail_ptr )
- ||
- ( cache_ptr->LRU_head_ptr == NULL )
- ||
- ( cache_ptr->LRU_head_ptr->size != cache_ptr->LRU_list_size )
- )
- ) {
-
- HDfprintf(stdout,"H5C1_validate_lru_list: Check 3 failed.\n");
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 3 failed")
- }
-
- if ( ( cache_ptr->LRU_list_len >= 1 )
- &&
- ( ( cache_ptr->LRU_head_ptr == NULL )
- ||
- ( cache_ptr->LRU_head_ptr->prev != NULL )
- ||
- ( cache_ptr->LRU_tail_ptr == NULL )
- ||
- ( cache_ptr->LRU_tail_ptr->next != NULL )
- )
- ) {
-
- HDfprintf(stdout,"H5C1_validate_lru_list: Check 4 failed.\n");
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 4 failed")
- }
-
- entry_ptr = cache_ptr->LRU_head_ptr;
- while ( entry_ptr != NULL )
- {
-
- if ( ( entry_ptr != cache_ptr->LRU_head_ptr ) &&
- ( ( entry_ptr->prev == NULL ) ||
- ( entry_ptr->prev->next != entry_ptr ) ) ) {
-
- HDfprintf(stdout,"H5C1_validate_lru_list: Check 5 failed.\n");
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 5 failed")
- }
-
- if ( ( entry_ptr != cache_ptr->LRU_tail_ptr ) &&
- ( ( entry_ptr->next == NULL ) ||
- ( entry_ptr->next->prev != entry_ptr ) ) ) {
-
- HDfprintf(stdout,"H5C1_validate_lru_list: Check 6 failed.\n");
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 6 failed")
- }
-
- len++;
- size += entry_ptr->size;
- entry_ptr = entry_ptr->next;
- }
-
- if ( ( cache_ptr->LRU_list_len != len ) ||
- ( cache_ptr->LRU_list_size != size ) ) {
-
- HDfprintf(stdout,"H5C1_validate_lru_list: Check 7 failed.\n");
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 7 failed")
- }
-
-done:
-
- if ( ret_value != SUCCEED ) {
-
- HDassert(0);
- }
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_validate_lru_list() */
-
-#endif /* H5C1_DO_EXTREME_SANITY_CHECKS */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1_verify_not_in_index
- *
- * Purpose: Debugging function that scans the hash table to verify
- * that the specified instance of H5C1_cache_entry_t is not
- * present.
- *
- * If an error is detected, the function generates a
- * diagnostic and returns FAIL. If no error is detected,
- * the function returns SUCCEED.
- *
- * Return: FAIL if error is detected, SUCCEED otherwise.
- *
- * Programmer: John Mainzer, 7/14/05
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-#if H5C1_DO_EXTREME_SANITY_CHECKS
-
-static herr_t
-H5C1_verify_not_in_index(H5C1_t * cache_ptr,
- H5C1_cache_entry_t * entry_ptr)
-{
- herr_t ret_value = SUCCEED; /* Return value */
- int32_t i;
- int32_t depth;
- H5C1_cache_entry_t * scan_ptr = NULL;
-
- FUNC_ENTER_NOAPI_NOINIT(H5C1_verify_not_in_index)
-
- HDassert( cache_ptr != NULL );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( entry_ptr != NULL );
-
- for ( i = 0; i < H5C1__HASH_TABLE_LEN; i++ )
- {
- depth = 0;
- scan_ptr = cache_ptr->index[i];
-
- while ( scan_ptr != NULL )
- {
- if ( scan_ptr == entry_ptr ) {
-
- HDfprintf(stdout,
- "H5C1_verify_not_in_index: entry in index (%d/%d)\n",
- i, depth);
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Entry already in index.")
- }
- depth++;
- scan_ptr = scan_ptr->ht_next;
- }
- }
-
-done:
-
- if ( ret_value != SUCCEED ) {
-
- HDassert(0);
- }
-
- FUNC_LEAVE_NOAPI(ret_value)
-
-} /* H5C1_verify_not_in_index() */
-
-#endif /* H5C1_DO_EXTREME_SANITY_CHECKS */
diff --git a/src/H5C1pkg.h b/src/H5C1pkg.h
deleted file mode 100644
index 865ea52..0000000
--- a/src/H5C1pkg.h
+++ /dev/null
@@ -1,3402 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*
- * Programmer: John Mainzer -- 10/12/04
- *
- * Purpose: This file contains declarations which are normally visible
- * only within the H5C1 package (just H5C1.c at present).
- *
- * Source files outside the H5C1 package should include
- * H5C1private.h instead.
- *
- * The one exception to this rule is test/cache1.c. The test
- * code is easier to write if it can look at the cache's
- * internal data structures. Indeed, this is the main
- * reason why this file was created.
- */
-
-#ifndef H5C1_PACKAGE
-#error "Do not include this file outside the H5C package!"
-#endif
-
-#ifndef _H5C1pkg_H
-#define _H5C1pkg_H
-
-
-/* Get package's private header */
-#include "H5C1private.h"
-
-
-/* Get needed headers */
-#include "H5SLprivate.h" /* Skip lists */
-
-/* With the introduction of the fractal heap, it is now possible for
- * entries to be dirtied, resized, and/or renamed in the flush callbacks.
- * As a result, on flushes, it may be necessary to make multiple passes
- * through the slist before it is empty. The H5C1__MAX_PASSES_ON_FLUSH
- * #define is used to set an upper limit on the number of passes.
- * The current value was obtained via personal communication with
- * Quincey. I have applied a fudge factor of 2.
- */
-
-#define H5C1__MAX_PASSES_ON_FLUSH 4
-
-
-
-/****************************************************************************
- *
- * structure H5C1_t
- *
- * Catchall structure for all variables specific to an instance of the cache.
- *
- * While the individual fields of the structure are discussed below, the
- * following overview may be helpful.
- *
- * Entries in the cache are stored in an instance of H5TB_TREE, indexed on
- * the entry's disk address. While the H5TB_TREE is less efficient than
- * hash table, it keeps the entries in address sorted order. As flushes
- * in parallel mode are more efficient if they are issued in increasing
- * address order, this is a significant benefit. Also the H5TB_TREE code
- * was readily available, which reduced development time.
- *
- * While the cache was designed with multiple replacement policies in mind,
- * at present only a modified form of LRU is supported.
- *
- * JRM - 4/26/04
- *
- * Profiling has indicated that searches in the instance of H5TB_TREE are
- * too expensive. To deal with this issue, I have augmented the cache
- * with a hash table in which all entries will be stored. Given the
- * advantages of flushing entries in increasing address order, the TBBT
- * is retained, but only dirty entries are stored in it. At least for
- * now, we will leave entries in the TBBT after they are flushed.
- *
- * Note that index_size and index_len now refer to the total size of
- * and number of entries in the hash table.
- *
- * JRM - 7/19/04
- *
- * The TBBT has since been replaced with a skip list. This change
- * greatly predates this note.
- *
- * JRM - 9/26/05
- *
- * magic: Unsigned 32 bit integer always set to H5C1__H5C1_T_MAGIC. This
- * field is used to validate pointers to instances of H5C1_t.
- *
- * flush_in_progress: Boolean flag indicating whether a flush is in
- * progress.
- *
- * trace_file_ptr: File pointer pointing to the trace file, which is used
- * to record cache operations for use in simulations and design
- * studies. This field will usually be NULL, indicating that
- * no trace file should be recorded.
- *
- * Since much of the code supporting the parallel metadata
- * cache is in H5AC, we don't write the trace file from
- * H5C. Instead, H5AC reads the trace_file_ptr as needed.
- *
- * When we get to using H5C in other places, we may add
- * code to write trace file data at the H5C level as well.
- *
- * aux_ptr: Pointer to void used to allow wrapper code to associate
- * its data with an instance of H5C1_t. The H5C cache code
- * sets this field to NULL, and otherwise leaves it alone.
- *
- * max_type_id: Integer field containing the maximum type id number assigned
- * to a type of entry in the cache. All type ids from 0 to
- * max_type_id inclusive must be defined. The names of the
- * types are stored in the type_name_table discussed below, and
- * indexed by the ids.
- *
- * type_name_table_ptr: Pointer to an array of pointer to char of length
- * max_type_id + 1. The strings pointed to by the entries
- * in the array are the names of the entry types associated
- * with the indexing type IDs.
- *
- * max_cache_size: Nominal maximum number of bytes that may be stored in the
- * cache. This value should be viewed as a soft limit, as the
- * cache can exceed this value under the following circumstances:
- *
- * a) All entries in the cache are protected, and the cache is
- * asked to insert a new entry. In this case the new entry
- * will be created. If this causes the cache to exceed
- * max_cache_size, it will do so. The cache will attempt
- * to reduce its size as entries are unprotected.
- *
- * b) When running in parallel mode, the cache may not be
- * permitted to flush a dirty entry in response to a read.
- * If there are no clean entries available to evict, the
- * cache will exceed its maximum size. Again the cache
- * will attempt to reduce its size to the max_cache_size
- * limit on the next cache write.
- *
- * c) When an entry increases in size, the cache may exceed
- * the max_cache_size limit until the next time the cache
- * attempts to load or insert an entry.
- *
- * min_clean_size: Nominal minimum number of clean bytes in the cache.
- * The cache attempts to maintain this number of bytes of
- * clean data so as to avoid case b) above. Again, this is
- * a soft limit.
- *
- *
- * In addition to the call back functions required for each entry, the
- * cache requires the following call back functions for this instance of
- * the cache as a whole:
- *
- * check_write_permitted: In certain applications, the cache may not
- * be allowed to write to disk at certain time. If specified,
- * the check_write_permitted function is used to determine if
- * a write is permissible at any given point in time.
- *
- * If no such function is specified (i.e. this field is NULL),
- * the cache uses the following write_permitted field to
- * determine whether writes are permitted.
- *
- * write_permitted: If check_write_permitted is NULL, this boolean flag
- * indicates whether writes are permitted.
- *
- * log_flush: If provided, this function is called whenever a dirty
- * entry is flushed to disk.
- *
- *
- * In cases where memory is plentiful, and performance is an issue, it
- * is useful to disable all cache evictions, and thereby postpone metadata
- * writes. The following field is used to implement this.
- *
- * evictions_enabled: Boolean flag that is initialized to TRUE. When
- * this flag is set to FALSE, the metadata cache will not
- * attempt to evict entries to make space for newly protected
- * entries, and instead the will grow without limit.
- *
- * Needless to say, this feature must be used with care.
- *
- *
- * The cache requires an index to facilitate searching for entries. The
- * following fields support that index.
- *
- * index_len: Number of entries currently in the hash table used to index
- * the cache.
- *
- * index_size: Number of bytes of cache entries currently stored in the
- * hash table used to index the cache.
- *
- * This value should not be mistaken for footprint of the
- * cache in memory. The average cache entry is small, and
- * the cache has a considerable overhead. Multiplying the
- * index_size by two should yield a conservative estimate
- * of the cache's memory footprint.
- *
- * index: Array of pointer to H5C1_cache_entry_t of size
- * H5C1__HASH_TABLE_LEN. At present, this value is a power
- * of two, not the usual prime number.
- *
- * I hope that the variable size of cache elements, the large
- * hash table size, and the way in which HDF5 allocates space
- * will combine to avoid problems with periodicity. If so, we
- * can use a trivial hash function (a bit-and and a 3 bit left
- * shift) with some small savings.
- *
- * If not, it will become evident in the statistics. Changing
- * to the usual prime number length hash table will require
- * changing the H5C1__HASH_FCN macro and the deletion of the
- * H5C1__HASH_MASK #define. No other changes should be required.
- *
- *
- * When we flush the cache, we need to write entries out in increasing
- * address order. An instance of a skip list is used to store dirty entries in
- * sorted order. Whether it is cheaper to sort the dirty entries as needed,
- * or to maintain the list is an open question. At a guess, it depends
- * on how frequently the cache is flushed. We will see how it goes.
- *
- * For now at least, I will not remove dirty entries from the list as they
- * are flushed. (this has been changed -- dirty entries are now removed from
- * the skip list as they are flushed. JRM - 10/25/05)
- *
- * slist_len: Number of entries currently in the skip list
- * used to maintain a sorted list of dirty entries in the
- * cache.
- *
- * slist_size: Number of bytes of cache entries currently stored in the
- * skip list used to maintain a sorted list of
- * dirty entries in the cache.
- *
- * slist_ptr: pointer to the instance of H5SL_t used maintain a sorted
- * list of dirty entries in the cache. This sorted list has
- * two uses:
- *
- * a) It allows us to flush dirty entries in increasing address
- * order, which results in significant savings.
- *
- * b) It facilitates checking for adjacent dirty entries when
- * attempting to evict entries from the cache. While we
- * don't use this at present, I hope that this will allow
- * some optimizations when I get to it.
- *
- * With the addition of the fractal heap, the cache must now deal with
- * the case in which entries may be dirtied, renamed, or have their sizes
- * changed during a flush. To allow sanity checks in this situation, the
- * following two fields have been added. They are only compiled in when
- * H5C1_DO_SANITY_CHECKS is TRUE.
- *
- * slist_len_increase: Number of entries that have been added to the
- * slist since the last time this field was set to zero.
- *
- * slist_size_increase: Total size of all entries that have been added
- * to the slist since the last time this field was set to
- * zero.
- *
- *
- * When a cache entry is protected, it must be removed from the LRU
- * list(s) as it cannot be either flushed or evicted until it is unprotected.
- * The following fields are used to implement the protected list (pl).
- *
- * pl_len: Number of entries currently residing on the protected list.
- *
- * pl_size: Number of bytes of cache entries currently residing on the
- * protected list.
- *
- * pl_head_ptr: Pointer to the head of the doubly linked list of protected
- * entries. Note that cache entries on this list are linked
- * by their next and prev fields.
- *
- * This field is NULL if the list is empty.
- *
- * pl_tail_ptr: Pointer to the tail of the doubly linked list of protected
- * entries. Note that cache entries on this list are linked
- * by their next and prev fields.
- *
- * This field is NULL if the list is empty.
- *
- *
- * For very frequently used entries, the protect/unprotect overhead can
- * become burdensome. To avoid this overhead, I have modified the cache
- * to allow entries to be "pinned". A pinned entry is similar to a
- * protected entry, in the sense that it cannot be evicted, and that
- * the entry can be modified at any time.
- *
- * Pinning an entry has the following implications:
- *
- * 1) A pinned entry cannot be evicted. Thus unprotected
- * pinned entries reside in the pinned entry list, instead
- * of the LRU list(s) (or other lists maintained by the current
- * replacement policy code).
- *
- * 2) A pinned entry can be accessed or modified at any time.
- * Therefore, the cache must check with the entry owner
- * before flushing it. If permission is denied, the
- * cache just skips the entry in the flush.
- *
- * 3) A pinned entry can be marked as dirty (and possibly
- * change size) while it is unprotected.
- *
- * 4) The flush-destroy code must allow pinned entries to
- * be unpinned (and possibly unprotected) during the
- * flush.
- *
- * Since pinned entries cannot be evicted, they must be kept on a pinned
- * entry list, instead of being entrusted to the replacement policy code.
- *
- * Maintaining the pinned entry list requires the following fields:
- *
- * pel_len: Number of entries currently residing on the pinned
- * entry list.
- *
- * pel_size: Number of bytes of cache entries currently residing on
- * the pinned entry list.
- *
- * pel_head_ptr: Pointer to the head of the doubly linked list of pinned
- * but not protected entries. Note that cache entries on
- * this list are linked by their next and prev fields.
- *
- * This field is NULL if the list is empty.
- *
- * pel_tail_ptr: Pointer to the tail of the doubly linked list of pinned
- * but not protected entries. Note that cache entries on
- * this list are linked by their next and prev fields.
- *
- * This field is NULL if the list is empty.
- *
- *
- * The cache must have a replacement policy, and the fields supporting this
- * policy must be accessible from this structure.
- *
- * While there has been interest in several replacement policies for
- * this cache, the initial development schedule is tight. Thus I have
- * elected to support only a modified LRU policy for the first cut.
- *
- * To further simplify matters, I have simply included the fields needed
- * by the modified LRU in this structure. When and if we add support for
- * other policies, it will probably be easiest to just add the necessary
- * fields to this structure as well -- we only create one instance of this
- * structure per file, so the overhead is not excessive.
- *
- *
- * Fields supporting the modified LRU policy:
- *
- * See most any OS text for a discussion of the LRU replacement policy.
- *
- * When operating in parallel mode, we must ensure that a read does not
- * cause a write. If it does, the process will hang, as the write will
- * be collective and the other processes will not know to participate.
- *
- * To deal with this issue, I have modified the usual LRU policy by adding
- * clean and dirty LRU lists to the usual LRU list.
- *
- * The clean LRU list is simply the regular LRU list with all dirty cache
- * entries removed.
- *
- * Similarly, the dirty LRU list is the regular LRU list with all the clean
- * cache entries removed.
- *
- * When reading in parallel mode, we evict from the clean LRU list only.
- * This implies that we must try to ensure that the clean LRU list is
- * reasonably well stocked at all times.
- *
- * We attempt to do this by trying to flush enough entries on each write
- * to keep the cLRU_list_size >= min_clean_size.
- *
- * Even if we start with a completely clean cache, a sequence of protects
- * without unprotects can empty the clean LRU list. In this case, the
- * cache must grow temporarily. At the next write, we will attempt to
- * evict enough entries to reduce index_size to less than max_cache_size.
- * While this will usually be possible, all bets are off if enough entries
- * are protected.
- *
- * Discussions of the individual fields used by the modified LRU replacement
- * policy follow:
- *
- * LRU_list_len: Number of cache entries currently on the LRU list.
- *
- * Observe that LRU_list_len + pl_len must always equal
- * index_len.
- *
- * LRU_list_size: Number of bytes of cache entries currently residing on the
- * LRU list.
- *
- * Observe that LRU_list_size + pl_size must always equal
- * index_size.
- *
- * LRU_head_ptr: Pointer to the head of the doubly linked LRU list. Cache
- * entries on this list are linked by their next and prev fields.
- *
- * This field is NULL if the list is empty.
- *
- * LRU_tail_ptr: Pointer to the tail of the doubly linked LRU list. Cache
- * entries on this list are linked by their next and prev fields.
- *
- * This field is NULL if the list is empty.
- *
- * cLRU_list_len: Number of cache entries currently on the clean LRU list.
- *
- * Observe that cLRU_list_len + dLRU_list_len must always
- * equal LRU_list_len.
- *
- * cLRU_list_size: Number of bytes of cache entries currently residing on
- * the clean LRU list.
- *
- * Observe that cLRU_list_size + dLRU_list_size must always
- * equal LRU_list_size.
- *
- * cLRU_head_ptr: Pointer to the head of the doubly linked clean LRU list.
- * Cache entries on this list are linked by their aux_next and
- * aux_prev fields.
- *
- * This field is NULL if the list is empty.
- *
- * cLRU_tail_ptr: Pointer to the tail of the doubly linked clean LRU list.
- * Cache entries on this list are linked by their aux_next and
- * aux_prev fields.
- *
- * This field is NULL if the list is empty.
- *
- * dLRU_list_len: Number of cache entries currently on the dirty LRU list.
- *
- * Observe that cLRU_list_len + dLRU_list_len must always
- * equal LRU_list_len.
- *
- * dLRU_list_size: Number of cache entries currently on the dirty LRU list.
- *
- * Observe that cLRU_list_len + dLRU_list_len must always
- * equal LRU_list_len.
- *
- * dLRU_head_ptr: Pointer to the head of the doubly linked dirty LRU list.
- * Cache entries on this list are linked by their aux_next and
- * aux_prev fields.
- *
- * This field is NULL if the list is empty.
- *
- * dLRU_tail_ptr: Pointer to the tail of the doubly linked dirty LRU list.
- * Cache entries on this list are linked by their aux_next and
- * aux_prev fields.
- *
- * This field is NULL if the list is empty.
- *
- *
- * Automatic cache size adjustment:
- *
- * While the default cache size is adequate for most cases, we can run into
- * cases where the default is too small. Ideally, we will let the user
- * adjust the cache size as required. However, this is not possible in all
- * cases. Thus I have added automatic cache size adjustment code.
- *
- * The configuration for the automatic cache size adjustment is stored in
- * the structure described below:
- *
- * size_increase_possible: Depending on the configuration data given
- * in the resize_ctl field, it may or may not be possible
- * to increase the size of the cache. Rather than test for
- * all the ways this can happen, we simply set this flag when
- * we receive a new configuration.
- *
- * flash_size_increase_possible: Depending on the configuration data given
- * in the resize_ctl field, it may or may not be possible
- * for a flash size increase to occur. We set this flag
- * whenever we receive a new configuration so as to avoid
- * repeated calculations.
- *
- * flash_size_increase_threshold: If a flash cache size increase is possible,
- * this field is used to store the minimum size of a new entry
- * or size increase needed to trigger a flash cache size
- * increase. Note that this field must be updated whenever
- * the size of the cache is changed.
- *
- * size_decrease_possible: Depending on the configuration data given
- * in the resize_ctl field, it may or may not be possible
- * to decrease the size of the cache. Rather than test for
- * all the ways this can happen, we simply set this flag when
- * we receive a new configuration.
- *
- * cache_full: Boolean flag used to keep track of whether the cache is
- * full, so we can refrain from increasing the size of a
- * cache which hasn't used up the space alotted to it.
- *
- * The field is initialized to FALSE, and then set to TRUE
- * whenever we attempt to make space in the cache.
- *
- * resize_enabled: This is another convenience flag which is set whenever
- * a new set of values for resize_ctl are provided. Very
- * simply,
- *
- * resize_enabled = size_increase_possible ||
- * size_decrease_possible;
- *
- * size_decreased: Boolean flag set to TRUE whenever the maximun cache
- * size is decreased. The flag triggers a call to
- * H5C1_make_space_in_cache() on the next call to H5C1_protect().
- *
- * resize_ctl: Instance of H5C1_auto_size_ctl_t containing configuration
- * data for automatic cache resizing.
- *
- * epoch_markers_active: Integer field containing the number of epoch
- * markers currently in use in the LRU list. This value
- * must be in the range [0, H5C1__MAX_EPOCH_MARKERS - 1].
- *
- * epoch_marker_active: Array of boolean of length H5C1__MAX_EPOCH_MARKERS.
- * This array is used to track which epoch markers are currently
- * in use.
- *
- * epoch_marker_ringbuf: Array of int of length H5C1__MAX_EPOCH_MARKERS + 1.
- *
- * To manage the epoch marker cache entries, it is necessary
- * to track their order in the LRU list. This is done with
- * epoch_marker_ringbuf. When markers are inserted at the
- * head of the LRU list, the index of the marker in the
- * epoch_markers array is inserted at the tail of the ring
- * buffer. When it becomes the epoch_marker_active'th marker
- * in the LRU list, it will have worked its way to the head
- * of the ring buffer as well. This allows us to remove it
- * without scanning the LRU list if such is required.
- *
- * epoch_marker_ringbuf_first: Integer field containing the index of the
- * first entry in the ring buffer.
- *
- * epoch_marker_ringbuf_last: Integer field containing the index of the
- * last entry in the ring buffer.
- *
- * epoch_marker_ringbuf_size: Integer field containing the number of entries
- * in the ring buffer.
- *
- * epoch_markers: Array of instances of H5C1_cache_entry_t of length
- * H5C1__MAX_EPOCH_MARKERS. The entries are used as markers
- * in the LRU list to identify cache entries that haven't
- * been accessed for some (small) specified number of
- * epochs. These entries (if any) can then be evicted and
- * the cache size reduced -- ideally without evicting any
- * of the current working set. Needless to say, the epoch
- * length and the number of epochs before an unused entry
- * must be chosen so that all, or almost all, the working
- * set will be accessed before the limit.
- *
- * Epoch markers only appear in the LRU list, never in
- * the index or slist. While they are of type
- * H5C1__EPOCH_MARKER_TYPE, and have associated class
- * functions, these functions should never be called.
- *
- * The addr fields of these instances of H5C1_cache_entry_t
- * are set to the index of the instance in the epoch_markers
- * array, the size is set to 0, and the type field points
- * to the constant structure epoch_marker_class defined
- * in H5C.c. The next and prev fields are used as usual
- * to link the entry into the LRU list.
- *
- * All other fields are unused.
- *
- *
- * Cache hit rate collection fields:
- *
- * We supply the current cache hit rate on request, so we must keep a
- * simple cache hit rate computation regardless of whether statistics
- * collection is enabled. The following fields support this capability.
- *
- * cache_hits: Number of cache hits since the last time the cache hit
- * rate statistics were reset. Note that when automatic cache
- * re-sizing is enabled, this field will be reset every automatic
- * resize epoch.
- *
- * cache_accesses: Number of times the cache has been accessed while
- * since the last since the last time the cache hit rate statistics
- * were reset. Note that when automatic cache re-sizing is enabled,
- * this field will be reset every automatic resize epoch.
- *
- *
- * Statistics collection fields:
- *
- * When enabled, these fields are used to collect statistics as described
- * below. The first set are collected only when H5C1_COLLECT_CACHE_STATS
- * is true.
- *
- * hits: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1. The cells
- * are used to record the number of times an entry with type id
- * equal to the array index has been in cache when requested in
- * the current epoch.
- *
- * misses: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1. The cells
- * are used to record the number of times an entry with type id
- * equal to the array index has not been in cache when
- * requested in the current epoch.
- *
- * write_protects: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1. The
- * cells are used to record the number of times an entry with
- * type id equal to the array index has been write protected
- * in the current epoch.
- *
- * Observe that (hits + misses) = (write_protects + read_protects).
- *
- * read_protects: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1. The cells
- * are used to record the number of times an entry with type id
- * equal to the array index has been read protected in the
- * current epoch.
- *
- * Observe that (hits + misses) = (write_protects + read_protects).
- *
- * max_read_protects: Array of int32 of length H5C1__MAX_NUM_TYPE_IDS + 1.
- * The cells are used to maximum number of simultaneous read
- * protects on any entry with type id equal to the array index
- * in the current epoch.
- *
- * insertions: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1. The cells
- * are used to record the number of times an entry with type
- * id equal to the array index has been inserted into the
- * cache in the current epoch.
- *
- * pinned_insertions: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1.
- * The cells are used to record the number of times an entry
- * with type id equal to the array index has been inserted
- * pinned into the cache in the current epoch.
- *
- * clears: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1. The cells
- * are used to record the number of times an entry with type
- * id equal to the array index has been cleared in the current
- * epoch.
- *
- * flushes: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1. The cells
- * are used to record the number of times an entry with type id
- * equal to the array index has been written to disk in the
- * current epoch.
- *
- * evictions: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1. The cells
- * are used to record the number of times an entry with type id
- * equal to the array index has been evicted from the cache in
- * the current epoch.
- *
- * renames: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1. The cells
- * are used to record the number of times an entry with type
- * id equal to the array index has been renamed in the current
- * epoch.
- *
- * entry_flush_renames: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1.
- * The cells are used to record the number of times an entry
- * with type id equal to the array index has been renamed
- * during its flush callback in the current epoch.
- *
- * cache_flush_renames: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1.
- * The cells are used to record the number of times an entry
- * with type id equal to the array index has been renamed
- * during a cache flush in the current epoch.
- *
- * pins: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1. The cells
- * are used to record the number of times an entry with type
- * id equal to the array index has been pinned in the current
- * epoch.
- *
- * unpins: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1. The cells
- * are used to record the number of times an entry with type
- * id equal to the array index has been unpinned in the current
- * epoch.
- *
- * dirty_pins: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1. The cells
- * are used to record the number of times an entry with type
- * id equal to the array index has been marked dirty while pinned
- * in the current epoch.
- *
- * pinned_flushes: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1. The
- * cells are used to record the number of times an entry
- * with type id equal to the array index has been flushed while
- * pinned in the current epoch.
- *
- * pinned_cleared: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1. The
- * cells are used to record the number of times an entry
- * with type id equal to the array index has been cleared while
- * pinned in the current epoch.
- *
- * size_increases: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1.
- * The cells are used to record the number of times an entry
- * with type id equal to the array index has increased in
- * size in the current epoch.
- *
- * size_decreases: Array of int64 of length H5C1__MAX_NUM_TYPE_IDS + 1.
- * The cells are used to record the number of times an entry
- * with type id equal to the array index has decreased in
- * size in the current epoch.
- *
- * entry_flush_size_changes: Array of int64 of length
- * H5C1__MAX_NUM_TYPE_IDS + 1. The cells are used to record
- * the number of times an entry with type id equal to the
- * array index has changed size while in its flush callback.
- *
- * cache_flush_size_changes: Array of int64 of length
- * H5C1__MAX_NUM_TYPE_IDS + 1. The cells are used to record
- * the number of times an entry with type id equal to the
- * array index has changed size during a cache flush
- *
- * total_ht_insertions: Number of times entries have been inserted into the
- * hash table in the current epoch.
- *
- * total_ht_deletions: Number of times entries have been deleted from the
- * hash table in the current epoch.
- *
- * successful_ht_searches: int64 containing the total number of successful
- * searches of the hash table in the current epoch.
- *
- * total_successful_ht_search_depth: int64 containing the total number of
- * entries other than the targets examined in successful
- * searches of the hash table in the current epoch.
- *
- * failed_ht_searches: int64 containing the total number of unsuccessful
- * searches of the hash table in the current epoch.
- *
- * total_failed_ht_search_depth: int64 containing the total number of
- * entries examined in unsuccessful searches of the hash
- * table in the current epoch.
- *
- * max_index_len: Largest value attained by the index_len field in the
- * current epoch.
- *
- * max_index_size: Largest value attained by the index_size field in the
- * current epoch.
- *
- * max_slist_len: Largest value attained by the slist_len field in the
- * current epoch.
- *
- * max_slist_size: Largest value attained by the slist_size field in the
- * current epoch.
- *
- * max_pl_len: Largest value attained by the pl_len field in the
- * current epoch.
- *
- * max_pl_size: Largest value attained by the pl_size field in the
- * current epoch.
- *
- * max_pel_len: Largest value attained by the pel_len field in the
- * current epoch.
- *
- * max_pel_size: Largest value attained by the pel_size field in the
- * current epoch.
- *
- * The remaining stats are collected only when both H5C1_COLLECT_CACHE_STATS
- * and H5C1_COLLECT_CACHE_ENTRY_STATS are true.
- *
- * max_accesses: Array of int32 of length H5C1__MAX_NUM_TYPE_IDS + 1. The cells
- * are used to record the maximum number of times any single
- * entry with type id equal to the array index has been
- * accessed in the current epoch.
- *
- * min_accesses: Array of int32 of length H5C1__MAX_NUM_TYPE_IDS + 1. The cells
- * are used to record the minimum number of times any single
- * entry with type id equal to the array index has been
- * accessed in the current epoch.
- *
- * max_clears: Array of int32 of length H5C1__MAX_NUM_TYPE_IDS + 1. The cells
- * are used to record the maximum number of times any single
- * entry with type id equal to the array index has been cleared
- * in the current epoch.
- *
- * max_flushes: Array of int32 of length H5C1__MAX_NUM_TYPE_IDS + 1. The cells
- * are used to record the maximum number of times any single
- * entry with type id equal to the array index has been
- * flushed in the current epoch.
- *
- * max_size: Array of size_t of length H5C1__MAX_NUM_TYPE_IDS + 1. The cells
- * are used to record the maximum size of any single entry
- * with type id equal to the array index that has resided in
- * the cache in the current epoch.
- *
- * max_pins: Array of size_t of length H5C1__MAX_NUM_TYPE_IDS + 1. The cells
- * are used to record the maximum number of times that any single
- * entry with type id equal to the array index that has been
- * marked as pinned in the cache in the current epoch.
- *
- *
- * Fields supporting testing:
- *
- * For test purposes, it is useful to turn off some asserts and sanity
- * checks. The following flags support this.
- *
- * skip_file_checks: Boolean flag used to skip sanity checks on file
- * parameters passed to the cache. In the test bed, there
- * is no reason to have a file open, as the cache proper
- * just passes these parameters through without using them.
- *
- * When this flag is set, all sanity checks on the file
- * parameters are skipped. The field defaults to FALSE.
- *
- * skip_dxpl_id_checks: Boolean flag used to skip sanity checks on the
- * dxpl_id parameters passed to the cache. These are not
- * used directly by the cache, so skipping the checks
- * simplifies the test bed.
- *
- * When this flag is set, all sanity checks on the dxpl_id
- * parameters are skipped. The field defaults to FALSE.
- *
- * prefix Array of char used to prefix debugging output. The
- * field is intended to allow marking of output of with
- * the processes mpi rank.
- *
- ****************************************************************************/
-
-#define H5C1__HASH_TABLE_LEN (64 * 1024) /* must be a power of 2 */
-
-#define H5C1__H5C1_T_MAGIC 0x005CAC0D
-#define H5C1__MAX_NUM_TYPE_IDS 16
-#define H5C1__PREFIX_LEN 32
-
-struct H5C1_t
-{
- uint32_t magic;
-
- hbool_t flush_in_progress;
-
- FILE * trace_file_ptr;
-
- void * aux_ptr;
-
- int32_t max_type_id;
- const char * (* type_name_table_ptr);
-
- size_t max_cache_size;
- size_t min_clean_size;
-
- H5C1_write_permitted_func_t check_write_permitted;
- hbool_t write_permitted;
-
- H5C1_log_flush_func_t log_flush;
-
- hbool_t evictions_enabled;
-
- int32_t index_len;
- size_t index_size;
- H5C1_cache_entry_t * (index[H5C1__HASH_TABLE_LEN]);
-
-
- int32_t slist_len;
- size_t slist_size;
- H5SL_t * slist_ptr;
-#if H5C1_DO_SANITY_CHECKS
- int64_t slist_len_increase;
- int64_t slist_size_increase;
-#endif /* H5C1_DO_SANITY_CHECKS */
-
- int32_t pl_len;
- size_t pl_size;
- H5C1_cache_entry_t * pl_head_ptr;
- H5C1_cache_entry_t * pl_tail_ptr;
-
- int32_t pel_len;
- size_t pel_size;
- H5C1_cache_entry_t * pel_head_ptr;
- H5C1_cache_entry_t * pel_tail_ptr;
-
- int32_t LRU_list_len;
- size_t LRU_list_size;
- H5C1_cache_entry_t * LRU_head_ptr;
- H5C1_cache_entry_t * LRU_tail_ptr;
-
- int32_t cLRU_list_len;
- size_t cLRU_list_size;
- H5C1_cache_entry_t * cLRU_head_ptr;
- H5C1_cache_entry_t * cLRU_tail_ptr;
-
- int32_t dLRU_list_len;
- size_t dLRU_list_size;
- H5C1_cache_entry_t * dLRU_head_ptr;
- H5C1_cache_entry_t * dLRU_tail_ptr;
-
- hbool_t size_increase_possible;
- hbool_t flash_size_increase_possible;
- size_t flash_size_increase_threshold;
- hbool_t size_decrease_possible;
- hbool_t resize_enabled;
- hbool_t cache_full;
- hbool_t size_decreased;
- H5C1_auto_size_ctl_t resize_ctl;
-
- int32_t epoch_markers_active;
- hbool_t epoch_marker_active[H5C1__MAX_EPOCH_MARKERS];
- int32_t epoch_marker_ringbuf[H5C1__MAX_EPOCH_MARKERS+1];
- int32_t epoch_marker_ringbuf_first;
- int32_t epoch_marker_ringbuf_last;
- int32_t epoch_marker_ringbuf_size;
- H5C1_cache_entry_t epoch_markers[H5C1__MAX_EPOCH_MARKERS];
-
- int64_t cache_hits;
- int64_t cache_accesses;
-
-#if H5C1_COLLECT_CACHE_STATS
-
- /* stats fields */
- int64_t hits[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t misses[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t write_protects[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t read_protects[H5C1__MAX_NUM_TYPE_IDS + 1];
- int32_t max_read_protects[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t insertions[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t pinned_insertions[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t clears[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t flushes[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t evictions[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t renames[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t entry_flush_renames[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t cache_flush_renames[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t pins[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t unpins[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t dirty_pins[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t pinned_flushes[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t pinned_clears[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t size_increases[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t size_decreases[H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t entry_flush_size_changes
- [H5C1__MAX_NUM_TYPE_IDS + 1];
- int64_t cache_flush_size_changes
- [H5C1__MAX_NUM_TYPE_IDS + 1];
-
- int64_t total_ht_insertions;
- int64_t total_ht_deletions;
- int64_t successful_ht_searches;
- int64_t total_successful_ht_search_depth;
- int64_t failed_ht_searches;
- int64_t total_failed_ht_search_depth;
-
- int32_t max_index_len;
- size_t max_index_size;
-
- int32_t max_slist_len;
- size_t max_slist_size;
-
- int32_t max_pl_len;
- size_t max_pl_size;
-
- int32_t max_pel_len;
- size_t max_pel_size;
-
-#if H5C1_COLLECT_CACHE_ENTRY_STATS
-
- int32_t max_accesses[H5C1__MAX_NUM_TYPE_IDS + 1];
- int32_t min_accesses[H5C1__MAX_NUM_TYPE_IDS + 1];
- int32_t max_clears[H5C1__MAX_NUM_TYPE_IDS + 1];
- int32_t max_flushes[H5C1__MAX_NUM_TYPE_IDS + 1];
- size_t max_size[H5C1__MAX_NUM_TYPE_IDS + 1];
- int32_t max_pins[H5C1__MAX_NUM_TYPE_IDS + 1];
-
-#endif /* H5C1_COLLECT_CACHE_ENTRY_STATS */
-
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
- hbool_t skip_file_checks;
- hbool_t skip_dxpl_id_checks;
- char prefix[H5C1__PREFIX_LEN];
-};
-
-
-/****************************************************************************/
-/***************************** Macro Definitions ****************************/
-/****************************************************************************/
-
-
-/****************************************************************************
- *
- * We maintain doubly linked lists of instances of H5C1_cache_entry_t for a
- * variety of reasons -- protected list, LRU list, and the clean and dirty
- * LRU lists at present. The following macros support linking and unlinking
- * of instances of H5C1_cache_entry_t by both their regular and auxilary next
- * and previous pointers.
- *
- * The size and length fields are also maintained.
- *
- * Note that the relevant pair of prev and next pointers are presumed to be
- * NULL on entry in the insertion macros.
- *
- * Finally, observe that the sanity checking macros evaluate to the empty
- * string when H5C1_DO_SANITY_CHECKS is FALSE. They also contain calls
- * to the HGOTO_ERROR macro, which may not be appropriate in all cases.
- * If so, we will need versions of the insertion and deletion macros which
- * do not reference the sanity checking macros.
- * JRM - 5/5/04
- *
- * Changes:
- *
- * - Removed the line:
- *
- * ( ( (Size) == (entry_ptr)->size ) && ( (len) != 1 ) ) ||
- *
- * from the H5C1__DLL_PRE_REMOVE_SC macro. With the addition of the
- * epoch markers used in the age out based cache size reduction algorithm,
- * this invarient need not hold, as the epoch markers are of size 0.
- *
- * One could argue that I should have given the epoch markers a positive
- * size, but this would break the index_size = LRU_list_size + pl_size
- * + pel_size invarient.
- *
- * Alternatively, I could pass the current decr_mode in to the macro,
- * and just skip the check whenever epoch markers may be in use.
- *
- * However, any size errors should be caught when the cache is flushed
- * and destroyed. Until we are tracking such an error, this should be
- * good enough.
- * JRM - 12/9/04
- *
- *
- * - In the H5C1__DLL_PRE_INSERT_SC macro, replaced the lines:
- *
- * ( ( (len) == 1 ) &&
- * ( ( (head_ptr) != (tail_ptr) ) || ( (Size) <= 0 ) ||
- * ( (head_ptr) == NULL ) || ( (head_ptr)->size != (Size) )
- * )
- * ) ||
- *
- * with:
- *
- * ( ( (len) == 1 ) &&
- * ( ( (head_ptr) != (tail_ptr) ) ||
- * ( (head_ptr) == NULL ) || ( (head_ptr)->size != (Size) )
- * )
- * ) ||
- *
- * Epoch markers have size 0, so we can now have a non-empty list with
- * zero size. Hence the "( (Size) <= 0 )" clause cause false failures
- * in the sanity check. Since "Size" is typically a size_t, it can't
- * take on negative values, and thus the revised clause "( (Size) < 0 )"
- * caused compiler warnings.
- * JRM - 12/22/04
- *
- * - In the H5C1__DLL_SC macro, replaced the lines:
- *
- * ( ( (len) == 1 ) &&
- * ( ( (head_ptr) != (tail_ptr) ) || ( (cache_ptr)->size <= 0 ) ||
- * ( (head_ptr) == NULL ) || ( (head_ptr)->size != (Size) )
- * )
- * ) ||
- *
- * with
- *
- * ( ( (len) == 1 ) &&
- * ( ( (head_ptr) != (tail_ptr) ) ||
- * ( (head_ptr) == NULL ) || ( (head_ptr)->size != (Size) )
- * )
- * ) ||
- *
- * Epoch markers have size 0, so we can now have a non-empty list with
- * zero size. Hence the "( (Size) <= 0 )" clause cause false failures
- * in the sanity check. Since "Size" is typically a size_t, it can't
- * take on negative values, and thus the revised clause "( (Size) < 0 )"
- * caused compiler warnings.
- * JRM - 1/10/05
- *
- * - Added the H5C1__DLL_UPDATE_FOR_SIZE_CHANGE macro and the associated
- * sanity checking macros. These macro are used to update the size of
- * a DLL when one of its entries changes size.
- *
- * JRM - 9/8/05
- *
- ****************************************************************************/
-
-#if H5C1_DO_SANITY_CHECKS
-
-#define H5C1__DLL_PRE_REMOVE_SC(entry_ptr, head_ptr, tail_ptr, len, Size, fv) \
-if ( ( (head_ptr) == NULL ) || \
- ( (tail_ptr) == NULL ) || \
- ( (entry_ptr) == NULL ) || \
- ( (len) <= 0 ) || \
- ( (Size) < (entry_ptr)->size ) || \
- ( ( (entry_ptr)->prev == NULL ) && ( (head_ptr) != (entry_ptr) ) ) || \
- ( ( (entry_ptr)->next == NULL ) && ( (tail_ptr) != (entry_ptr) ) ) || \
- ( ( (len) == 1 ) && \
- ( ! ( ( (head_ptr) == (entry_ptr) ) && \
- ( (tail_ptr) == (entry_ptr) ) && \
- ( (entry_ptr)->next == NULL ) && \
- ( (entry_ptr)->prev == NULL ) && \
- ( (Size) == (entry_ptr)->size ) \
- ) \
- ) \
- ) \
- ) { \
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "DLL pre remove SC failed") \
-}
-
-#define H5C1__DLL_SC(head_ptr, tail_ptr, len, Size, fv) \
-if ( ( ( ( (head_ptr) == NULL ) || ( (tail_ptr) == NULL ) ) && \
- ( (head_ptr) != (tail_ptr) ) \
- ) || \
- ( (len) < 0 ) || \
- ( (Size) < 0 ) || \
- ( ( (len) == 1 ) && \
- ( ( (head_ptr) != (tail_ptr) ) || \
- ( (head_ptr) == NULL ) || ( (head_ptr)->size != (Size) ) \
- ) \
- ) || \
- ( ( (len) >= 1 ) && \
- ( ( (head_ptr) == NULL ) || ( (head_ptr)->prev != NULL ) || \
- ( (tail_ptr) == NULL ) || ( (tail_ptr)->next != NULL ) \
- ) \
- ) \
- ) { \
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "DLL sanity check failed") \
-}
-
-#define H5C1__DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size, fv) \
-if ( ( (entry_ptr) == NULL ) || \
- ( (entry_ptr)->next != NULL ) || \
- ( (entry_ptr)->prev != NULL ) || \
- ( ( ( (head_ptr) == NULL ) || ( (tail_ptr) == NULL ) ) && \
- ( (head_ptr) != (tail_ptr) ) \
- ) || \
- ( (len) < 0 ) || \
- ( ( (len) == 1 ) && \
- ( ( (head_ptr) != (tail_ptr) ) || \
- ( (head_ptr) == NULL ) || ( (head_ptr)->size != (Size) ) \
- ) \
- ) || \
- ( ( (len) >= 1 ) && \
- ( ( (head_ptr) == NULL ) || ( (head_ptr)->prev != NULL ) || \
- ( (tail_ptr) == NULL ) || ( (tail_ptr)->next != NULL ) \
- ) \
- ) \
- ) { \
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "DLL pre insert SC failed") \
-}
-
-#define H5C1__DLL_PRE_SIZE_UPDATE_SC(dll_len, dll_size, old_size, new_size) \
-if ( ( (dll_len) <= 0 ) || \
- ( (dll_size) <= 0 ) || \
- ( (old_size) <= 0 ) || \
- ( (old_size) > (dll_size) ) || \
- ( (new_size) <= 0 ) || \
- ( ( (dll_len) == 1 ) && ( (old_size) != (dll_size) ) ) ) { \
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "DLL pre size update SC failed") \
-}
-
-#define H5C1__DLL_POST_SIZE_UPDATE_SC(dll_len, dll_size, old_size, new_size) \
-if ( ( (new_size) > (dll_size) ) || \
- ( ( (dll_len) == 1 ) && ( (new_size) != (dll_size) ) ) ) { \
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "DLL post size update SC failed") \
-}
-
-#else /* H5C1_DO_SANITY_CHECKS */
-
-#define H5C1__DLL_PRE_REMOVE_SC(entry_ptr, head_ptr, tail_ptr, len, Size, fv)
-#define H5C1__DLL_SC(head_ptr, tail_ptr, len, Size, fv)
-#define H5C1__DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size, fv)
-#define H5C1__DLL_PRE_SIZE_UPDATE_SC(dll_len, dll_size, old_size, new_size)
-#define H5C1__DLL_POST_SIZE_UPDATE_SC(dll_len, dll_size, old_size, new_size)
-
-#endif /* H5C1_DO_SANITY_CHECKS */
-
-
-#define H5C1__DLL_APPEND(entry_ptr, head_ptr, tail_ptr, len, Size, fail_val) \
- H5C1__DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size, \
- fail_val) \
- if ( (head_ptr) == NULL ) \
- { \
- (head_ptr) = (entry_ptr); \
- (tail_ptr) = (entry_ptr); \
- } \
- else \
- { \
- (tail_ptr)->next = (entry_ptr); \
- (entry_ptr)->prev = (tail_ptr); \
- (tail_ptr) = (entry_ptr); \
- } \
- (len)++; \
- (Size) += (entry_ptr)->size;
-
-#define H5C1__DLL_PREPEND(entry_ptr, head_ptr, tail_ptr, len, Size, fail_val) \
- H5C1__DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size, \
- fail_val) \
- if ( (head_ptr) == NULL ) \
- { \
- (head_ptr) = (entry_ptr); \
- (tail_ptr) = (entry_ptr); \
- } \
- else \
- { \
- (head_ptr)->prev = (entry_ptr); \
- (entry_ptr)->next = (head_ptr); \
- (head_ptr) = (entry_ptr); \
- } \
- (len)++; \
- (Size) += entry_ptr->size;
-
-#define H5C1__DLL_REMOVE(entry_ptr, head_ptr, tail_ptr, len, Size, fail_val) \
- H5C1__DLL_PRE_REMOVE_SC(entry_ptr, head_ptr, tail_ptr, len, Size, \
- fail_val) \
- { \
- if ( (head_ptr) == (entry_ptr) ) \
- { \
- (head_ptr) = (entry_ptr)->next; \
- if ( (head_ptr) != NULL ) \
- { \
- (head_ptr)->prev = NULL; \
- } \
- } \
- else \
- { \
- (entry_ptr)->prev->next = (entry_ptr)->next; \
- } \
- if ( (tail_ptr) == (entry_ptr) ) \
- { \
- (tail_ptr) = (entry_ptr)->prev; \
- if ( (tail_ptr) != NULL ) \
- { \
- (tail_ptr)->next = NULL; \
- } \
- } \
- else \
- { \
- (entry_ptr)->next->prev = (entry_ptr)->prev; \
- } \
- entry_ptr->next = NULL; \
- entry_ptr->prev = NULL; \
- (len)--; \
- (Size) -= entry_ptr->size; \
- }
-
-#define H5C1__DLL_UPDATE_FOR_SIZE_CHANGE(dll_len, dll_size, old_size, new_size) \
- H5C1__DLL_PRE_SIZE_UPDATE_SC(dll_len, dll_size, old_size, new_size) \
- (dll_size) -= (old_size); \
- (dll_size) += (new_size); \
- H5C1__DLL_POST_SIZE_UPDATE_SC(dll_len, dll_size, old_size, new_size)
-
-#if H5C1_DO_SANITY_CHECKS
-
-#define H5C1__AUX_DLL_PRE_REMOVE_SC(entry_ptr, hd_ptr, tail_ptr, len, Size, fv) \
-if ( ( (hd_ptr) == NULL ) || \
- ( (tail_ptr) == NULL ) || \
- ( (entry_ptr) == NULL ) || \
- ( (len) <= 0 ) || \
- ( (Size) < (entry_ptr)->size ) || \
- ( ( (Size) == (entry_ptr)->size ) && ( ! ( (len) == 1 ) ) ) || \
- ( ( (entry_ptr)->aux_prev == NULL ) && ( (hd_ptr) != (entry_ptr) ) ) || \
- ( ( (entry_ptr)->aux_next == NULL ) && ( (tail_ptr) != (entry_ptr) ) ) || \
- ( ( (len) == 1 ) && \
- ( ! ( ( (hd_ptr) == (entry_ptr) ) && ( (tail_ptr) == (entry_ptr) ) && \
- ( (entry_ptr)->aux_next == NULL ) && \
- ( (entry_ptr)->aux_prev == NULL ) && \
- ( (Size) == (entry_ptr)->size ) \
- ) \
- ) \
- ) \
- ) { \
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "aux DLL pre remove SC failed") \
-}
-
-#define H5C1__AUX_DLL_SC(head_ptr, tail_ptr, len, Size, fv) \
-if ( ( ( ( (head_ptr) == NULL ) || ( (tail_ptr) == NULL ) ) && \
- ( (head_ptr) != (tail_ptr) ) \
- ) || \
- ( (len) < 0 ) || \
- ( (Size) < 0 ) || \
- ( ( (len) == 1 ) && \
- ( ( (head_ptr) != (tail_ptr) ) || ( (Size) <= 0 ) || \
- ( (head_ptr) == NULL ) || ( (head_ptr)->size != (Size) ) \
- ) \
- ) || \
- ( ( (len) >= 1 ) && \
- ( ( (head_ptr) == NULL ) || ( (head_ptr)->aux_prev != NULL ) || \
- ( (tail_ptr) == NULL ) || ( (tail_ptr)->aux_next != NULL ) \
- ) \
- ) \
- ) { \
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "AUX DLL sanity check failed") \
-}
-
-#define H5C1__AUX_DLL_PRE_INSERT_SC(entry_ptr, hd_ptr, tail_ptr, len, Size, fv) \
-if ( ( (entry_ptr) == NULL ) || \
- ( (entry_ptr)->aux_next != NULL ) || \
- ( (entry_ptr)->aux_prev != NULL ) || \
- ( ( ( (hd_ptr) == NULL ) || ( (tail_ptr) == NULL ) ) && \
- ( (hd_ptr) != (tail_ptr) ) \
- ) || \
- ( (len) < 0 ) || \
- ( ( (len) == 1 ) && \
- ( ( (hd_ptr) != (tail_ptr) ) || ( (Size) <= 0 ) || \
- ( (hd_ptr) == NULL ) || ( (hd_ptr)->size != (Size) ) \
- ) \
- ) || \
- ( ( (len) >= 1 ) && \
- ( ( (hd_ptr) == NULL ) || ( (hd_ptr)->aux_prev != NULL ) || \
- ( (tail_ptr) == NULL ) || ( (tail_ptr)->aux_next != NULL ) \
- ) \
- ) \
- ) { \
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "AUX DLL pre insert SC failed") \
-}
-
-#else /* H5C1_DO_SANITY_CHECKS */
-
-#define H5C1__AUX_DLL_PRE_REMOVE_SC(entry_ptr, hd_ptr, tail_ptr, len, Size, fv)
-#define H5C1__AUX_DLL_SC(head_ptr, tail_ptr, len, Size, fv)
-#define H5C1__AUX_DLL_PRE_INSERT_SC(entry_ptr, hd_ptr, tail_ptr, len, Size, fv)
-
-#endif /* H5C1_DO_SANITY_CHECKS */
-
-
-#define H5C1__AUX_DLL_APPEND(entry_ptr, head_ptr, tail_ptr, len, Size, fail_val)\
- H5C1__AUX_DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size, \
- fail_val) \
- if ( (head_ptr) == NULL ) \
- { \
- (head_ptr) = (entry_ptr); \
- (tail_ptr) = (entry_ptr); \
- } \
- else \
- { \
- (tail_ptr)->aux_next = (entry_ptr); \
- (entry_ptr)->aux_prev = (tail_ptr); \
- (tail_ptr) = (entry_ptr); \
- } \
- (len)++; \
- (Size) += entry_ptr->size;
-
-#define H5C1__AUX_DLL_PREPEND(entry_ptr, head_ptr, tail_ptr, len, Size, fv) \
- H5C1__AUX_DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size, \
- fv) \
- if ( (head_ptr) == NULL ) \
- { \
- (head_ptr) = (entry_ptr); \
- (tail_ptr) = (entry_ptr); \
- } \
- else \
- { \
- (head_ptr)->aux_prev = (entry_ptr); \
- (entry_ptr)->aux_next = (head_ptr); \
- (head_ptr) = (entry_ptr); \
- } \
- (len)++; \
- (Size) += entry_ptr->size;
-
-#define H5C1__AUX_DLL_REMOVE(entry_ptr, head_ptr, tail_ptr, len, Size, fv) \
- H5C1__AUX_DLL_PRE_REMOVE_SC(entry_ptr, head_ptr, tail_ptr, len, Size, \
- fv) \
- { \
- if ( (head_ptr) == (entry_ptr) ) \
- { \
- (head_ptr) = (entry_ptr)->aux_next; \
- if ( (head_ptr) != NULL ) \
- { \
- (head_ptr)->aux_prev = NULL; \
- } \
- } \
- else \
- { \
- (entry_ptr)->aux_prev->aux_next = (entry_ptr)->aux_next; \
- } \
- if ( (tail_ptr) == (entry_ptr) ) \
- { \
- (tail_ptr) = (entry_ptr)->aux_prev; \
- if ( (tail_ptr) != NULL ) \
- { \
- (tail_ptr)->aux_next = NULL; \
- } \
- } \
- else \
- { \
- (entry_ptr)->aux_next->aux_prev = (entry_ptr)->aux_prev; \
- } \
- entry_ptr->aux_next = NULL; \
- entry_ptr->aux_prev = NULL; \
- (len)--; \
- (Size) -= entry_ptr->size; \
- }
-
-
-/***********************************************************************
- *
- * Stats collection macros
- *
- * The following macros must handle stats collection when this collection
- * is enabled, and evaluate to the empty string when it is not.
- *
- * The sole exception to this rule is
- * H5C1__UPDATE_CACHE_HIT_RATE_STATS(), which is always active as
- * the cache hit rate stats are always collected and available.
- *
- * Changes:
- *
- * JRM -- 3/21/06
- * Added / updated macros for pinned entry related stats.
- *
- * JRM -- 8/9/06
- * More pinned entry stats related updates.
- *
- * JRM -- 3/31/07
- * Updated H5C1__UPDATE_STATS_FOR_PROTECT() to keep stats on
- * read and write protects.
- *
- ***********************************************************************/
-
-#define H5C1__UPDATE_CACHE_HIT_RATE_STATS(cache_ptr, hit) \
- (cache_ptr->cache_accesses)++; \
- if ( hit ) { \
- (cache_ptr->cache_hits)++; \
- } \
-
-#if H5C1_COLLECT_CACHE_STATS
-
-#define H5C1__UPDATE_STATS_FOR_DIRTY_PIN(cache_ptr, entry_ptr) \
- (((cache_ptr)->dirty_pins)[(entry_ptr)->type->id])++;
-
-#define H5C1__UPDATE_STATS_FOR_UNPROTECT(cache_ptr) \
- if ( (cache_ptr)->slist_len > (cache_ptr)->max_slist_len ) \
- (cache_ptr)->max_slist_len = (cache_ptr)->slist_len; \
- if ( (cache_ptr)->slist_size > (cache_ptr)->max_slist_size ) \
- (cache_ptr)->max_slist_size = (cache_ptr)->slist_size; \
- if ( (cache_ptr)->pel_len > (cache_ptr)->max_pel_len ) \
- (cache_ptr)->max_pel_len = (cache_ptr)->pel_len; \
- if ( (cache_ptr)->pel_size > (cache_ptr)->max_pel_size ) \
- (cache_ptr)->max_pel_size = (cache_ptr)->pel_size;
-
-#define H5C1__UPDATE_STATS_FOR_RENAME(cache_ptr, entry_ptr) \
- if ( cache_ptr->flush_in_progress ) { \
- ((cache_ptr)->cache_flush_renames[(entry_ptr)->type->id])++; \
- } \
- if ( entry_ptr->flush_in_progress ) { \
- ((cache_ptr)->entry_flush_renames[(entry_ptr)->type->id])++; \
- } \
- (((cache_ptr)->renames)[(entry_ptr)->type->id])++;
-
-#define H5C1__UPDATE_STATS_FOR_ENTRY_SIZE_CHANGE(cache_ptr, entry_ptr, new_size)\
- if ( cache_ptr->flush_in_progress ) { \
- ((cache_ptr)->cache_flush_size_changes[(entry_ptr)->type->id])++; \
- } \
- if ( entry_ptr->flush_in_progress ) { \
- ((cache_ptr)->entry_flush_size_changes[(entry_ptr)->type->id])++; \
- } \
- if ( (entry_ptr)->size < (new_size) ) { \
- ((cache_ptr)->size_increases[(entry_ptr)->type->id])++; \
- if ( (cache_ptr)->index_size > (cache_ptr)->max_index_size ) \
- (cache_ptr)->max_index_size = (cache_ptr)->index_size; \
- if ( (cache_ptr)->slist_size > (cache_ptr)->max_slist_size ) \
- (cache_ptr)->max_slist_size = (cache_ptr)->slist_size; \
- if ( (cache_ptr)->pl_size > (cache_ptr)->max_pl_size ) \
- (cache_ptr)->max_pl_size = (cache_ptr)->pl_size; \
- } else if ( (entry_ptr)->size > (new_size) ) { \
- ((cache_ptr)->size_decreases[(entry_ptr)->type->id])++; \
- }
-
-#define H5C1__UPDATE_STATS_FOR_HT_INSERTION(cache_ptr) \
- (cache_ptr)->total_ht_insertions++;
-
-#define H5C1__UPDATE_STATS_FOR_HT_DELETION(cache_ptr) \
- (cache_ptr)->total_ht_deletions++;
-
-#define H5C1__UPDATE_STATS_FOR_HT_SEARCH(cache_ptr, success, depth) \
- if ( success ) { \
- (cache_ptr)->successful_ht_searches++; \
- (cache_ptr)->total_successful_ht_search_depth += depth; \
- } else { \
- (cache_ptr)->failed_ht_searches++; \
- (cache_ptr)->total_failed_ht_search_depth += depth; \
- }
-
-#define H5C1__UPDATE_STATS_FOR_UNPIN(cache_ptr, entry_ptr) \
- ((cache_ptr)->unpins)[(entry_ptr)->type->id]++;
-
-#if H5C1_COLLECT_CACHE_ENTRY_STATS
-
-#define H5C1__RESET_CACHE_ENTRY_STATS(entry_ptr) \
- (entry_ptr)->accesses = 0; \
- (entry_ptr)->clears = 0; \
- (entry_ptr)->flushes = 0; \
- (entry_ptr)->pins = 0;
-
-#define H5C1__UPDATE_STATS_FOR_CLEAR(cache_ptr, entry_ptr) \
- (((cache_ptr)->clears)[(entry_ptr)->type->id])++; \
- if ( (entry_ptr)->is_pinned ) { \
- (((cache_ptr)->pinned_clears)[(entry_ptr)->type->id])++; \
- } \
- ((entry_ptr)->clears)++;
-
-#define H5C1__UPDATE_STATS_FOR_FLUSH(cache_ptr, entry_ptr) \
- (((cache_ptr)->flushes)[(entry_ptr)->type->id])++; \
- if ( (entry_ptr)->is_pinned ) { \
- (((cache_ptr)->pinned_flushes)[(entry_ptr)->type->id])++; \
- } \
- ((entry_ptr)->flushes)++;
-
-#define H5C1__UPDATE_STATS_FOR_EVICTION(cache_ptr, entry_ptr) \
- (((cache_ptr)->evictions)[(entry_ptr)->type->id])++; \
- if ( (entry_ptr)->accesses > \
- ((cache_ptr)->max_accesses)[(entry_ptr)->type->id] ) { \
- ((cache_ptr)->max_accesses)[(entry_ptr)->type->id] \
- = (entry_ptr)->accesses; \
- } \
- if ( (entry_ptr)->accesses < \
- ((cache_ptr)->min_accesses)[(entry_ptr)->type->id] ) { \
- ((cache_ptr)->min_accesses)[(entry_ptr)->type->id] \
- = (entry_ptr)->accesses; \
- } \
- if ( (entry_ptr)->clears > \
- ((cache_ptr)->max_clears)[(entry_ptr)->type->id] ) { \
- ((cache_ptr)->max_clears)[(entry_ptr)->type->id] \
- = (entry_ptr)->clears; \
- } \
- if ( (entry_ptr)->flushes > \
- ((cache_ptr)->max_flushes)[(entry_ptr)->type->id] ) { \
- ((cache_ptr)->max_flushes)[(entry_ptr)->type->id] \
- = (entry_ptr)->flushes; \
- } \
- if ( (entry_ptr)->size > \
- ((cache_ptr)->max_size)[(entry_ptr)->type->id] ) { \
- ((cache_ptr)->max_size)[(entry_ptr)->type->id] \
- = (entry_ptr)->size; \
- } \
- if ( (entry_ptr)->pins > \
- ((cache_ptr)->max_pins)[(entry_ptr)->type->id] ) { \
- ((cache_ptr)->max_pins)[(entry_ptr)->type->id] \
- = (entry_ptr)->pins; \
- }
-
-#define H5C1__UPDATE_STATS_FOR_INSERTION(cache_ptr, entry_ptr) \
- (((cache_ptr)->insertions)[(entry_ptr)->type->id])++; \
- if ( (entry_ptr)->is_pinned ) { \
- (((cache_ptr)->pinned_insertions)[(entry_ptr)->type->id])++; \
- ((cache_ptr)->pins)[(entry_ptr)->type->id]++; \
- (entry_ptr)->pins++; \
- if ( (cache_ptr)->pel_len > (cache_ptr)->max_pel_len ) \
- (cache_ptr)->max_pel_len = (cache_ptr)->pel_len; \
- if ( (cache_ptr)->pel_size > (cache_ptr)->max_pel_size ) \
- (cache_ptr)->max_pel_size = (cache_ptr)->pel_size; \
- } \
- if ( (cache_ptr)->index_len > (cache_ptr)->max_index_len ) \
- (cache_ptr)->max_index_len = (cache_ptr)->index_len; \
- if ( (cache_ptr)->index_size > (cache_ptr)->max_index_size ) \
- (cache_ptr)->max_index_size = (cache_ptr)->index_size; \
- if ( (cache_ptr)->slist_len > (cache_ptr)->max_slist_len ) \
- (cache_ptr)->max_slist_len = (cache_ptr)->slist_len; \
- if ( (cache_ptr)->slist_size > (cache_ptr)->max_slist_size ) \
- (cache_ptr)->max_slist_size = (cache_ptr)->slist_size; \
- if ( (entry_ptr)->size > \
- ((cache_ptr)->max_size)[(entry_ptr)->type->id] ) { \
- ((cache_ptr)->max_size)[(entry_ptr)->type->id] \
- = (entry_ptr)->size; \
- }
-
-#define H5C1__UPDATE_STATS_FOR_PROTECT(cache_ptr, entry_ptr, hit) \
- if ( hit ) \
- ((cache_ptr)->hits)[(entry_ptr)->type->id]++; \
- else \
- ((cache_ptr)->misses)[(entry_ptr)->type->id]++; \
- if ( ! ((entry_ptr)->is_read_only) ) { \
- ((cache_ptr)->write_protects)[(entry_ptr)->type->id]++; \
- } else { \
- ((cache_ptr)->read_protects)[(entry_ptr)->type->id]++; \
- if ( ((entry_ptr)->ro_ref_count) > \
- ((cache_ptr)->max_read_protects)[(entry_ptr)->type->id] ) { \
- ((cache_ptr)->max_read_protects)[(entry_ptr)->type->id] = \
- ((entry_ptr)->ro_ref_count); \
- } \
- } \
- if ( (cache_ptr)->index_len > (cache_ptr)->max_index_len ) \
- (cache_ptr)->max_index_len = (cache_ptr)->index_len; \
- if ( (cache_ptr)->index_size > (cache_ptr)->max_index_size ) \
- (cache_ptr)->max_index_size = (cache_ptr)->index_size; \
- if ( (cache_ptr)->pl_len > (cache_ptr)->max_pl_len ) \
- (cache_ptr)->max_pl_len = (cache_ptr)->pl_len; \
- if ( (cache_ptr)->pl_size > (cache_ptr)->max_pl_size ) \
- (cache_ptr)->max_pl_size = (cache_ptr)->pl_size; \
- if ( (entry_ptr)->size > \
- ((cache_ptr)->max_size)[(entry_ptr)->type->id] ) { \
- ((cache_ptr)->max_size)[(entry_ptr)->type->id] \
- = (entry_ptr)->size; \
- } \
- ((entry_ptr)->accesses)++;
-
-#define H5C1__UPDATE_STATS_FOR_PIN(cache_ptr, entry_ptr) \
- ((cache_ptr)->pins)[(entry_ptr)->type->id]++; \
- (entry_ptr)->pins++; \
- if ( (cache_ptr)->pel_len > (cache_ptr)->max_pel_len ) \
- (cache_ptr)->max_pel_len = (cache_ptr)->pel_len; \
- if ( (cache_ptr)->pel_size > (cache_ptr)->max_pel_size ) \
- (cache_ptr)->max_pel_size = (cache_ptr)->pel_size;
-
-#else /* H5C1_COLLECT_CACHE_ENTRY_STATS */
-
-#define H5C1__RESET_CACHE_ENTRY_STATS(entry_ptr)
-
-#define H5C1__UPDATE_STATS_FOR_CLEAR(cache_ptr, entry_ptr) \
- if ( (entry_ptr)->is_pinned ) { \
- (((cache_ptr)->pinned_clears)[(entry_ptr)->type->id])++; \
- } \
- (((cache_ptr)->clears)[(entry_ptr)->type->id])++;
-
-#define H5C1__UPDATE_STATS_FOR_FLUSH(cache_ptr, entry_ptr) \
- (((cache_ptr)->flushes)[(entry_ptr)->type->id])++; \
- if ( (entry_ptr)->is_pinned ) { \
- (((cache_ptr)->pinned_flushes)[(entry_ptr)->type->id])++; \
- }
-
-#define H5C1__UPDATE_STATS_FOR_EVICTION(cache_ptr, entry_ptr) \
- (((cache_ptr)->evictions)[(entry_ptr)->type->id])++;
-
-#define H5C1__UPDATE_STATS_FOR_INSERTION(cache_ptr, entry_ptr) \
- (((cache_ptr)->insertions)[(entry_ptr)->type->id])++; \
- if ( (entry_ptr)->is_pinned ) { \
- (((cache_ptr)->pinned_insertions)[(entry_ptr)->type->id])++; \
- ((cache_ptr)->pins)[(entry_ptr)->type->id]++; \
- if ( (cache_ptr)->pel_len > (cache_ptr)->max_pel_len ) \
- (cache_ptr)->max_pel_len = (cache_ptr)->pel_len; \
- if ( (cache_ptr)->pel_size > (cache_ptr)->max_pel_size ) \
- (cache_ptr)->max_pel_size = (cache_ptr)->pel_size; \
- } \
- if ( (cache_ptr)->index_len > (cache_ptr)->max_index_len ) \
- (cache_ptr)->max_index_len = (cache_ptr)->index_len; \
- if ( (cache_ptr)->index_size > (cache_ptr)->max_index_size ) \
- (cache_ptr)->max_index_size = (cache_ptr)->index_size; \
- if ( (cache_ptr)->slist_len > (cache_ptr)->max_slist_len ) \
- (cache_ptr)->max_slist_len = (cache_ptr)->slist_len; \
- if ( (cache_ptr)->slist_size > (cache_ptr)->max_slist_size ) \
- (cache_ptr)->max_slist_size = (cache_ptr)->slist_size;
-
-#define H5C1__UPDATE_STATS_FOR_PROTECT(cache_ptr, entry_ptr, hit) \
- if ( hit ) \
- ((cache_ptr)->hits)[(entry_ptr)->type->id]++; \
- else \
- ((cache_ptr)->misses)[(entry_ptr)->type->id]++; \
- if ( ! ((entry_ptr)->is_read_only) ) { \
- ((cache_ptr)->write_protects)[(entry_ptr)->type->id]++; \
- } else { \
- ((cache_ptr)->read_protects)[(entry_ptr)->type->id]++; \
- if ( ((entry_ptr)->ro_ref_count) > \
- ((cache_ptr)->max_read_protects)[(entry_ptr)->type->id] ) { \
- ((cache_ptr)->max_read_protects)[(entry_ptr)->type->id] = \
- ((entry_ptr)->ro_ref_count); \
- } \
- } \
- if ( (cache_ptr)->index_len > (cache_ptr)->max_index_len ) \
- (cache_ptr)->max_index_len = (cache_ptr)->index_len; \
- if ( (cache_ptr)->index_size > (cache_ptr)->max_index_size ) \
- (cache_ptr)->max_index_size = (cache_ptr)->index_size; \
- if ( (cache_ptr)->pl_len > (cache_ptr)->max_pl_len ) \
- (cache_ptr)->max_pl_len = (cache_ptr)->pl_len; \
- if ( (cache_ptr)->pl_size > (cache_ptr)->max_pl_size ) \
- (cache_ptr)->max_pl_size = (cache_ptr)->pl_size;
-
-#define H5C1__UPDATE_STATS_FOR_PIN(cache_ptr, entry_ptr) \
- ((cache_ptr)->pins)[(entry_ptr)->type->id]++; \
- if ( (cache_ptr)->pel_len > (cache_ptr)->max_pel_len ) \
- (cache_ptr)->max_pel_len = (cache_ptr)->pel_len; \
- if ( (cache_ptr)->pel_size > (cache_ptr)->max_pel_size ) \
- (cache_ptr)->max_pel_size = (cache_ptr)->pel_size;
-
-#endif /* H5C1_COLLECT_CACHE_ENTRY_STATS */
-
-#else /* H5C1_COLLECT_CACHE_STATS */
-
-#define H5C1__RESET_CACHE_ENTRY_STATS(entry_ptr)
-#define H5C1__UPDATE_STATS_FOR_DIRTY_PIN(cache_ptr, entry_ptr)
-#define H5C1__UPDATE_STATS_FOR_UNPROTECT(cache_ptr)
-#define H5C1__UPDATE_STATS_FOR_RENAME(cache_ptr, entry_ptr)
-#define H5C1__UPDATE_STATS_FOR_ENTRY_SIZE_CHANGE(cache_ptr, entry_ptr, new_size)
-#define H5C1__UPDATE_STATS_FOR_HT_INSERTION(cache_ptr)
-#define H5C1__UPDATE_STATS_FOR_HT_DELETION(cache_ptr)
-#define H5C1__UPDATE_STATS_FOR_HT_SEARCH(cache_ptr, success, depth)
-#define H5C1__UPDATE_STATS_FOR_INSERTION(cache_ptr, entry_ptr)
-#define H5C1__UPDATE_STATS_FOR_CLEAR(cache_ptr, entry_ptr)
-#define H5C1__UPDATE_STATS_FOR_FLUSH(cache_ptr, entry_ptr)
-#define H5C1__UPDATE_STATS_FOR_EVICTION(cache_ptr, entry_ptr)
-#define H5C1__UPDATE_STATS_FOR_PROTECT(cache_ptr, entry_ptr, hit)
-#define H5C1__UPDATE_STATS_FOR_PIN(cache_ptr, entry_ptr)
-#define H5C1__UPDATE_STATS_FOR_UNPIN(cache_ptr, entry_ptr)
-
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
-
-/***********************************************************************
- *
- * Hash table access and manipulation macros:
- *
- * The following macros handle searches, insertions, and deletion in
- * the hash table.
- *
- * When modifying these macros, remember to modify the similar macros
- * in tst/cache.c
- *
- ***********************************************************************/
-
-/* H5C1__HASH_TABLE_LEN is defined in H5Cpkg.h. It mut be a power of two. */
-
-#define H5C1__HASH_MASK ((size_t)(H5C1__HASH_TABLE_LEN - 1) << 3)
-
-#define H5C1__HASH_FCN(x) (int)(((x) & H5C1__HASH_MASK) >> 3)
-
-#if H5C1_DO_SANITY_CHECKS
-
-#define H5C1__PRE_HT_INSERT_SC(cache_ptr, entry_ptr, fail_val) \
-if ( ( (cache_ptr) == NULL ) || \
- ( (cache_ptr)->magic != H5C1__H5C1_T_MAGIC ) || \
- ( (entry_ptr) == NULL ) || \
- ( ! H5F_addr_defined((entry_ptr)->addr) ) || \
- ( (entry_ptr)->ht_next != NULL ) || \
- ( (entry_ptr)->ht_prev != NULL ) || \
- ( (entry_ptr)->size <= 0 ) || \
- ( (k = H5C1__HASH_FCN((entry_ptr)->addr)) < 0 ) || \
- ( k >= H5C1__HASH_TABLE_LEN ) ) { \
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, fail_val, \
- "Pre HT insert SC failed") \
-}
-
-#define H5C1__PRE_HT_REMOVE_SC(cache_ptr, entry_ptr) \
-if ( ( (cache_ptr) == NULL ) || \
- ( (cache_ptr)->magic != H5C1__H5C1_T_MAGIC ) || \
- ( (cache_ptr)->index_len < 1 ) || \
- ( (entry_ptr) == NULL ) || \
- ( (cache_ptr)->index_size < (entry_ptr)->size ) || \
- ( ! H5F_addr_defined((entry_ptr)->addr) ) || \
- ( (entry_ptr)->size <= 0 ) || \
- ( H5C1__HASH_FCN((entry_ptr)->addr) < 0 ) || \
- ( H5C1__HASH_FCN((entry_ptr)->addr) >= H5C1__HASH_TABLE_LEN ) || \
- ( ((cache_ptr)->index)[(H5C1__HASH_FCN((entry_ptr)->addr))] \
- == NULL ) || \
- ( ( ((cache_ptr)->index)[(H5C1__HASH_FCN((entry_ptr)->addr))] \
- != (entry_ptr) ) && \
- ( (entry_ptr)->ht_prev == NULL ) ) || \
- ( ( ((cache_ptr)->index)[(H5C1__HASH_FCN((entry_ptr)->addr))] == \
- (entry_ptr) ) && \
- ( (entry_ptr)->ht_prev != NULL ) ) ) { \
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Pre HT remove SC failed") \
-}
-
-#define H5C1__PRE_HT_SEARCH_SC(cache_ptr, Addr, fail_val) \
-if ( ( (cache_ptr) == NULL ) || \
- ( (cache_ptr)->magic != H5C1__H5C1_T_MAGIC ) || \
- ( ! H5F_addr_defined(Addr) ) || \
- ( H5C1__HASH_FCN(Addr) < 0 ) || \
- ( H5C1__HASH_FCN(Addr) >= H5C1__HASH_TABLE_LEN ) ) { \
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, fail_val, "Pre HT search SC failed") \
-}
-
-#define H5C1__POST_SUC_HT_SEARCH_SC(cache_ptr, entry_ptr, Addr, k, fail_val) \
-if ( ( (cache_ptr) == NULL ) || \
- ( (cache_ptr)->magic != H5C1__H5C1_T_MAGIC ) || \
- ( (cache_ptr)->index_len < 1 ) || \
- ( (entry_ptr) == NULL ) || \
- ( (cache_ptr)->index_size < (entry_ptr)->size ) || \
- ( H5F_addr_ne((entry_ptr)->addr, (Addr)) ) || \
- ( (entry_ptr)->size <= 0 ) || \
- ( ((cache_ptr)->index)[k] == NULL ) || \
- ( ( ((cache_ptr)->index)[k] != (entry_ptr) ) && \
- ( (entry_ptr)->ht_prev == NULL ) ) || \
- ( ( ((cache_ptr)->index)[k] == (entry_ptr) ) && \
- ( (entry_ptr)->ht_prev != NULL ) ) || \
- ( ( (entry_ptr)->ht_prev != NULL ) && \
- ( (entry_ptr)->ht_prev->ht_next != (entry_ptr) ) ) || \
- ( ( (entry_ptr)->ht_next != NULL ) && \
- ( (entry_ptr)->ht_next->ht_prev != (entry_ptr) ) ) ) { \
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, fail_val, \
- "Post successful HT search SC failed") \
-}
-
-#define H5C1__POST_HT_SHIFT_TO_FRONT(cache_ptr, entry_ptr, k, fail_val) \
-if ( ( (cache_ptr) == NULL ) || \
- ( ((cache_ptr)->index)[k] != (entry_ptr) ) || \
- ( (entry_ptr)->ht_prev != NULL ) ) { \
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, fail_val, \
- "Post HT shift to front SC failed") \
-}
-
-#define H5C1__PRE_HT_ENTRY_SIZE_CHANGE_SC(cache_ptr, old_size, new_size) \
-if ( ( (cache_ptr) == NULL ) || \
- ( (cache_ptr)->index_len <= 0 ) || \
- ( (cache_ptr)->index_size <= 0 ) || \
- ( (new_size) <= 0 ) || \
- ( (old_size) > (cache_ptr)->index_size ) || \
- ( (new_size) <= 0 ) || \
- ( ( (cache_ptr)->index_len == 1 ) && \
- ( (cache_ptr)->index_size != (old_size) ) ) ) { \
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Pre HT entry size change SC failed") \
-}
-
-#define H5C1__POST_HT_ENTRY_SIZE_CHANGE_SC(cache_ptr, old_size, new_size) \
-if ( ( (cache_ptr) == NULL ) || \
- ( (cache_ptr)->index_len <= 0 ) || \
- ( (cache_ptr)->index_size <= 0 ) || \
- ( (new_size) > (cache_ptr)->index_size ) || \
- ( ( (cache_ptr)->index_len == 1 ) && \
- ( (cache_ptr)->index_size != (new_size) ) ) ) { \
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Post HT entry size change SC failed") \
-}
-
-#else /* H5C1_DO_SANITY_CHECKS */
-
-#define H5C1__PRE_HT_INSERT_SC(cache_ptr, entry_ptr, fail_val)
-#define H5C1__PRE_HT_REMOVE_SC(cache_ptr, entry_ptr)
-#define H5C1__PRE_HT_SEARCH_SC(cache_ptr, Addr, fail_val)
-#define H5C1__POST_SUC_HT_SEARCH_SC(cache_ptr, entry_ptr, Addr, k, fail_val)
-#define H5C1__POST_HT_SHIFT_TO_FRONT(cache_ptr, entry_ptr, k, fail_val)
-#define H5C1__PRE_HT_ENTRY_SIZE_CHANGE_SC(cache_ptr, old_size, new_size)
-#define H5C1__POST_HT_ENTRY_SIZE_CHANGE_SC(cache_ptr, old_size, new_size)
-
-#endif /* H5C1_DO_SANITY_CHECKS */
-
-
-#define H5C1__INSERT_IN_INDEX(cache_ptr, entry_ptr, fail_val) \
-{ \
- int k; \
- H5C1__PRE_HT_INSERT_SC(cache_ptr, entry_ptr, fail_val) \
- k = H5C1__HASH_FCN((entry_ptr)->addr); \
- if ( ((cache_ptr)->index)[k] == NULL ) \
- { \
- ((cache_ptr)->index)[k] = (entry_ptr); \
- } \
- else \
- { \
- (entry_ptr)->ht_next = ((cache_ptr)->index)[k]; \
- (entry_ptr)->ht_next->ht_prev = (entry_ptr); \
- ((cache_ptr)->index)[k] = (entry_ptr); \
- } \
- (cache_ptr)->index_len++; \
- (cache_ptr)->index_size += (entry_ptr)->size; \
- H5C1__UPDATE_STATS_FOR_HT_INSERTION(cache_ptr) \
-}
-
-#define H5C1__DELETE_FROM_INDEX(cache_ptr, entry_ptr) \
-{ \
- int k; \
- H5C1__PRE_HT_REMOVE_SC(cache_ptr, entry_ptr) \
- k = H5C1__HASH_FCN((entry_ptr)->addr); \
- if ( (entry_ptr)->ht_next ) \
- { \
- (entry_ptr)->ht_next->ht_prev = (entry_ptr)->ht_prev; \
- } \
- if ( (entry_ptr)->ht_prev ) \
- { \
- (entry_ptr)->ht_prev->ht_next = (entry_ptr)->ht_next; \
- } \
- if ( ((cache_ptr)->index)[k] == (entry_ptr) ) \
- { \
- ((cache_ptr)->index)[k] = (entry_ptr)->ht_next; \
- } \
- (entry_ptr)->ht_next = NULL; \
- (entry_ptr)->ht_prev = NULL; \
- (cache_ptr)->index_len--; \
- (cache_ptr)->index_size -= (entry_ptr)->size; \
- H5C1__UPDATE_STATS_FOR_HT_DELETION(cache_ptr) \
-}
-
-#define H5C1__SEARCH_INDEX(cache_ptr, Addr, entry_ptr, fail_val) \
-{ \
- int k; \
- int depth = 0; \
- H5C1__PRE_HT_SEARCH_SC(cache_ptr, Addr, fail_val) \
- k = H5C1__HASH_FCN(Addr); \
- entry_ptr = ((cache_ptr)->index)[k]; \
- while ( ( entry_ptr ) && ( H5F_addr_ne(Addr, (entry_ptr)->addr) ) ) \
- { \
- (entry_ptr) = (entry_ptr)->ht_next; \
- (depth)++; \
- } \
- if ( entry_ptr ) \
- { \
- H5C1__POST_SUC_HT_SEARCH_SC(cache_ptr, entry_ptr, Addr, k, fail_val) \
- if ( entry_ptr != ((cache_ptr)->index)[k] ) \
- { \
- if ( (entry_ptr)->ht_next ) \
- { \
- (entry_ptr)->ht_next->ht_prev = (entry_ptr)->ht_prev; \
- } \
- HDassert( (entry_ptr)->ht_prev != NULL ); \
- (entry_ptr)->ht_prev->ht_next = (entry_ptr)->ht_next; \
- ((cache_ptr)->index)[k]->ht_prev = (entry_ptr); \
- (entry_ptr)->ht_next = ((cache_ptr)->index)[k]; \
- (entry_ptr)->ht_prev = NULL; \
- ((cache_ptr)->index)[k] = (entry_ptr); \
- H5C1__POST_HT_SHIFT_TO_FRONT(cache_ptr, entry_ptr, k, fail_val) \
- } \
- } \
- H5C1__UPDATE_STATS_FOR_HT_SEARCH(cache_ptr, (entry_ptr != NULL), depth) \
-}
-
-#define H5C1__SEARCH_INDEX_NO_STATS(cache_ptr, Addr, entry_ptr, fail_val) \
-{ \
- int k; \
- int depth = 0; \
- H5C1__PRE_HT_SEARCH_SC(cache_ptr, Addr, fail_val) \
- k = H5C1__HASH_FCN(Addr); \
- entry_ptr = ((cache_ptr)->index)[k]; \
- while ( ( entry_ptr ) && ( H5F_addr_ne(Addr, (entry_ptr)->addr) ) ) \
- { \
- (entry_ptr) = (entry_ptr)->ht_next; \
- (depth)++; \
- } \
- if ( entry_ptr ) \
- { \
- H5C1__POST_SUC_HT_SEARCH_SC(cache_ptr, entry_ptr, Addr, k, fail_val) \
- if ( entry_ptr != ((cache_ptr)->index)[k] ) \
- { \
- if ( (entry_ptr)->ht_next ) \
- { \
- (entry_ptr)->ht_next->ht_prev = (entry_ptr)->ht_prev; \
- } \
- HDassert( (entry_ptr)->ht_prev != NULL ); \
- (entry_ptr)->ht_prev->ht_next = (entry_ptr)->ht_next; \
- ((cache_ptr)->index)[k]->ht_prev = (entry_ptr); \
- (entry_ptr)->ht_next = ((cache_ptr)->index)[k]; \
- (entry_ptr)->ht_prev = NULL; \
- ((cache_ptr)->index)[k] = (entry_ptr); \
- H5C1__POST_HT_SHIFT_TO_FRONT(cache_ptr, entry_ptr, k, fail_val) \
- } \
- } \
-}
-
-#define H5C1__UPDATE_INDEX_FOR_SIZE_CHANGE(cache_ptr, old_size, new_size) \
-{ \
- H5C1__PRE_HT_ENTRY_SIZE_CHANGE_SC(cache_ptr, old_size, new_size) \
- (cache_ptr)->index_size -= old_size; \
- (cache_ptr)->index_size += new_size; \
- H5C1__POST_HT_ENTRY_SIZE_CHANGE_SC(cache_ptr, old_size, new_size) \
-}
-
-
-/**************************************************************************
- *
- * Skip list insertion and deletion macros:
- *
- * These used to be functions, but I converted them to macros to avoid some
- * function call overhead.
- *
- **************************************************************************/
-
-/*-------------------------------------------------------------------------
- *
- * Macro: H5C1__INSERT_ENTRY_IN_SLIST
- *
- * Purpose: Insert the specified instance of H5C1_cache_entry_t into
- * the skip list in the specified instance of H5C1_t. Update
- * the associated length and size fields.
- *
- * Return: N/A
- *
- * Programmer: John Mainzer, 5/10/04
- *
- * Modifications:
- *
- * JRM -- 7/21/04
- * Updated function to set the in_tree flag when inserting
- * an entry into the tree. Also modified the function to
- * update the tree size and len fields instead of the similar
- * index fields.
- *
- * All of this is part of the modifications to support the
- * hash table.
- *
- * JRM -- 7/27/04
- * Converted the function H5C1_insert_entry_in_tree() into
- * the macro H5C1__INSERT_ENTRY_IN_TREE in the hopes of
- * wringing a little more speed out of the cache.
- *
- * Note that we don't bother to check if the entry is already
- * in the tree -- if it is, H5SL_insert() will fail.
- *
- * QAK -- 11/27/04
- * Switched over to using skip list routines.
- *
- * JRM -- 6/27/06
- * Added fail_val parameter.
- *
- * JRM -- 8/25/06
- * Added the H5C1_DO_SANITY_CHECKS version of the macro.
- *
- * This version maintains the slist_len_increase and
- * slist_size_increase fields that are used in sanity
- * checks in the flush routines.
- *
- * All this is needed as the fractal heap needs to be
- * able to dirty, resize and/or rename entries during the
- * flush.
- *
- *-------------------------------------------------------------------------
- */
-
-#if H5C1_DO_SANITY_CHECKS
-
-#define H5C1__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( (entry_ptr)->size > 0 ); \
- HDassert( H5F_addr_defined((entry_ptr)->addr) ); \
- HDassert( !((entry_ptr)->in_slist) ); \
- \
- if ( H5SL_insert((cache_ptr)->slist_ptr, entry_ptr, &(entry_ptr)->addr) \
- < 0 ) \
- HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, (fail_val), \
- "Can't insert entry in skip list") \
- \
- (entry_ptr)->in_slist = TRUE; \
- (cache_ptr)->slist_len++; \
- (cache_ptr)->slist_size += (entry_ptr)->size; \
- (cache_ptr)->slist_len_increase++; \
- (cache_ptr)->slist_size_increase += (entry_ptr)->size; \
- \
- HDassert( (cache_ptr)->slist_len > 0 ); \
- HDassert( (cache_ptr)->slist_size > 0 ); \
- \
-} /* H5C1__INSERT_ENTRY_IN_SLIST */
-
-#else /* H5C1_DO_SANITY_CHECKS */
-
-#define H5C1__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( (entry_ptr)->size > 0 ); \
- HDassert( H5F_addr_defined((entry_ptr)->addr) ); \
- HDassert( !((entry_ptr)->in_slist) ); \
- \
- if ( H5SL_insert((cache_ptr)->slist_ptr, entry_ptr, &(entry_ptr)->addr) \
- < 0 ) \
- HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, (fail_val), \
- "Can't insert entry in skip list") \
- \
- (entry_ptr)->in_slist = TRUE; \
- (cache_ptr)->slist_len++; \
- (cache_ptr)->slist_size += (entry_ptr)->size; \
- \
- HDassert( (cache_ptr)->slist_len > 0 ); \
- HDassert( (cache_ptr)->slist_size > 0 ); \
- \
-} /* H5C1__INSERT_ENTRY_IN_SLIST */
-
-#endif /* H5C1_DO_SANITY_CHECKS */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1__REMOVE_ENTRY_FROM_SLIST
- *
- * Purpose: Remove the specified instance of H5C1_cache_entry_t from the
- * index skip list in the specified instance of H5C1_t. Update
- * the associated length and size fields.
- *
- * Return: N/A
- *
- * Programmer: John Mainzer, 5/10/04
- *
- * Modifications:
- *
- * JRM -- 7/21/04
- * Updated function for the addition of the hash table.
- *
- * JRM - 7/27/04
- * Converted from the function H5C1_remove_entry_from_tree()
- * to the macro H5C1__REMOVE_ENTRY_FROM_TREE in the hopes of
- * wringing a little more performance out of the cache.
- *
- * QAK -- 11/27/04
- * Switched over to using skip list routines.
- *
- * JRM -- 3/28/07
- * Updated sanity checks for the new is_read_only and
- * ro_ref_count fields in H5C1_cache_entry_t.
- *
- *-------------------------------------------------------------------------
- */
-
-#define H5C1__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( !((entry_ptr)->is_protected) ); \
- HDassert( !((entry_ptr)->is_read_only) ); \
- HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
- HDassert( (entry_ptr)->size > 0 ); \
- HDassert( (entry_ptr)->in_slist ); \
- HDassert( (cache_ptr)->slist_ptr ); \
- \
- if ( H5SL_remove((cache_ptr)->slist_ptr, &(entry_ptr)->addr) \
- != (entry_ptr) ) \
- \
- HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, \
- "Can't delete entry from skip list.") \
- \
- HDassert( (cache_ptr)->slist_len > 0 ); \
- (cache_ptr)->slist_len--; \
- HDassert( (cache_ptr)->slist_size >= (entry_ptr)->size ); \
- (cache_ptr)->slist_size -= (entry_ptr)->size; \
- (entry_ptr)->in_slist = FALSE; \
-} /* H5C1__REMOVE_ENTRY_FROM_SLIST */
-
-
-/*-------------------------------------------------------------------------
- *
- * Function: H5C1__UPDATE_SLIST_FOR_SIZE_CHANGE
- *
- * Purpose: Update cache_ptr->slist_size for a change in the size of
- * and entry in the slist.
- *
- * Return: N/A
- *
- * Programmer: John Mainzer, 9/07/05
- *
- * Modifications:
- *
- * JRM -- 8/27/06
- * Added the H5C1_DO_SANITY_CHECKS version of the macro.
- *
- * This version maintains the slist_size_increase field
- * that are used in sanity checks in the flush routines.
- *
- * All this is needed as the fractal heap needs to be
- * able to dirty, resize and/or rename entries during the
- * flush.
- *
- *-------------------------------------------------------------------------
- */
-
-#if H5C1_DO_SANITY_CHECKS
-
-#define H5C1__UPDATE_SLIST_FOR_SIZE_CHANGE(cache_ptr, old_size, new_size) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (old_size) > 0 ); \
- HDassert( (new_size) > 0 ); \
- HDassert( (old_size) <= (cache_ptr)->slist_size ); \
- HDassert( (cache_ptr)->slist_len > 0 ); \
- HDassert( ((cache_ptr)->slist_len > 1) || \
- ( (cache_ptr)->slist_size == (old_size) ) ); \
- \
- (cache_ptr)->slist_size -= (old_size); \
- (cache_ptr)->slist_size += (new_size); \
- \
- (cache_ptr)->slist_size_increase -= (int64_t)(old_size); \
- (cache_ptr)->slist_size_increase += (int64_t)(new_size); \
- \
- HDassert( (new_size) <= (cache_ptr)->slist_size ); \
- HDassert( ( (cache_ptr)->slist_len > 1 ) || \
- ( (cache_ptr)->slist_size == (new_size) ) ); \
-} /* H5C1__REMOVE_ENTRY_FROM_SLIST */
-
-#else /* H5C1_DO_SANITY_CHECKS */
-
-#define H5C1__UPDATE_SLIST_FOR_SIZE_CHANGE(cache_ptr, old_size, new_size) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (old_size) > 0 ); \
- HDassert( (new_size) > 0 ); \
- HDassert( (old_size) <= (cache_ptr)->slist_size ); \
- HDassert( (cache_ptr)->slist_len > 0 ); \
- HDassert( ((cache_ptr)->slist_len > 1) || \
- ( (cache_ptr)->slist_size == (old_size) ) ); \
- \
- (cache_ptr)->slist_size -= (old_size); \
- (cache_ptr)->slist_size += (new_size); \
- \
- HDassert( (new_size) <= (cache_ptr)->slist_size ); \
- HDassert( ( (cache_ptr)->slist_len > 1 ) || \
- ( (cache_ptr)->slist_size == (new_size) ) ); \
-} /* H5C1__REMOVE_ENTRY_FROM_SLIST */
-
-#endif /* H5C1_DO_SANITY_CHECKS */
-
-
-/**************************************************************************
- *
- * Replacement policy update macros:
- *
- * These used to be functions, but I converted them to macros to avoid some
- * function call overhead.
- *
- **************************************************************************/
-
-/*-------------------------------------------------------------------------
- *
- * Macro: H5C1__FAKE_RP_FOR_MOST_RECENT_ACCESS
- *
- * Purpose: For efficiency, we sometimes change the order of flushes --
- * but doing so can confuse the replacement policy. This
- * macro exists to allow us to specify an entry as the
- * most recently touched so we can repair any such
- * confusion.
- *
- * At present, we only support the modified LRU policy, so
- * this function deals with that case unconditionally. If
- * we ever support other replacement policies, the macro
- * should switch on the current policy and act accordingly.
- *
- * Return: N/A
- *
- * Programmer: John Mainzer, 10/13/05
- *
- * Modifications:
- *
- * JRM -- 3/20/06
- * Modified macro to ignore pinned entries. Pinned entries
- * do not appear in the data structures maintained by the
- * replacement policy code, and thus this macro has nothing
- * to do if called for such an entry.
- *
- * JRM -- 3/28/07
- * Added sanity checks using the new is_read_only and
- * ro_ref_count fields of struct H5C1_cache_entry_t.
- *
- *-------------------------------------------------------------------------
- */
-
-#if H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
-
-#define H5C1__FAKE_RP_FOR_MOST_RECENT_ACCESS(cache_ptr, entry_ptr, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( !((entry_ptr)->is_protected) ); \
- HDassert( !((entry_ptr)->is_read_only) ); \
- HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
- HDassert( (entry_ptr)->size > 0 ); \
- \
- if ( ! ((entry_ptr)->is_pinned) ) { \
- \
- /* modified LRU specific code */ \
- \
- /* remove the entry from the LRU list, and re-insert it at the head.\
- */ \
- \
- H5C1__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- H5C1__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- /* Use the dirty flag to infer whether the entry is on the clean or \
- * dirty LRU list, and remove it. Then insert it at the head of \
- * the same LRU list. \
- * \
- * At least initially, all entries should be clean. That may \
- * change, so we may as well deal with both cases now. \
- */ \
- \
- if ( (entry_ptr)->is_dirty ) { \
- H5C1__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->dLRU_head_ptr, \
- (cache_ptr)->dLRU_tail_ptr, \
- (cache_ptr)->dLRU_list_len, \
- (cache_ptr)->dLRU_list_size, (fail_val)) \
- \
- H5C1__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->dLRU_head_ptr, \
- (cache_ptr)->dLRU_tail_ptr, \
- (cache_ptr)->dLRU_list_len, \
- (cache_ptr)->dLRU_list_size, (fail_val)) \
- } else { \
- H5C1__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->cLRU_head_ptr, \
- (cache_ptr)->cLRU_tail_ptr, \
- (cache_ptr)->cLRU_list_len, \
- (cache_ptr)->cLRU_list_size, (fail_val)) \
- \
- H5C1__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->cLRU_head_ptr, \
- (cache_ptr)->cLRU_tail_ptr, \
- (cache_ptr)->cLRU_list_len, \
- (cache_ptr)->cLRU_list_size, (fail_val)) \
- } \
- \
- /* End modified LRU specific code. */ \
- } \
-} /* H5C1__FAKE_RP_FOR_MOST_RECENT_ACCESS */
-
-#else /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-#define H5C1__FAKE_RP_FOR_MOST_RECENT_ACCESS(cache_ptr, entry_ptr, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( !((entry_ptr)->is_protected) ); \
- HDassert( !((entry_ptr)->is_read_only) ); \
- HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
- HDassert( (entry_ptr)->size > 0 ); \
- \
- if ( ! ((entry_ptr)->is_pinned) ) { \
- \
- /* modified LRU specific code */ \
- \
- /* remove the entry from the LRU list, and re-insert it at the head \
- */ \
- \
- H5C1__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- H5C1__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- /* End modified LRU specific code. */ \
- } \
-} /* H5C1__FAKE_RP_FOR_MOST_RECENT_ACCESS */
-
-#endif /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-
-/*-------------------------------------------------------------------------
- *
- * Macro: H5C1__UPDATE_RP_FOR_EVICTION
- *
- * Purpose: Update the replacement policy data structures for an
- * eviction of the specified cache entry.
- *
- * At present, we only support the modified LRU policy, so
- * this function deals with that case unconditionally. If
- * we ever support other replacement policies, the function
- * should switch on the current policy and act accordingly.
- *
- * Return: Non-negative on success/Negative on failure.
- *
- * Programmer: John Mainzer, 5/10/04
- *
- * Modifications:
- *
- * JRM - 7/27/04
- * Converted the function H5C1_update_rp_for_eviction() to the
- * macro H5C1__UPDATE_RP_FOR_EVICTION in an effort to squeeze
- * a bit more performance out of the cache.
- *
- * At least for the first cut, I am leaving the comments and
- * white space in the macro. If they cause dificulties with
- * the pre-processor, I'll have to remove them.
- *
- * JRM - 7/28/04
- * Split macro into two version, one supporting the clean and
- * dirty LRU lists, and the other not. Yet another attempt
- * at optimization.
- *
- * JRM - 3/20/06
- * Pinned entries can't be evicted, so this entry should never
- * be called on a pinned entry. Added assert to verify this.
- *
- * JRM -- 3/28/07
- * Added sanity checks for the new is_read_only and
- * ro_ref_count fields of struct H5C1_cache_entry_t.
- *
- *-------------------------------------------------------------------------
- */
-
-#if H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
-
-#define H5C1__UPDATE_RP_FOR_EVICTION(cache_ptr, entry_ptr, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( !((entry_ptr)->is_protected) ); \
- HDassert( !((entry_ptr)->is_read_only) ); \
- HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
- HDassert( !((entry_ptr)->is_pinned) ); \
- HDassert( (entry_ptr)->size > 0 ); \
- \
- /* modified LRU specific code */ \
- \
- /* remove the entry from the LRU list. */ \
- \
- H5C1__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- /* If the entry is clean when it is evicted, it should be on the \
- * clean LRU list, if it was dirty, it should be on the dirty LRU list. \
- * Remove it from the appropriate list according to the value of the \
- * dirty flag. \
- */ \
- \
- if ( (entry_ptr)->is_dirty ) { \
- \
- H5C1__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->dLRU_head_ptr, \
- (cache_ptr)->dLRU_tail_ptr, \
- (cache_ptr)->dLRU_list_len, \
- (cache_ptr)->dLRU_list_size, (fail_val)) \
- } else { \
- H5C1__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->cLRU_head_ptr, \
- (cache_ptr)->cLRU_tail_ptr, \
- (cache_ptr)->cLRU_list_len, \
- (cache_ptr)->cLRU_list_size, (fail_val)) \
- } \
- \
-} /* H5C1__UPDATE_RP_FOR_EVICTION */
-
-#else /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-#define H5C1__UPDATE_RP_FOR_EVICTION(cache_ptr, entry_ptr, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( !((entry_ptr)->is_protected) ); \
- HDassert( !((entry_ptr)->is_read_only) ); \
- HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
- HDassert( !((entry_ptr)->is_pinned) ); \
- HDassert( (entry_ptr)->size > 0 ); \
- \
- /* modified LRU specific code */ \
- \
- /* remove the entry from the LRU list. */ \
- \
- H5C1__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
-} /* H5C1__UPDATE_RP_FOR_EVICTION */
-
-#endif /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-
-/*-------------------------------------------------------------------------
- *
- * Macro: H5C1__UPDATE_RP_FOR_FLUSH
- *
- * Purpose: Update the replacement policy data structures for a flush
- * of the specified cache entry.
- *
- * At present, we only support the modified LRU policy, so
- * this function deals with that case unconditionally. If
- * we ever support other replacement policies, the function
- * should switch on the current policy and act accordingly.
- *
- * Return: N/A
- *
- * Programmer: John Mainzer, 5/6/04
- *
- * Modifications:
- *
- * JRM - 7/27/04
- * Converted the function H5C1_update_rp_for_flush() to the
- * macro H5C1__UPDATE_RP_FOR_FLUSH in an effort to squeeze
- * a bit more performance out of the cache.
- *
- * At least for the first cut, I am leaving the comments and
- * white space in the macro. If they cause dificulties with
- * pre-processor, I'll have to remove them.
- *
- * JRM - 7/28/04
- * Split macro into two versions, one supporting the clean and
- * dirty LRU lists, and the other not. Yet another attempt
- * at optimization.
- *
- * JRM - 3/20/06
- * While pinned entries can be flushed, they don't reside in
- * the replacement policy data structures when unprotected.
- * Thus I modified this macro to do nothing if the entry is
- * pinned.
- *
- * JRM - 3/28/07
- * Added sanity checks based on the new is_read_only and
- * ro_ref_count fields of struct H5C1_cache_entry_t.
- *
- *-------------------------------------------------------------------------
- */
-
-#if H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
-
-#define H5C1__UPDATE_RP_FOR_FLUSH(cache_ptr, entry_ptr, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( !((entry_ptr)->is_protected) ); \
- HDassert( !((entry_ptr)->is_read_only) ); \
- HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
- HDassert( (entry_ptr)->size > 0 ); \
- \
- if ( ! ((entry_ptr)->is_pinned) ) { \
- \
- /* modified LRU specific code */ \
- \
- /* remove the entry from the LRU list, and re-insert it at the \
- * head. \
- */ \
- \
- H5C1__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- H5C1__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- /* since the entry is being flushed or cleared, one would think \
- * that it must be dirty -- but that need not be the case. Use the \
- * dirty flag to infer whether the entry is on the clean or dirty \
- * LRU list, and remove it. Then insert it at the head of the \
- * clean LRU list. \
- * \
- * The function presumes that a dirty entry will be either cleared \
- * or flushed shortly, so it is OK if we put a dirty entry on the \
- * clean LRU list. \
- */ \
- \
- if ( (entry_ptr)->is_dirty ) { \
- H5C1__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->dLRU_head_ptr, \
- (cache_ptr)->dLRU_tail_ptr, \
- (cache_ptr)->dLRU_list_len, \
- (cache_ptr)->dLRU_list_size, (fail_val)) \
- } else { \
- H5C1__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->cLRU_head_ptr, \
- (cache_ptr)->cLRU_tail_ptr, \
- (cache_ptr)->cLRU_list_len, \
- (cache_ptr)->cLRU_list_size, (fail_val)) \
- } \
- \
- H5C1__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->cLRU_head_ptr, \
- (cache_ptr)->cLRU_tail_ptr, \
- (cache_ptr)->cLRU_list_len, \
- (cache_ptr)->cLRU_list_size, (fail_val)) \
- \
- /* End modified LRU specific code. */ \
- } \
-} /* H5C1__UPDATE_RP_FOR_FLUSH */
-
-#else /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-#define H5C1__UPDATE_RP_FOR_FLUSH(cache_ptr, entry_ptr, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( !((entry_ptr)->is_protected) ); \
- HDassert( !((entry_ptr)->is_read_only) ); \
- HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
- HDassert( (entry_ptr)->size > 0 ); \
- \
- if ( ! ((entry_ptr)->is_pinned) ) { \
- \
- /* modified LRU specific code */ \
- \
- /* remove the entry from the LRU list, and re-insert it at the \
- * head. \
- */ \
- \
- H5C1__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- H5C1__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- /* End modified LRU specific code. */ \
- } \
-} /* H5C1__UPDATE_RP_FOR_FLUSH */
-
-#endif /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-
-/*-------------------------------------------------------------------------
- *
- * Macro: H5C1__UPDATE_RP_FOR_INSERTION
- *
- * Purpose: Update the replacement policy data structures for an
- * insertion of the specified cache entry.
- *
- * At present, we only support the modified LRU policy, so
- * this function deals with that case unconditionally. If
- * we ever support other replacement policies, the function
- * should switch on the current policy and act accordingly.
- *
- * Return: N/A
- *
- * Programmer: John Mainzer, 5/17/04
- *
- * Modifications:
- *
- * JRM - 7/27/04
- * Converted the function H5C1_update_rp_for_insertion() to the
- * macro H5C1__UPDATE_RP_FOR_INSERTION in an effort to squeeze
- * a bit more performance out of the cache.
- *
- * At least for the first cut, I am leaving the comments and
- * white space in the macro. If they cause dificulties with
- * pre-processor, I'll have to remove them.
- *
- * JRM - 7/28/04
- * Split macro into two version, one supporting the clean and
- * dirty LRU lists, and the other not. Yet another attempt
- * at optimization.
- *
- * JRM - 3/10/06
- * This macro should never be called on a pinned entry.
- * Inserted an assert to verify this.
- *
- * JRM - 8/9/06
- * Not any more. We must now allow insertion of pinned
- * entries. Updated macro to support this.
- *
- * JRM - 3/28/07
- * Added sanity checks using the new is_read_only and
- * ro_ref_count fields of struct H5C1_cache_entry_t.
- *
- *-------------------------------------------------------------------------
- */
-
-#if H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
-
-#define H5C1__UPDATE_RP_FOR_INSERTION(cache_ptr, entry_ptr, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( !((entry_ptr)->is_protected) ); \
- HDassert( !((entry_ptr)->is_read_only) ); \
- HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
- HDassert( (entry_ptr)->size > 0 ); \
- \
- if ( (entry_ptr)->is_pinned ) { \
- \
- H5C1__DLL_PREPEND((entry_ptr), (cache_ptr)->pel_head_ptr, \
- (cache_ptr)->pel_tail_ptr, \
- (cache_ptr)->pel_len, \
- (cache_ptr)->pel_size, (fail_val)) \
- \
- } else { \
- \
- /* modified LRU specific code */ \
- \
- /* insert the entry at the head of the LRU list. */ \
- \
- H5C1__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- /* insert the entry at the head of the clean or dirty LRU list as \
- * appropriate. \
- */ \
- \
- if ( entry_ptr->is_dirty ) { \
- H5C1__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->dLRU_head_ptr, \
- (cache_ptr)->dLRU_tail_ptr, \
- (cache_ptr)->dLRU_list_len, \
- (cache_ptr)->dLRU_list_size, (fail_val)) \
- } else { \
- H5C1__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->cLRU_head_ptr, \
- (cache_ptr)->cLRU_tail_ptr, \
- (cache_ptr)->cLRU_list_len, \
- (cache_ptr)->cLRU_list_size, (fail_val)) \
- } \
- \
- /* End modified LRU specific code. */ \
- } \
-}
-
-#else /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-#define H5C1__UPDATE_RP_FOR_INSERTION(cache_ptr, entry_ptr, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( !((entry_ptr)->is_protected) ); \
- HDassert( !((entry_ptr)->is_read_only) ); \
- HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
- HDassert( (entry_ptr)->size > 0 ); \
- \
- if ( (entry_ptr)->is_pinned ) { \
- \
- H5C1__DLL_PREPEND((entry_ptr), (cache_ptr)->pel_head_ptr, \
- (cache_ptr)->pel_tail_ptr, \
- (cache_ptr)->pel_len, \
- (cache_ptr)->pel_size, (fail_val)) \
- \
- } else { \
- \
- /* modified LRU specific code */ \
- \
- /* insert the entry at the head of the LRU list. */ \
- \
- H5C1__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- /* End modified LRU specific code. */ \
- } \
-}
-
-#endif /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-
-/*-------------------------------------------------------------------------
- *
- * Macro: H5C1__UPDATE_RP_FOR_PROTECT
- *
- * Purpose: Update the replacement policy data structures for a
- * protect of the specified cache entry.
- *
- * To do this, unlink the specified entry from any data
- * structures used by the replacement policy, and add the
- * entry to the protected list.
- *
- * At present, we only support the modified LRU policy, so
- * this function deals with that case unconditionally. If
- * we ever support other replacement policies, the function
- * should switch on the current policy and act accordingly.
- *
- * Return: N/A
- *
- * Programmer: John Mainzer, 5/17/04
- *
- * Modifications:
- *
- * JRM - 7/27/04
- * Converted the function H5C1_update_rp_for_protect() to the
- * macro H5C1__UPDATE_RP_FOR_PROTECT in an effort to squeeze
- * a bit more performance out of the cache.
- *
- * At least for the first cut, I am leaving the comments and
- * white space in the macro. If they cause dificulties with
- * pre-processor, I'll have to remove them.
- *
- * JRM - 7/28/04
- * Split macro into two version, one supporting the clean and
- * dirty LRU lists, and the other not. Yet another attempt
- * at optimization.
- *
- * JRM - 3/17/06
- * Modified macro to attempt to remove pinned entriese from
- * the pinned entry list instead of from the data structures
- * maintained by the replacement policy.
- *
- * JRM - 3/28/07
- * Added sanity checks based on the new is_read_only and
- * ro_ref_count fields of struct H5C1_cache_entry_t.
- *
- *-------------------------------------------------------------------------
- */
-
-#if H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
-
-#define H5C1__UPDATE_RP_FOR_PROTECT(cache_ptr, entry_ptr, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( !((entry_ptr)->is_protected) ); \
- HDassert( !((entry_ptr)->is_read_only) ); \
- HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
- HDassert( (entry_ptr)->size > 0 ); \
- \
- if ( (entry_ptr)->is_pinned ) { \
- \
- H5C1__DLL_REMOVE((entry_ptr), (cache_ptr)->pel_head_ptr, \
- (cache_ptr)->pel_tail_ptr, \
- (cache_ptr)->pel_len, \
- (cache_ptr)->pel_size, (fail_val)) \
- \
- } else { \
- \
- /* modified LRU specific code */ \
- \
- /* remove the entry from the LRU list. */ \
- \
- H5C1__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- /* Similarly, remove the entry from the clean or dirty LRU list \
- * as appropriate. \
- */ \
- \
- if ( (entry_ptr)->is_dirty ) { \
- \
- H5C1__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->dLRU_head_ptr, \
- (cache_ptr)->dLRU_tail_ptr, \
- (cache_ptr)->dLRU_list_len, \
- (cache_ptr)->dLRU_list_size, (fail_val)) \
- \
- } else { \
- \
- H5C1__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->cLRU_head_ptr, \
- (cache_ptr)->cLRU_tail_ptr, \
- (cache_ptr)->cLRU_list_len, \
- (cache_ptr)->cLRU_list_size, (fail_val)) \
- } \
- \
- /* End modified LRU specific code. */ \
- } \
- \
- /* Regardless of the replacement policy, or whether the entry is \
- * pinned, now add the entry to the protected list. \
- */ \
- \
- H5C1__DLL_APPEND((entry_ptr), (cache_ptr)->pl_head_ptr, \
- (cache_ptr)->pl_tail_ptr, \
- (cache_ptr)->pl_len, \
- (cache_ptr)->pl_size, (fail_val)) \
-} /* H5C1__UPDATE_RP_FOR_PROTECT */
-
-#else /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-#define H5C1__UPDATE_RP_FOR_PROTECT(cache_ptr, entry_ptr, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( !((entry_ptr)->is_protected) ); \
- HDassert( !((entry_ptr)->is_read_only) ); \
- HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
- HDassert( (entry_ptr)->size > 0 ); \
- \
- if ( (entry_ptr)->is_pinned ) { \
- \
- H5C1__DLL_REMOVE((entry_ptr), (cache_ptr)->pel_head_ptr, \
- (cache_ptr)->pel_tail_ptr, \
- (cache_ptr)->pel_len, \
- (cache_ptr)->pel_size, (fail_val)) \
- \
- } else { \
- \
- /* modified LRU specific code */ \
- \
- /* remove the entry from the LRU list. */ \
- \
- H5C1__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- /* End modified LRU specific code. */ \
- } \
- \
- /* Regardless of the replacement policy, or whether the entry is \
- * pinned, now add the entry to the protected list. \
- */ \
- \
- H5C1__DLL_APPEND((entry_ptr), (cache_ptr)->pl_head_ptr, \
- (cache_ptr)->pl_tail_ptr, \
- (cache_ptr)->pl_len, \
- (cache_ptr)->pl_size, (fail_val)) \
-} /* H5C1__UPDATE_RP_FOR_PROTECT */
-
-#endif /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-
-/*-------------------------------------------------------------------------
- *
- * Macro: H5C1__UPDATE_RP_FOR_RENAME
- *
- * Purpose: Update the replacement policy data structures for a
- * rename of the specified cache entry.
- *
- * At present, we only support the modified LRU policy, so
- * this function deals with that case unconditionally. If
- * we ever support other replacement policies, the function
- * should switch on the current policy and act accordingly.
- *
- * Return: N/A
- *
- * Programmer: John Mainzer, 5/17/04
- *
- * Modifications:
- *
- * JRM - 7/27/04
- * Converted the function H5C1_update_rp_for_rename() to the
- * macro H5C1__UPDATE_RP_FOR_RENAME in an effort to squeeze
- * a bit more performance out of the cache.
- *
- * At least for the first cut, I am leaving the comments and
- * white space in the macro. If they cause dificulties with
- * pre-processor, I'll have to remove them.
- *
- * JRM - 7/28/04
- * Split macro into two version, one supporting the clean and
- * dirty LRU lists, and the other not. Yet another attempt
- * at optimization.
- *
- * JRM - 6/23/05
- * Added the was_dirty parameter. It is possible that
- * the entry was clean when it was renamed -- if so it
- * it is in the clean LRU regardless of the current
- * value of the is_dirty field.
- *
- * At present, all renamed entries are forced to be
- * dirty. This macro is a bit more general that that,
- * to allow it to function correctly should that policy
- * be relaxed in the future.
- *
- * JRM - 3/17/06
- * Modified macro to do nothing if the entry is pinned.
- * In this case, the entry is on the pinned entry list, not
- * in the replacement policy data structures, so there is
- * nothing to be done.
- *
- * JRM - 3/28/07
- * Added sanity checks using the new is_read_only and
- * ro_ref_count fields of struct H5C1_cache_entry_t.
- *
- *-------------------------------------------------------------------------
- */
-
-#if H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
-
-#define H5C1__UPDATE_RP_FOR_RENAME(cache_ptr, entry_ptr, was_dirty, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( !((entry_ptr)->is_protected) ); \
- HDassert( !((entry_ptr)->is_read_only) ); \
- HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
- HDassert( (entry_ptr)->size > 0 ); \
- \
- if ( ! ((entry_ptr)->is_pinned) ) { \
- \
- /* modified LRU specific code */ \
- \
- /* remove the entry from the LRU list, and re-insert it at the head. \
- */ \
- \
- H5C1__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- H5C1__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- /* remove the entry from either the clean or dirty LUR list as \
- * indicated by the was_dirty parameter \
- */ \
- if ( was_dirty ) { \
- \
- H5C1__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->dLRU_head_ptr, \
- (cache_ptr)->dLRU_tail_ptr, \
- (cache_ptr)->dLRU_list_len, \
- (cache_ptr)->dLRU_list_size, (fail_val)) \
- \
- } else { \
- \
- H5C1__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->cLRU_head_ptr, \
- (cache_ptr)->cLRU_tail_ptr, \
- (cache_ptr)->cLRU_list_len, \
- (cache_ptr)->cLRU_list_size, (fail_val)) \
- } \
- \
- /* insert the entry at the head of either the clean or dirty LRU \
- * list as appropriate. \
- */ \
- \
- if ( (entry_ptr)->is_dirty ) { \
- \
- H5C1__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->dLRU_head_ptr, \
- (cache_ptr)->dLRU_tail_ptr, \
- (cache_ptr)->dLRU_list_len, \
- (cache_ptr)->dLRU_list_size, (fail_val)) \
- \
- } else { \
- \
- H5C1__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->cLRU_head_ptr, \
- (cache_ptr)->cLRU_tail_ptr, \
- (cache_ptr)->cLRU_list_len, \
- (cache_ptr)->cLRU_list_size, (fail_val)) \
- } \
- \
- /* End modified LRU specific code. */ \
- } \
-} /* H5C1__UPDATE_RP_FOR_RENAME */
-
-#else /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-#define H5C1__UPDATE_RP_FOR_RENAME(cache_ptr, entry_ptr, was_dirty, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( !((entry_ptr)->is_protected) ); \
- HDassert( !((entry_ptr)->is_read_only) ); \
- HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
- HDassert( (entry_ptr)->size > 0 ); \
- \
- if ( ! ((entry_ptr)->is_pinned) ) { \
- \
- /* modified LRU specific code */ \
- \
- /* remove the entry from the LRU list, and re-insert it at the head. \
- */ \
- \
- H5C1__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- H5C1__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- /* End modified LRU specific code. */ \
- } \
-} /* H5C1__UPDATE_RP_FOR_RENAME */
-
-#endif /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-
-/*-------------------------------------------------------------------------
- *
- * Macro: H5C1__UPDATE_RP_FOR_SIZE_CHANGE
- *
- * Purpose: Update the replacement policy data structures for a
- * size change of the specified cache entry.
- *
- * To do this, determine if the entry is pinned. If it is,
- * update the size of the pinned entry list.
- *
- * If it isn't pinned, the entry must handled by the
- * replacement policy. Update the appropriate replacement
- * policy data structures.
- *
- * At present, we only support the modified LRU policy, so
- * this function deals with that case unconditionally. If
- * we ever support other replacement policies, the function
- * should switch on the current policy and act accordingly.
- *
- * Return: N/A
- *
- * Programmer: John Mainzer, 8/23/06
- *
- * Modifications:
- *
- * JRM -- 3/28/07
- * Added sanity checks based on the new is_read_only and
- * ro_ref_count fields of struct H5C1_cache_entry_t.
- *
- *-------------------------------------------------------------------------
- */
-
-#if H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
-
-#define H5C1__UPDATE_RP_FOR_SIZE_CHANGE(cache_ptr, entry_ptr, new_size) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( !((entry_ptr)->is_protected) ); \
- HDassert( !((entry_ptr)->is_read_only) ); \
- HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
- HDassert( (entry_ptr)->size > 0 ); \
- HDassert( new_size > 0 ); \
- \
- if ( (entry_ptr)->is_pinned ) { \
- \
- H5C1__DLL_UPDATE_FOR_SIZE_CHANGE((cache_ptr)->pel_len, \
- (cache_ptr)->pel_size, \
- (entry_ptr)->size, \
- (new_size)); \
- \
- } else { \
- \
- /* modified LRU specific code */ \
- \
- /* Update the size of the LRU list */ \
- \
- H5C1__DLL_UPDATE_FOR_SIZE_CHANGE((cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, \
- (entry_ptr)->size, \
- (new_size)); \
- \
- /* Similarly, update the size of the clean or dirty LRU list as \
- * appropriate. At present, the entry must be clean, but that \
- * could change. \
- */ \
- \
- if ( (entry_ptr)->is_dirty ) { \
- \
- H5C1__DLL_UPDATE_FOR_SIZE_CHANGE((cache_ptr)->dLRU_list_len, \
- (cache_ptr)->dLRU_list_size, \
- (entry_ptr)->size, \
- (new_size)); \
- \
- } else { \
- \
- H5C1__DLL_UPDATE_FOR_SIZE_CHANGE((cache_ptr)->cLRU_list_len, \
- (cache_ptr)->cLRU_list_size, \
- (entry_ptr)->size, \
- (new_size)); \
- } \
- \
- /* End modified LRU specific code. */ \
- } \
- \
-} /* H5C1__UPDATE_RP_FOR_SIZE_CHANGE */
-
-#else /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-#define H5C1__UPDATE_RP_FOR_SIZE_CHANGE(cache_ptr, entry_ptr, new_size) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( !((entry_ptr)->is_protected) ); \
- HDassert( !((entry_ptr)->is_read_only) ); \
- HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
- HDassert( (entry_ptr)->size > 0 ); \
- HDassert( new_size > 0 ); \
- \
- if ( (entry_ptr)->is_pinned ) { \
- \
- H5C1__DLL_UPDATE_FOR_SIZE_CHANGE((cache_ptr)->pel_len, \
- (cache_ptr)->pel_size, \
- (entry_ptr)->size, \
- (new_size)); \
- \
- } else { \
- \
- /* modified LRU specific code */ \
- \
- /* Update the size of the LRU list */ \
- \
- H5C1__DLL_UPDATE_FOR_SIZE_CHANGE((cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, \
- (entry_ptr)->size, \
- (new_size)); \
- \
- /* End modified LRU specific code. */ \
- } \
- \
-} /* H5C1__UPDATE_RP_FOR_SIZE_CHANGE */
-
-#endif /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-
-/*-------------------------------------------------------------------------
- *
- * Macro: H5C1__UPDATE_RP_FOR_UNPIN
- *
- * Purpose: Update the replacement policy data structures for an
- * unpin of the specified cache entry.
- *
- * To do this, unlink the specified entry from the protected
- * entry list, and re-insert it in the data structures used
- * by the current replacement policy.
- *
- * At present, we only support the modified LRU policy, so
- * this function deals with that case unconditionally. If
- * we ever support other replacement policies, the macro
- * should switch on the current policy and act accordingly.
- *
- * Return: N/A
- *
- * Programmer: John Mainzer, 3/22/06
- *
- * Modifications:
- *
- * JRM -- 3/28/07
- * Added sanity checks based on the new is_read_only and
- * ro_ref_count fields of struct H5C1_cache_entry_t.
- *
- *-------------------------------------------------------------------------
- */
-
-#if H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
-
-#define H5C1__UPDATE_RP_FOR_UNPIN(cache_ptr, entry_ptr, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( !((entry_ptr)->is_protected) ); \
- HDassert( !((entry_ptr)->is_read_only) ); \
- HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
- HDassert( (entry_ptr)->is_pinned); \
- HDassert( (entry_ptr)->size > 0 ); \
- \
- /* Regardless of the replacement policy, remove the entry from the \
- * pinned entry list. \
- */ \
- H5C1__DLL_REMOVE((entry_ptr), (cache_ptr)->pel_head_ptr, \
- (cache_ptr)->pel_tail_ptr, (cache_ptr)->pel_len, \
- (cache_ptr)->pel_size, (fail_val)) \
- \
- /* modified LRU specific code */ \
- \
- /* insert the entry at the head of the LRU list. */ \
- \
- H5C1__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- /* Similarly, insert the entry at the head of either the clean or \
- * dirty LRU list as appropriate. \
- */ \
- \
- if ( (entry_ptr)->is_dirty ) { \
- \
- H5C1__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->dLRU_head_ptr, \
- (cache_ptr)->dLRU_tail_ptr, \
- (cache_ptr)->dLRU_list_len, \
- (cache_ptr)->dLRU_list_size, (fail_val)) \
- \
- } else { \
- \
- H5C1__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->cLRU_head_ptr, \
- (cache_ptr)->cLRU_tail_ptr, \
- (cache_ptr)->cLRU_list_len, \
- (cache_ptr)->cLRU_list_size, (fail_val)) \
- } \
- \
- /* End modified LRU specific code. */ \
- \
-} /* H5C1__UPDATE_RP_FOR_UNPIN */
-
-#else /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-#define H5C1__UPDATE_RP_FOR_UNPIN(cache_ptr, entry_ptr, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( !((entry_ptr)->is_protected) ); \
- HDassert( !((entry_ptr)->is_read_only) ); \
- HDassert( ((entry_ptr)->ro_ref_count) == 0 ); \
- HDassert( (entry_ptr)->is_pinned); \
- HDassert( (entry_ptr)->size > 0 ); \
- \
- /* Regardless of the replacement policy, remove the entry from the \
- * pinned entry list. \
- */ \
- H5C1__DLL_REMOVE((entry_ptr), (cache_ptr)->pel_head_ptr, \
- (cache_ptr)->pel_tail_ptr, (cache_ptr)->pel_len, \
- (cache_ptr)->pel_size, (fail_val)) \
- \
- /* modified LRU specific code */ \
- \
- /* insert the entry at the head of the LRU list. */ \
- \
- H5C1__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- /* End modified LRU specific code. */ \
- \
-} /* H5C1__UPDATE_RP_FOR_UNPIN */
-
-#endif /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-
-/*-------------------------------------------------------------------------
- *
- * Macro: H5C1__UPDATE_RP_FOR_UNPROTECT
- *
- * Purpose: Update the replacement policy data structures for an
- * unprotect of the specified cache entry.
- *
- * To do this, unlink the specified entry from the protected
- * list, and re-insert it in the data structures used by the
- * current replacement policy.
- *
- * At present, we only support the modified LRU policy, so
- * this function deals with that case unconditionally. If
- * we ever support other replacement policies, the function
- * should switch on the current policy and act accordingly.
- *
- * Return: N/A
- *
- * Programmer: John Mainzer, 5/19/04
- *
- * Modifications:
- *
- * JRM - 7/27/04
- * Converted the function H5C1_update_rp_for_unprotect() to
- * the macro H5C1__UPDATE_RP_FOR_UNPROTECT in an effort to
- * squeeze a bit more performance out of the cache.
- *
- * At least for the first cut, I am leaving the comments and
- * white space in the macro. If they cause dificulties with
- * pre-processor, I'll have to remove them.
- *
- * JRM - 7/28/04
- * Split macro into two version, one supporting the clean and
- * dirty LRU lists, and the other not. Yet another attempt
- * at optimization.
- *
- * JRM - 3/17/06
- * Modified macro to put pinned entries on the pinned entry
- * list instead of inserting them in the data structures
- * maintained by the replacement policy.
- *
- *-------------------------------------------------------------------------
- */
-
-#if H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
-
-#define H5C1__UPDATE_RP_FOR_UNPROTECT(cache_ptr, entry_ptr, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( (entry_ptr)->is_protected); \
- HDassert( (entry_ptr)->size > 0 ); \
- \
- /* Regardless of the replacement policy, remove the entry from the \
- * protected list. \
- */ \
- H5C1__DLL_REMOVE((entry_ptr), (cache_ptr)->pl_head_ptr, \
- (cache_ptr)->pl_tail_ptr, (cache_ptr)->pl_len, \
- (cache_ptr)->pl_size, (fail_val)) \
- \
- if ( (entry_ptr)->is_pinned ) { \
- \
- H5C1__DLL_PREPEND((entry_ptr), (cache_ptr)->pel_head_ptr, \
- (cache_ptr)->pel_tail_ptr, \
- (cache_ptr)->pel_len, \
- (cache_ptr)->pel_size, (fail_val)) \
- \
- } else { \
- \
- /* modified LRU specific code */ \
- \
- /* insert the entry at the head of the LRU list. */ \
- \
- H5C1__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- /* Similarly, insert the entry at the head of either the clean or \
- * dirty LRU list as appropriate. \
- */ \
- \
- if ( (entry_ptr)->is_dirty ) { \
- \
- H5C1__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->dLRU_head_ptr, \
- (cache_ptr)->dLRU_tail_ptr, \
- (cache_ptr)->dLRU_list_len, \
- (cache_ptr)->dLRU_list_size, (fail_val)) \
- \
- } else { \
- \
- H5C1__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->cLRU_head_ptr, \
- (cache_ptr)->cLRU_tail_ptr, \
- (cache_ptr)->cLRU_list_len, \
- (cache_ptr)->cLRU_list_size, (fail_val)) \
- } \
- \
- /* End modified LRU specific code. */ \
- } \
- \
-} /* H5C1__UPDATE_RP_FOR_UNPROTECT */
-
-#else /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-#define H5C1__UPDATE_RP_FOR_UNPROTECT(cache_ptr, entry_ptr, fail_val) \
-{ \
- HDassert( (cache_ptr) ); \
- HDassert( (cache_ptr)->magic == H5C1__H5C1_T_MAGIC ); \
- HDassert( (entry_ptr) ); \
- HDassert( (entry_ptr)->is_protected); \
- HDassert( (entry_ptr)->size > 0 ); \
- \
- /* Regardless of the replacement policy, remove the entry from the \
- * protected list. \
- */ \
- H5C1__DLL_REMOVE((entry_ptr), (cache_ptr)->pl_head_ptr, \
- (cache_ptr)->pl_tail_ptr, (cache_ptr)->pl_len, \
- (cache_ptr)->pl_size, (fail_val)) \
- \
- if ( (entry_ptr)->is_pinned ) { \
- \
- H5C1__DLL_PREPEND((entry_ptr), (cache_ptr)->pel_head_ptr, \
- (cache_ptr)->pel_tail_ptr, \
- (cache_ptr)->pel_len, \
- (cache_ptr)->pel_size, (fail_val)) \
- \
- } else { \
- \
- /* modified LRU specific code */ \
- \
- /* insert the entry at the head of the LRU list. */ \
- \
- H5C1__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr, \
- (cache_ptr)->LRU_tail_ptr, \
- (cache_ptr)->LRU_list_len, \
- (cache_ptr)->LRU_list_size, (fail_val)) \
- \
- /* End modified LRU specific code. */ \
- } \
-} /* H5C1__UPDATE_RP_FOR_UNPROTECT */
-
-#endif /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
-
-#endif /* _H5C1pkg_H */
-
diff --git a/src/H5C1private.h b/src/H5C1private.h
deleted file mode 100644
index 8f70525..0000000
--- a/src/H5C1private.h
+++ /dev/null
@@ -1,1081 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*-------------------------------------------------------------------------
- *
- * Created: H5C1private.h
- * 6/3/04
- * John Mainzer
- *
- * Purpose: Constants and typedefs available to the rest of the
- * library.
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-#ifndef _H5C1private_H
-#define _H5C1private_H
-
-#include "H5C1public.h" /*public prototypes */
-
-/* Pivate headers needed by this header */
-#include "H5private.h" /* Generic Functions */
-#include "H5Fprivate.h" /* File access */
-
-
-#define H5C1_DO_SANITY_CHECKS 0
-#define H5C1_DO_EXTREME_SANITY_CHECKS 0
-
-/* This sanity checking constant was picked out of the air. Increase
- * or decrease it if appropriate. Its purposes is to detect corrupt
- * object sizes, so it probably doesn't matter if it is a bit big.
- *
- * JRM - 5/17/04
- */
-#define H5C1_MAX_ENTRY_SIZE ((size_t)(10 * 1024 * 1024))
-
-/* H5C1_COLLECT_CACHE_STATS controls overall collection of statistics
- * on cache activity. In general, this #define should be set to 0.
- */
-#define H5C1_COLLECT_CACHE_STATS 0
-
-/* H5C1_COLLECT_CACHE_ENTRY_STATS controls collection of statistics
- * in individual cache entries.
- *
- * H5C1_COLLECT_CACHE_ENTRY_STATS should only be defined to true if
- * H5C1_COLLECT_CACHE_STATS is also defined to true.
- */
-#if H5C1_COLLECT_CACHE_STATS
-
-#define H5C1_COLLECT_CACHE_ENTRY_STATS 1
-
-#else
-
-#define H5C1_COLLECT_CACHE_ENTRY_STATS 0
-
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
-
-#ifdef H5_HAVE_PARALLEL
-
-/* we must maintain the clean and dirty LRU lists when we are compiled
- * with parallel support.
- */
-#define H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS 1
-
-#else /* H5_HAVE_PARALLEL */
-
-/* The clean and dirty LRU lists don't buy us anything here -- we may
- * want them on for testing on occasion, but in general they should be
- * off.
- */
-#define H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS 0
-
-#endif /* H5_HAVE_PARALLEL */
-
-
-/* Typedef for the main structure for the cache (defined in H5Cpkg.h) */
-
-typedef struct H5C1_t H5C1_t;
-
-
-/*
- * Class methods pertaining to caching. Each type of cached object will
- * have a constant variable with permanent life-span that describes how
- * to cache the object. That variable will be of type H5C1_class_t and
- * have the following required fields...
- *
- * LOAD: Loads an object from disk to memory. The function
- * should allocate some data structure and return it.
- *
- * FLUSH: Writes some data structure back to disk. It would be
- * wise for the data structure to include dirty flags to
- * indicate whether it really needs to be written. This
- * function is also responsible for freeing memory allocated
- * by the LOAD method if the DEST argument is non-zero (by
- * calling the DEST method).
- *
- * DEST: Just frees memory allocated by the LOAD method.
- *
- * CLEAR: Just marks object as non-dirty.
- *
- * SIZE: Report the size (on disk) of the specified cache object.
- * Note that the space allocated on disk may not be contiguous.
- */
-
-#define H5C1_CALLBACK__NO_FLAGS_SET 0x0
-#define H5C1_CALLBACK__SIZE_CHANGED_FLAG 0x1
-#define H5C1_CALLBACK__RENAMED_FLAG 0x2
-
-typedef void *(*H5C1_load_func_t)(H5F_t *f,
- hid_t dxpl_id,
- haddr_t addr,
- const void *udata1,
- void *udata2);
-typedef herr_t (*H5C1_flush_func_t)(H5F_t *f,
- hid_t dxpl_id,
- hbool_t dest,
- haddr_t addr,
- void *thing,
- unsigned * flags_ptr);
-typedef herr_t (*H5C1_dest_func_t)(H5F_t *f,
- void *thing);
-typedef herr_t (*H5C1_clear_func_t)(H5F_t *f,
- void *thing,
- hbool_t dest);
-typedef herr_t (*H5C1_size_func_t)(const H5F_t *f,
- const void *thing,
- size_t *size_ptr);
-
-typedef struct H5C1_class_t {
- int id;
- H5C1_load_func_t load;
- H5C1_flush_func_t flush;
- H5C1_dest_func_t dest;
- H5C1_clear_func_t clear;
- H5C1_size_func_t size;
-} H5C1_class_t;
-
-
-/* Type defintions of call back functions used by the cache as a whole */
-
-typedef herr_t (*H5C1_write_permitted_func_t)(const H5F_t *f,
- hid_t dxpl_id,
- hbool_t * write_permitted_ptr);
-
-typedef herr_t (*H5C1_log_flush_func_t)(H5C1_t * cache_ptr,
- haddr_t addr,
- hbool_t was_dirty,
- unsigned flags,
- int type_id);
-
-/* Upper and lower limits on cache size. These limits are picked
- * out of a hat -- you should be able to change them as necessary.
- *
- * However, if you need a very big cache, you should also increase the
- * size of the hash table (H5C1__HASH_TABLE_LEN in H5Cpkg.h). The current
- * upper bound on cache size is rather large for the current hash table
- * size.
- */
-
-#define H5C1__MAX_MAX_CACHE_SIZE ((size_t)(128 * 1024 * 1024))
-#define H5C1__MIN_MAX_CACHE_SIZE ((size_t)(1024))
-
-
-/* Default max cache size and min clean size are give here to make
- * them generally accessable.
- */
-
-#define H5C1__DEFAULT_MAX_CACHE_SIZE ((size_t)(4 * 1024 * 1024))
-#define H5C1__DEFAULT_MIN_CLEAN_SIZE ((size_t)(2 * 1024 * 1024))
-
-
-/****************************************************************************
- *
- * structure H5C1_cache_entry_t
- *
- * Instances of the H5C1_cache_entry_t structure are used to store cache
- * entries in a hash table and sometimes in a skip list.
- * See H5SL.c for the particulars of the skip list.
- *
- * In typical application, this structure is the first field in a
- * structure to be cached. For historical reasons, the external module
- * is responsible for managing the is_dirty field (this is no longer
- * completely true. See the comment on the is_dirty field for details).
- * All other fields are managed by the cache.
- *
- * The fields of this structure are discussed individually below:
- *
- * JRM - 4/26/04
- *
- * magic: Unsigned 32 bit integer that must always be set to
- * H5C1__H5C1_CACHE_ENTRY_T_MAGIC when the entry is valid.
- * The field must be set to H5C1__H5C1_CACHE_ENTRY_T_BAD_MAGIC
- * just before the entry is freed.
- *
- * This is necessary, as the LRU list can be changed out
- * from under H5C1_make_space_in_cache() by the flush
- * callback which may change the size of an existing entry,
- * and/or load a new entry while serializing the target entry.
- *
- * This in turn can cause a recursive call to
- * H5C1_make_space_in_cache() which may either flush or evict
- * the next entry that the first invocation of that function
- * was about to examine.
- *
- * The magic field allows H5C1_make_space_in_cache() to
- * detect this case, and re-start its scan from the bottom
- * of the LRU when this situation occurs.
- *
- * This field is only compiled in debug mode.
- *
- * addr: Base address of the cache entry on disk.
- *
- * size: Length of the cache entry on disk. Note that unlike normal
- * caches, the entries in this cache are of variable length.
- * The entries should never overlap, and when we do writebacks,
- * we will want to writeback adjacent entries where possible.
- *
- * NB: At present, entries need not be contiguous on disk. Until
- * we fix this, we can't do much with writing back adjacent
- * entries.
- *
- * type: Pointer to the instance of H5C1_class_t containing pointers
- * to the methods for cache entries of the current type. This
- * field should be NULL when the instance of H5C1_cache_entry_t
- * is not in use.
- *
- * The name is not particularly descriptive, but is retained
- * to avoid changes in existing code.
- *
- * is_dirty: Boolean flag indicating whether the contents of the cache
- * entry has been modified since the last time it was written
- * to disk.
- *
- * NOTE: For historical reasons, this field is not maintained
- * by the cache. Instead, the module using the cache
- * sets this flag when it modifies the entry, and the
- * flush and clear functions supplied by that module
- * reset the dirty when appropriate.
- *
- * This is a bit quirky, so we may want to change this
- * someday. However it will require a change in the
- * cache interface.
- *
- * Update: Management of the is_dirty field has been largely
- * moved into the cache. The only remaining exceptions
- * are the flush and clear functions supplied by the
- * modules using the cache. These still clear the
- * is_dirty field as before. -- JRM 7/5/05
- *
- * dirtied: Boolean flag used to indicate that the entry has been
- * dirtied while protected.
- *
- * This field is set to FALSE in the protect call, and may
- * be set to TRUE by the
- * H5C1_mark_pinned_or_protected_entry_dirty()
- * call at an time prior to the unprotect call.
- *
- * The H5C1_mark_pinned_or_protected_entry_dirty() call exists
- * as a convenience function for the fractal heap code which
- * may not know if an entry is protected or pinned, but knows
- * that is either protected or pinned. The dirtied field was
- * added as in the parallel case, it is necessary to know
- * whether a protected entry was dirty prior to the protect call.
- *
- * is_protected: Boolean flag indicating whether this entry is protected
- * (or locked, to use more conventional terms). When it is
- * protected, the entry cannot be flushed or accessed until
- * it is unprotected (or unlocked -- again to use more
- * conventional terms).
- *
- * Note that protected entries are removed from the LRU lists
- * and inserted on the protected list.
- *
- * is_read_only: Boolean flag that is only meaningful if is_protected is
- * TRUE. In this circumstance, it indicates whether the
- * entry has been protected read only, or read/write.
- *
- * If the entry has been protected read only (i.e. is_protected
- * and is_read_only are both TRUE), we allow the entry to be
- * protected more than once.
- *
- * In this case, the number of readers is maintained in the
- * ro_ref_count field (see below), and unprotect calls simply
- * decrement that field until it drops to zero, at which point
- * the entry is actually unprotected.
- *
- * ro_ref_count: Integer field used to maintain a count of the number of
- * outstanding read only protects on this entry. This field
- * must be zero whenever either is_protected or is_read_only
- * are TRUE.
- *
- * is_pinned: Boolean flag indicating whether the entry has been pinned
- * in the cache.
- *
- * For very hot entries, the protect / unprotect overhead
- * can become excessive. Thus the cache has been extended
- * to allow an entry to be "pinned" in the cache.
- *
- * Pinning an entry in the cache has several implications:
- *
- * 1) A pinned entry cannot be evicted. Thus unprotected
- * pinned entries must be stored in the pinned entry
- * list, instead of being managed by the replacement
- * policy code (LRU at present).
- *
- * 2) A pinned entry can be accessed or modified at any time.
- * Therefore, the cache must check with the entry owner
- * before flushing it. If permission is denied, the
- * cache does not flush the entry.
- *
- * 3) A pinned entry can be marked as dirty (and possibly
- * change size) while it is unprotected.
- *
- * 4) The flush-destroy code must allow pinned entries to
- * be unpinned (and possibly unprotected) during the
- * flush.
- *
- * JRM -- 3/16/06
- *
- * in_slist: Boolean flag indicating whether the entry is in the skip list
- * As a general rule, entries are placed in the list when they
- * are marked dirty. However they may remain in the list after
- * being flushed.
- *
- * Update: Dirty entries are now removed from the skip list
- * when they are flushed.
- *
- * flush_marker: Boolean flag indicating that the entry is to be flushed
- * the next time H5C1_flush_cache() is called with the
- * H5C1__FLUSH_MARKED_ENTRIES_FLAG. The flag is reset when
- * the entry is flushed for whatever reason.
- *
- * clear_on_unprotect: Boolean flag used only in PHDF5. When H5C is used
- * to implement the metadata cache In the parallel case, only
- * the cache with mpi rank 0 is allowed to actually write to
- * file -- all other caches must retain dirty entries until they
- * are advised that the entry is clean.
- *
- * This flag is used in the case that such an advisory is
- * received when the entry is protected. If it is set when an
- * entry is unprotected, and the dirtied flag is not set in
- * the unprotect, the entry's is_dirty flag is reset by flushing
- * it with the H5C1__FLUSH_CLEAR_ONLY_FLAG.
- *
- * flush_in_progress: Boolean flag that is set to true iff the entry
- * is in the process of being flushed. This allows the cache
- * to detect when a call is the result of a flush callback.
- *
- * destroy_in_progress: Boolean flag that is set to true iff the entry
- * is in the process of being flushed and destroyed.
- *
- *
- * Fields supporting the hash table:
- *
- * Fields in the cache are indexed by a more or less conventional hash table.
- * If there are multiple entries in any hash bin, they are stored in a doubly
- * linked list.
- *
- * ht_next: Next pointer used by the hash table to store multiple
- * entries in a single hash bin. This field points to the
- * next entry in the doubly linked list of entries in the
- * hash bin, or NULL if there is no next entry.
- *
- * ht_prev: Prev pointer used by the hash table to store multiple
- * entries in a single hash bin. This field points to the
- * previous entry in the doubly linked list of entries in
- * the hash bin, or NULL if there is no previuos entry.
- *
- *
- * Fields supporting replacement policies:
- *
- * The cache must have a replacement policy, and it will usually be
- * necessary for this structure to contain fields supporting that policy.
- *
- * While there has been interest in several replacement policies for
- * this cache, the initial development schedule is tight. Thus I have
- * elected to support only a modified LRU policy for the first cut.
- *
- * When additional replacement policies are added, the fields in this
- * section will be used in different ways or not at all. Thus the
- * documentation of these fields is repeated for each replacement policy.
- *
- * Modified LRU:
- *
- * When operating in parallel mode, we must ensure that a read does not
- * cause a write. If it does, the process will hang, as the write will
- * be collective and the other processes will not know to participate.
- *
- * To deal with this issue, I have modified the usual LRU policy by adding
- * clean and dirty LRU lists to the usual LRU list. When reading in
- * parallel mode, we evict from the clean LRU list only. This implies
- * that we must try to ensure that the clean LRU list is reasonably well
- * stocked. See the comments on H5C1_t in H5Cpkg.h for more details.
- *
- * Note that even if we start with a completely clean cache, a sequence
- * of protects without unprotects can empty the clean LRU list. In this
- * case, the cache must grow temporarily. At the next write, we will
- * attempt to evict enough entries to get the cache down to its nominal
- * maximum size.
- *
- * The use of the replacement policy fields under the Modified LRU policy
- * is discussed below:
- *
- * next: Next pointer in either the LRU or the protected list,
- * depending on the current value of protected. If there
- * is no next entry on the list, this field should be set
- * to NULL.
- *
- * prev: Prev pointer in either the LRU or the protected list,
- * depending on the current value of protected. If there
- * is no previous entry on the list, this field should be
- * set to NULL.
- *
- * aux_next: Next pointer on either the clean or dirty LRU lists.
- * This entry should be NULL when protected is true. When
- * protected is false, and dirty is true, it should point
- * to the next item on the dirty LRU list. When protected
- * is false, and dirty is false, it should point to the
- * next item on the clean LRU list. In either case, when
- * there is no next item, it should be NULL.
- *
- * aux_prev: Previous pointer on either the clean or dirty LRU lists.
- * This entry should be NULL when protected is true. When
- * protected is false, and dirty is true, it should point
- * to the previous item on the dirty LRU list. When protected
- * is false, and dirty is false, it should point to the
- * previous item on the clean LRU list. In either case, when
- * there is no previous item, it should be NULL.
- *
- *
- * Cache entry stats collection fields:
- *
- * These fields should only be compiled in when both H5C1_COLLECT_CACHE_STATS
- * and H5C1_COLLECT_CACHE_ENTRY_STATS are true. When present, they allow
- * collection of statistics on individual cache entries.
- *
- * accesses: int32_t containing the number of times this cache entry has
- * been referenced in its lifetime.
- *
- * clears: int32_t containing the number of times this cache entry has
- * been cleared in its life time.
- *
- * flushes: int32_t containing the number of times this cache entry has
- * been flushed to file in its life time.
- *
- * pins: int32_t containing the number of times this cache entry has
- * been pinned in cache in its life time.
- *
- ****************************************************************************/
-
-#ifndef NDEBUG
-#define H5C1__H5C1_CACHE_ENTRY_T_MAGIC 0x005CAC0A
-#define H5C1__H5C1_CACHE_ENTRY_T_BAD_MAGIC 0xDeadBeef
-#endif /* NDEBUG */
-
-typedef struct H5C1_cache_entry_t
-{
-#ifndef NDEBUG
- uint32_t magic;
-#endif /* NDEBUG */
- haddr_t addr;
- size_t size;
- const H5C1_class_t * type;
- hbool_t is_dirty;
- hbool_t dirtied;
- hbool_t is_protected;
- hbool_t is_read_only;
- int ro_ref_count;
- hbool_t is_pinned;
- hbool_t in_slist;
- hbool_t flush_marker;
-#ifdef H5_HAVE_PARALLEL
- hbool_t clear_on_unprotect;
-#endif /* H5_HAVE_PARALLEL */
- hbool_t flush_in_progress;
- hbool_t destroy_in_progress;
-
- /* fields supporting the hash table: */
-
- struct H5C1_cache_entry_t * ht_next;
- struct H5C1_cache_entry_t * ht_prev;
-
- /* fields supporting replacement policies: */
-
- struct H5C1_cache_entry_t * next;
- struct H5C1_cache_entry_t * prev;
- struct H5C1_cache_entry_t * aux_next;
- struct H5C1_cache_entry_t * aux_prev;
-
-#if H5C1_COLLECT_CACHE_ENTRY_STATS
-
- /* cache entry stats fields */
-
- int32_t accesses;
- int32_t clears;
- int32_t flushes;
- int32_t pins;
-
-#endif /* H5C1_COLLECT_CACHE_ENTRY_STATS */
-
-} H5C1_cache_entry_t;
-
-
-/****************************************************************************
- *
- * structure H5C1_auto_size_ctl_t
- *
- * Instances of H5C1_auto_size_ctl_t are used to get and set the control
- * fields for automatic cache re-sizing.
- *
- * The fields of the structure are discussed individually below:
- *
- * version: Integer field containing the version number of this version
- * of the H5C1_auto_size_ctl_t structure. Any instance of
- * H5C1_auto_size_ctl_t passed to the cache must have a known
- * version number, or an error will be flagged.
- *
- * report_fcn: Pointer to the function that is to be called to report
- * activities each time the auto cache resize code is executed. If the
- * field is NULL, no call is made.
- *
- * If the field is not NULL, it must contain the address of a function
- * of type H5C1_auto_resize_report_fcn.
- *
- * set_initial_size: Boolean flag indicating whether the size of the
- * initial size of the cache is to be set to the value given in
- * the initial_size field. If set_initial_size is FALSE, the
- * initial_size field is ignored.
- *
- * initial_size: If enabled, this field contain the size the cache is
- * to be set to upon receipt of this structure. Needless to say,
- * initial_size must lie in the closed interval [min_size, max_size].
- *
- * min_clean_fraction: double in the range 0 to 1 indicating the fraction
- * of the cache that is to be kept clean. This field is only used
- * in parallel mode. Typical values are 0.1 to 0.5.
- *
- * max_size: Maximum size to which the cache can be adjusted. The
- * supplied value must fall in the closed interval
- * [MIN_MAX_CACHE_SIZE, MAX_MAX_CACHE_SIZE]. Also, max_size must
- * be greater than or equal to min_size.
- *
- * min_size: Minimum size to which the cache can be adjusted. The
- * supplied value must fall in the closed interval
- * [MIN_MAX_CACHE_SIZE, MAX_MAX_CACHE_SIZE]. Also, min_size must
- * be less than or equal to max_size.
- *
- * epoch_length: Number of accesses on the cache over which to collect
- * hit rate stats before running the automatic cache resize code,
- * if it is enabled.
- *
- * At the end of an epoch, we discard prior hit rate data and start
- * collecting afresh. The epoch_length must lie in the closed
- * interval [H5C1__MIN_AR_EPOCH_LENGTH, H5C1__MAX_AR_EPOCH_LENGTH].
- *
- *
- * Cache size increase control fields:
- *
- * incr_mode: Instance of the H5C1_cache_incr_mode enumerated type whose
- * value indicates how we determine whether the cache size should be
- * increased. At present there are two possible values:
- *
- * H5C1_incr__off: Don't attempt to increase the size of the cache
- * automatically.
- *
- * When this increment mode is selected, the remaining fields
- * in the cache size increase section ar ignored.
- *
- * H5C1_incr__threshold: Attempt to increase the size of the cache
- * whenever the average hit rate over the last epoch drops
- * below the value supplied in the lower_hr_threshold
- * field.
- *
- * Note that this attempt will fail if the cache is already
- * at its maximum size, or if the cache is not already using
- * all available space.
- *
- * lower_hr_threshold: Lower hit rate threshold. If the increment mode
- * (incr_mode) is H5C1_incr__threshold and the hit rate drops below the
- * value supplied in this field in an epoch, increment the cache size by
- * size_increment. Note that cache size may not be incremented above
- * max_size, and that the increment may be further restricted by the
- * max_increment field if it is enabled.
- *
- * When enabled, this field must contain a value in the range [0.0, 1.0].
- * Depending on the incr_mode selected, it may also have to be less than
- * upper_hr_threshold.
- *
- * increment: Double containing the multiplier used to derive the new
- * cache size from the old if a cache size increment is triggered.
- * The increment must be greater than 1.0, and should not exceed 2.0.
- *
- * The new cache size is obtained by multiplying the current max cache
- * size by the increment, and then clamping to max_size and to stay
- * within the max_increment as necessary.
- *
- * apply_max_increment: Boolean flag indicating whether the max_increment
- * field should be used to limit the maximum cache size increment.
- *
- * max_increment: If enabled by the apply_max_increment field described
- * above, this field contains the maximum number of bytes by which the
- * cache size can be increased in a single re-size.
- *
- * flash_incr_mode: Instance of the H5C1_cache_flash_incr_mode enumerated
- * type whose value indicates whether and by what algorithm we should
- * make flash increases in the size of the cache to accomodate insertion
- * of large entries and large increases in the size of a single entry.
- *
- * The addition of the flash increment mode was occasioned by performance
- * problems that appear when a local heap is increased to a size in excess
- * of the current cache size. While the existing re-size code dealt with
- * this eventually, performance was very bad for the remainder of the
- * epoch.
- *
- * At present, there are two possible values for the flash_incr_mode:
- *
- * H5C1_flash_incr__off: Don't perform flash increases in the size of
- * the cache.
- *
- * H5C1_flash_incr__add_space: Let x be either the size of a newly
- * newly inserted entry, or the number of bytes by which the
- * size of an existing entry has been increased.
- *
- * If
- * x > flash_threshold * current max cache size,
- *
- * increase the current maximum cache size by x * flash_multiple
- * less any free space in the cache, and start a new epoch. For
- * now at least, pay no attention to the maximum increment.
- *
- *
- * With a little thought, it should be obvious that the above flash
- * cache size increase algorithm is not sufficient for all circumstances --
- * for example, suppose the user round robins through
- * (1/flash_threshold) +1 groups, adding one data set to each on each
- * pass. Then all will increase in size at about the same time, requiring
- * the max cache size to at least double to maintain acceptable
- * performance, however the above flash increment algorithm will not be
- * triggered.
- *
- * Hopefully, the add space algorithm detailed above will be sufficient
- * for the performance problems encountered to date. However, we should
- * expect to revisit the issue.
- *
- * flash_multiple: Double containing the multiple described above in the
- * H5C1_flash_incr__add_space section of the discussion of the
- * flash_incr_mode section. This field is ignored unless flash_incr_mode
- * is H5C1_flash_incr__add_space.
- *
- * flash_threshold: Double containing the factor by which current max cache size
- * is multiplied to obtain the size threshold for the add_space flash
- * increment algorithm. The field is ignored unless flash_incr_mode is
- * H5C1_flash_incr__add_space.
- *
- *
- * Cache size decrease control fields:
- *
- * decr_mode: Instance of the H5C1_cache_decr_mode enumerated type whose
- * value indicates how we determine whether the cache size should be
- * decreased. At present there are four possibilities.
- *
- * H5C1_decr__off: Don't attempt to decrease the size of the cache
- * automatically.
- *
- * When this increment mode is selected, the remaining fields
- * in the cache size decrease section are ignored.
- *
- * H5C1_decr__threshold: Attempt to decrease the size of the cache
- * whenever the average hit rate over the last epoch rises
- * above the value supplied in the upper_hr_threshold
- * field.
- *
- * H5C1_decr__age_out: At the end of each epoch, search the cache for
- * entries that have not been accessed for at least the number
- * of epochs specified in the epochs_before_eviction field, and
- * evict these entries. Conceptually, the maximum cache size
- * is then decreased to match the new actual cache size. However,
- * this reduction may be modified by the min_size, the
- * max_decrement, and/or the empty_reserve.
- *
- * H5C1_decr__age_out_with_threshold: Same as age_out, but we only
- * attempt to reduce the cache size when the hit rate observed
- * over the last epoch exceeds the value provided in the
- * upper_hr_threshold field.
- *
- * upper_hr_threshold: Upper hit rate threshold. The use of this field
- * varies according to the current decr_mode:
- *
- * H5C1_decr__off or H5C1_decr__age_out: The value of this field is
- * ignored.
- *
- * H5C1_decr__threshold: If the hit rate exceeds this threshold in any
- * epoch, attempt to decrement the cache size by size_decrement.
- *
- * Note that cache size may not be decremented below min_size.
- *
- * Note also that if the upper_threshold is 1.0, the cache size
- * will never be reduced.
- *
- * H5C1_decr__age_out_with_threshold: If the hit rate exceeds this
- * threshold in any epoch, attempt to reduce the cache size
- * by evicting entries that have not been accessed for more
- * than the specified number of epochs.
- *
- * decrement: This field is only used when the decr_mode is
- * H5C1_decr__threshold.
- *
- * The field is a double containing the multiplier used to derive the
- * new cache size from the old if a cache size decrement is triggered.
- * The decrement must be in the range 0.0 (in which case the cache will
- * try to contract to its minimum size) to 1.0 (in which case the
- * cache will never shrink).
- *
- * apply_max_decrement: Boolean flag used to determine whether decrements
- * in cache size are to be limited by the max_decrement field.
- *
- * max_decrement: Maximum number of bytes by which the cache size can be
- * decreased in a single re-size. Note that decrements may also be
- * restricted by the min_size of the cache, and (in age out modes) by
- * the empty_reserve field.
- *
- * epochs_before_eviction: Integer field used in H5C1_decr__age_out and
- * H5C1_decr__age_out_with_threshold decrement modes.
- *
- * This field contains the number of epochs an entry must remain
- * unaccessed before it is evicted in an attempt to reduce the
- * cache size. If applicable, this field must lie in the range
- * [1, H5C1__MAX_EPOCH_MARKERS].
- *
- * apply_empty_reserve: Boolean field controlling whether the empty_reserve
- * field is to be used in computing the new cache size when the
- * decr_mode is H5C1_decr__age_out or H5C1_decr__age_out_with_threshold.
- *
- * empty_reserve: To avoid a constant racheting down of cache size by small
- * amounts in the H5C1_decr__age_out and H5C1_decr__age_out_with_threshold
- * modes, this field allows one to require that any cache size
- * reductions leave the specified fraction of unused space in the cache.
- *
- * The value of this field must be in the range [0.0, 1.0]. I would
- * expect typical values to be in the range of 0.01 to 0.1.
- *
- ****************************************************************************/
-
-#define H5C1_RESIZE_CFG__VALIDATE_GENERAL 0x1
-#define H5C1_RESIZE_CFG__VALIDATE_INCREMENT 0x2
-#define H5C1_RESIZE_CFG__VALIDATE_DECREMENT 0x4
-#define H5C1_RESIZE_CFG__VALIDATE_INTERACTIONS 0x8
-#define H5C1_RESIZE_CFG__VALIDATE_ALL \
-( \
- H5C1_RESIZE_CFG__VALIDATE_GENERAL | \
- H5C1_RESIZE_CFG__VALIDATE_INCREMENT | \
- H5C1_RESIZE_CFG__VALIDATE_DECREMENT | \
- H5C1_RESIZE_CFG__VALIDATE_INTERACTIONS \
-)
-
-#define H5C1__CURR_AUTO_SIZE_CTL_VER 1
-#define H5C1__CURR_AUTO_RESIZE_RPT_FCN_VER 1
-
-#define H5C1__MAX_EPOCH_MARKERS 10
-
-#define H5C1__DEF_AR_UPPER_THRESHHOLD 0.9999
-#define H5C1__DEF_AR_LOWER_THRESHHOLD 0.9
-#define H5C1__DEF_AR_MAX_SIZE ((size_t)(16 * 1024 * 1024))
-#define H5C1__DEF_AR_INIT_SIZE ((size_t)( 1 * 1024 * 1024))
-#define H5C1__DEF_AR_MIN_SIZE ((size_t)( 1 * 1024 * 1024))
-#define H5C1__DEF_AR_MIN_CLEAN_FRAC 0.5
-#define H5C1__DEF_AR_INCREMENT 2.0
-#define H5C1__DEF_AR_MAX_INCREMENT ((size_t)( 2 * 1024 * 1024))
-#define H5C1__DEF_AR_FLASH_MULTIPLE 1.0
-#define H5C1__DEV_AR_FLASH_THRESHOLD 0.25
-#define H5C1__DEF_AR_DECREMENT 0.9
-#define H5C1__DEF_AR_MAX_DECREMENT ((size_t)( 1 * 1024 * 1024))
-#define H5C1__DEF_AR_EPCHS_B4_EVICT 3
-#define H5C1__DEF_AR_EMPTY_RESERVE 0.05
-#define H5C1__MIN_AR_EPOCH_LENGTH 100
-#define H5C1__DEF_AR_EPOCH_LENGTH 50000
-#define H5C1__MAX_AR_EPOCH_LENGTH 1000000
-
-enum H5C1_resize_status
-{
- in_spec1,
- increase1,
- flash_increase1,
- decrease1,
- at_max_size1,
- at_min_size1,
- increase_disabled1,
- decrease_disabled1,
- not_full1
-}; /* enum H5C1_resize_conditions */
-
-typedef void (*H5C1_auto_resize_rpt_fcn)(H5C1_t * cache_ptr,
- int32_t version,
- double hit_rate,
- enum H5C1_resize_status status,
- size_t old_max_cache_size,
- size_t new_max_cache_size,
- size_t old_min_clean_size,
- size_t new_min_clean_size);
-
-typedef struct H5C1_auto_size_ctl_t
-{
- /* general configuration fields: */
- int32_t version;
- H5C1_auto_resize_rpt_fcn rpt_fcn;
-
- hbool_t set_initial_size;
- size_t initial_size;
-
- double min_clean_fraction;
-
- size_t max_size;
- size_t min_size;
-
- int64_t epoch_length;
-
-
- /* size increase control fields: */
- enum H5C1_cache_incr_mode incr_mode;
-
- double lower_hr_threshold;
-
- double increment;
-
- hbool_t apply_max_increment;
- size_t max_increment;
-
- enum H5C1_cache_flash_incr_mode flash_incr_mode;
- double flash_multiple;
- double flash_threshold;
-
- /* size decrease control fields: */
- enum H5C1_cache_decr_mode decr_mode;
-
- double upper_hr_threshold;
-
- double decrement;
-
- hbool_t apply_max_decrement;
- size_t max_decrement;
-
- int32_t epochs_before_eviction;
-
- hbool_t apply_empty_reserve;
- double empty_reserve;
-
-} H5C1_auto_size_ctl_t;
-
-
-/*
- * Library prototypes.
- */
-
-/* #defines of flags used in the flags parameters in some of the
- * following function calls. Note that not all flags are applicable
- * to all function calls. Flags that don't apply to a particular
- * function are ignored in that function.
- *
- * These flags apply to all function calls:
- *
- * H5C1__NO_FLAGS_SET (generic "no flags set" for all fcn calls)
- *
- *
- * These flags apply to H5C1_insert_entry():
- *
- * H5C1__SET_FLUSH_MARKER_FLAG
- * H5C1__PIN_ENTRY_FLAG
- *
- * These flags apply to H5C1_protect()
- *
- * H5C1__READ_ONLY_FLAG
- *
- * These flags apply to H5C1_unprotect():
- *
- * H5C1__SET_FLUSH_MARKER_FLAG
- * H5C1__DELETED_FLAG
- * H5C1__DIRTIED_FLAG
- * H5C1__SIZE_CHANGED_FLAG
- * H5C1__PIN_ENTRY_FLAG
- * H5C1__UNPIN_ENTRY_FLAG
- *
- *
- * These flags apply to H5C1_flush_cache():
- *
- * H5C1__FLUSH_INVALIDATE_FLAG
- * H5C1__FLUSH_CLEAR_ONLY_FLAG
- * H5C1__FLUSH_MARKED_ENTRIES_FLAG
- * H5C1__FLUSH_IGNORE_PROTECTED_FLAG (can't use this flag in combination
- * with H5C1__FLUSH_INVALIDATE_FLAG)
- *
- * These flags apply to H5C1_flush_single_entry():
- *
- * H5C1__FLUSH_INVALIDATE_FLAG
- * H5C1__FLUSH_CLEAR_ONLY_FLAG
- * H5C1__FLUSH_MARKED_ENTRIES_FLAG
- */
-
-#define H5C1__NO_FLAGS_SET 0x0000
-#define H5C1__SET_FLUSH_MARKER_FLAG 0x0001
-#define H5C1__DELETED_FLAG 0x0002
-#define H5C1__DIRTIED_FLAG 0x0004
-#define H5C1__SIZE_CHANGED_FLAG 0x0008
-#define H5C1__PIN_ENTRY_FLAG 0x0010
-#define H5C1__UNPIN_ENTRY_FLAG 0x0020
-#define H5C1__FLUSH_INVALIDATE_FLAG 0x0040
-#define H5C1__FLUSH_CLEAR_ONLY_FLAG 0x0080
-#define H5C1__FLUSH_MARKED_ENTRIES_FLAG 0x0100
-#define H5C1__FLUSH_IGNORE_PROTECTED_FLAG 0x0200
-#define H5C1__READ_ONLY_FLAG 0x0400
-
-
-H5_DLL H5C1_t * H5C1_create(size_t max_cache_size,
- size_t min_clean_size,
- int max_type_id,
- const char * (* type_name_table_ptr),
- H5C1_write_permitted_func_t check_write_permitted,
- hbool_t write_permitted,
- H5C1_log_flush_func_t log_flush,
- void * aux_ptr);
-
-H5_DLL void H5C1_def_auto_resize_rpt_fcn(H5C1_t * cache_ptr,
- int32_t version,
- double hit_rate,
- enum H5C1_resize_status status,
- size_t old_max_cache_size,
- size_t new_max_cache_size,
- size_t old_min_clean_size,
- size_t new_min_clean_size);
-
-H5_DLL herr_t H5C1_dest(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr);
-
-H5_DLL herr_t H5C1_dest_empty(H5C1_t * cache_ptr);
-
-H5_DLL herr_t H5C1_expunge_entry(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- const H5C1_class_t * type,
- haddr_t addr);
-
-H5_DLL herr_t H5C1_flush_cache(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- unsigned flags);
-
-H5_DLL herr_t H5C1_flush_to_min_clean(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr);
-
-H5_DLL herr_t H5C1_get_cache_auto_resize_config(H5C1_t * cache_ptr,
- H5C1_auto_size_ctl_t *config_ptr);
-
-H5_DLL herr_t H5C1_get_cache_size(H5C1_t * cache_ptr,
- size_t * max_size_ptr,
- size_t * min_clean_size_ptr,
- size_t * cur_size_ptr,
- int32_t * cur_num_entries_ptr);
-
-H5_DLL herr_t H5C1_get_cache_hit_rate(H5C1_t * cache_ptr,
- double * hit_rate_ptr);
-
-H5_DLL herr_t H5C1_get_entry_status(H5C1_t * cache_ptr,
- haddr_t addr,
- size_t * size_ptr,
- hbool_t * in_cache_ptr,
- hbool_t * is_dirty_ptr,
- hbool_t * is_protected_ptr,
- hbool_t * is_pinned_ptr);
-
-H5_DLL herr_t H5C1_get_evictions_enabled(H5C1_t * cache_ptr,
- hbool_t * evictions_enabled_ptr);
-
-H5_DLL herr_t H5C1_get_trace_file_ptr(H5C1_t * cache_ptr,
- FILE ** trace_file_ptr_ptr);
-
-H5_DLL herr_t H5C1_insert_entry(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- const H5C1_class_t * type,
- haddr_t addr,
- void * thing,
- unsigned int flags);
-
-H5_DLL herr_t H5C1_mark_entries_as_clean(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- int32_t ce_array_len,
- haddr_t * ce_array_ptr);
-
-H5_DLL herr_t H5C1_mark_pinned_entry_dirty(H5C1_t * cache_ptr,
- void * thing,
- hbool_t size_changed,
- size_t new_size);
-
-H5_DLL herr_t H5C1_mark_pinned_or_protected_entry_dirty(H5C1_t * cache_ptr,
- void * thing);
-
-H5_DLL herr_t H5C1_rename_entry(H5C1_t * cache_ptr,
- const H5C1_class_t * type,
- haddr_t old_addr,
- haddr_t new_addr);
-
-H5_DLL herr_t H5C1_pin_protected_entry(H5C1_t * cache_ptr,
- void * thing);
-
-H5_DLL void * H5C1_protect(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- const H5C1_class_t * type,
- haddr_t addr,
- const void * udata1,
- void * udata2,
- unsigned flags);
-
-H5_DLL herr_t H5C1_reset_cache_hit_rate_stats(H5C1_t * cache_ptr);
-
-H5_DLL herr_t H5C1_resize_pinned_entry(H5C1_t * cache_ptr,
- void * thing,
- size_t new_size);
-
-H5_DLL herr_t H5C1_set_cache_auto_resize_config(H5C1_t * cache_ptr,
- H5C1_auto_size_ctl_t *config_ptr);
-
-H5_DLL herr_t H5C1_set_evictions_enabled(H5C1_t * cache_ptr,
- hbool_t evictions_enabled);
-
-H5_DLL herr_t H5C1_set_prefix(H5C1_t * cache_ptr, char * prefix);
-
-H5_DLL herr_t H5C1_set_skip_flags(H5C1_t * cache_ptr,
- hbool_t skip_file_checks,
- hbool_t skip_dxpl_id_checks);
-
-H5_DLL herr_t H5C1_set_trace_file_ptr(H5C1_t * cache_ptr,
- FILE * trace_file_ptr);
-
-H5_DLL herr_t H5C1_stats(H5C1_t * cache_ptr,
- const char * cache_name,
- hbool_t display_detailed_stats);
-
-H5_DLL void H5C1_stats__reset(H5C1_t * cache_ptr);
-
-H5_DLL herr_t H5C1_unpin_entry(H5C1_t * cache_ptr, void * thing);
-
-H5_DLL herr_t H5C1_unprotect(H5F_t * f,
- hid_t primary_dxpl_id,
- hid_t secondary_dxpl_id,
- H5C1_t * cache_ptr,
- const H5C1_class_t * type,
- haddr_t addr,
- void * thing,
- unsigned int flags,
- size_t new_size);
-
-H5_DLL herr_t H5C1_validate_resize_config(H5C1_auto_size_ctl_t * config_ptr,
- unsigned int tests);
-
-#endif /* !_H5C1private_H */
-
diff --git a/src/H5C1public.h b/src/H5C1public.h
deleted file mode 100644
index d88b92d..0000000
--- a/src/H5C1public.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*-------------------------------------------------------------------------
- *
- * Created: H5C1public.h
- * June 4, 2005
- * John Mainzer
- *
- * Purpose: Public include file for cache functions.
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-#ifndef _H5C1public_H
-#define _H5C1public_H
-
-/* Public headers needed by this file */
-#include "H5public.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-enum H5C1_cache_incr_mode
-{
- H5C1_incr__off,
- H5C1_incr__threshold
-};
-
-enum H5C1_cache_flash_incr_mode
-{
- H5C1_flash_incr__off,
- H5C1_flash_incr__add_space
-};
-
-enum H5C1_cache_decr_mode
-{
- H5C1_decr__off,
- H5C1_decr__threshold,
- H5C1_decr__age_out,
- H5C1_decr__age_out_with_threshold
-};
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/H5Cprivate.h b/src/H5Cprivate.h
index 5510cc0..0b18814 100644
--- a/src/H5Cprivate.h
+++ b/src/H5Cprivate.h
@@ -354,27 +354,10 @@ typedef struct H5C_t H5C_t;
*
* The typedef for the free ICR callback is as follows:
*
- * typedef herr_t (*N5C_free_icr_func_t)(haddr_t addr,
- * size_t len,
- * void * thing);
+ * typedef herr_t (*N5C_free_icr_func_t)(void * thing);
*
* The parameters of the free ICR callback are as follows:
*
- * addr: Base address in file of the entry being evicted.
- *
- * This parameter is supplied mainly for sanity checking.
- * Sanity checks should be performed when compiled in debug
- * mode, but the parameter may be unused when compiled in
- * production mode.
- *
- * len: Length of the in file image of the entry being evicted
- * in bytes.
- *
- * This parameter is supplied mainly for sanity checking.
- * Sanity checks should be performed when compiled in debug
- * mode, but the parameter may be unused when compiled in
- * production mode.
- *
* thing: Pointer to void containing the address of the in core
* representation of the target metadata cache entry. This
* is the same pointer that would be returned by a protect
@@ -395,59 +378,6 @@ typedef struct H5C_t H5C_t;
* free ICR call would fail if the in core representation has been
* modified since the last serialize of clear callback.
*
- *
- * clear_dirty_bits: Pointer to the clear dirty bits callback.
- *
- * For sanity checking purposes, it will be useful if cache clients
- * track whether an in core representation has been modified since
- * the last time it was serialized. This data is used to flag an
- * error if the cache attempts to free an in core representation
- * that has not been serialized since the last time it was modified.
- *
- * If this happens, either the client forgot to tell the cache that
- * an entry is dirty, or the cache forgot to flush a dirty entry
- * before evicting it. In either case we want to know before we
- * get file corruption complaints.
- *
- * However, in some cases, we want to mark an entry as clean even
- * though it has not been flushed to disk -- most particularly in
- * the parallel case. Thus we need some way to tell the client
- * that a free of the associated ICR is OK even though it has
- * been modified since the last serialization. Hence the clear
- * dirty bits callback.
- *
- * Since the clear dirty bits callback is purely for sanity checking,
- * it is called only when we compile with debug.
- *
- * The typedef for the clear callback is as follows:
- *
- * typedef herr_t (*N5C_clear_dirty_bits_func_t)(haddr_t addr,
- * size_t len,
- * void * thing);
- *
- * The parameters of the clear callback are as follows:
- *
- * addr: Base address in file of the entry whose dirty bits
- * are being cleared
- *
- * len: Length in bytes of the in file image of the entry
- * whose dirty bits are being cleared.
- *
- * thing: Pointer to void containing the address of the in
- * core representation of the target metadata cache entry.
- * This is the same pointer that would be returned by a
- * protect of the addr and len above.
- *
- * Processing in the clear callback function should proceed as follows:
- *
- * The function must clear any dirty bits associated with the ICR.
- *
- * If successful, the function must return SUCCEED.
- *
- * If it fails for any reason, the function must return FAIL and
- * push error information on the error stack with the error API
- * routines.
- *
***************************************************************************/
typedef void *(*H5C_deserialize_func_t)(haddr_t addr,
size_t len,
@@ -472,9 +402,7 @@ typedef herr_t (*H5C_serialize_func_t)(const H5F_t *f,
size_t * new_len_ptr,
void ** new_image_ptr_ptr);
-typedef herr_t (*H5C_free_icr_func_t)(haddr_t addr,
- size_t len,
- void * thing);
+typedef herr_t (*H5C_free_icr_func_t)(void * thing);
typedef herr_t (*H5C_clear_dirty_bits_func_t)(haddr_t addr,
size_t len,
@@ -487,8 +415,7 @@ typedef struct H5C_class_t {
H5C_deserialize_func_t deserialize;
H5C_image_len_func_t image_len;
H5C_serialize_func_t serialize;
- H5C_free_icr_func_t free_icr;
- H5C_clear_dirty_bits_func_t clear_dirty_bits;
+ H5C_free_icr_func_t free_icr;
} H5C_class_t;
diff --git a/src/H5Dchunk.c b/src/H5Dchunk.c
index bb75fff..3e85317 100644
--- a/src/H5Dchunk.c
+++ b/src/H5Dchunk.c
@@ -4411,9 +4411,6 @@ H5D_chunk_stats(const H5D_t *dset, hbool_t headers)
"-----", "----", "------", "--------", "-----", "-------");
}
-#ifdef H5AC1_DEBUG
- if (H5DEBUG(AC1)) headers = TRUE;
-#endif
#ifdef H5AC_DEBUG
if (H5DEBUG(AC)) headers = TRUE;
#endif
diff --git a/src/H5F.c b/src/H5F.c
index 99a4bb3..f70f7ae 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -22,7 +22,6 @@
/* Packages needed by this file... */
#include "H5private.h" /* Generic Functions */
#include "H5Aprivate.h" /* Attributes */
-#include "H5AC1private.h" /* Metadata cache */
#include "H5ACprivate.h" /* Metadata cache */
#include "H5Dprivate.h" /* Datasets */
#include "H5Eprivate.h" /* Error handling */
@@ -937,13 +936,6 @@ H5F_new(H5F_file_t *shared, hid_t fcpl_id, hid_t fapl_id, H5FD_t *lf)
* The cache might be created with a different number of elements and
* the access property list should be updated to reflect that.
*/
- if(SUCCEED != H5AC1_create(f, &(f->shared->mdc_initCacheCfg)))
- HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to create metadata cache1")
-
- /* Create a metadata cache with modified API along side the regular
- * version. For now, this is just for testing. Once we get it
- * fully in use, we will delete the old version.
- */
if(H5AC_create(f, (H5AC_cache_config_t *)&(f->shared->mdc_initCacheCfg)) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to create metadata cache")
@@ -1013,10 +1005,6 @@ H5F_dest(H5F_t *f, hid_t dxpl_id)
* orderly manner with the 'closing' flag set)
*/
if(f->closing) {
-#if H5AC1_DUMP_STATS_ON_CLOSE
- /* Dump debugging info */
- H5AC1_stats(f);
-#endif /* H5AC1_DUMP_STATS_ON_CLOSE */
#if H5AC_DUMP_STATS_ON_CLOSE
/* Dump debugging info */
H5AC_stats(f);
@@ -1055,10 +1043,6 @@ H5F_dest(H5F_t *f, hid_t dxpl_id)
f->shared->root_grp = NULL;
} /* end if */
- if(H5AC1_dest(f, dxpl_id) < 0)
- /* Push error, but keep going*/
- HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "problems closing file")
- /* also destroy the new cache */
if(H5AC_dest(f, dxpl_id) < 0)
/* Push error, but keep going*/
HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "problems closing file")
@@ -1728,7 +1712,6 @@ H5F_flush(H5F_t *f, hid_t dxpl_id, H5F_scope_t scope, unsigned flags)
{
unsigned nerrors = 0; /* Errors from nested flushes */
unsigned i; /* Index variable */
- unsigned int H5AC1_flags; /* translated flags for H5AC1_flush() */
unsigned int H5AC_flags; /* translated flags for H5AC_flush() */
herr_t ret_value; /* Return value */
@@ -1764,11 +1747,6 @@ H5F_flush(H5F_t *f, hid_t dxpl_id, H5F_scope_t scope, unsigned flags)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush dataset cache")
/* flush (and invalidate, if requested) the entire metadata cache */
- H5AC1_flags = 0;
- if((flags & H5F_FLUSH_INVALIDATE) != 0 )
- H5AC1_flags |= H5AC1__FLUSH_INVALIDATE_FLAG;
- if(H5AC1_flush(f, dxpl_id, H5AC1_flags) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush metadata cache1")
H5AC_flags = 0;
if((flags & H5F_FLUSH_INVALIDATE) != 0 )
H5AC_flags |= H5AC__FLUSH_INVALIDATE_FLAG;
@@ -3517,7 +3495,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_mdc_config(hid_t file_id, H5AC1_cache_config_t *config_ptr)
+H5Fget_mdc_config(hid_t file_id, H5AC_cache_config_t *config_ptr)
{
H5F_t *file; /* File object for file ID */
herr_t ret_value = SUCCEED; /* Return value */
@@ -3545,7 +3523,7 @@ done:
*
* Purpose: Sets the current metadata cache automatic resize
* configuration, using the contents of the instance of
- * H5AC1_cache_config_t pointed to by config_ptr.
+ * H5AC_cache_config_t pointed to by config_ptr.
*
* Return: Success: SUCCEED
* Failure: FAIL
@@ -3556,7 +3534,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Fset_mdc_config(hid_t file_id, H5AC1_cache_config_t *config_ptr)
+H5Fset_mdc_config(hid_t file_id, H5AC_cache_config_t *config_ptr)
{
H5F_t *file; /* File object for file ID */
herr_t ret_value = SUCCEED; /* Return value */
@@ -3568,10 +3546,6 @@ H5Fset_mdc_config(hid_t file_id, H5AC1_cache_config_t *config_ptr)
if(NULL == (file = H5I_object_verify(file_id, H5I_FILE)))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file ID")
- /* set the resize configuration */
- if(H5AC1_set_cache_auto_resize_config(file->shared->cache1, config_ptr) < 0)
- HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "H5AC1_set_cache_auto_resize_config() failed.")
-
/* pass the resize configuration to the modified cache as well. */
if(H5AC_set_cache_auto_resize_config(file->shared->cache, (H5AC_cache_config_t *)config_ptr) < 0)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "H5AC_set_cache_auto_resize_config() failed.")
diff --git a/src/H5FScache.c b/src/H5FScache.c
index afce7f1..07df24b 100644
--- a/src/H5FScache.c
+++ b/src/H5FScache.c
@@ -80,14 +80,14 @@ static void *H5FS_cache_hdr_deserialize(haddr_t addr, size_t len,
static herr_t H5FS_cache_hdr_serialize(const H5F_t *f, hid_t dxpl_id,
haddr_t addr, size_t len, void *image, void *thing, unsigned *flags,
haddr_t *new_addr, size_t *new_len, void **new_image);
-static herr_t H5FS_cache_hdr_free_icr(haddr_t addr, size_t len, void *thing);
+static herr_t H5FS_cache_hdr_free_icr(void *thing);
static void *H5FS_cache_sinfo_deserialize(haddr_t addr, size_t len,
const void *image, void *udata, hbool_t *dirty);
static herr_t H5FS_cache_sinfo_serialize(const H5F_t *f, hid_t dxpl_id,
haddr_t addr, size_t len, void *image, void *thing, unsigned *flags,
haddr_t *new_addr, size_t *new_len, void **new_image);
-static herr_t H5FS_cache_sinfo_free_icr(haddr_t addr, size_t len, void *thing);
+static herr_t H5FS_cache_sinfo_free_icr(void *thing);
/*********************/
@@ -100,10 +100,9 @@ const H5AC_class_t H5AC_FSPACE_HDR[1] = {{
"Free space header",
H5FD_MEM_FSPACE_HDR,
H5FS_cache_hdr_deserialize,
- NULL, /* H5FS_cache_hdr_image_len, */
+ NULL,
H5FS_cache_hdr_serialize,
H5FS_cache_hdr_free_icr,
- NULL,
}};
/* H5FS serialized sections inherit cache-like properties from H5AC */
@@ -115,7 +114,6 @@ const H5AC_class_t H5AC_FSPACE_SINFO[1] = {{
NULL,
H5FS_cache_sinfo_serialize,
H5FS_cache_sinfo_free_icr,
- NULL,
}};
@@ -368,7 +366,7 @@ H5FS_cache_hdr_serialize(const H5F_t *f, hid_t UNUSED dxpl_id,
*-------------------------------------------------------------------------
*/
static herr_t
-H5FS_cache_hdr_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
+H5FS_cache_hdr_free_icr(void *thing)
{
herr_t ret_value = SUCCEED; /* Return value */
@@ -755,7 +753,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5FS_cache_sinfo_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
+H5FS_cache_sinfo_free_icr(void *thing)
{
herr_t ret_value = SUCCEED; /* Return value */
diff --git a/src/H5Fpkg.h b/src/H5Fpkg.h
index 58b177e..2f6ff27 100644
--- a/src/H5Fpkg.h
+++ b/src/H5Fpkg.h
@@ -36,7 +36,6 @@
/* Other private headers needed by this file */
#include "H5private.h" /* Generic Functions */
-#include "H5AC1private.h" /* Metadata cache */
#include "H5ACprivate.h" /* Metadata cache */
#include "H5FLprivate.h" /* Free Lists */
#include "H5FOprivate.h" /* File objects */
@@ -109,9 +108,8 @@ typedef struct H5F_file_t {
haddr_t driver_addr; /* File driver information block address*/
haddr_t maxaddr; /* Maximum address for file */
- H5AC1_t *cache1; /* The object cache */
H5AC_t *cache; /* The object cache */
- H5AC1_cache_config_t
+ H5AC_cache_config_t
mdc_initCacheCfg; /* initial configuration for the */
/* metadata cache. This structure is */
/* fixed at creation time and should */
diff --git a/src/H5Fpublic.h b/src/H5Fpublic.h
index 2826036..d98cbc9 100644
--- a/src/H5Fpublic.h
+++ b/src/H5Fpublic.h
@@ -21,9 +21,7 @@
/* Public header files needed by this file */
#include "H5public.h"
-#include "H5AC1public.h"
#include "H5ACpublic.h"
-#include "H5C1public.h"
#include "H5Ipublic.h"
/* When this header is included from a private header, don't make calls to H5check() */
@@ -142,9 +140,9 @@ H5_DLL herr_t H5Fget_jnl_config(hid_t file_id,
H5_DLL herr_t H5Fset_jnl_config(hid_t file_id,
const H5AC_jnl_config_t *config_ptr);
H5_DLL herr_t H5Fget_mdc_config(hid_t file_id,
- H5AC1_cache_config_t * config_ptr);
+ H5AC_cache_config_t * config_ptr);
H5_DLL herr_t H5Fset_mdc_config(hid_t file_id,
- H5AC1_cache_config_t * config_ptr);
+ H5AC_cache_config_t * config_ptr);
H5_DLL herr_t H5Fget_mdc_hit_rate(hid_t file_id, double * hit_rate_ptr);
H5_DLL herr_t H5Fget_mdc_size(hid_t file_id,
size_t * max_size_ptr,
diff --git a/src/H5Gnode.c b/src/H5Gnode.c
index fb6ddd2..82a5608 100644
--- a/src/H5Gnode.c
+++ b/src/H5Gnode.c
@@ -80,7 +80,7 @@ static void *H5G_node_deserialize(haddr_t addr, size_t len, const void *image,
static herr_t H5G_node_serialize(const H5F_t *f, hid_t dxpl_id, haddr_t addr,
size_t len, void *image, void *thing, unsigned *flags, haddr_t *new_addr,
size_t *new_len, void **new_image);
-static herr_t H5G_node_free_icr(haddr_t addr, size_t len, void *thing);
+static herr_t H5G_node_free_icr(void *thing);
/* B-tree callbacks */
static H5RC_t *H5G_node_get_shared(const H5F_t *f, const void *_udata);
@@ -113,7 +113,6 @@ const H5AC_class_t H5AC_SNODE[1] = {{
NULL,
H5G_node_serialize,
H5G_node_free_icr,
- NULL,
}};
/* H5G inherits B-tree like properties from H5B */
@@ -484,7 +483,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5G_node_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
+H5G_node_free_icr(void *thing)
{
herr_t ret_value = SUCCEED; /* Return value */
diff --git a/src/H5HFcache.c b/src/H5HFcache.c
index 8fc5d14..148b717 100644
--- a/src/H5HFcache.c
+++ b/src/H5HFcache.c
@@ -79,25 +79,25 @@ static herr_t H5HF_dtable_decode(H5F_t *f, const uint8_t **pp, H5HF_dtable_t *dt
/* Metadata cache (H5AC) callbacks */
static void *H5HF_cache_hdr_deserialize(haddr_t addr, size_t len,
const void *image, void *udata, hbool_t *dirty);
+static herr_t H5HF_cache_hdr_image_len(const void *thing, size_t *image_len_ptr);
static herr_t H5HF_cache_hdr_serialize(const H5F_t *f, hid_t dxpl_id,
haddr_t addr, size_t len, void *image, void *thing, unsigned *flags,
haddr_t *new_addr, size_t *new_len, void **new_image);
-static herr_t H5HF_cache_hdr_free_icr(haddr_t addr, size_t len, void *thing);
-static herr_t H5HF_cache_hdr_image_len(const void *thing, size_t *image_len_ptr);
+static herr_t H5HF_cache_hdr_free_icr(void *thing);
static void *H5HF_cache_iblock_deserialize(haddr_t addr, size_t len,
const void *image, void *udata, hbool_t *dirty);
static herr_t H5HF_cache_iblock_serialize(const H5F_t * f, hid_t dxpl_id,
haddr_t addr, size_t len, void *image, void *_thing, unsigned *flags,
haddr_t *new_addr, size_t *new_len, void **new_image);
-static herr_t H5HF_cache_iblock_free_icr(haddr_t addr, size_t len, void *thing);
+static herr_t H5HF_cache_iblock_free_icr(void *thing);
static void *H5HF_cache_dblock_deserialize(haddr_t addr, size_t len,
const void *image, void *udata, hbool_t *dirty);
static herr_t H5HF_cache_dblock_serialize(const H5F_t * f, hid_t dxpl_id,
haddr_t addr, size_t len, void *image, void *_thing, unsigned *flags,
haddr_t *new_addr, size_t *new_len, void **new_image);
-static herr_t H5HF_cache_dblock_free_icr(haddr_t addr, size_t len, void *thing);
+static herr_t H5HF_cache_dblock_free_icr(void *thing);
/*********************/
@@ -113,7 +113,6 @@ const H5AC_class_t H5AC_FHEAP_HDR[1] = {{
H5HF_cache_hdr_image_len,
H5HF_cache_hdr_serialize,
H5HF_cache_hdr_free_icr,
- NULL,
}};
/* H5HF indirect block inherits cache-like properties from H5AC */
@@ -125,7 +124,6 @@ const H5AC_class_t H5AC_FHEAP_IBLOCK[1] = {{
NULL,
H5HF_cache_iblock_serialize,
H5HF_cache_iblock_free_icr,
- NULL,
}};
/* H5HF direct block inherits cache-like properties from H5AC */
@@ -137,7 +135,6 @@ const H5AC_class_t H5AC_FHEAP_DBLOCK[1] = {{
NULL,
H5HF_cache_dblock_serialize,
H5HF_cache_dblock_free_icr,
- NULL
}};
@@ -591,7 +588,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5HF_cache_hdr_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
+H5HF_cache_hdr_free_icr(void *thing)
{
herr_t ret_value = SUCCEED; /* Return value */
@@ -933,7 +930,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5HF_cache_iblock_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
+H5HF_cache_iblock_free_icr(void *thing)
{
herr_t ret_value = SUCCEED; /* Return value */
@@ -1397,7 +1394,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5HF_cache_dblock_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
+H5HF_cache_dblock_free_icr(void *thing)
{
herr_t ret_value = SUCCEED; /* Return value */
diff --git a/src/H5HGcache.c b/src/H5HGcache.c
index 090e93c..4afb108 100755
--- a/src/H5HGcache.c
+++ b/src/H5HGcache.c
@@ -68,7 +68,7 @@ static herr_t H5HG_image_len(const void *thing, size_t *image_len_ptr);
static herr_t H5HG_serialize(const H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t len,
void *image, void *thing, unsigned *flags, haddr_t *new_addr,
size_t *new_len, void **new_image);
-static herr_t H5HG_free_icr(haddr_t addr, size_t len, void *thing);
+static herr_t H5HG_free_icr(void *thing);
/*********************/
@@ -86,7 +86,6 @@ const H5AC_class_t H5AC_GHEAP[1] = {{
H5HG_image_len,
H5HG_serialize,
H5HG_free_icr,
- NULL,
}};
@@ -390,7 +389,7 @@ H5HG_image_len(const void *thing, size_t *image_len_ptr)
*-------------------------------------------------------------------------
*/
static herr_t
-H5HG_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
+H5HG_free_icr(void *thing)
{
herr_t ret_value = SUCCEED; /* Return value */
diff --git a/src/H5HLcache.c b/src/H5HLcache.c
index 42f29c9..77e9bc3 100644
--- a/src/H5HLcache.c
+++ b/src/H5HLcache.c
@@ -71,14 +71,14 @@ static herr_t H5HL_prfx_image_len(const void *thing, size_t *image_len_ptr);
static herr_t H5HL_prfx_serialize(const H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t len,
void *image, void *thing, unsigned *flags, haddr_t *new_addr,
size_t *new_len, void **new_image);
-static herr_t H5HL_prfx_free_icr(haddr_t addr, size_t len, void *thing);
+static herr_t H5HL_prfx_free_icr(void *thing);
static void *H5HL_dblk_deserialize(haddr_t addr, size_t len, const void *image,
void *udata, hbool_t *dirty);
static herr_t H5HL_dblk_serialize(const H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t len,
void *image, void *thing, unsigned *flags, haddr_t *new_addr,
size_t *new_len, void **new_image);
-static herr_t H5HL_dblk_free_icr(haddr_t addr, size_t len, void *thing);
+static herr_t H5HL_dblk_free_icr(void *thing);
/*********************/
@@ -96,7 +96,6 @@ const H5AC_class_t H5AC_LHEAP_PRFX[1] = {{
H5HL_prfx_image_len,
H5HL_prfx_serialize,
H5HL_prfx_free_icr,
- NULL,
}};
/*
@@ -110,7 +109,6 @@ const H5AC_class_t H5AC_LHEAP_DBLK[1] = {{
NULL,
H5HL_dblk_serialize,
H5HL_dblk_free_icr,
- NULL,
}};
@@ -474,7 +472,7 @@ H5HL_prfx_serialize(const H5F_t UNUSED *f, hid_t UNUSED dxpl_id, haddr_t UNUSED
*-------------------------------------------------------------------------
*/
static herr_t
-H5HL_prfx_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
+H5HL_prfx_free_icr(void *thing)
{
H5HL_prfx_t *prfx = (H5HL_prfx_t *)thing; /* Local heap prefix to destroy */
herr_t ret_value = SUCCEED; /* Return value */
@@ -616,7 +614,7 @@ H5HL_dblk_serialize(const H5F_t UNUSED *f, hid_t UNUSED dxpl_id, haddr_t UNUSED
*-------------------------------------------------------------------------
*/
static herr_t
-H5HL_dblk_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
+H5HL_dblk_free_icr(void *thing)
{
H5HL_dblk_t *dblk = (H5HL_dblk_t *)thing; /* Local heap data block to destroy */
herr_t ret_value = SUCCEED; /* Return value */
diff --git a/src/H5Oalloc.c b/src/H5Oalloc.c
index 45ed422..a4619df 100644
--- a/src/H5Oalloc.c
+++ b/src/H5Oalloc.c
@@ -604,14 +604,14 @@ H5O_alloc_extend_chunk(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned chunkno,
else if(tri_result < 0) /* error */
HGOTO_ERROR(H5E_RESOURCE, H5E_SYSTEM, FAIL, "can't tell if we can extend chunk")
- /* If we get this far, we should be able to extend the chunk */
- if(H5MF_extend(f, H5FD_MEM_OHDR, oh->chunk[chunkno].addr, (hsize_t)(oh->chunk[chunkno].size), (hsize_t)(delta + extra_prfx_size)) < 0 )
- HGOTO_ERROR(H5E_RESOURCE, H5E_SYSTEM, FAIL, "can't extend chunk")
-
/* Protect chunk */
if(NULL == (chk_proxy = H5O_chunk_protect(f, dxpl_id, oh, chunkno)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTPROTECT, FAIL, "unable to load object header chunk")
+ /* If we get this far, we should be able to extend the chunk */
+ if(H5MF_extend(f, H5FD_MEM_OHDR, oh->chunk[chunkno].addr, (hsize_t)(oh->chunk[chunkno].size), (hsize_t)(delta + extra_prfx_size)) < 0 )
+ HGOTO_ERROR(H5E_RESOURCE, H5E_SYSTEM, FAIL, "can't extend chunk")
+
/* Adjust object header prefix flags */
if(adjust_size_flags) {
oh->flags &= (uint8_t)~H5O_HDR_CHUNK0_SIZE;
diff --git a/src/H5Ocache.c b/src/H5Ocache.c
index 8843557..6dad585 100644
--- a/src/H5Ocache.c
+++ b/src/H5Ocache.c
@@ -66,14 +66,14 @@ static herr_t H5O_cache_image_len(const void *thing, size_t *image_len_ptr);
static herr_t H5O_cache_serialize(const H5F_t *f, hid_t dxpl_id, haddr_t addr,
size_t len, void *image, void *thing, unsigned *flags, haddr_t *new_addr,
size_t *new_len, void **new_image);
-static herr_t H5O_cache_free_icr(haddr_t addr, size_t len, void *thing);
+static herr_t H5O_cache_free_icr(void *thing);
static void *H5O_cache_chk_deserialize(haddr_t addr, size_t len, const void *image,
void *udata, hbool_t *dirty);
static herr_t H5O_cache_chk_serialize(const H5F_t *f, hid_t dxpl_id,
haddr_t addr, size_t len, void *image, void *thing, unsigned *flags,
haddr_t *new_addr, size_t *new_len, void **new_image);
-static herr_t H5O_cache_chk_free_icr(haddr_t addr, size_t len, void *thing);
+static herr_t H5O_cache_chk_free_icr(void *thing);
/* Chunk proxy routines */
static herr_t H5O_chunk_proxy_dest(H5O_chunk_proxy_t *chunk_proxy);
@@ -102,7 +102,6 @@ const H5AC_class_t H5AC_OHDR[1] = {{
H5O_cache_image_len,
H5O_cache_serialize,
H5O_cache_free_icr,
- NULL,
}};
/* H5O object header chunk inherits cache-like properties from H5AC */
@@ -114,7 +113,6 @@ const H5AC_class_t H5AC_OHDR_CHK[1] = {{
NULL,
H5O_cache_chk_serialize,
H5O_cache_chk_free_icr,
- NULL,
}};
/* Declare external the free list for H5O_unknown_t's */
@@ -503,7 +501,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_cache_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
+H5O_cache_free_icr(void *thing)
{
H5O_t *oh = (H5O_t *)thing; /* Object header to destroy */
herr_t ret_value = SUCCEED; /* Return value */
@@ -662,7 +660,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_cache_chk_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
+H5O_cache_chk_free_icr(void *thing)
{
H5O_chunk_proxy_t *chk_proxy = (H5O_chunk_proxy_t *)thing; /* Object header chunk proxy to destroy */
herr_t ret_value = SUCCEED; /* Return value */
diff --git a/src/H5Ochunk.c b/src/H5Ochunk.c
index 68c8b4c..002b0fe 100644
--- a/src/H5Ochunk.c
+++ b/src/H5Ochunk.c
@@ -295,7 +295,7 @@ H5O_chunk_update_idx(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned idx)
chk_proxy->chunkno = idx;
/* Release the chunk proxy from the cache, marking it deleted */
- if(H5AC_unprotect(f, dxpl_id, H5AC_OHDR_CHK, oh->chunk[idx].addr, oh->chunk[idx].size, chk_proxy, H5AC__DIRTIED_FLAG) < 0)
+ if(H5AC_unprotect(f, dxpl_id, H5AC_OHDR_CHK, oh->chunk[idx].addr, (size_t)0, chk_proxy, H5AC__DIRTIED_FLAG) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTUNPROTECT, FAIL, "unable to release object header chunk")
done:
@@ -347,7 +347,7 @@ H5O_chunk_delete(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned idx)
HDassert(chk_proxy->chunkno == idx);
/* Release the chunk proxy from the cache, marking it deleted */
- if(H5AC_unprotect(f, dxpl_id, H5AC_OHDR_CHK, oh->chunk[idx].addr, oh->chunk[idx].size, chk_proxy, (H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG)) < 0)
+ if(H5AC_unprotect(f, dxpl_id, H5AC_OHDR_CHK, oh->chunk[idx].addr, (size_t)0, chk_proxy, (H5AC__DIRTIED_FLAG | H5AC__DELETED_FLAG)) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTUNPROTECT, FAIL, "unable to release object header chunk")
done:
diff --git a/src/H5Pfapl.c b/src/H5Pfapl.c
index fa67a7a..be8a17d 100644
--- a/src/H5Pfapl.c
+++ b/src/H5Pfapl.c
@@ -34,7 +34,6 @@
/* Headers */
/***********/
#include "H5private.h" /* Generic Functions */
-#include "H5AC1private.h" /* Metadata cache */
#include "H5ACprivate.h" /* Metadata cache */
#include "H5Dprivate.h" /* Datasets */
#include "H5Eprivate.h" /* Error handling */
@@ -57,8 +56,8 @@
/* ========= File Access properties ============ */
/* Definitions for the initial metadata cache resize configuration */
-#define H5F_ACS_META_CACHE_INIT_CONFIG_SIZE sizeof(H5AC1_cache_config_t)
-#define H5F_ACS_META_CACHE_INIT_CONFIG_DEF H5AC1__DEFAULT_CACHE_CONFIG
+#define H5F_ACS_META_CACHE_INIT_CONFIG_SIZE sizeof(H5AC_cache_config_t)
+#define H5F_ACS_META_CACHE_INIT_CONFIG_DEF H5AC__DEFAULT_CACHE_CONFIG
#define H5F_ACS_JNL_INIT_CONFIG_SIZE sizeof(H5AC_jnl_config_t)
#define H5F_ACS_JNL_INIT_CONFIG_DEF H5AC__DEFAULT_JNL_CONFIG
/* Definitions for size of raw data chunk cache(elements) */
@@ -190,7 +189,7 @@ const H5P_libclass_t H5P_CLS_FACC[1] = {{
static herr_t
H5P_facc_reg_prop(H5P_genclass_t *pclass)
{
- H5AC1_cache_config_t mdc_initCacheCfg = H5F_ACS_META_CACHE_INIT_CONFIG_DEF; /* Default metadata cache settings */
+ H5AC_cache_config_t mdc_initCacheCfg = H5F_ACS_META_CACHE_INIT_CONFIG_DEF; /* Default metadata cache settings */
H5AC_jnl_config_t initJnlCfg = H5F_ACS_JNL_INIT_CONFIG_DEF; /* Default journaling config settings */
size_t rdcc_nelmts = H5F_ACS_DATA_CACHE_ELMT_SIZE_DEF; /* Default raw data chunk cache # of elements */
size_t rdcc_nbytes = H5F_ACS_DATA_CACHE_BYTE_SIZE_DEF; /* Default raw data chunk cache # of bytes */
@@ -1327,14 +1326,10 @@ done:
* Programmer: J. Mainzer
* Thursday, April 7, 2005
*
- * Modifications:
- *
- * Done.
- *
*-------------------------------------------------------------------------
*/
herr_t
-H5Pset_mdc_config(hid_t plist_id, H5AC1_cache_config_t *config_ptr)
+H5Pset_mdc_config(hid_t plist_id, H5AC_cache_config_t *config_ptr)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* return value */
@@ -1347,12 +1342,12 @@ H5Pset_mdc_config(hid_t plist_id, H5AC1_cache_config_t *config_ptr)
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
/* validate the new configuration */
- if(H5AC1_validate_config(config_ptr) < 0)
+ if(H5AC_validate_config(config_ptr) < 0)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid metadata cache configuration")
/* set the modified config */
- /* If we ever support multiple versions of H5AC1_cache_config_t, we
+ /* If we ever support multiple versions of H5AC_cache_config_t, we
* will have to test the version and do translation here.
*/
@@ -1372,21 +1367,17 @@ done:
*
* Observe that the function will fail if config_ptr is
* NULL, or if config_ptr->version specifies an unknown
- * version of H5AC1_cache_config_t.
+ * version of H5AC_cache_config_t.
*
* Return: Non-negative on success/Negative on failure
*
* Programmer: J. Mainzer
* Thursday, April 7, 2005
*
- * Modifications:
- *
- * None.
- *
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_mdc_config(hid_t plist_id, H5AC1_cache_config_t *config_ptr)
+H5Pget_mdc_config(hid_t plist_id, H5AC_cache_config_t *config_ptr)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* return value */
@@ -1405,7 +1396,7 @@ H5Pget_mdc_config(hid_t plist_id, H5AC1_cache_config_t *config_ptr)
if(!H5AC_validate_cache_config_ver(config_ptr->version))
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Unknown config version.")
- /* If we ever support multiple versions of H5AC1_cache_config_t, we
+ /* If we ever support multiple versions of H5AC_cache_config_t, we
* will have to get the cannonical version here, and then translate
* to the version of the structure supplied.
*/
@@ -1450,7 +1441,7 @@ H5Pset_jnl_config(hid_t plist_id, const H5AC_jnl_config_t *config_ptr)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid journaling configuration")
/* Set the modified config */
- /* (If we ever support multiple versions of H5AC1_jnl_config_t, we
+ /* (If we ever support multiple versions of H5AC_jnl_config_t, we
* will have to test the version and do translation here.)
*/
if(H5P_set(plist, H5F_ACS_JNL_INIT_CONFIG_NAME, config_ptr) < 0)
@@ -1469,7 +1460,7 @@ done:
*
* Observe that the function will fail if config_ptr is
* NULL, or if config_ptr->version specifies an unknown
- * version of H5AC1_jnl_config_t.
+ * version of H5AC_jnl_config_t.
*
* Return: Non-negative on success/Negative on failure
*
@@ -1497,7 +1488,7 @@ H5Pget_jnl_config(hid_t plist_id, H5AC_jnl_config_t *config_ptr)
if(NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_ACCESS)))
HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
- /* If we ever support multiple versions of H5AC1_jnl_config_t, we
+ /* If we ever support multiple versions of H5AC_jnl_config_t, we
* will have to get the cannonical version here, and then translate
* to the version of the structure supplied.
*/
diff --git a/src/H5Ppublic.h b/src/H5Ppublic.h
index ff20a13..646cca4 100644
--- a/src/H5Ppublic.h
+++ b/src/H5Ppublic.h
@@ -25,7 +25,6 @@
/* Public headers needed by this file */
#include "H5public.h"
#include "H5ACpublic.h"
-#include "H5C1public.h"
#include "H5Dpublic.h"
#include "H5Fpublic.h"
#include "H5FDpublic.h"
@@ -253,9 +252,9 @@ H5_DLL herr_t H5Pget_cache(hid_t plist_id,
size_t *rdcc_nelmts/*out*/,
size_t *rdcc_nbytes/*out*/, double *rdcc_w0);
H5_DLL herr_t H5Pset_mdc_config(hid_t plist_id,
- H5AC1_cache_config_t * config_ptr);
+ H5AC_cache_config_t * config_ptr);
H5_DLL herr_t H5Pget_mdc_config(hid_t plist_id,
- H5AC1_cache_config_t * config_ptr); /* out */
+ H5AC_cache_config_t * config_ptr); /* out */
H5_DLL herr_t H5Pset_jnl_config(hid_t plist_id,
const H5AC_jnl_config_t * config_ptr);
H5_DLL herr_t H5Pget_jnl_config(hid_t plist_id,
diff --git a/src/H5SMcache.c b/src/H5SMcache.c
index 5feddc5..e82e353 100644
--- a/src/H5SMcache.c
+++ b/src/H5SMcache.c
@@ -59,14 +59,14 @@ static void *H5SM_table_deserialize(haddr_t addr, size_t len, const void *image,
static herr_t H5SM_table_serialize(const H5F_t * f, hid_t dxpl_id, haddr_t addr,
size_t len, void *image, void *thing, unsigned *flags, haddr_t *new_addr,
size_t *new_len, void **new_image);
-static herr_t H5SM_table_free_icr(haddr_t addr, size_t len, void *thing);
+static herr_t H5SM_table_free_icr(void *thing);
static void *H5SM_list_deserialize(haddr_t addr, size_t len, const void *image,
void *udata, hbool_t *dirty);
static herr_t H5SM_list_serialize(const H5F_t * f, hid_t dxpl_id, haddr_t addr,
size_t len, void *image, void *thing, unsigned *flags, haddr_t *new_addr,
size_t *new_len, void **new_image);
-static herr_t H5SM_list_free_icr(haddr_t addr, size_t len, void *thing);
+static herr_t H5SM_list_free_icr(void *thing);
/*********************/
@@ -81,7 +81,6 @@ const H5AC_class_t H5AC_SOHM_TABLE[1] = {{
NULL,
H5SM_table_serialize,
H5SM_table_free_icr,
- NULL
}};
const H5AC_class_t H5AC_SOHM_LIST[1] = {{
@@ -92,7 +91,6 @@ const H5AC_class_t H5AC_SOHM_LIST[1] = {{
NULL,
H5SM_list_serialize,
H5SM_list_free_icr,
- NULL
}};
@@ -330,7 +328,7 @@ H5SM_table_serialize(const H5F_t * f, hid_t UNUSED dxlp_id, haddr_t UNUSED addr,
*-------------------------------------------------------------------------
*/
static herr_t
-H5SM_table_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
+H5SM_table_free_icr(void *thing)
{
herr_t ret_value = SUCCEED; /* Return value */
@@ -529,7 +527,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5SM_list_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
+H5SM_list_free_icr(void *thing)
{
herr_t ret_value = SUCCEED; /* Return value */
diff --git a/src/H5private.h b/src/H5private.h
index 9f59047..3ba6efd 100644
--- a/src/H5private.h
+++ b/src/H5private.h
@@ -1958,7 +1958,6 @@ H5_DLL void H5_term_library(void);
/* Functions to terminate interfaces */
H5_DLL int H5A_term_interface(void);
-H5_DLL int H5AC1_term_interface(void);
H5_DLL int H5AC_term_interface(void);
H5_DLL int H5D_term_interface(void);
H5_DLL int H5E_term_interface(void);
diff --git a/src/Makefile.am b/src/Makefile.am
index 1e8f936..464ffaa 100755
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -43,9 +43,9 @@ DISTCLEANFILES=H5pubconf.h
# library sources
libhdf5_la_SOURCES= H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
H5A.c H5Abtree2.c H5Adense.c H5Adeprec.c H5Aint.c H5Atest.c \
- H5AC1.c H5AC.c H5B.c H5Bcache.c \
+ H5AC.c H5B.c H5Bcache.c \
H5B2.c H5B2cache.c H5B2dbg.c H5B2int.c H5B2stat.c H5B2test.c \
- H5C1.c H5C.c H5Cjournal.c H5CS.c \
+ H5C.c H5Cjournal.c H5CS.c \
H5D.c H5Dchunk.c H5Dcompact.c H5Dcontig.c H5Ddbg.c \
H5Ddeprec.c H5Defl.c H5Dfill.c H5Dint.c \
H5Dio.c \
@@ -99,8 +99,8 @@ libhdf5_la_SOURCES= H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
# Public headers
include_HEADERS = hdf5.h H5api_adpt.h H5pubconf.h H5public.h H5version.h \
- H5Apublic.h H5AC1public.h H5ACpublic.h \
- H5C1public.h H5Cpublic.h H5Dpublic.h \
+ H5Apublic.h H5ACpublic.h \
+ H5Cpublic.h H5Dpublic.h \
H5Epubgen.h H5Epublic.h H5Fpublic.h H5FDpublic.h H5FDcore.h H5FDdirect.h \
H5FDfamily.h H5FDlog.h H5FDmpi.h H5FDmpio.h H5FDmpiposix.h \
H5FDmulti.h H5FDsec2.h H5FDstdio.h \
diff --git a/src/Makefile.in b/src/Makefile.in
index 85e76b2..d9d7a96 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -97,31 +97,31 @@ LTLIBRARIES = $(lib_LTLIBRARIES)
libhdf5_la_LIBADD =
am_libhdf5_la_OBJECTS = H5.lo H5checksum.lo H5dbg.lo H5system.lo \
H5timer.lo H5trace.lo H5A.lo H5Abtree2.lo H5Adense.lo \
- H5Adeprec.lo H5Aint.lo H5Atest.lo H5AC1.lo H5AC.lo H5B.lo \
- H5Bcache.lo H5B2.lo H5B2cache.lo H5B2dbg.lo H5B2int.lo \
- H5B2stat.lo H5B2test.lo H5C1.lo H5C.lo H5Cjournal.lo H5CS.lo \
- H5D.lo H5Dchunk.lo H5Dcompact.lo H5Dcontig.lo H5Ddbg.lo \
- H5Ddeprec.lo H5Defl.lo H5Dfill.lo H5Dint.lo H5Dio.lo \
- H5Distore.lo H5Dmpio.lo H5Doh.lo H5Dscatgath.lo H5Dselect.lo \
- H5Dtest.lo H5E.lo H5Edeprec.lo H5Eint.lo H5F.lo H5Fdbg.lo \
- H5Ffake.lo H5Fmount.lo H5Fsfile.lo H5Fsuper.lo H5Ftest.lo \
- H5FD.lo H5FDcore.lo H5FDdirect.lo H5FDfamily.lo H5FDlog.lo \
- H5FDmpi.lo H5FDmpio.lo H5FDmpiposix.lo H5FDmulti.lo \
- H5FDsec2.lo H5FDspace.lo H5FDstdio.lo H5FL.lo H5FO.lo H5FS.lo \
- H5FScache.lo H5FSdbg.lo H5FSsection.lo H5G.lo H5Gbtree2.lo \
- H5Gcompact.lo H5Gdense.lo H5Gdeprec.lo H5Gent.lo H5Gint.lo \
- H5Glink.lo H5Gloc.lo H5Gname.lo H5Gnode.lo H5Gobj.lo H5Goh.lo \
- H5Gstab.lo H5Gtest.lo H5Gtraverse.lo H5HF.lo H5HFbtree2.lo \
- H5HFcache.lo H5HFdbg.lo H5HFdblock.lo H5HFdtable.lo H5HFhdr.lo \
- H5HFhuge.lo H5HFiblock.lo H5HFiter.lo H5HFman.lo \
- H5HFsection.lo H5HFspace.lo H5HFstat.lo H5HFtest.lo \
- H5HFtiny.lo H5HG.lo H5HGcache.lo H5HGdbg.lo H5HL.lo \
- H5HLcache.lo H5HLdbg.lo H5HLint.lo H5HP.lo H5I.lo H5L.lo \
- H5Lexternal.lo H5MF.lo H5MM.lo H5MP.lo H5MPtest.lo H5O.lo \
- H5Oainfo.lo H5Oalloc.lo H5Oattr.lo H5Oattribute.lo H5Obogus.lo \
- H5Obtreek.lo H5Ocache.lo H5Ochunk.lo H5Ocont.lo H5Ocopy.lo \
- H5Odbg.lo H5Odrvinfo.lo H5Odtype.lo H5Oefl.lo H5Ofill.lo \
- H5Oginfo.lo H5Olayout.lo H5Olinfo.lo H5Olink.lo H5Omdj_msg.lo \
+ H5Adeprec.lo H5Aint.lo H5Atest.lo H5AC.lo H5B.lo H5Bcache.lo \
+ H5B2.lo H5B2cache.lo H5B2dbg.lo H5B2int.lo H5B2stat.lo \
+ H5B2test.lo H5C.lo H5Cjournal.lo H5CS.lo H5D.lo H5Dchunk.lo \
+ H5Dcompact.lo H5Dcontig.lo H5Ddbg.lo H5Ddeprec.lo H5Defl.lo \
+ H5Dfill.lo H5Dint.lo H5Dio.lo H5Distore.lo H5Dmpio.lo H5Doh.lo \
+ H5Dscatgath.lo H5Dselect.lo H5Dtest.lo H5E.lo H5Edeprec.lo \
+ H5Eint.lo H5F.lo H5Fdbg.lo H5Ffake.lo H5Fmount.lo H5Fsfile.lo \
+ H5Fsuper.lo H5Ftest.lo H5FD.lo H5FDcore.lo H5FDdirect.lo \
+ H5FDfamily.lo H5FDlog.lo H5FDmpi.lo H5FDmpio.lo \
+ H5FDmpiposix.lo H5FDmulti.lo H5FDsec2.lo H5FDspace.lo \
+ H5FDstdio.lo H5FL.lo H5FO.lo H5FS.lo H5FScache.lo H5FSdbg.lo \
+ H5FSsection.lo H5G.lo H5Gbtree2.lo H5Gcompact.lo H5Gdense.lo \
+ H5Gdeprec.lo H5Gent.lo H5Gint.lo H5Glink.lo H5Gloc.lo \
+ H5Gname.lo H5Gnode.lo H5Gobj.lo H5Goh.lo H5Gstab.lo H5Gtest.lo \
+ H5Gtraverse.lo H5HF.lo H5HFbtree2.lo H5HFcache.lo H5HFdbg.lo \
+ H5HFdblock.lo H5HFdtable.lo H5HFhdr.lo H5HFhuge.lo \
+ H5HFiblock.lo H5HFiter.lo H5HFman.lo H5HFsection.lo \
+ H5HFspace.lo H5HFstat.lo H5HFtest.lo H5HFtiny.lo H5HG.lo \
+ H5HGcache.lo H5HGdbg.lo H5HL.lo H5HLcache.lo H5HLdbg.lo \
+ H5HLint.lo H5HP.lo H5I.lo H5L.lo H5Lexternal.lo H5MF.lo \
+ H5MM.lo H5MP.lo H5MPtest.lo H5O.lo H5Oainfo.lo H5Oalloc.lo \
+ H5Oattr.lo H5Oattribute.lo H5Obogus.lo H5Obtreek.lo \
+ H5Ocache.lo H5Ochunk.lo H5Ocont.lo H5Ocopy.lo H5Odbg.lo \
+ H5Odrvinfo.lo H5Odtype.lo H5Oefl.lo H5Ofill.lo H5Oginfo.lo \
+ H5Olayout.lo H5Olinfo.lo H5Olink.lo H5Omdj_msg.lo \
H5Omessage.lo H5Omtime.lo H5Oname.lo H5Onull.lo H5Opline.lo \
H5Orefcount.lo H5Osdspace.lo H5Oshared.lo H5Ostab.lo \
H5Oshmesg.lo H5Otest.lo H5Ounknown.lo H5P.lo H5Pacpl.lo \
@@ -447,9 +447,9 @@ DISTCLEANFILES = H5pubconf.h
# library sources
libhdf5_la_SOURCES = H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
H5A.c H5Abtree2.c H5Adense.c H5Adeprec.c H5Aint.c H5Atest.c \
- H5AC1.c H5AC.c H5B.c H5Bcache.c \
+ H5AC.c H5B.c H5Bcache.c \
H5B2.c H5B2cache.c H5B2dbg.c H5B2int.c H5B2stat.c H5B2test.c \
- H5C1.c H5C.c H5Cjournal.c H5CS.c \
+ H5C.c H5Cjournal.c H5CS.c \
H5D.c H5Dchunk.c H5Dcompact.c H5Dcontig.c H5Ddbg.c \
H5Ddeprec.c H5Defl.c H5Dfill.c H5Dint.c \
H5Dio.c \
@@ -503,8 +503,8 @@ libhdf5_la_SOURCES = H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
# Public headers
include_HEADERS = hdf5.h H5api_adpt.h H5pubconf.h H5public.h H5version.h \
- H5Apublic.h H5AC1public.h H5ACpublic.h \
- H5C1public.h H5Cpublic.h H5Dpublic.h \
+ H5Apublic.h H5ACpublic.h \
+ H5Cpublic.h H5Dpublic.h \
H5Epubgen.h H5Epublic.h H5Fpublic.h H5FDpublic.h H5FDcore.h H5FDdirect.h \
H5FDfamily.h H5FDlog.h H5FDmpi.h H5FDmpio.h H5FDmpiposix.h \
H5FDmulti.h H5FDsec2.h H5FDstdio.h \
@@ -641,7 +641,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5A.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5AC.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5AC1.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Abtree2.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Adense.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Adeprec.Plo@am__quote@
@@ -656,7 +655,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5B2test.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Bcache.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5C.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5C1.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5CS.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5Cjournal.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5D.Plo@am__quote@
diff --git a/src/hdf5.h b/src/hdf5.h
index ed1bc20..ef15063 100644
--- a/src/hdf5.h
+++ b/src/hdf5.h
@@ -23,7 +23,6 @@
#include "H5public.h"
#include "H5Apublic.h" /* Attributes */
-#include "H5AC1public.h" /* Metadata cache */
#include "H5ACpublic.h" /* Metadata cache */
#include "H5Dpublic.h" /* Datasets */
#include "H5Epublic.h" /* Errors */
diff --git a/test/Makefile.am b/test/Makefile.am
index f827abd..77d0fd0 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -37,7 +37,7 @@ SCRIPT_DEPEND = error_test$(EXEEXT) err_compat$(EXEEXT) \
# These tests (fheap, btree2) are under development and are not used by
# the library yet. Move them to the end so that their failure do not block
# other current library code tests.
-TEST_PROG=testhdf5 lheap ohdr stab gheap cache1 cache1_api cache cache_api \
+TEST_PROG=testhdf5 lheap ohdr stab gheap cache cache_api \
cache_journal pool hyperslab istore bittests dt_arith \
dtypes dsets cmpd_dset extend external objcopy links unlink big mtime \
fillval mount flush1 flush2 enum \
@@ -71,7 +71,7 @@ endif
# The libh5test library provides common support code for the tests.
noinst_LTLIBRARIES=libh5test.la
-libh5test_la_SOURCES=h5test.c testframe.c cache1_common.c cache_common.c
+libh5test_la_SOURCES=h5test.c testframe.c cache_common.c
# Use libhd5test.la to compile all of the tests
LDADD=libh5test.la $(LIBHDF5)
diff --git a/test/Makefile.in b/test/Makefile.in
index aadd78c..f6a3740 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -71,12 +71,10 @@ CONFIG_CLEAN_FILES = testerror.sh
CONFIG_CLEAN_VPATH_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
libh5test_la_LIBADD =
-am_libh5test_la_OBJECTS = h5test.lo testframe.lo cache1_common.lo \
- cache_common.lo
+am_libh5test_la_OBJECTS = h5test.lo testframe.lo cache_common.lo
libh5test_la_OBJECTS = $(am_libh5test_la_OBJECTS)
am__EXEEXT_1 = testhdf5$(EXEEXT) lheap$(EXEEXT) ohdr$(EXEEXT) \
- stab$(EXEEXT) gheap$(EXEEXT) cache1$(EXEEXT) \
- cache1_api$(EXEEXT) cache$(EXEEXT) cache_api$(EXEEXT) \
+ stab$(EXEEXT) gheap$(EXEEXT) cache$(EXEEXT) cache_api$(EXEEXT) \
cache_journal$(EXEEXT) pool$(EXEEXT) hyperslab$(EXEEXT) \
istore$(EXEEXT) bittests$(EXEEXT) dt_arith$(EXEEXT) \
dtypes$(EXEEXT) dsets$(EXEEXT) cmpd_dset$(EXEEXT) \
@@ -111,14 +109,6 @@ cache_SOURCES = cache.c
cache_OBJECTS = cache.$(OBJEXT)
cache_LDADD = $(LDADD)
cache_DEPENDENCIES = libh5test.la $(LIBHDF5)
-cache1_SOURCES = cache1.c
-cache1_OBJECTS = cache1.$(OBJEXT)
-cache1_LDADD = $(LDADD)
-cache1_DEPENDENCIES = libh5test.la $(LIBHDF5)
-cache1_api_SOURCES = cache1_api.c
-cache1_api_OBJECTS = cache1_api.$(OBJEXT)
-cache1_api_LDADD = $(LDADD)
-cache1_api_DEPENDENCIES = libh5test.la $(LIBHDF5)
cache_api_SOURCES = cache_api.c
cache_api_OBJECTS = cache_api.$(OBJEXT)
cache_api_LDADD = $(LDADD)
@@ -355,11 +345,11 @@ LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
SOURCES = $(libh5test_la_SOURCES) big.c bittests.c btree2.c cache.c \
- cache1.c cache1_api.c cache_api.c cache_jnl_file_marking.c \
- cache_journal.c cmpd_dset.c cross_read.c dangle.c dsets.c \
- dt_arith.c dtransform.c dtypes.c enum.c err_compat.c \
- error_test.c extend.c external.c fheap.c fillval.c flush1.c \
- flush2.c gen_bad_ohdr.c gen_bogus.c gen_cross.c gen_deflate.c \
+ cache_api.c cache_jnl_file_marking.c cache_journal.c \
+ cmpd_dset.c cross_read.c dangle.c dsets.c dt_arith.c \
+ dtransform.c dtypes.c enum.c err_compat.c error_test.c \
+ extend.c external.c fheap.c fillval.c flush1.c flush2.c \
+ gen_bad_ohdr.c gen_bogus.c gen_cross.c gen_deflate.c \
gen_filters.c gen_new_array.c gen_new_fill.c gen_new_group.c \
gen_new_mtime.c gen_new_super.c gen_noencoder.c \
gen_nullspace.c gen_udlinks.c getname.c gheap.c hyperslab.c \
@@ -368,18 +358,18 @@ SOURCES = $(libh5test_la_SOURCES) big.c bittests.c btree2.c cache.c \
$(testhdf5_SOURCES) testmeta.c $(ttsafe_SOURCES) unlink.c \
vfd.c
DIST_SOURCES = $(libh5test_la_SOURCES) big.c bittests.c btree2.c \
- cache.c cache1.c cache1_api.c cache_api.c \
- cache_jnl_file_marking.c cache_journal.c cmpd_dset.c \
- cross_read.c dangle.c dsets.c dt_arith.c dtransform.c dtypes.c \
- enum.c err_compat.c error_test.c extend.c external.c fheap.c \
- fillval.c flush1.c flush2.c gen_bad_ohdr.c gen_bogus.c \
- gen_cross.c gen_deflate.c gen_filters.c gen_new_array.c \
- gen_new_fill.c gen_new_group.c gen_new_mtime.c gen_new_super.c \
- gen_noencoder.c gen_nullspace.c gen_udlinks.c getname.c \
- gheap.c hyperslab.c istore.c lheap.c links.c mount.c mtime.c \
- ntypes.c objcopy.c ohdr.c pool.c reserved.c set_extent.c \
- space_overflow.c stab.c $(testhdf5_SOURCES) testmeta.c \
- $(ttsafe_SOURCES) unlink.c vfd.c
+ cache.c cache_api.c cache_jnl_file_marking.c cache_journal.c \
+ cmpd_dset.c cross_read.c dangle.c dsets.c dt_arith.c \
+ dtransform.c dtypes.c enum.c err_compat.c error_test.c \
+ extend.c external.c fheap.c fillval.c flush1.c flush2.c \
+ gen_bad_ohdr.c gen_bogus.c gen_cross.c gen_deflate.c \
+ gen_filters.c gen_new_array.c gen_new_fill.c gen_new_group.c \
+ gen_new_mtime.c gen_new_super.c gen_noencoder.c \
+ gen_nullspace.c gen_udlinks.c getname.c gheap.c hyperslab.c \
+ istore.c lheap.c links.c mount.c mtime.c ntypes.c objcopy.c \
+ ohdr.c pool.c reserved.c set_extent.c space_overflow.c stab.c \
+ $(testhdf5_SOURCES) testmeta.c $(ttsafe_SOURCES) unlink.c \
+ vfd.c
ETAGS = etags
CTAGS = ctags
am__tty_colors = \
@@ -679,7 +669,7 @@ SCRIPT_DEPEND = error_test$(EXEEXT) err_compat$(EXEEXT) \
# These tests (fheap, btree2) are under development and are not used by
# the library yet. Move them to the end so that their failure do not block
# other current library code tests.
-TEST_PROG = testhdf5 lheap ohdr stab gheap cache1 cache1_api cache cache_api \
+TEST_PROG = testhdf5 lheap ohdr stab gheap cache cache_api \
cache_journal pool hyperslab istore bittests dt_arith \
dtypes dsets cmpd_dset extend external objcopy links unlink big mtime \
fillval mount flush1 flush2 enum \
@@ -702,7 +692,7 @@ BUILD_ALL_PROGS = gen_bad_ohdr gen_bogus gen_cross gen_deflate gen_filters gen_n
# The libh5test library provides common support code for the tests.
noinst_LTLIBRARIES = libh5test.la
-libh5test_la_SOURCES = h5test.c testframe.c cache1_common.c cache_common.c
+libh5test_la_SOURCES = h5test.c testframe.c cache_common.c
# Use libhd5test.la to compile all of the tests
LDADD = libh5test.la $(LIBHDF5)
@@ -816,12 +806,6 @@ btree2$(EXEEXT): $(btree2_OBJECTS) $(btree2_DEPENDENCIES)
cache$(EXEEXT): $(cache_OBJECTS) $(cache_DEPENDENCIES)
@rm -f cache$(EXEEXT)
$(LINK) $(cache_OBJECTS) $(cache_LDADD) $(LIBS)
-cache1$(EXEEXT): $(cache1_OBJECTS) $(cache1_DEPENDENCIES)
- @rm -f cache1$(EXEEXT)
- $(LINK) $(cache1_OBJECTS) $(cache1_LDADD) $(LIBS)
-cache1_api$(EXEEXT): $(cache1_api_OBJECTS) $(cache1_api_DEPENDENCIES)
- @rm -f cache1_api$(EXEEXT)
- $(LINK) $(cache1_api_OBJECTS) $(cache1_api_LDADD) $(LIBS)
cache_api$(EXEEXT): $(cache_api_OBJECTS) $(cache_api_DEPENDENCIES)
@rm -f cache_api$(EXEEXT)
$(LINK) $(cache_api_OBJECTS) $(cache_api_LDADD) $(LIBS)
@@ -992,9 +976,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bittests.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btree2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cache.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cache1.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cache1_api.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cache1_common.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cache_api.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cache_common.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cache_jnl_file_marking.Po@am__quote@
diff --git a/test/cache1.c b/test/cache1.c
deleted file mode 100644
index 0422525..0000000
--- a/test/cache1.c
+++ /dev/null
@@ -1,28237 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* Programmer: John Mainzer
- * 6/9/04
- *
- * This file contains tests for the cache implemented in
- * H5C.c
- */
-#include "h5test.h"
-#include "H5Iprivate.h"
-#include "H5AC1private.h"
-#include "cache1_common.h"
-
-/* private function declarations: */
-
-static void smoke_check_1(void);
-static void smoke_check_2(void);
-static void smoke_check_3(void);
-static void smoke_check_4(void);
-static void smoke_check_5(void);
-static void smoke_check_6(void);
-static void smoke_check_7(void);
-static void smoke_check_8(void);
-static void smoke_check_9(void);
-static void smoke_check_10(void);
-static void write_permitted1_check(void);
-static void check_insert_entry1(void);
-static void check_flush_cache1(void);
-static void check_flush_cache1__empty_cache(H5C1_t * cache_ptr);
-static void check_flush_cache1__multi_entry(H5C1_t * cache_ptr);
-static void check_flush_cache1__multi_entry_test(H5C1_t * cache_ptr,
- int test_num,
- unsigned int flush_flags,
- int spec_size,
- struct flush_cache_test_spec spec[]);
-static void check_flush_cache1__pe_multi_entry_test(H5C1_t * cache_ptr,
- int test_num,
- unsigned int flush_flags,
- int spec_size,
- struct pe_flush_cache_test_spec spec[]);
-static void check_flush_cache1__single_entry(H5C1_t * cache_ptr);
-static void check_flush_cache1__single_entry_test(H5C1_t * cache_ptr,
- int test_num,
- int entry_type,
- int entry_idx,
- hbool_t insert_flag,
- hbool_t dirty_flag,
- unsigned int flags,
- unsigned int flush_flags,
- hbool_t expected_loaded,
- hbool_t expected_cleared,
- hbool_t expected_flushed,
- hbool_t expected_destroyed);
-static void check_flush_cache1__pinned_single_entry_test(H5C1_t * cache_ptr,
- int test_num,
- int entry_type,
- int entry_idx,
- hbool_t dirty_flag,
- hbool_t mark_dirty,
- hbool_t pop_mark_dirty_prot,
- hbool_t pop_mark_dirty_pinned,
- hbool_t unprotect_unpin,
- unsigned int flags,
- unsigned int flush_flags,
- hbool_t expected_cleared,
- hbool_t expected_flushed,
- hbool_t expected_destroyed);
-static void check_flush_cache1__flush_ops(H5C1_t * cache_ptr);
-static void check_flush_cache1__flush_op_test(H5C1_t * cache_ptr,
- int test_num,
- unsigned int flush_flags,
- int spec_size,
- struct fo_flush_cache_test_spec spec[],
- int init_expected_index_len,
- size_t init_expected_index_size,
- int expected_index_len,
- size_t expected_index_size,
- int check_size,
- struct fo_flush_entry_check check[]);
-static void check_flush_cache1__flush_op_eviction_test(H5C1_t * cache_ptr);
-static void check_flush_protected_err(void);
-static void check_get_entry_status(void);
-static void check_expunge_entry1(void);
-static void check_multiple_read_protect(void);
-static void check_rename_entry1(void);
-static void check_rename_entry1__run_test(H5C1_t * cache_ptr, int test_num,
- struct rename_entry_test_spec * spec_ptr);
-static void check_pin_protected_entry1(void);
-static void check_resize_entry1(void);
-static void check_evictions_enabled(void);
-static void check_destroy_pinned_err(void);
-static void check_destroy_protected_err(void);
-static void check_duplicate_insert_err(void);
-static void check_rename_err(void);
-static void check_double_pin_err(void);
-static void check_double_unpin_err(void);
-static void check_pin_entry_errs(void);
-static void check_double_protect_err(void);
-static void check_double_unprotect_err(void);
-static void check_mark_entry_dirty_errs(void);
-static void check_expunge_entry1_errs(void);
-static void check_resize_entry1_errs(void);
-static void check_unprotect_ro_dirty_err(void);
-static void check_protect_ro_rw_err(void);
-static void check_check_evictions_enabled_err(void);
-static void check_auto_cache_resize(void);
-static void check_auto_cache_resize_disable(void);
-static void check_auto_cache_resize_epoch_markers(void);
-static void check_auto_cache_resize_input_errs(void);
-static void check_auto_cache_resize_aux_fcns(void);
-
-
-/**************************************************************************/
-/**************************************************************************/
-/********************************* tests: *********************************/
-/**************************************************************************/
-/**************************************************************************/
-
-/*-------------------------------------------------------------------------
- * Function: smoke_check_1()
- *
- * Purpose: A basic functional test, inserts, destroys, and renames in
- * the mix, along with repeated protects and unprotects.
- * All entries are marked as clean.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/16/04
- *
- * Modifications:
- *
- * JRM -- 1/18/05
- * Added code to skip this test if the skip_long_tests1 global
- * is true.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-smoke_check_1(void)
-{
- const char * fcn_name = "smoke_check_1";
- hbool_t show_progress = FALSE;
- hbool_t dirty_inserts = FALSE;
- int dirty_unprotects = FALSE;
- int dirty_destroys = FALSE;
- hbool_t display_stats = FALSE;
- int32_t lag = 10;
- int mile_stone = 1;
- H5C1_t * cache_ptr = NULL;
-
- TESTING("smoke check #1 -- all clean, ins, dest, ren, 4/2 MB cache");
-
- if ( skip_long_tests1 ) {
-
- SKIPPED();
-
- HDfprintf(stdout, " Long tests disabled.\n");
-
- return;
- }
-
- pass1 = TRUE;
-
- if ( show_progress ) /* 1 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- reset_entries1();
-
- if ( show_progress ) /* 2 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- cache_ptr = setup_cache1((size_t)(4 * 1024 * 1024),
- (size_t)(2 * 1024 * 1024));
-
- if ( show_progress ) /* 3 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ FALSE,
- /* do_destroys */ TRUE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 4 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ FALSE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ TRUE,
- /* do_destroys */ FALSE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 5 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ FALSE,
- /* do_destroys */ FALSE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 6 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush and destroy all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ TRUE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 7 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- col_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 8 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ FALSE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 9 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- col_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 10 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- takedown_cache1(cache_ptr, display_stats, TRUE);
-
- if ( show_progress ) /* 11 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- verify_clean1();
- verify_unprotected1();
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* smoke_check_1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: smoke_check_2()
- *
- * Purpose: A basic functional test, with inserts, destroys, and
- * renames in the mix, along with some repeated protects
- * and unprotects. About half the entries are marked as
- * dirty.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/24/04
- *
- * Modifications:
- *
- * JRM -- 1/18/05
- * Added code to skip this test if the skip_long_tests1 global
- * is true.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-smoke_check_2(void)
-{
- const char * fcn_name = "smoke_check_2";
- hbool_t show_progress = FALSE;
- hbool_t dirty_inserts = TRUE;
- int dirty_unprotects = TRUE;
- int dirty_destroys = TRUE;
- hbool_t display_stats = FALSE;
- int32_t lag = 10;
- int mile_stone = 1;
- H5C1_t * cache_ptr = NULL;
-
- TESTING("smoke check #2 -- ~1/2 dirty, ins, dest, ren, 4/2 MB cache");
-
- if ( skip_long_tests1 ) {
-
- SKIPPED();
-
- HDfprintf(stdout, " Long tests disabled.\n");
-
- return;
- }
-
- pass1 = TRUE;
-
- if ( show_progress ) /* 1 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- reset_entries1();
-
- if ( show_progress ) /* 2 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- cache_ptr = setup_cache1((size_t)(4 * 1024 * 1024),
- (size_t)(2 * 1024 * 1024));
-
- if ( show_progress ) /* 3 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ FALSE,
- /* do_destroys */ TRUE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 4 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ FALSE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ TRUE,
- /* do_destroys */ FALSE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 5 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ FALSE,
- /* do_destroys */ FALSE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 6 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush and destroy all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ TRUE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 7 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- col_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 8 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ FALSE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 9 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- col_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 10 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- takedown_cache1(cache_ptr, display_stats, TRUE);
-
- if ( show_progress ) /* 11 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- verify_clean1();
- verify_unprotected1();
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* smoke_check_2() */
-
-
-/*-------------------------------------------------------------------------
- * Function: smoke_check_3()
- *
- * Purpose: A basic functional test on a tiny cache, with inserts,
- * destroys, and renames in the mix, along with repeated
- * protects and unprotects. All entries are marked as clean.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/16/04
- *
- * Modifications:
- *
- * JRM -- 1/18/05
- * Added code to skip this test if the skip_long_tests1 global
- * is true.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-smoke_check_3(void)
-{
- const char * fcn_name = "smoke_check_3";
- hbool_t show_progress = FALSE;
- hbool_t dirty_inserts = FALSE;
- int dirty_unprotects = FALSE;
- int dirty_destroys = FALSE;
- hbool_t display_stats = FALSE;
- int32_t lag = 10;
- int mile_stone = 1;
- H5C1_t * cache_ptr = NULL;
-
- TESTING("smoke check #3 -- all clean, ins, dest, ren, 2/1 KB cache");
-
- if ( skip_long_tests1 ) {
-
- SKIPPED();
-
- HDfprintf(stdout, " Long tests disabled.\n");
-
- return;
- }
-
- pass1 = TRUE;
-
- if ( show_progress ) /* 1 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- reset_entries1();
-
- if ( show_progress ) /* 2 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- if ( show_progress ) /* 3 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ FALSE,
- /* do_destroys */ TRUE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 4 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ FALSE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ TRUE,
- /* do_destroys */ FALSE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 5 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ FALSE,
- /* do_destroys */ FALSE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 6 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush and destroy all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ TRUE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 7 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- col_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 8 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ FALSE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 9 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- col_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 10 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- takedown_cache1(cache_ptr, display_stats, TRUE);
-
- if ( show_progress ) /* 11 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- verify_clean1();
- verify_unprotected1();
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* smoke_check_3() */
-
-
-/*-------------------------------------------------------------------------
- * Function: smoke_check_4()
- *
- * Purpose: A basic functional test on a tiny cache, with inserts,
- * destroys, and renames in the mix, along with repeated
- * protects and unprotects. About half the entries are
- * marked as dirty.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/24/04
- *
- * Modifications:
- *
- * JRM -- 1/18/05
- * Added code to skip this test if the skip_long_tests1 global
- * is true.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-smoke_check_4(void)
-{
- const char * fcn_name = "smoke_check_4";
- hbool_t show_progress = FALSE;
- hbool_t dirty_inserts = TRUE;
- int dirty_unprotects = TRUE;
- int dirty_destroys = TRUE;
- hbool_t display_stats = FALSE;
- int32_t lag = 10;
- int mile_stone = 1;
- H5C1_t * cache_ptr = NULL;
-
- TESTING("smoke check #4 -- ~1/2 dirty, ins, dest, ren, 2/1 KB cache");
-
- if ( skip_long_tests1 ) {
-
- SKIPPED();
-
- HDfprintf(stdout, " Long tests disabled.\n");
-
- return;
- }
-
- pass1 = TRUE;
-
- if ( show_progress ) /* 1 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- reset_entries1();
-
- if ( show_progress ) /* 2 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- if ( show_progress ) /* 3 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ FALSE,
- /* do_destroys */ TRUE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 4 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ FALSE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ TRUE,
- /* do_destroys */ FALSE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 5 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ FALSE,
- /* do_destroys */ FALSE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 6 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush and destroy all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ TRUE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 7 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- col_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 8 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ FALSE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 9 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- col_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 10 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- takedown_cache1(cache_ptr, display_stats, TRUE);
-
- if ( show_progress ) /* 11 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- verify_clean1();
- verify_unprotected1();
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* smoke_check_4() */
-
-
-/*-------------------------------------------------------------------------
- * Function: smoke_check_5()
- *
- * Purpose: A basic functional test on a cache with automatic cache
- * resizing enabled, with inserts in the mix, along with
- * repeated protects and unprotects. All entries are marked
- * as clean.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 10/14/04
- *
- * Modifications:
- *
- * JRM -- 1/18/05
- * Added code to skip this test if the skip_long_tests1 global
- * is true.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-smoke_check_5(void)
-{
- const char * fcn_name = "smoke_check_5";
- herr_t result;
- hbool_t show_progress = FALSE;
- hbool_t dirty_inserts = FALSE;
- int dirty_unprotects = FALSE;
- hbool_t display_stats = FALSE;
- int32_t max_index = 1024;
- int mile_stone = 1;
- H5C1_t * cache_ptr = NULL;
- H5C1_auto_size_ctl_t auto_size_ctl =
- {
- /* int32_t version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
-#if 1
- /* H5C1_auto_resize_report_fcn rpt_fcn = */ NULL,
-#else
- /* H5C1_auto_resize_report_fcn rpt_fcn = */ H5C1_def_auto_resize_rpt_fcn,
-#endif
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (2 * 1024 * 1024),
-
- /* double min_clean_fraction = */ 0.1,
-
- /* size_t max_size = */ (32 * 1024 * 1025),
- /* size_t min_size = */ (512 * 1024),
-
- /* int64_t epoch_length = */ 50000,
-
-
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
-
- /* double lower_hr_threshold = */ 0.75,
-
- /* double increment = */ 2.0,
-
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
-
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
-
-
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__threshold,
-
- /* double upper_hr_threshold = */ 0.995,
-
- /* double decrement = */ 0.9,
-
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
-
- /* int32_t epochs_before_eviction = */ 3,
-
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.5
- };
-
- TESTING("smoke check #5 -- all clean, ins, prot, unprot, AR cache 1");
-
- if ( skip_long_tests1 ) {
-
- SKIPPED();
-
- HDfprintf(stdout, " Long tests disabled.\n");
-
- return;
- }
-
- if ( run_full_test1 ) {
-
- max_index = (10 * 1024) - 1;
- }
-
- pass1 = TRUE;
-
- if ( show_progress ) /* 1 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- reset_entries1();
-
- if ( show_progress ) /* 2 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- if ( pass1 ) {
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 1.\n";
- }
- }
-
- if ( show_progress ) /* 3 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ FALSE,
- /* dirty_inserts */ dirty_inserts);
-
- if ( show_progress ) /* 4 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_row_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ FALSE,
- /* dirty_inserts */ dirty_inserts);
-
- if ( show_progress ) /* 5 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts);
-
- if ( show_progress ) /* 6 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush and destroy all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ TRUE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 7 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_col_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 8 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ FALSE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 9 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_col_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 10 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- takedown_cache1(cache_ptr, display_stats, TRUE);
-
- if ( show_progress ) /* 11 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- verify_clean1();
- verify_unprotected1();
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* smoke_check_5() */
-
-
-/*-------------------------------------------------------------------------
- * Function: smoke_check_6()
- *
- * Purpose: A basic functional test on a cache with automatic cache
- * resizing enabled, with inserts in the mix, along with
- * repeated protects and unprotects. About one half of all
- * entries are marked as dirty.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 10/25/04
- *
- * Modifications:
- *
- * JRM -- 1/18/05
- * Added code to skip this test if the skip_long_tests1 global
- * is true.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-smoke_check_6(void)
-{
- const char * fcn_name = "smoke_check_6";
- herr_t result;
- hbool_t show_progress = FALSE;
- hbool_t dirty_inserts = TRUE;
- int dirty_unprotects = FALSE;
- hbool_t display_stats = FALSE;
- int mile_stone = 1;
- int32_t max_index = 1024;
- H5C1_t * cache_ptr = NULL;
- H5C1_auto_size_ctl_t auto_size_ctl =
- {
- /* int32_t version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
-#if 1
- /* H5C1_auto_resize_report_fcn rpt_fcn = */ NULL,
-#else
- /* H5C1_auto_resize_report_fcn rpt_fcn = */ H5C1_def_auto_resize_rpt_fcn,
-#endif
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (2 * 1024 * 1024),
-
- /* double min_clean_fraction = */ 0.1,
-
- /* size_t max_size = */ (32 * 1024 * 1025),
- /* size_t min_size = */ (512 * 1024),
-
- /* int64_t epoch_length = */ 50000,
-
-
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
-
- /* double lower_hr_threshold = */ 0.75,
-
- /* double increment = */ 2.0,
-
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
-
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
-
-
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__threshold,
-
- /* double upper_hr_threshold = */ 0.995,
-
- /* double decrement = */ 0.9,
-
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
-
- /* int32_t epochs_before_eviction = */ 3,
-
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.05
- };
-
- TESTING("smoke check #6 -- ~1/2 dirty, ins, prot, unprot, AR cache 1");
-
- pass1 = TRUE;
-
- if ( skip_long_tests1 ) {
-
- SKIPPED();
-
- HDfprintf(stdout, " Long tests disabled.\n");
-
- return;
- }
-
- if ( run_full_test1 ) {
-
- max_index = (10 * 1024) - 1;
- }
-
- if ( show_progress ) /* 1 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- reset_entries1();
-
- if ( show_progress ) /* 2 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- if ( pass1 ) {
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 1.\n";
- }
- }
-
- if ( show_progress ) /* 3 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ FALSE,
- /* dirty_inserts */ dirty_inserts);
-
- if ( show_progress ) /* 4 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_row_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ FALSE,
- /* dirty_inserts */ dirty_inserts);
-
- if ( show_progress ) /* 5 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts);
-
- if ( show_progress ) /* 6 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush and destroy all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ TRUE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 7 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_col_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 8 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ FALSE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 9 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_col_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 10 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- takedown_cache1(cache_ptr, display_stats, TRUE);
-
- if ( show_progress ) /* 11 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- verify_clean1();
- verify_unprotected1();
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* smoke_check_6() */
-
-
-/*-------------------------------------------------------------------------
- * Function: smoke_check_7()
- *
- * Purpose: A basic functional test on a cache with automatic cache
- * resizing enabled, with inserts in the mix, along with
- * repeated protects and unprotects. All entries are marked
- * as clean.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 12/2/04
- *
- * Modifications:
- *
- * JRM -- 1/18/05
- * Added code to skip this test if the skip_long_tests1 global
- * is true.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-smoke_check_7(void)
-{
- const char * fcn_name = "smoke_check_7";
- herr_t result;
- hbool_t show_progress = FALSE;
- hbool_t dirty_inserts = FALSE;
- int dirty_unprotects = FALSE;
- hbool_t display_stats = FALSE;
- int mile_stone = 1;
- int32_t max_index = 1024;
- H5C1_t * cache_ptr = NULL;
- H5C1_auto_size_ctl_t auto_size_ctl =
- {
- /* int32_t version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
-#if 1
- /* H5C1_auto_resize_report_fcn rpt_fcn = */ NULL,
-#else
- /* H5C1_auto_resize_report_fcn rpt_fcn = */ H5C1_def_auto_resize_rpt_fcn,
-#endif
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (2 * 1024 * 1024),
-
- /* double min_clean_fraction = */ 0.1,
-
- /* size_t max_size = */ (32 * 1024 * 1025),
- /* size_t min_size = */ (512 * 1024),
-
- /* int64_t epoch_length = */ 100000,
-
-
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
-
- /* double lower_hr_threshold = */ 0.75,
-
- /* double increment = */ 2.0,
-
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (8 * 1024 * 1024),
-
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
-
-
- /* enum H5C1_cache_decr_mode decr_mode = */
- H5C1_decr__age_out_with_threshold,
-
- /* double upper_hr_threshold = */ 0.995,
-
- /* double decrement = */ 0.9,
-
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
-
- /* int32_t epochs_before_eviction = */ 3,
-
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1
- };
-
- TESTING("smoke check #7 -- all clean, ins, prot, unprot, AR cache 2");
-
- if ( skip_long_tests1 ) {
-
- SKIPPED();
-
- HDfprintf(stdout, " Long tests disabled.\n");
-
- return;
- }
-
- if ( run_full_test1 ) {
-
- max_index = (10 * 1024) - 1;
- }
-
- pass1 = TRUE;
-
- if ( show_progress ) /* 1 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- reset_entries1();
-
- if ( show_progress ) /* 2 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- if ( pass1 ) {
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 1.\n";
- }
- }
-
- if ( show_progress ) /* 3 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ FALSE,
- /* dirty_inserts */ dirty_inserts);
-
- if ( show_progress ) /* 4 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_row_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ FALSE,
- /* dirty_inserts */ dirty_inserts);
-
- if ( show_progress ) /* 5 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts);
-
- if ( show_progress ) /* 6 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush and destroy all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ TRUE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 7 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_col_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 8 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ FALSE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 9 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_col_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 10 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- takedown_cache1(cache_ptr, display_stats, TRUE);
-
- if ( show_progress ) /* 11 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- verify_clean1();
- verify_unprotected1();
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* smoke_check_7() */
-
-
-/*-------------------------------------------------------------------------
- * Function: smoke_check_8()
- *
- * Purpose: A basic functional test on a cache with automatic cache
- * resizing enabled, with inserts in the mix, along with
- * repeated protects and unprotects. About one half of all
- * entries are marked as dirty.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 10/25/04
- *
- * Modifications:
- *
- * JRM -- 1/18/05
- * Added code to skip this test if the skip_long_tests1 global
- * is true.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-smoke_check_8(void)
-{
- const char * fcn_name = "smoke_check_8";
- herr_t result;
- hbool_t show_progress = FALSE;
- hbool_t dirty_inserts = TRUE;
- int dirty_unprotects = FALSE;
- hbool_t display_stats = FALSE;
- int mile_stone = 1;
- int32_t max_index = 1024;
- H5C1_t * cache_ptr = NULL;
- H5C1_auto_size_ctl_t auto_size_ctl =
- {
- /* int32_t version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
-#if 1
- /* H5C1_auto_resize_report_fcn rpt_fcn = */ NULL,
-#else
- /* H5C1_auto_resize_report_fcn rpt_fcn = */ H5C1_def_auto_resize_rpt_fcn,
-#endif
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (2 * 1024 * 1024),
-
- /* double min_clean_fraction = */ 0.1,
-
- /* size_t max_size = */ (32 * 1024 * 1025),
- /* size_t min_size = */ (512 * 1024),
-
- /* int64_t epoch_length = */ 100000,
-
-
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
-
- /* double lower_hr_threshold = */ 0.75,
-
- /* double increment = */ 2.0,
-
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
-
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
-
-
- /* enum H5C1_cache_decr_mode decr_mode = */
- H5C1_decr__age_out_with_threshold,
-
- /* double upper_hr_threshold = */ 0.995,
-
- /* double decrement = */ 0.9,
-
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
-
- /* int32_t epochs_before_eviction = */ 3,
-
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1
- };
-
- TESTING("smoke check #8 -- ~1/2 dirty, ins, prot, unprot, AR cache 2");
-
- if ( skip_long_tests1 ) {
-
- SKIPPED();
-
- HDfprintf(stdout, " Long tests disabled.\n");
-
- return;
- }
-
- if ( run_full_test1 ) {
-
- max_index = (10 * 1024) - 1;
- }
-
- pass1 = TRUE;
-
- if ( show_progress ) /* 1 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- reset_entries1();
-
- if ( show_progress ) /* 2 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- if ( pass1 ) {
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 1.\n";
- }
- }
-
- if ( show_progress ) /* 3 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ FALSE,
- /* dirty_inserts */ dirty_inserts);
-
- if ( show_progress ) /* 4 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_row_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ FALSE,
- /* dirty_inserts */ dirty_inserts);
-
- if ( show_progress ) /* 5 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts);
-
- if ( show_progress ) /* 6 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush and destroy all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ TRUE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 7 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_col_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 8 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ FALSE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 9 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- hl_col_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* max_index */ max_index,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ FALSE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 10 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- takedown_cache1(cache_ptr, display_stats, TRUE);
-
- if ( show_progress ) /* 11 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- verify_clean1();
- verify_unprotected1();
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* smoke_check_8() */
-
-
-/*-------------------------------------------------------------------------
- * Function: smoke_check_9()
- *
- * Purpose: A repeat of smoke check 1, only with the cache corked
- * part of the time.
- *
- * Recall that smoke check 1 is a basic functional test,
- * with inserts, destroys, and renames in the mix, along
- * with repeated protects and unprotects. All entries are
- * marked as clean.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 8/1/07
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-smoke_check_9(void)
-{
- const char * fcn_name = "smoke_check_9";
- herr_t result;
- hbool_t show_progress = FALSE;
- hbool_t dirty_inserts = FALSE;
- int dirty_unprotects = FALSE;
- int dirty_destroys = FALSE;
- hbool_t display_stats = FALSE;
- hbool_t display_detailed_stats = FALSE;
- int32_t lag = 10;
- int mile_stone = 1;
- H5C1_t * cache_ptr = NULL;
-
- TESTING("smoke check #9 -- all clean, ins, dest, ren, 4/2 MB, corked");
-
- if ( skip_long_tests1 ) {
-
- SKIPPED();
-
- HDfprintf(stdout, " Long tests disabled.\n");
-
- return;
- }
-
- pass1 = TRUE;
-
- if ( show_progress ) /* 1 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- reset_entries1();
-
- if ( show_progress ) /* 2 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- cache_ptr = setup_cache1((size_t)(4 * 1024 * 1024),
- (size_t)(2 * 1024 * 1024));
-
- /* disable evictions */
-
- if ( show_progress ) /* 3 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, FALSE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "can't disable evictions 1.\n";
- }
- }
-
- if ( show_progress ) /* 4 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d -- evictions disabled\n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ display_detailed_stats,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ FALSE,
- /* do_destroys */ TRUE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- /* enable evictions */
-
- if ( show_progress ) /* 5 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, TRUE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "can't enable evictions 1.\n";
- }
- }
-
- if ( show_progress ) /* 6 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d -- evictions enabled \n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ display_detailed_stats,
- /* do_inserts */ FALSE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ TRUE,
- /* do_destroys */ FALSE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 7 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, FALSE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "can't disable evictions 2.\n";
- }
- }
-
- if ( show_progress ) /* 8 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d -- evictions disabled \n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ display_detailed_stats,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ FALSE,
- /* do_destroys */ FALSE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 9 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, TRUE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "can't enable evictions 2.\n";
- }
- }
-
- if ( show_progress ) /* 10 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d -- evictions enabled \n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush and destroy all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ TRUE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 11 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, FALSE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "can't disable evictions 3.\n";
- }
- }
-
- if ( show_progress ) /* 12 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d -- evictions disabled\n",
- fcn_name, mile_stone++, (int)pass1);
-
- col_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ display_detailed_stats,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 13 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ FALSE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 14 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, TRUE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "can't enable evictions 3.\n";
- }
- }
-
- if ( show_progress ) /* 15 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d -- evictions enabled\n",
- fcn_name, mile_stone++, (int)pass1);
-
- col_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ display_detailed_stats,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 16 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, FALSE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "can't disable evictions 4.\n";
- }
- }
-
-
- if ( show_progress ) /* 17 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d -- evictions disabled\n",
- fcn_name, mile_stone++, (int)pass1);
-
- takedown_cache1(cache_ptr, display_stats, TRUE);
-
- if ( show_progress ) /* 18 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- verify_clean1();
- verify_unprotected1();
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* smoke_check_9() */
-
-
-/*-------------------------------------------------------------------------
- * Function: smoke_check_10()
- *
- * Purpose: A repeat of smoke check 2, only with the cache corked
- * part of the time.
- *
- * Recall that smoke check 2 is a basic functional test,
- * with inserts, destroys, and renames in the mix, along
- * with some repeated protects and unprotects. About half
- * the entries are marked as dirty.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 8/1/07
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-smoke_check_10(void)
-{
- const char * fcn_name = "smoke_check_10";
- herr_t result;
- hbool_t show_progress = FALSE;
- hbool_t dirty_inserts = TRUE;
- int dirty_unprotects = TRUE;
- int dirty_destroys = TRUE;
- hbool_t display_stats = FALSE;
- hbool_t display_detailed_stats = FALSE;
- int32_t lag = 10;
- int mile_stone = 1;
- H5C1_t * cache_ptr = NULL;
-
- TESTING("smoke check #10 -- ~1/2 dirty, ins, dest, ren, 4/2 MB, corked");
-
- if ( skip_long_tests1 ) {
-
- SKIPPED();
-
- HDfprintf(stdout, " Long tests disabled.\n");
-
- return;
- }
-
- pass1 = TRUE;
-
- if ( show_progress ) /* 1 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- reset_entries1();
-
- if ( show_progress ) /* 2 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- cache_ptr = setup_cache1((size_t)(4 * 1024 * 1024),
- (size_t)(2 * 1024 * 1024));
-
- if ( show_progress ) /* 3 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d -- evictions enabled\n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ display_detailed_stats,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ FALSE,
- /* do_destroys */ TRUE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 4 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, FALSE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "can't disable evictions 1.\n";
- }
- }
-
- if ( show_progress ) /* 5 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d -- evictions disabled\n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ display_detailed_stats,
- /* do_inserts */ FALSE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ TRUE,
- /* do_destroys */ FALSE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 6 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, TRUE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "can't enable evictions 1.\n";
- }
- }
-
- if ( show_progress ) /* 7 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d -- evictions enabled\n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ display_detailed_stats,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ FALSE,
- /* do_destroys */ FALSE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ dirty_destroys,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 8 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, FALSE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "can't disable evictions 2.\n";
- }
- }
-
- if ( show_progress ) /* 9 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d -- evictions disabled\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush and destroy all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ TRUE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 10 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, TRUE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "can't enable evictions 2.\n";
- }
- }
-
- if ( show_progress ) /* 11 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d -- evictions enabled\n",
- fcn_name, mile_stone++, (int)pass1);
-
- col_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ display_detailed_stats,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 12 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, FALSE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "can't disable evictions 3.\n";
- }
- }
-
- if ( show_progress ) /* 13 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d -- evictions disabled\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ FALSE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 14 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, TRUE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "can't enable evictions 3.\n";
- }
- }
-
- if ( show_progress ) /* 15 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d -- evictions enabled\n",
- fcn_name, mile_stone++, (int)pass1);
-
- col_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ display_detailed_stats,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ dirty_inserts,
- /* dirty_unprotects */ dirty_unprotects);
-
- if ( show_progress ) /* 16 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, FALSE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "can't disable evictions 4.\n";
- }
- }
-
- if ( show_progress ) /* 17 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d -- evictions disabled\n",
- fcn_name, mile_stone++, (int)pass1);
-
- takedown_cache1(cache_ptr, display_stats, TRUE);
-
- if ( show_progress ) /* 18 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- verify_clean1();
- verify_unprotected1();
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* smoke_check_10() */
-
-
-/*-------------------------------------------------------------------------
- * Function: write_permitted1_check()
- *
- * Purpose: A basic test of the write permitted function. In essence,
- * we load the cache up with dirty entryies, set
- * write_permitted1 to FALSE, and then protect a bunch of
- * entries. If there are any writes while write_permitted1 is
- * FALSE, the test will fail.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/24/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-write_permitted1_check(void)
-{
-
-#if H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
-
- const char * fcn_name = "write_permitted1_check";
- hbool_t show_progress = FALSE;
- hbool_t display_stats = FALSE;
- int32_t lag = 10;
- int mile_stone = 1;
- H5C1_t * cache_ptr = NULL;
-
-#endif /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
- TESTING("write permitted check -- 1/0 MB cache");
-
-#if H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
-
- pass1 = TRUE;
-
- if ( show_progress ) /* 1 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- reset_entries1();
-
- if ( show_progress ) /* 2 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- cache_ptr = setup_cache1((size_t)(1 * 1024 * 1024),
- (size_t)(0));
-
- if ( show_progress ) /* 3 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ TRUE,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ FALSE,
- /* do_destroys */ TRUE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ TRUE,
- /* dirty_unprotects */ TRUE);
-
- if ( show_progress ) /* 4 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- write_permitted1 = FALSE;
-
- row_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ FALSE,
- /* dirty_inserts */ FALSE,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ TRUE,
- /* do_destroys */ FALSE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ FALSE,
- /* dirty_unprotects */ NO_CHANGE);
-
- if ( show_progress ) /* 5 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- write_permitted1 = TRUE;
-
- row_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ TRUE,
- /* do_renames */ TRUE,
- /* rename_to_main_addr */ FALSE,
- /* do_destroys */ FALSE,
- /* do_mult_ro_protects */ TRUE,
- /* dirty_destroys */ TRUE,
- /* dirty_unprotects */ TRUE);
-
- if ( show_progress ) /* 6 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* flush and destroy all entries in the cache: */
-
- flush_cache1(/* cache_ptr */ cache_ptr,
- /* destroy_entries */ TRUE,
- /* dump_stats */ FALSE,
- /* dump_detailed_stats */ FALSE);
-
- if ( show_progress ) /* 7 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- col_major_scan_forward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ TRUE,
- /* dirty_inserts */ TRUE,
- /* dirty_unprotects */ TRUE);
-
- if ( show_progress ) /* 8 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- write_permitted1 = FALSE;
-
- col_major_scan_backward1(/* cache_ptr */ cache_ptr,
- /* lag */ lag,
- /* verbose */ FALSE,
- /* reset_stats */ TRUE,
- /* display_stats */ display_stats,
- /* display_detailed_stats */ TRUE,
- /* do_inserts */ FALSE,
- /* dirty_inserts */ FALSE,
- /* dirty_unprotects */ NO_CHANGE);
-
- write_permitted1 = TRUE;
-
- if ( show_progress ) /* 9 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- takedown_cache1(cache_ptr, display_stats, TRUE);
-
- if ( show_progress ) /* 10 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- verify_clean1();
- verify_unprotected1();
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
-#else /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
- SKIPPED();
-
- HDfprintf(stdout, " Clean and dirty LRU lists disabled.\n");
-
-#endif /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
- return;
-
-} /* write_permitted1_check() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_insert_entry1()
- *
- * Purpose: Verify that H5C1_insert_entry behaves as expected.
- * Test the behaviour with different flags.
- *
- * This test was added primarily to test basic insert
- * pinned entry functionallity, but I through in explicit
- * tests for other functionallity that is tested implicitly
- * elsewhere.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 8/10/06
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_insert_entry1(void)
-{
- const char * fcn_name = "check_insert_entry1";
- int entry_type = PICO_ENTRY_TYPE;
- int i;
- herr_t result;
- hbool_t in_cache;
- hbool_t is_dirty;
- hbool_t is_protected;
- hbool_t is_pinned;
- size_t entry_size;
- H5C1_t * cache_ptr = NULL;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
- struct H5C1_cache_entry_t * search_ptr;
-
-
- TESTING("H5C1_insert_entry() functionality");
-
- pass1 = TRUE;
-
- /* Allocate a cache, and insert entries into it using all
- * combinations of flags. Verify that the entries are inserted,
- * and that the flags have the desired effects.
- *
- * Note that the dirty parameter in insert_entry1 is no longer
- * used, as we have decided that all inserted entries are
- * dirty by definition. (Which sounds very reasonable, but didn't
- * used to be the case.)
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024 * 1024),
- (size_t)(1 * 1024 * 1024));
- }
-
- if ( pass1 ) {
-
- insert_entry1(cache_ptr, entry_type, 0, TRUE, H5C1__NO_FLAGS_SET);
- insert_entry1(cache_ptr, entry_type, 1, TRUE,
- H5C1__SET_FLUSH_MARKER_FLAG);
- insert_entry1(cache_ptr, entry_type, 2, TRUE, H5C1__PIN_ENTRY_FLAG);
- insert_entry1(cache_ptr, entry_type, 3, TRUE,
- (H5C1__SET_FLUSH_MARKER_FLAG | H5C1__PIN_ENTRY_FLAG));
- }
-
-
- /* Verify that the entries are inserted as desired. */
-
- i = 0;
- base_addr = entries1[0];
- while ( ( pass1 ) && ( i < 4 ) )
- {
- entry_ptr = &(base_addr[i]);
-
- /* Start by checking everything we can via H5C1_get_entry_status() */
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected,
- &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5AC1_get_entry_status() reports failure.";
- }
-
- if ( pass1 ) {
-
- /* check the universals */
- if ( ( ! in_cache ) || ( ! is_dirty ) || ( is_protected ) ||
- ( entry_size != entry_sizes1[entry_type] ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected insert results 1.";
- }
- }
-
- if ( pass1 ) {
-
- /* verify that the pinned flag got set correctly */
- if ( ( i == 2 ) || ( i == 3 ) ) {
-
- if ( ! is_pinned ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected insert results 2.";
- }
- } else if ( is_pinned ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected insert results 3.";
-
- } else if ( is_pinned != ((entry_ptr->header).is_pinned) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected insert results 4.";
- }
- }
-
- /* Thats all we can get from H5AC1_get_entry_status().
- * Now start looking at the cache data structures directly.
- */
-
- if ( pass1 ) {
-
- /* Verify that the flush marker got set correctly */
- if ( ( i == 1 ) || ( i == 3 ) ) {
-
- if ( ! ((entry_ptr->header).flush_marker) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected insert results 5.";
- }
- } else if ( (entry_ptr->header).flush_marker ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected insert results 6.";
- }
- }
-
- if ( pass1 ) {
-
- /* Verify that pinned entries are in the pinned entry list */
- if ( (entry_ptr->header).is_pinned ) {
-
- search_ptr = cache_ptr->pel_head_ptr;
-
- while ( ( search_ptr != NULL ) &&
- ( search_ptr !=
- (struct H5C1_cache_entry_t *)entry_ptr ) )
- {
- search_ptr = search_ptr->next;
- }
-
- if ( search_ptr == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected insert results 7.";
- }
- }
- }
-
- if ( pass1 ) {
-
- /* Verify that unpinned entries are in the LRU list */
- if ( ! ((entry_ptr->header).is_pinned) ) {
-
- search_ptr = cache_ptr->LRU_head_ptr;
-
- while ( ( search_ptr != NULL ) &&
- ( search_ptr !=
- (struct H5C1_cache_entry_t *)entry_ptr ) )
- {
- search_ptr = search_ptr->next;
- }
-
- if ( search_ptr == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected insert results 8.";
- }
- }
- }
-
-#if H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
- if ( pass1 ) {
-
- /* Verify that unpinned entries are in the dirty LRU list */
- if ( ! ((entry_ptr->header).is_pinned) ) {
-
- search_ptr = cache_ptr->dLRU_head_ptr;
-
- while ( ( search_ptr != NULL ) &&
- ( search_ptr !=
- (struct H5C1_cache_entry_t *)entry_ptr ) )
- {
- search_ptr = search_ptr->aux_next;
- }
-
- if ( search_ptr == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected insert results 9.";
- }
- }
- }
-#endif /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
-
- i++;
-
- } /* while */
-
-
- /* So much for looking at the individual entries. Now verify
- * that the various counts and sized in the cache header are
- * as expected.
- */
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 4 * entry_sizes1[entry_type] ) ||
- ( cache_ptr->slist_len != 4 ) ||
- ( cache_ptr->slist_size != 4 * entry_sizes1[entry_type] ) ||
- ( cache_ptr->pl_len != 0 ) ||
- ( cache_ptr->pl_size != (size_t)0 ) ||
- ( cache_ptr->pel_len != 2 ) ||
- ( cache_ptr->pel_size != 2 * entry_sizes1[entry_type] ) ||
- ( cache_ptr->LRU_list_len != 2 ) ||
- ( cache_ptr->LRU_list_size != 2 * entry_sizes1[entry_type] ) ||
-#if H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
- ( cache_ptr->dLRU_list_len != 2 ) ||
- ( cache_ptr->dLRU_list_size != 2 * entry_sizes1[entry_type] ) ||
-#endif /* H5C1_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
- ( cache_ptr->cLRU_list_len != 0 ) ||
- ( cache_ptr->cLRU_list_size != (size_t)0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected insert results 10.";
- }
- }
-
-
- /* Finally, if stats collection is enabled, verify that the expected
- * stats are collected.
- */
-#if H5C1_COLLECT_CACHE_STATS
- if ( pass1 ) {
-
- if ( ( cache_ptr->insertions[entry_type] != 4 ) ||
- ( cache_ptr->pinned_insertions[entry_type] != 2 ) ||
- ( cache_ptr->pins[entry_type] != 2 ) ||
- ( cache_ptr->unpins[entry_type] != 0 ) ||
- ( cache_ptr->dirty_pins[entry_type] != 0 ) ||
- ( cache_ptr->max_index_len != 4 ) ||
- ( cache_ptr->max_index_size != 4 * entry_sizes1[entry_type] ) ||
- ( cache_ptr->max_slist_len != 4 ) ||
- ( cache_ptr->max_slist_size != 4 * entry_sizes1[entry_type] ) ||
- ( cache_ptr->max_pl_len != 0 ) ||
- ( cache_ptr->max_pl_size != (size_t)0 ) ||
- ( cache_ptr->max_pel_len != 2 ) ||
- ( cache_ptr->max_pel_size != 2 * entry_sizes1[entry_type] ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected insert results 11.";
- }
- }
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
-
- /* Unpin the pinned entries so we can take down the cache cleanly. */
-
- if ( pass1 ) {
-
- unpin_entry1(cache_ptr, entry_type, 2);
- unpin_entry1(cache_ptr, entry_type, 3);
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_insert_entry1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_flush_cache1()
- *
- * Purpose: Verify that flush_cache1 behaves as expected. In particular,
- * test the behaviour with different flags.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 1/10/05
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_flush_cache1(void)
-{
- const char * fcn_name = "check_flush_cache1";
- H5C1_t * cache_ptr = NULL;
-
- TESTING("H5C1_flush_cache() functionality");
-
- pass1 = TRUE;
-
- /* allocate a cache, and flush it under various circumstances.
- * To the extent possible, verify that the desired actions took
- * place.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024 * 1024),
- (size_t)(1 * 1024 * 1024));
- }
-
- /* first test behaviour on an empty cache. Can't do much sanity
- * checking in this case, so simply check the return values.
- */
-
- if ( pass1 ) {
-
- check_flush_cache1__empty_cache(cache_ptr);
- }
-
- /* now do a series of similar tests with a cache with a single entry.
- * Start with a clean entry, with no flags set.
- */
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry(cache_ptr);
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__multi_entry(cache_ptr);
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__flush_ops(cache_ptr);
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_flush_cache1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_flush_cache1__empty_cache()
- *
- * Purpose: Verify that flush_cache1 behaves as expected with an empty
- * cache.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 1/12/05
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_flush_cache1__empty_cache(H5C1_t * cache_ptr)
-{
- /* const char * fcn_name = "check_flush_cache1__empty_cache"; */
- herr_t result;
-
- if ( cache_ptr == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "cache_ptr NULL on entry to empty cache case.";
- }
- else if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "cache not empty at beginning of empty cache case.";
- }
-
-
- /* Test behaviour on an empty cache. Can't do much sanity
- * checking in this case, so simply check the return values.
- */
-
- if ( pass1 ) {
-
- result = H5C1_flush_cache(NULL, -1, -1, cache_ptr, H5C1__NO_FLAGS_SET);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "flush with flags = 0x00 failed on empty cache.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_flush_cache(NULL, -1, -1, cache_ptr,
- H5C1__FLUSH_INVALIDATE_FLAG);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "flush with flags = 0x04 failed on empty cache.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_flush_cache(NULL, -1, -1, cache_ptr,
- H5C1__FLUSH_CLEAR_ONLY_FLAG);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "flush with flags = 0x08 failed on empty cache.\n";
- }
- }
-
-
- if ( pass1 ) {
-
- result = H5C1_flush_cache(NULL, -1, -1, cache_ptr,
- H5C1__FLUSH_MARKED_ENTRIES_FLAG);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "flush with flags = 0x10 failed on empty cache.\n";
- }
- }
-
-} /* check_flush_cache1__empty_cache() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_flush_cache1__multi_entry()
- *
- * Purpose: Verify that flush_cache1 behaves as expected when the cache
- * contains multiple elements.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 1/14/05
- *
- * Modifications:
- *
- * JRM -- 4/5/06
- * Added pinned entry tests.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_flush_cache1__multi_entry(H5C1_t * cache_ptr)
-{
- /* const char * fcn_name = "check_flush_cache1__multi_entry"; */
-
- if ( cache_ptr == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "cache_ptr NULL on entry to multi entry case.";
- }
- else if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "cache not empty at beginning of multi entry case.";
- }
-
- if ( pass1 )
- {
- int test_num = 1;
- unsigned int flush_flags = H5C1__NO_FLAGS_SET;
- int spec_size = 8;
- struct flush_cache_test_spec spec[8] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 75,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 25,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 50,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 20,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 6,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 30,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 7,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 40,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__multi_entry_test(cache_ptr, test_num,
- flush_flags, spec_size, spec);
- }
-
-
- if ( pass1 )
- {
- int test_num = 2;
- unsigned int flush_flags = H5C1__FLUSH_INVALIDATE_FLAG;
- int spec_size = 8;
- struct flush_cache_test_spec spec[8] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 75,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 25,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 50,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 20,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 6,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 30,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 7,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 40,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- }
- };
-
- check_flush_cache1__multi_entry_test(cache_ptr, test_num,
- flush_flags, spec_size, spec);
- }
-
-
- if ( pass1 )
- {
- int test_num = 3;
- unsigned int flush_flags = H5C1__FLUSH_CLEAR_ONLY_FLAG;
- int spec_size = 8;
- struct flush_cache_test_spec spec[8] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 75,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 25,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 50,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 20,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 6,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 30,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 7,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 40,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__multi_entry_test(cache_ptr, test_num,
- flush_flags, spec_size, spec);
- }
-
-
- if ( pass1 )
- {
- int test_num = 4;
- unsigned int flush_flags = H5C1__FLUSH_MARKED_ENTRIES_FLAG;
- int spec_size = 8;
- struct flush_cache_test_spec spec[8] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 75,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 25,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 50,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 20,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 6,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 30,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 7,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 40,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__multi_entry_test(cache_ptr, test_num,
- flush_flags, spec_size, spec);
- }
-
-
- if ( pass1 )
- {
- int test_num = 5;
- unsigned int flush_flags = H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG;
- int spec_size = 8;
- struct flush_cache_test_spec spec[8] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 75,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 25,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 50,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 20,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 6,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 30,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 7,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 40,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- }
- };
-
- check_flush_cache1__multi_entry_test(cache_ptr, test_num,
- flush_flags, spec_size, spec);
- }
-
-
- if ( pass1 )
- {
- int test_num = 6;
- unsigned int flush_flags = H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_MARKED_ENTRIES_FLAG;
- int spec_size = 8;
- struct flush_cache_test_spec spec[8] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 75,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 25,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 50,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 20,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 6,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 30,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 7,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 40,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- }
- };
-
- check_flush_cache1__multi_entry_test(cache_ptr, test_num,
- flush_flags, spec_size, spec);
- }
-
-
- if ( pass1 )
- {
- int test_num = 7;
- unsigned int flush_flags = H5C1__FLUSH_CLEAR_ONLY_FLAG |
- H5C1__FLUSH_MARKED_ENTRIES_FLAG;
- int spec_size = 8;
- struct flush_cache_test_spec spec[8] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 75,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 25,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 50,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 20,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 6,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 30,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 7,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 40,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__multi_entry_test(cache_ptr, test_num,
- flush_flags, spec_size, spec);
- }
-
-
- if ( pass1 )
- {
- int test_num = 8;
- unsigned int flush_flags = H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG |
- H5C1__FLUSH_MARKED_ENTRIES_FLAG;
- int spec_size = 8;
- struct flush_cache_test_spec spec[8] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 75,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 25,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 50,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 20,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 6,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 30,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 7,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 40,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- }
- };
-
- check_flush_cache1__multi_entry_test(cache_ptr, test_num,
- flush_flags, spec_size, spec);
- }
-
-
- /* verify that all other flags are ignored */
- if ( pass1 )
- {
- int test_num = 9;
- unsigned int flush_flags = (unsigned)
- ~(H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG |
- H5C1__FLUSH_MARKED_ENTRIES_FLAG);
- int spec_size = 8;
- struct flush_cache_test_spec spec[8] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 75,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 25,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 50,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 20,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 6,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 30,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 7,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 40,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__multi_entry_test(cache_ptr, test_num,
- flush_flags, spec_size, spec);
- }
-
- /* Now do pinned entry tests:
- *
- * For the most part, this test is directed at testing the ability
- * of the flush routine to unravel collections of pinned entries.
- */
-
- if ( pass1 )
- {
- int test_num = 1;
- unsigned int flush_flags = H5C1__NO_FLAGS_SET;
- int spec_size = 8;
- struct pe_flush_cache_test_spec spec[8] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 0,
- /* pin_type[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 75,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 1,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 25,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 2,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, 75, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 50,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 3,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, 75, 25, -1, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 4,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, 75, 25, 50, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 20,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 5,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- MONSTER_ENTRY_TYPE,
- -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, 75, 25, 50, 10, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 6,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 30,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 6,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- MONSTER_ENTRY_TYPE,
- MONSTER_ENTRY_TYPE,
- -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, 75, 25, 50, 10, 20, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 7,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 40,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 7,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- MONSTER_ENTRY_TYPE,
- MONSTER_ENTRY_TYPE,
- MONSTER_ENTRY_TYPE,
- -1},
- /* pin_idx[MAX_PINS] = */ {100, 75, 25, 50, 10, 20, 30, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__pe_multi_entry_test(cache_ptr, test_num,
- flush_flags, spec_size, spec);
- }
-
-
- if ( pass1 )
- {
- int test_num = 2;
- unsigned int flush_flags = H5C1__FLUSH_INVALIDATE_FLAG;
- int spec_size = 8;
- struct pe_flush_cache_test_spec spec[8] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 0,
- /* pin_type[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 75,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 1,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 25,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 2,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, 75, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 50,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 3,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, 75, 25, -1, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 0,
- /* pin_type[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 20,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 1,
- /* pin_type[MAX_PINS] = */ {MONSTER_ENTRY_TYPE,
- -1, -1, -1, -1 -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {10, -1, -1, -1 -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 6,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 30,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 2,
- /* pin_type[MAX_PINS] = */ {MONSTER_ENTRY_TYPE,
- MONSTER_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {10, 20, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 7,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 40,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 3,
- /* pin_type[MAX_PINS] = */ {MONSTER_ENTRY_TYPE,
- MONSTER_ENTRY_TYPE,
- MONSTER_ENTRY_TYPE,
- -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {10, 20, 30, -1, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- }
- };
-
- check_flush_cache1__pe_multi_entry_test(cache_ptr, test_num,
- flush_flags, spec_size, spec);
- }
-
- if ( pass1 )
- {
- int test_num = 3;
- unsigned int flush_flags = H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG;
- int spec_size = 8;
- struct pe_flush_cache_test_spec spec[8] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 0,
- /* pin_type[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 75,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 1,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 25,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 1,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 50,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 1,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 0,
- /* pin_type[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 20,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 0,
- /* pin_type[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 6,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 30,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 0,
- /* pin_type[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 7,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 40,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 0,
- /* pin_type[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- }
- };
-
- check_flush_cache1__pe_multi_entry_test(cache_ptr, test_num,
- flush_flags, spec_size, spec);
- }
-
-
- if ( pass1 )
- {
- int test_num = 4;
- unsigned int flush_flags = H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_MARKED_ENTRIES_FLAG;
- int spec_size = 8;
- struct pe_flush_cache_test_spec spec[8] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 0,
- /* pin_type[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 75,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 1,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 25,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 1,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 50,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 1,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 0,
- /* pin_type[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 20,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 4,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, 75, 25, 50, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 6,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 30,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 4,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- PICO_ENTRY_TYPE,
- -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, 75, 25, 50, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 7,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 40,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 0,
- /* pin_type[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- }
- };
-
- check_flush_cache1__pe_multi_entry_test(cache_ptr, test_num,
- flush_flags, spec_size, spec);
- }
-
-
- if ( pass1 )
- {
- int test_num = 5;
- unsigned int flush_flags = H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG |
- H5C1__FLUSH_MARKED_ENTRIES_FLAG;
- int spec_size = 8;
- struct pe_flush_cache_test_spec spec[8] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 0,
- /* pin_type[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {-1, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 75,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 1,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 25,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 1,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 50,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* num_pins = */ 1,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 1,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 20,
- /* insert_flag = */ FALSE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 1,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 6,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 30,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ FALSE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 1,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 7,
- /* entry_type = */ MONSTER_ENTRY_TYPE,
- /* entry_index = */ 40,
- /* insert_flag = */ TRUE,
- /* dirty_flag = */ TRUE,
- /* flags = */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* num_pins = */ 1,
- /* pin_type[MAX_PINS] = */ {PICO_ENTRY_TYPE,
- -1, -1, -1, -1, -1, -1, -1},
- /* pin_idx[MAX_PINS] = */ {100, -1, -1, -1, -1, -1, -1, -1},
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ TRUE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ TRUE
- }
- };
-
- check_flush_cache1__pe_multi_entry_test(cache_ptr, test_num,
- flush_flags, spec_size, spec);
- }
-
- return;
-
-} /* check_flush_cache1__multi_entry() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_flush_cache1__multi_entry_test()
- *
- * Purpose: Run a multi entry flush cache test.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 1/13/05
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_flush_cache1__multi_entry_test(H5C1_t * cache_ptr,
- int test_num,
- unsigned int flush_flags,
- int spec_size,
- struct flush_cache_test_spec spec[])
-{
- /* const char * fcn_name = "check_flush_cache1__multi_entry_test"; */
- static char msg[128];
- herr_t result;
- int i;
- size_t total_entry_size = 0;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
-#if 0 /* JRM */
- /* This gets used a lot, so lets leave it in. */
-
- HDfprintf(stdout, "check_flush_cache1__multi_entry_test: test %d\n",
- test_num);
-#endif /* JRM */
-
- if ( cache_ptr == NULL ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "cache_ptr NULL on entry to single entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- else if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ) {
-
- pass1 = FALSE;
-
- HDsnprintf(msg, (size_t)128,
- "cache not empty at beginning of multi entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- else if ( ( spec_size < 1 ) || ( spec == NULL ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "missing/bad test spec on entry to multi entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
-
- i = 0;
- while ( ( pass1 ) && ( i < spec_size ) )
- {
- if ( ( spec[i].entry_num != i ) ||
- ( spec[i].entry_type < 0 ) ||
- ( spec[i].entry_type >= NUMBER_OF_ENTRY_TYPES ) ||
- ( spec[i].entry_index < 0 ) ||
- ( spec[i].entry_index > max_indices1[spec[i].entry_type] ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "bad data in spec[%d] on entry to multi entry test #%d.",
- i, test_num);
- failure_mssg1 = msg;
- }
- i++;
- }
-
- i = 0;
- while ( ( pass1 ) && ( i < spec_size ) )
- {
- if ( spec[i].insert_flag ) {
-
- insert_entry1(cache_ptr, spec[i].entry_type, spec[i].entry_index,
- spec[i].dirty_flag, spec[i].flags);
-
- } else {
-
- protect_entry1(cache_ptr, spec[i].entry_type, spec[i].entry_index);
-
- unprotect_entry1(cache_ptr, spec[i].entry_type, spec[i].entry_index,
- (int)(spec[i].dirty_flag), spec[i].flags);
- }
-
- total_entry_size += entry_sizes1[spec[i].entry_type];
-
- i++;
- }
-
- if ( pass1 ) {
-
- result = H5C1_flush_cache(NULL, -1, -1, cache_ptr, flush_flags);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "flush with flags 0x%x failed in multi entry test #%d.",
- flush_flags, test_num);
- failure_mssg1 = msg;
- }
- }
-
- i = 0;
- while ( ( pass1 ) && ( i < spec_size ) )
- {
- base_addr = entries1[spec[i].entry_type];
- entry_ptr = &(base_addr[spec[i].entry_index]);
-
- if ( ( entry_ptr->loaded != spec[i].expected_loaded ) ||
- ( entry_ptr->cleared != spec[i].expected_cleared ) ||
- ( entry_ptr->flushed != spec[i].expected_flushed ) ||
- ( entry_ptr->destroyed != spec[i].expected_destroyed ) ) {
-
-#if 0 /* This is useful debugging code. Lets keep it around. */
-
- HDfprintf(stdout,
- "loaded = %d(%d), clrd = %d(%d), flshd = %d(%d), dest = %d(%d)\n",
- (int)(entry_ptr->loaded),
- (int)(spec[i].expected_loaded),
- (int)(entry_ptr->cleared),
- (int)(spec[i].expected_cleared),
- (int)(entry_ptr->flushed),
- (int)(spec[i].expected_flushed),
- (int)(entry_ptr->destroyed),
- (int)(spec[i].expected_destroyed));
-
-#endif
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Bad status on entry %d after flush in multi entry test #%d.",
- i, test_num);
- failure_mssg1 = msg;
- }
- i++;
- }
-
- if ( pass1 ) {
-
- if ( ( ( (flush_flags & H5C1__FLUSH_INVALIDATE_FLAG) == 0 )
- &&
- ( ( cache_ptr->index_len != spec_size )
- ||
- ( cache_ptr->index_size != total_entry_size )
- )
- )
- ||
- ( ( (flush_flags & H5C1__FLUSH_INVALIDATE_FLAG) != 0 )
- &&
- ( ( cache_ptr->index_len != 0 )
- ||
- ( cache_ptr->index_size != 0 )
- )
- )
- ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Unexpected cache len/size after flush in multi entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- }
-
- /* clean up the cache to prep for the next test */
- if ( pass1 ) {
-
- result = H5C1_flush_cache(NULL, -1, -1, cache_ptr,
- H5C1__FLUSH_INVALIDATE_FLAG);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Flush failed on cleanup in multi entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- else if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Unexpected cache len/size after cleanup in multi entry test #%d.",
- test_num);
- failure_mssg1 = msg;
-
- }
- }
-
- i = 0;
- while ( ( pass1 ) && ( i < spec_size ) )
- {
- base_addr = entries1[spec[i].entry_type];
- entry_ptr = &(base_addr[spec[i].entry_index]);
-
- entry_ptr->loaded = FALSE;
- entry_ptr->cleared = FALSE;
- entry_ptr->flushed = FALSE;
- entry_ptr->destroyed = FALSE;
-
- i++;
- }
-
- return;
-
-} /* check_flush_cache1__multi_entry_test() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_flush_cache1__pe_multi_entry_test()
- *
- * Purpose: Run a multi entry flush cache test.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/5/06
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_flush_cache1__pe_multi_entry_test(H5C1_t * cache_ptr,
- int test_num,
- unsigned int flush_flags,
- int spec_size,
- struct pe_flush_cache_test_spec spec[])
-{
- /* const char * fcn_name = "check_flush_cache1__pe_multi_entry_test"; */
- static char msg[128];
- herr_t result;
- int i;
- int j;
- size_t total_entry_size = 0;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
-#if 0 /* JRM */
- /* This is useful debugging code. Leave it in for now. */
-
- HDfprintf(stdout, "check_flush_cache1__pe_multi_entry_test: test %d\n",
- test_num);
-#endif /* JRM */
-
- if ( cache_ptr == NULL ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "cache_ptr NULL on entry to pe multi entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- else if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ) {
-
- pass1 = FALSE;
-
- HDsnprintf(msg, (size_t)128,
- "cache not empty at beginning of pe multi entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- else if ( ( spec_size < 1 ) || ( spec == NULL ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "missing/bad test spec on entry to pe multi entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
-
- i = 0;
- while ( ( pass1 ) && ( i < spec_size ) )
- {
- if ( ( spec[i].entry_num != i ) ||
- ( spec[i].entry_type < 0 ) ||
- ( spec[i].entry_type >= NUMBER_OF_ENTRY_TYPES ) ||
- ( spec[i].entry_index < 0 ) ||
- ( spec[i].entry_index > max_indices1[spec[i].entry_type] ) ||
- ( spec[i].num_pins < 0 ) ||
- ( spec[i].num_pins > MAX_PINS ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "bad data in spec[%d] on entry to pe multi entry test #%d.",
- i, test_num);
- failure_mssg1 = msg;
- }
- i++;
- }
-
- i = 0;
- while ( ( pass1 ) && ( i < spec_size ) )
- {
- if ( spec[i].insert_flag ) {
-
- insert_entry1(cache_ptr, spec[i].entry_type, spec[i].entry_index,
- spec[i].dirty_flag, spec[i].flags);
-
- } else {
-
- protect_entry1(cache_ptr, spec[i].entry_type, spec[i].entry_index);
-
- unprotect_entry1(cache_ptr, spec[i].entry_type, spec[i].entry_index,
- (int)(spec[i].dirty_flag), spec[i].flags);
- }
-
- total_entry_size += entry_sizes1[spec[i].entry_type];
-
- for ( j = 0; j < spec[i].num_pins; j++ )
- {
- create_pinned_entry_dependency1(cache_ptr,
- spec[i].entry_type,
- spec[i].entry_index,
- spec[i].pin_type[j],
- spec[i].pin_idx[j]);
- }
-
- i++;
- }
-
- if ( pass1 ) {
-
- result = H5C1_flush_cache(NULL, -1, -1, cache_ptr, flush_flags);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "flush with flags 0x%x failed in pe multi entry test #%d.",
- flush_flags, test_num);
- failure_mssg1 = msg;
- }
- }
-
- i = 0;
- while ( ( pass1 ) && ( i < spec_size ) )
- {
- base_addr = entries1[spec[i].entry_type];
- entry_ptr = &(base_addr[spec[i].entry_index]);
-
- if ( ( entry_ptr->loaded != spec[i].expected_loaded ) ||
- ( entry_ptr->cleared != spec[i].expected_cleared ) ||
- ( entry_ptr->flushed != spec[i].expected_flushed ) ||
- ( entry_ptr->destroyed != spec[i].expected_destroyed ) ) {
-
-#if 0 /* This is useful debugging code. Lets keep it around. */
-
- HDfprintf(stdout,
- "loaded = %d(%d), clrd = %d(%d), flshd = %d(%d), dest = %d(%d)\n",
- (int)(entry_ptr->loaded),
- (int)(spec[i].expected_loaded),
- (int)(entry_ptr->cleared),
- (int)(spec[i].expected_cleared),
- (int)(entry_ptr->flushed),
- (int)(spec[i].expected_flushed),
- (int)(entry_ptr->destroyed),
- (int)(spec[i].expected_destroyed));
-
-#endif
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Bad status on entry %d after flush in pe multi entry test #%d.",
- i, test_num);
- failure_mssg1 = msg;
- }
- i++;
- }
-
- if ( pass1 ) {
-
- if ( ( ( (flush_flags & H5C1__FLUSH_INVALIDATE_FLAG) == 0 )
- &&
- ( ( cache_ptr->index_len != spec_size )
- ||
- ( cache_ptr->index_size != total_entry_size )
- )
- )
- ||
- ( ( (flush_flags & H5C1__FLUSH_INVALIDATE_FLAG) != 0 )
- &&
- ( ( cache_ptr->index_len != 0 )
- ||
- ( cache_ptr->index_size != 0 )
- )
- )
- ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Unexpected cache len/size after flush in pe multi entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- }
-
- /* clean up the cache to prep for the next test */
- if ( pass1 ) {
-
- result = H5C1_flush_cache(NULL, -1, -1, cache_ptr,
- H5C1__FLUSH_INVALIDATE_FLAG);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Flush failed on cleanup in pe multi entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- else if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Unexpected cache len/size after cleanup in pe multi entry test #%d.",
- test_num);
- failure_mssg1 = msg;
-
- }
- }
-
- i = 0;
- while ( ( pass1 ) && ( i < spec_size ) )
- {
- base_addr = entries1[spec[i].entry_type];
- entry_ptr = &(base_addr[spec[i].entry_index]);
-
- entry_ptr->loaded = FALSE;
- entry_ptr->cleared = FALSE;
- entry_ptr->flushed = FALSE;
- entry_ptr->destroyed = FALSE;
-
- i++;
- }
-
- return;
-
-} /* check_flush_cache1__pe_multi_entry_test() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_flush_cache1__flush_ops()
- *
- * Purpose: Run the flush ops cache tests.
- *
- * These are tests that test the cache's ability to handle
- * the case in which the flush callback dirties, resizes,
- * and/or renames entries.
- *
- * Do nothing if pass1 is FALSE on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 9/3/06
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_flush_cache1__flush_ops(H5C1_t * cache_ptr)
-{
- /* const char * fcn_name = "check_flush_cache1__flush_ops"; */
-
- if ( cache_ptr == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "cache_ptr NULL on entry to flush ops test.";
- }
- else if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "cache not empty at beginning of flush ops test.";
- }
-
- if ( pass1 ) /* test #1 */
- {
- /* start with a very simple test, in which there are two entries
- * resident in cache, and the second entry dirties the first in
- * the flush callback. No size changes, and no flush flags.
- */
- int test_num = 1;
- unsigned int flush_flags = H5C1__NO_FLAGS_SET;
- int spec_size = 2;
- int init_expected_index_len = 2;
- size_t init_expected_index_size = 2 * PICO_ENTRY_SIZE;
- int expected_index_len = 2;
- size_t expected_index_size = 2 * PICO_ENTRY_SIZE;
- struct fo_flush_cache_test_spec spec[2] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ 0,
- /* entry_index = */ 0,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ 0,
- /* entry_index = */ 1,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 1,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
- int check_size = 0;
- struct fo_flush_entry_check checks[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ 0,
- /* entry_index = */ 0,
- /* expected_size = */ (size_t)0,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- }
-
- if ( pass1 ) /* test #2 */
- {
- /* Same as test 1, only this time set the flush invalidate flag.
- * Note that we must repeat all tests with the flush invalidate flag
- * as this triggers a different set of code to execute the flush.
- *
- * Create two entries resident in cache, and have the second entry
- * dirty the first in the flush callback.
- */
- int test_num = 2;
- unsigned int flush_flags = H5C1__FLUSH_INVALIDATE_FLAG;
- int spec_size = 2;
- int init_expected_index_len = 2;
- size_t init_expected_index_size = 2 * PICO_ENTRY_SIZE;
- int expected_index_len = 0;
- size_t expected_index_size = 0;
- struct fo_flush_cache_test_spec spec[2] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 1,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 1,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE,0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- }
- };
- int check_size = 0;
- struct fo_flush_entry_check checks[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ 0,
- /* entry_index = */ 0,
- /* expected_size = */ (size_t)0,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- }
-
- if ( pass1 ) /* test #3 */
- {
- /* Single entry test verifying that the cache can handle the case in
- * which the call back function resizes the entry for which it has
- * been called.
- */
- int test_num = 3;
- unsigned int flush_flags = H5C1__NO_FLAGS_SET;
- int spec_size = 1;
- int init_expected_index_len = 1;
- size_t init_expected_index_size = VARIABLE_ENTRY_SIZE / 4;
- int expected_index_len = 1;
- size_t expected_index_size = VARIABLE_ENTRY_SIZE / 2;
- struct fo_flush_cache_test_spec spec[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__SIZE_CHANGED_FLAG,
- /* new_size = */ VARIABLE_ENTRY_SIZE / 4,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 1,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
- int check_size = 0;
- struct fo_flush_entry_check checks[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ 0,
- /* entry_index = */ 0,
- /* expected_size = */ (size_t)0,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- }
-
- if ( pass1 ) /* test #4 */
- {
- /* Repeat test #4 with the flush invalidate flag.
- *
- * Single entry test verifying that the cache can handle the case in
- * which the call back function resizes the entry for which it has
- * been called.
- */
- int test_num = 4;
- unsigned int flush_flags = H5C1__FLUSH_INVALIDATE_FLAG;
- int spec_size = 1;
- int init_expected_index_len = 1;
- size_t init_expected_index_size = VARIABLE_ENTRY_SIZE / 4;
- int expected_index_len = 0;
- size_t expected_index_size = 0;
- struct fo_flush_cache_test_spec spec[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__SIZE_CHANGED_FLAG,
- /* new_size = */ VARIABLE_ENTRY_SIZE / 4,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 1,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- }
- };
- int check_size = 0;
- struct fo_flush_entry_check checks[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ 0,
- /* entry_index = */ 0,
- /* expected_size = */ (size_t)0,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- }
-
- if ( pass1 ) /* test #5 & #6 */
- {
- /* Single entry test verifying that the cache can handle the case in
- * which the call back function renames the entry for which it has
- * been called.
- *
- * Run this entry twice, as the first run moves the entry to its
- * alternate address, and the second moves it back.
- */
- int test_num = 5; /* and 6 */
- unsigned int flush_flags = H5C1__NO_FLAGS_SET;
- int spec_size = 1;
- int init_expected_index_len = 1;
- size_t init_expected_index_size = VARIABLE_ENTRY_SIZE;
- int expected_index_len = 1;
- size_t expected_index_size = VARIABLE_ENTRY_SIZE;
- struct fo_flush_cache_test_spec spec[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 1,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
- int check_size = 0;
- struct fo_flush_entry_check checks[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ 0,
- /* entry_index = */ 0,
- /* expected_size = */ (size_t)0,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
-
- /* this change forces the rename to move the target entry back to its
- * main address. The first test moved it to its alternate address.
- *
- * Note that these two tests are not the same, as in the first test,
- * the renamed entry is moved forward in the slist. In the second
- * it is moved backwards.
- *
- * Since there is only one entry in the cache, this doesn't really
- * matter in this case. But we will do similar tests later with
- * other entries in the cache.
- */
- if ( pass1 ) {
-
- spec[0].flush_ops[0].flag = TRUE;
- test_num = 6;
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- }
- }
-
- if ( pass1 ) /* test #7 & #8 */
- {
- /* Run tests 5 & 6 again, using the flush invalidate flag on the
- * second test.
- *
- * Single entry test verifying that the cache can handle the case in
- * which the call back function renames the entry for which it has
- * been called.
- *
- * Run this entry twice, as the first run moves the entry to its
- * alternate address, and the second moves it back.
- */
- int test_num = 7; /* and 8 */
- unsigned int flush_flags = H5C1__NO_FLAGS_SET;
- int spec_size = 1;
- int init_expected_index_len = 1;
- size_t init_expected_index_size = VARIABLE_ENTRY_SIZE;
- int expected_index_len = 1;
- size_t expected_index_size = VARIABLE_ENTRY_SIZE;
- struct fo_flush_cache_test_spec spec[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 1,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
- int check_size = 0;
- struct fo_flush_entry_check checks[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ 0,
- /* entry_index = */ 0,
- /* expected_size = */ (size_t)0,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
-
- /* this change forces the rename to move the target entry back to its
- * main address. The first test moved it to its alternate address.
- *
- * Note that these two tests are not the same, as in the first test,
- * the renamed entry is moved forward in the slist. In the second
- * it is moved backwards.
- *
- * Since there is only one entry in the cache, this doesn't really
- * matter in this case. But we will do similar tests later with
- * other entries in the cache.
- */
-
- if ( pass1 ) {
-
- test_num = 8;
- flush_flags = H5C1__FLUSH_INVALIDATE_FLAG;
- expected_index_len = 0;
- expected_index_size = 0;
- spec[0].flush_ops[0].flag = TRUE;
- spec[0].expected_destroyed = TRUE;
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- }
- }
-
- if ( pass1 ) /* test #9 & #10 */
- {
- /* Single entry test verifying that the cache can handle the case in
- * which the call back function both resizes and renames the entry
- * for which it has been called.
- *
- * Again, we run this entry twice, as the first run moves the entry to its
- * alternate address, and the second moves it back.
- */
- int test_num = 9; /* and 10 */
- unsigned int flush_flags = H5C1__NO_FLAGS_SET;
- int spec_size = 1;
- int init_expected_index_len = 1;
- size_t init_expected_index_size = VARIABLE_ENTRY_SIZE / 2;
- int expected_index_len = 1;
- size_t expected_index_size = VARIABLE_ENTRY_SIZE / 4;
- struct fo_flush_cache_test_spec spec[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__SIZE_CHANGED_FLAG,
- /* new_size = */ VARIABLE_ENTRY_SIZE / 2,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 2,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
- int check_size = 0;
- struct fo_flush_entry_check checks[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ 0,
- /* entry_index = */ 0,
- /* expected_size = */ (size_t)0,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
-
- /* this change forces the rename to move the target entry back to its
- * main address. The first test moved it to its alternate address.
- *
- * Note that these two tests are not the same, as in the first test,
- * the renamed entry is moved forward in the slist. In the second
- * it is moved backwards.
- *
- * Since there is only one entry in the cache, this doesn't really
- * matter in this case. But we will do similar tests later with
- * other entries in the cache.
- */
- if ( pass1 ) {
-
- spec[0].flush_ops[0].flag = TRUE;
- test_num = 10;
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- }
- }
-
- if ( pass1 ) /* test #11 & #12 */
- {
- /* Repeat the previous test with the flush invalidate flag on the
- * second test.
- *
- * Single entry test verifying that the cache can handle the case in
- * which the call back function both resizes and renames the entry
- * for which it has been called.
- *
- * Again, we run this entry twice, as the first run moves the entry to its
- * alternate address, and the second moves it back.
- */
- int test_num = 11; /* and 12 */
- unsigned int flush_flags = H5C1__NO_FLAGS_SET;
- int spec_size = 1;
- int init_expected_index_len = 1;
- size_t init_expected_index_size = VARIABLE_ENTRY_SIZE / 2;
- int expected_index_len = 1;
- size_t expected_index_size = VARIABLE_ENTRY_SIZE / 4;
- struct fo_flush_cache_test_spec spec[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__SIZE_CHANGED_FLAG,
- /* new_size = */ VARIABLE_ENTRY_SIZE / 2,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 2,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
- int check_size = 0;
- struct fo_flush_entry_check checks[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ 0,
- /* entry_index = */ 0,
- /* expected_size = */ (size_t)0,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
-
- /* this change forces the rename to move the target entry back to its
- * main address. The first test moved it to its alternate address.
- *
- * Note that these two tests are not the same, as in the first test,
- * the renamed entry is moved forward in the slist. In the second
- * it is moved backwards.
- *
- * Since there is only one entry in the cache, this doesn't really
- * matter in this case. But we will do similar tests later with
- * other entries in the cache.
- */
- if ( pass1 ) {
-
- test_num = 12;
- flush_flags = H5C1__FLUSH_INVALIDATE_FLAG;
- expected_index_len = 0;
- expected_index_size = 0;
- spec[0].flush_ops[1].flag = TRUE;
- spec[0].expected_destroyed = TRUE;
-
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- }
- }
-
- if ( pass1 ) /* test #13 */
- {
- /* Test the ability of the cache to handle the case in which
- * the flush function of an entry that is resident in cache
- * dirties two entries that are not in cache. No size
- * changes.
- *
- * At present, I am assured that this case will never occur, but
- * lets make sure we can handle it regardless.
- */
- int test_num = 13;
- unsigned int flush_flags = H5C1__NO_FLAGS_SET;
- int spec_size = 1;
- int init_expected_index_len = 1;
- size_t init_expected_index_size = 1 * PICO_ENTRY_SIZE;
- int expected_index_len = 3;
- size_t expected_index_size = 3 * PICO_ENTRY_SIZE;
- struct fo_flush_cache_test_spec spec[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ 0,
- /* entry_index = */ 1,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 2,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, 0, 0, FALSE, 0 },
- { FLUSH_OP__DIRTY, 0, 2, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
- int check_size = 2;
- struct fo_flush_entry_check checks[2] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* expected_size = */ PICO_ENTRY_SIZE,
- /* in_cache = */ TRUE,
- /* at_main_addr = */ TRUE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 2,
- /* expected_size = */ PICO_ENTRY_SIZE,
- /* in_cache = */ TRUE,
- /* at_main_addr = */ TRUE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- }
-
- if ( pass1 ) /* test #14 */
- {
- /* Repeat previous test with the flush invalidate flag.
- *
- * Test the ability of the cache to handle the case in which
- * the flush function of an entry that is resident in cache
- * dirties two entries that are not in cache. No size
- * changes.
- *
- * At present, I am assured that this case will never occur, but
- * lets make sure we can handle it regardless.
- */
- int test_num = 14;
- unsigned int flush_flags = H5C1__FLUSH_INVALIDATE_FLAG;
- int spec_size = 1;
- int init_expected_index_len = 1;
- size_t init_expected_index_size = 1 * PICO_ENTRY_SIZE;
- int expected_index_len = 0;
- size_t expected_index_size = (size_t)0;
- struct fo_flush_cache_test_spec spec[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ 0,
- /* entry_index = */ 1,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 2,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, 0, 0, FALSE, 0 },
- { FLUSH_OP__DIRTY, 0, 2, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- }
- };
- int check_size = 2;
- struct fo_flush_entry_check checks[2] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* expected_size = */ PICO_ENTRY_SIZE,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ TRUE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 2,
- /* expected_size = */ PICO_ENTRY_SIZE,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ TRUE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- }
-
- if ( pass1 ) /* test #15 */
- {
- /* Test the ability of the cache to handle the case in which
- * the flush function of an entry that is resident in cache
- * resizes and dirties two entries that are not in cache.
- *
- * At present, I am assured that this case will never occur, but
- * lets make sure we can handle it regardless.
- */
- int test_num = 15;
- unsigned int flush_flags = H5C1__NO_FLAGS_SET;
- int spec_size = 1;
- int init_expected_index_len = 1;
- size_t init_expected_index_size = 1 * VARIABLE_ENTRY_SIZE;
- int expected_index_len = 3;
- size_t expected_index_size = VARIABLE_ENTRY_SIZE +
- (VARIABLE_ENTRY_SIZE / 4) +
- (VARIABLE_ENTRY_SIZE / 2);
- struct fo_flush_cache_test_spec spec[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 1,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 4,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
- int check_size = 2;
- struct fo_flush_entry_check checks[2] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 4,
- /* in_cache = */ TRUE,
- /* at_main_addr = */ TRUE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 2,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 2,
- /* in_cache = */ TRUE,
- /* at_main_addr = */ TRUE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- }
-
- if ( pass1 ) /* test #16 */
- {
- /* Repeat previous test with the flush invalidate flag.
- *
- * Test the ability of the cache to handle the case in which
- * the flush function of an entry that is resident in cache
- * resizes and dirties two entries that are not in cache.
- *
- * At present, I am assured that this case will never occur, but
- * lets make sure we can handle it regardless.
- */
- int test_num = 16;
- unsigned int flush_flags = H5C1__FLUSH_INVALIDATE_FLAG;
- int spec_size = 1;
- int init_expected_index_len = 1;
- size_t init_expected_index_size = 1 * VARIABLE_ENTRY_SIZE;
- int expected_index_len = 0;
- size_t expected_index_size = (size_t)0;
- struct fo_flush_cache_test_spec spec[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 1,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 4,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- }
- };
- int check_size = 2;
- struct fo_flush_entry_check checks[2] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 4,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ TRUE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 2,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 2,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ TRUE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- }
-
- if ( pass1 ) /* test #17 & #18 */
- {
- /* Test the ability of the cache to handle the case in which
- * the flush function of an entry that is resident in cache
- * resizes, dirties, and renames two entries that are not in cache.
- *
- * At present, I am assured that this case will never occur, but
- * lets make sure we can handle it regardless.
- */
- int test_num = 17; /* and 18 */
- unsigned int flush_flags = H5C1__NO_FLAGS_SET;
- int spec_size = 1;
- int init_expected_index_len = 1;
- size_t init_expected_index_size = 1 * VARIABLE_ENTRY_SIZE;
- int expected_index_len = 3;
- size_t expected_index_size = VARIABLE_ENTRY_SIZE +
- (VARIABLE_ENTRY_SIZE / 4) +
- (VARIABLE_ENTRY_SIZE / 2);
- struct fo_flush_cache_test_spec spec[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 1,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 6,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 2, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
- int check_size = 2;
- struct fo_flush_entry_check checks[2] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 4,
- /* in_cache = */ TRUE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 2,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 2,
- /* in_cache = */ TRUE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
-
- /* this change forces the renames to move the target entries back to
- * their main address. The first test moved them to their alternate
- * address.
- *
- * Note that these two tests are not the same, as in the first test,
- * the renamed entries are moved forward in the slist. In the second
- * they are moved backwards.
- */
- if ( pass1 ) {
-
- test_num = 18;
- spec[0].flush_ops[2].flag = TRUE;
- spec[0].flush_ops[5].flag = TRUE;
- checks[0].at_main_addr = TRUE;
- checks[1].at_main_addr = TRUE;
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- }
- }
-
- if ( pass1 ) /* test #19 & #20 */
- {
- /* Repeat the above test with the flush invalidate flag on the
- * second test.
- *
- * Test the ability of the cache to handle the case in which
- * the flush function of an entry that is resident in cache
- * resizes, dirties, and renames two entries that are not in cache.
- *
- * At present, I am assured that this case will never occur, but
- * lets make sure we can handle it regardless.
- */
- int test_num = 19; /* and 20 */
- unsigned int flush_flags = H5C1__NO_FLAGS_SET;
- int spec_size = 1;
- int init_expected_index_len = 1;
- size_t init_expected_index_size = 1 * VARIABLE_ENTRY_SIZE;
- int expected_index_len = 3;
- size_t expected_index_size = VARIABLE_ENTRY_SIZE +
- (VARIABLE_ENTRY_SIZE / 4) +
- (VARIABLE_ENTRY_SIZE / 2);
- struct fo_flush_cache_test_spec spec[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 1,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 6,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 2, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
- int check_size = 2;
- struct fo_flush_entry_check checks[2] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 4,
- /* in_cache = */ TRUE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 2,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 2,
- /* in_cache = */ TRUE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
-
- /* this change forces the renames to move the target entries back to
- * their main address. The first test moved them to their alternate
- * address.
- *
- * Note that these two tests are not the same, as in the first test,
- * the renamed entries are moved forward in the slist. In the second
- * they are moved backwards.
- */
- if ( pass1 ) {
-
- test_num = 20;
- flush_flags = H5C1__FLUSH_INVALIDATE_FLAG;
- expected_index_len = 0;
- expected_index_size = (size_t)0;
- spec[0].expected_destroyed = TRUE;
- spec[0].flush_ops[2].flag = TRUE;
- spec[0].flush_ops[5].flag = TRUE;
- checks[0].at_main_addr = TRUE;
- checks[0].in_cache = FALSE;
- checks[0].expected_destroyed = TRUE;
- checks[1].at_main_addr = TRUE;
- checks[1].in_cache = FALSE;
- checks[1].expected_destroyed = TRUE;
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- }
- }
-
- if ( pass1 ) /* test #21 */
- {
- /* Now mix things up a bit.
- *
- * Load several entries, two of which have flush functions that
- * resize, dirty, and rename two entries that are not in the
- * cache. Mark only one of these entries, and then flush the
- * cache with the flush marked entries flag.
- *
- * This is the only test in which we test the
- * H5C1__FLUSH_MARKED_ENTRIES_FLAG. The hope is that since
- * we test the two features extensively by themselves, so
- * it should be sufficient to verify that they play together
- * as expected.
- */
- int test_num = 21;
- unsigned int flush_flags = H5C1__FLUSH_MARKED_ENTRIES_FLAG;
- int spec_size = 4;
- int init_expected_index_len = 4;
- size_t init_expected_index_size = (2 * VARIABLE_ENTRY_SIZE) + (2 * PICO_ENTRY_SIZE);
- int expected_index_len = 6;
- size_t expected_index_size = (2 * VARIABLE_ENTRY_SIZE) +
- (VARIABLE_ENTRY_SIZE / 4) +
- (VARIABLE_ENTRY_SIZE / 2) +
- (2 * PICO_ENTRY_SIZE);
- struct fo_flush_cache_test_spec spec[4] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 1,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG | H5C1__SET_FLUSH_MARKER_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 6,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 2, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 11,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 6,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 10, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 10, FALSE, 0 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 10, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 12, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 12, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 12, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG | H5C1__SET_FLUSH_MARKER_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 1,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- }
- };
- int check_size = 4;
- struct fo_flush_entry_check checks[4] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 4,
- /* in_cache = */ TRUE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ TRUE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 2,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 2,
- /* in_cache = */ TRUE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ TRUE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* expected_size = */ VARIABLE_ENTRY_SIZE,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ TRUE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 12,
- /* expected_size = */ VARIABLE_ENTRY_SIZE,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ TRUE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- reset_entries1();
- }
-
- if ( pass1 ) /* test #22 */
- {
- /* Mix things up some more.
- *
- * Load lots of entries, some of which have flush functions that
- * resize, dirty, and rename two entries that are not in the
- * cache.
- *
- * Also load entries that have flush ops on entries that are in
- * cache.
- */
- int test_num = 22;
- unsigned int flush_flags = H5C1__NO_FLAGS_SET;
- int spec_size = 6;
- int init_expected_index_len = 6;
- size_t init_expected_index_size = (2 * VARIABLE_ENTRY_SIZE) + (4 * PICO_ENTRY_SIZE);
- int expected_index_len = 10;
- size_t expected_index_size = (2 * VARIABLE_ENTRY_SIZE) +
- (2 * (VARIABLE_ENTRY_SIZE / 4)) +
- (2 * (VARIABLE_ENTRY_SIZE / 2)) +
- (4 * PICO_ENTRY_SIZE);
- struct fo_flush_cache_test_spec spec[6] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 1,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 6,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 2, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 11,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 6,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 10, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 10, FALSE, 0 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 10, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 12, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 12, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 12, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 1,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 1,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 20,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 1,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
- int check_size = 4;
- struct fo_flush_entry_check checks[4] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 4,
- /* in_cache = */ TRUE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 2,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 2,
- /* in_cache = */ TRUE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 4,
- /* in_cache = */ TRUE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 12,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 2,
- /* in_cache = */ TRUE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- reset_entries1();
- }
-
- if ( pass1 ) /* test #23 */
- {
- /* Repeat test #23 with the flush invalidate flag set.
- *
- * Mix things up some more.
- *
- * Load lots of entries, some of which have flush functions that
- * resize, dirty, and rename two entries that are not in the
- * cache.
- *
- * Also load entries that have flush ops on entries that are in
- * cache.
- */
- int test_num = 23;
- unsigned int flush_flags = H5C1__FLUSH_INVALIDATE_FLAG;
- int spec_size = 6;
- int init_expected_index_len = 6;
- size_t init_expected_index_size = (2 * VARIABLE_ENTRY_SIZE) + (4 * PICO_ENTRY_SIZE);
- int expected_index_len = 0;
- size_t expected_index_size = 0;
- struct fo_flush_cache_test_spec spec[6] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 1,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 6,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 2, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 11,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 6,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 10, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 10, FALSE, 0 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 10, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 12, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 12, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 12, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 1,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 1,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 20,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 1,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- }
- };
- int check_size = 4;
- struct fo_flush_entry_check checks[4] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 0,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 4,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 2,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 2,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 10,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 4,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 12,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 2,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- reset_entries1();
- }
-
- /* So much for tests involving only flush operations.
- *
- * Now create some tests mixing flush ops and pins.
- */
- if ( pass1 ) /* test #24 */
- {
- /* Pico entries 50 and 150 pin pico entry 100, and also dirty
- * pico entry 100 on flush.
- */
- int test_num = 24;
- unsigned int flush_flags = H5C1__NO_FLAGS_SET;
- int spec_size = 3;
- int init_expected_index_len = 3;
- size_t init_expected_index_size = 3 * PICO_ENTRY_SIZE;
- int expected_index_len = 3;
- size_t expected_index_size = 3 * PICO_ENTRY_SIZE;
- struct fo_flush_cache_test_spec spec[3] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 50,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 1,
- /* pin_type = */ {PICO_ENTRY_TYPE, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {100, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 1,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE, 100, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 150,
- /* insert_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 1,
- /* pin_type = */ {PICO_ENTRY_TYPE, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {100, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 1,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE, 100, FALSE, 0 },
- { FLUSH_OP__DIRTY, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
- int check_size = 0;
- struct fo_flush_entry_check checks[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ 0,
- /* entry_index = */ 0,
- /* expected_size = */ (size_t)0,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- }
-
- if ( pass1 ) /* test #25 */
- {
- /* Repeat the previous test with the flush invalidate flag.
- *
- * Pico entries 50 and 150 pin pico entry 100, and also dirty
- * pico entry 100 on flush.
- */
- int test_num = 25;
- unsigned int flush_flags = H5C1__FLUSH_INVALIDATE_FLAG;
- int spec_size = 3;
- int init_expected_index_len = 3;
- size_t init_expected_index_size = 3 * PICO_ENTRY_SIZE;
- int expected_index_len = 0;
- size_t expected_index_size = (size_t)0;
- struct fo_flush_cache_test_spec spec[3] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 50,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 1,
- /* pin_type = */ {PICO_ENTRY_TYPE, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {100, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 1,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE, 100, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ PICO_ENTRY_TYPE,
- /* entry_index = */ 150,
- /* insert_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 1,
- /* pin_type = */ {PICO_ENTRY_TYPE, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {100, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 1,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, PICO_ENTRY_TYPE, 100, FALSE, 0 },
- { FLUSH_OP__DIRTY, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- }
- };
- int check_size = 0;
- struct fo_flush_entry_check checks[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ 0,
- /* entry_index = */ 0,
- /* expected_size = */ (size_t)0,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
- }
-
- if ( pass1 ) /* test #26 */
- {
- /* This one is complex.
- *
- * In the following overvies table, VET stands for
- * VARIABLE_ENTRY_TYPE.
- *
- * In trying to follow what happens when we flush the
- * set of entries constructed below, recall that each
- * flush operation is executed the first time the
- * entry is flushed, and then not executed again.
- * This may be a weakness in the tests, but that
- * is the way it is for now.
- *
- * After thinking about it for a while, I'm not sure that
- * the interaction between pins and flush operations needs
- * all that much testing, as the two are essentially
- * orthoginal. Thus this is a bit of a smoke check to
- * verify that we get the expected results.
- *
- * (VET, 100) initially not resident in cache
- *
- * (VET, 200) initially clean and resident in cache
- *
- * (VET, 300) initially not resident in cache
- *
- * (VET, 2100) initially clean and resident in cache
- *
- * (VET, 2200) initially not resident in cache
- *
- * (VET, 2300) initially clean and resident in cache
- *
- * (VET, 1000) initially clean, and in cache
- * dirties (VET, 100)
- * resizes (VET, 200)
- * dirty (VET, 300) -- dirty first to bring into cache.
- * renames (VET, 300)
- *
- * (VET, 2000) initially clean, and in cache
- * dirties (VET, 2100)
- * resizes (VET, 2200)
- * renames (VET, 2300)
- *
- * (VET, 350) initially clean, and in cache
- * pins (VET, 1000)
- * dirties (VET, 1000)
- * resizes (VET, 350)
- * pins (VET, 2000)
- * dirties (VET, 2000)
- *
- * (VET, 450) initially dirty, and in cache
- * pins (VET, 1000)
- * dirties (VET, 1000)
- * renames (VET, 450)
- * pins (VET, 2000)
- * dirties (VET, 2000)
- *
- * (VET, 650) initially clean, and in cache
- * pins (VET, 1000)
- * dirties (VET, 1000)
- * resizes (VET, 650)
- * pins (VET, 2000)
- * dirties (VET, 2000)
- *
- * (VET, 750) initially dirty, and in cache
- * pins (VET, 1000)
- * dirties (VET, 1000)
- * resizes (VET, 750)
- * pins (VET, 2000)
- * dirties (VET, 2000)
- *
- * (VET, 500) initially dirty, and in cache
- * dirties (VET, 350)
- * dirties (VET, 450)
- * dirties (VET, 650)
- * dirties (VET, 750)
- */
- int test_num = 26;
- unsigned int flush_flags = H5C1__NO_FLAGS_SET;
- int spec_size = 10;
- int init_expected_index_len = 10;
- size_t init_expected_index_size = 10 * VARIABLE_ENTRY_SIZE;
- int expected_index_len = 13;
- size_t expected_index_size = 9 * VARIABLE_ENTRY_SIZE;
- struct fo_flush_cache_test_spec spec[10] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 200,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 2100,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 2300,
- /* insert_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 1000,
- /* insert_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 4,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 200, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 300, FALSE, 0 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 300, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 2000,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 3,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2100, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2200, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 2300, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 350,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 2,
- /* pin_type = */ {VARIABLE_ENTRY_TYPE, VARIABLE_ENTRY_TYPE, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {1000, 2000, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 3,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 350, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 6,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 450,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 2,
- /* pin_type = */ {VARIABLE_ENTRY_TYPE, VARIABLE_ENTRY_TYPE, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {1000, 2000, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 3,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 450, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 7,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 650,
- /* insert_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 2,
- /* pin_type = */ {VARIABLE_ENTRY_TYPE, VARIABLE_ENTRY_TYPE, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {1000, 2000, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 3,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 650, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 8,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 750,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 2,
- /* pin_type = */ {VARIABLE_ENTRY_TYPE, VARIABLE_ENTRY_TYPE, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {1000, 2000, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 3,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 750, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 9,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 500,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 4,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 350, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 450, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 650, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 750, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
- int check_size = 3;
- struct fo_flush_entry_check checks[3] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* expected_size = */ VARIABLE_ENTRY_SIZE,
- /* in_cache = */ TRUE,
- /* at_main_addr = */ TRUE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 300,
- /* expected_size = */ VARIABLE_ENTRY_SIZE,
- /* in_cache = */ TRUE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 2200,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 2,
- /* in_cache = */ TRUE,
- /* at_main_addr = */ TRUE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
-
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
-
- reset_entries1();
- }
-
- if ( pass1 ) /* test #27 */
- {
- /* Repeat test #26 with the flush invalidate flag.
- *
- * In the following overview table, VET stands for
- * VARIABLE_ENTRY_TYPE.
- *
- * In trying to follow what happens when we flush the
- * set of entries constructed below, recall that each
- * flush operation is executed the first time the
- * entry is flushed, and then not executed again.
- * This may be a weakness in the tests, but that
- * is the way it is for now.
- *
- * After thinking about it for a while, I'm not sure that
- * the interaction between pins and flush operations needs
- * all that much testing, as the two are essentially
- * orthoginal. The big thing is to verify that flushes of
- * pinned entries with flush ops result in the expected
- * updates of the cache.
- *
- * Thus this is a bit of a smoke check to * verify that we
- * get the expected results.
- *
- * (VET, 100) initially not resident in cache
- *
- * (VET, 200) initially clean and resident in cache
- *
- * (VET, 300) initially not resident in cache
- *
- * (VET, 2100) initially clean and resident in cache
- *
- * (VET, 2200) initially not resident in cache
- *
- * (VET, 2300) initially clean and resident in cache
- *
- * (VET, 1000) initially clean, and in cache
- * dirties (VET, 100)
- * resizes (VET, 200)
- * dirty (VET, 300) -- dirty first to bring into cache.
- * renames (VET, 300)
- *
- * (VET, 2000) initially clean, and in cache
- * dirties (VET, 2100)
- * resizes (VET, 2200)
- * renames (VET, 2300)
- *
- * (VET, 350) initially clean, and in cache
- * pins (VET, 1000)
- * dirties (VET, 1000)
- * resizes (VET, 350)
- * pins (VET, 2000)
- * dirties (VET, 2000)
- *
- * (VET, 450) initially dirty, and in cache
- * pins (VET, 1000)
- * dirties (VET, 1000)
- * renames (VET, 450)
- * pins (VET, 2000)
- * dirties (VET, 2000)
- *
- * (VET, 650) initially clean, and in cache
- * pins (VET, 1000)
- * dirties (VET, 1000)
- * resizes (VET, 650)
- * pins (VET, 2000)
- * dirties (VET, 2000)
- *
- * (VET, 750) initially dirty, and in cache
- * pins (VET, 1000)
- * dirties (VET, 1000)
- * resizes (VET, 750)
- * pins (VET, 2000)
- * dirties (VET, 2000)
- *
- * (VET, 500) initially dirty, and in cache
- * dirties (VET, 350)
- * dirties (VET, 450)
- * dirties (VET, 650)
- * dirties (VET, 750)
- */
- int test_num = 27;
- unsigned int flush_flags = H5C1__FLUSH_INVALIDATE_FLAG;
- int spec_size = 10;
- int init_expected_index_len = 10;
- size_t init_expected_index_size = 10 * VARIABLE_ENTRY_SIZE;
- int expected_index_len = 0;
- size_t expected_index_size = (size_t)0;
- struct fo_flush_cache_test_spec spec[10] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 200,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 2100,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 2300,
- /* insert_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 1000,
- /* insert_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 4,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 200, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 300, FALSE, 0 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 300, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 2000,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 3,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2100, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 2200, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 2300, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 5,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 350,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 2,
- /* pin_type = */ {VARIABLE_ENTRY_TYPE, VARIABLE_ENTRY_TYPE, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {1000, 2000, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 3,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 350, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 6,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 450,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 2,
- /* pin_type = */ {VARIABLE_ENTRY_TYPE, VARIABLE_ENTRY_TYPE, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {1000, 2000, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 3,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 450, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 7,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 650,
- /* insert_flag = */ TRUE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 2,
- /* pin_type = */ {VARIABLE_ENTRY_TYPE, VARIABLE_ENTRY_TYPE, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {1000, 2000, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 3,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 650, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 8,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 750,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 2,
- /* pin_type = */ {VARIABLE_ENTRY_TYPE, VARIABLE_ENTRY_TYPE, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {1000, 2000, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 3,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 1000, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 2000, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 750, FALSE, VARIABLE_ENTRY_SIZE / 4 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 9,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 500,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 4,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 350, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 450, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 650, FALSE, 0 },
- { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 750, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- }
- };
- int check_size = 3;
- struct fo_flush_entry_check checks[3] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* expected_size = */ VARIABLE_ENTRY_SIZE,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ TRUE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 300,
- /* expected_size = */ VARIABLE_ENTRY_SIZE,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 2200,
- /* expected_size = */ VARIABLE_ENTRY_SIZE / 2,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ TRUE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- }
-
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
-
- reset_entries1();
- }
-
- if ( pass1 ) /* test #28 */
- {
- /* Test the expected fheap case, in which an entry dirties
- * and resizes itself, and dirties an entry which it has
- * pinned.
- */
- int test_num = 28;
- unsigned int flush_flags = H5C1__NO_FLAGS_SET;
- int spec_size = 5;
- int init_expected_index_len = 5;
- size_t init_expected_index_size = 3 * VARIABLE_ENTRY_SIZE;
- int expected_index_len = 5;
- size_t expected_index_size = 4 * VARIABLE_ENTRY_SIZE;
- struct fo_flush_cache_test_spec spec[5] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 200,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG | H5C1__SIZE_CHANGED_FLAG,
- /* new_size = */ VARIABLE_ENTRY_SIZE / 2,
- /* num_pins = */ 1,
- /* pin_type = */ {VARIABLE_ENTRY_TYPE, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {100, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 3,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 200, FALSE, VARIABLE_ENTRY_SIZE },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 200, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 300,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG | H5C1__SIZE_CHANGED_FLAG,
- /* new_size = */ VARIABLE_ENTRY_SIZE / 4,
- /* num_pins = */ 1,
- /* pin_type = */ {VARIABLE_ENTRY_TYPE, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {400, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 3,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 400, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 300, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 300, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 400,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 500,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG | H5C1__SIZE_CHANGED_FLAG,
- /* new_size = */ VARIABLE_ENTRY_SIZE / 4,
- /* num_pins = */ 1,
- /* pin_type = */ {VARIABLE_ENTRY_TYPE, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {100, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 3,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 500, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 500, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ FALSE
- }
- };
- int check_size = 0;
- struct fo_flush_entry_check checks[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ 0,
- /* entry_index = */ 0,
- /* expected_size = */ 0,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
-
- reset_entries1();
- }
-
- if ( pass1 ) /* test #29 */
- {
- /* Repeat test #28 with the flush invalidate flag.
- *
- * Test the expected fheap case, in which an entry dirties
- * and resizes itself, and dirties an entry which it has
- * pinned.
- */
- int test_num = 29;
- unsigned int flush_flags = H5C1__FLUSH_INVALIDATE_FLAG;
- int spec_size = 5;
- int init_expected_index_len = 5;
- size_t init_expected_index_size = 3 * VARIABLE_ENTRY_SIZE;
- int expected_index_len = 0;
- size_t expected_index_size = 0;
- struct fo_flush_cache_test_spec spec[5] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 100,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 1,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 200,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG | H5C1__SIZE_CHANGED_FLAG,
- /* new_size = */ VARIABLE_ENTRY_SIZE / 2,
- /* num_pins = */ 1,
- /* pin_type = */ {VARIABLE_ENTRY_TYPE, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {100, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 3,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 200, FALSE, VARIABLE_ENTRY_SIZE },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 200, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 2,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 300,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG | H5C1__SIZE_CHANGED_FLAG,
- /* new_size = */ VARIABLE_ENTRY_SIZE / 4,
- /* num_pins = */ 1,
- /* pin_type = */ {VARIABLE_ENTRY_TYPE, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {400, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 3,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 400, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 300, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 300, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 3,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 400,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__NO_FLAGS_SET,
- /* new_size = */ 0,
- /* num_pins = */ 0,
- /* pin_type = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {0, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 0,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- },
- {
- /* entry_num = */ 4,
- /* entry_type = */ VARIABLE_ENTRY_TYPE,
- /* entry_index = */ 500,
- /* insert_flag = */ FALSE,
- /* flags = */ H5C1__DIRTIED_FLAG | H5C1__SIZE_CHANGED_FLAG,
- /* new_size = */ VARIABLE_ENTRY_SIZE / 4,
- /* num_pins = */ 1,
- /* pin_type = */ {VARIABLE_ENTRY_TYPE, 0, 0, 0, 0, 0, 0, 0},
- /* pin_idx = */ {100, 0, 0, 0, 0, 0, 0, 0},
- /* num_flush_ops = */ 3,
- /* flush_ops = */
- /* op_code: type: idx: flag: size: */
- { { FLUSH_OP__DIRTY, VARIABLE_ENTRY_TYPE, 100, FALSE, 0 },
- { FLUSH_OP__RESIZE, VARIABLE_ENTRY_TYPE, 500, FALSE, VARIABLE_ENTRY_SIZE / 2 },
- { FLUSH_OP__RENAME, VARIABLE_ENTRY_TYPE, 500, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 },
- { FLUSH_OP__NO_OP, 0, 0, FALSE, 0 } },
- /* expected_loaded = */ TRUE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ TRUE,
- /* expected_destroyed = */ TRUE
- }
- };
- int check_size = 0;
- struct fo_flush_entry_check checks[1] =
- {
- {
- /* entry_num = */ 0,
- /* entry_type = */ 0,
- /* entry_index = */ 0,
- /* expected_size = */ 0,
- /* in_cache = */ FALSE,
- /* at_main_addr = */ FALSE,
- /* is_dirty = */ FALSE,
- /* is_protected = */ FALSE,
- /* is_pinned = */ FALSE,
- /* expected_loaded = */ FALSE,
- /* expected_cleared = */ FALSE,
- /* expected_flushed = */ FALSE,
- /* expected_destroyed = */ FALSE
- }
- };
-
- check_flush_cache1__flush_op_test(cache_ptr,
- test_num,
- flush_flags,
- spec_size,
- spec,
- init_expected_index_len,
- init_expected_index_size,
- expected_index_len,
- expected_index_size,
- check_size,
- checks);
-
- reset_entries1();
- }
-
- /* finally finish up with the flush ops eviction test */
- check_flush_cache1__flush_op_eviction_test(cache_ptr);
-
- return;
-
-} /* check_flush_cache1__flush_ops() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_flush_cache1__flush_op_test()
- *
- * Purpose: Run a flush op flush cache test. Of the nature of
- * flush operations, this is a multi-entry test.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 9/3/06
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_flush_cache1__flush_op_test(H5C1_t * cache_ptr,
- int test_num,
- unsigned int flush_flags,
- int spec_size,
- struct fo_flush_cache_test_spec spec[],
- int init_expected_index_len,
- size_t init_expected_index_size,
- int expected_index_len,
- size_t expected_index_size,
- int check_size,
- struct fo_flush_entry_check check[])
-{
- /* const char * fcn_name = "check_flush_cache1__flush_op_test"; */
- static char msg[128];
- herr_t result;
- int i;
- int j;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
-#if 0 /* This is useful debugging code -- lets keep it around. */
- HDfprintf(stdout, "check_flush_cache1__flush_op_test: test %d\n",
- test_num);
-#endif
-
- if ( cache_ptr == NULL ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "cache_ptr NULL on entry to flush op test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- else if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ) {
-
- pass1 = FALSE;
-
- HDsnprintf(msg, (size_t)128,
- "cache not empty at beginning of flush op test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- else if ( ( spec_size < 1 ) || ( spec == NULL ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "missing/bad test spec on entry to flush op test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
-
- i = 0;
- while ( ( pass1 ) && ( i < spec_size ) )
- {
- if ( ( spec[i].entry_num != i ) ||
- ( spec[i].entry_type < 0 ) ||
- ( spec[i].entry_type >= NUMBER_OF_ENTRY_TYPES ) ||
- ( spec[i].entry_index < 0 ) ||
- ( spec[i].entry_index > max_indices1[spec[i].entry_type] ) ||
- ( spec[i].num_pins < 0 ) ||
- ( spec[i].num_pins > MAX_PINS ) ||
- ( spec[i].num_flush_ops < 0 ) ||
- ( spec[i].num_flush_ops > MAX_FLUSH_OPS ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "bad data in spec[%d] on entry to flush op test #%d.",
- i, test_num);
- failure_mssg1 = msg;
- }
- i++;
- }
-
- i = 0;
- while ( ( pass1 ) && ( i < check_size ) )
- {
- if ( ( check[i].entry_num != i ) ||
- ( check[i].entry_type < 0 ) ||
- ( check[i].entry_type >= NUMBER_OF_ENTRY_TYPES ) ||
- ( check[i].entry_index < 0 ) ||
- ( check[i].entry_index > max_indices1[check[i].entry_type] ) ||
- ( check[i].expected_size <= (size_t)0 ) ||
- ( ( check[i].in_cache != TRUE ) &&
- ( check[i].in_cache != FALSE ) ) ||
- ( ( check[i].at_main_addr != TRUE ) &&
- ( check[i].at_main_addr != FALSE ) ) ||
- ( ( check[i].is_dirty != TRUE ) &&
- ( check[i].is_dirty != FALSE ) ) ||
- ( ( check[i].is_protected != TRUE ) &&
- ( check[i].is_protected != FALSE ) ) ||
- ( ( check[i].is_pinned != TRUE ) &&
- ( check[i].is_pinned != FALSE ) ) ||
- ( ( check[i].expected_loaded != TRUE ) &&
- ( check[i].expected_loaded != FALSE ) ) ||
- ( ( check[i].expected_cleared != TRUE ) &&
- ( check[i].expected_cleared != FALSE ) ) ||
- ( ( check[i].expected_flushed != TRUE ) &&
- ( check[i].expected_flushed != FALSE ) ) ||
- ( ( check[i].expected_destroyed != TRUE ) &&
- ( check[i].expected_destroyed != FALSE ) ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "bad data in check[%d] on entry to flush op test #%d.",
- i, test_num);
- failure_mssg1 = msg;
- }
- i++;
- }
-
- i = 0;
- while ( ( pass1 ) && ( i < spec_size ) )
- {
- if ( spec[i].insert_flag ) {
-
- insert_entry1(cache_ptr, spec[i].entry_type, spec[i].entry_index,
- TRUE, spec[i].flags);
-
- } else {
-
- protect_entry1(cache_ptr, spec[i].entry_type, spec[i].entry_index);
-
- unprotect_entry1_with_size_change(cache_ptr, spec[i].entry_type,
- spec[i].entry_index,
- spec[i].flags, spec[i].new_size);
- }
-
- for ( j = 0; j < spec[i].num_pins; j++ )
- {
- create_pinned_entry_dependency1(cache_ptr,
- spec[i].entry_type,
- spec[i].entry_index,
- spec[i].pin_type[j],
- spec[i].pin_idx[j]);
- }
-
- for ( j = 0; j < spec[i].num_flush_ops; j++ )
- {
- add_flush_op1(spec[i].entry_type,
- spec[i].entry_index,
- spec[i].flush_ops[j].op_code,
- spec[i].flush_ops[j].type,
- spec[i].flush_ops[j].idx,
- spec[i].flush_ops[j].flag,
- spec[i].flush_ops[j].size);
- }
-
- i++;
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != init_expected_index_len ) ||
- ( cache_ptr->index_size != init_expected_index_size ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Unexpected cache len/size before flush in flush op test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_flush_cache(NULL, -1, -1, cache_ptr, flush_flags);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "flush with flags 0x%x failed in flush op test #%d.",
- flush_flags, test_num);
- failure_mssg1 = msg;
- }
- }
-
-
- i = 0;
- while ( ( pass1 ) && ( i < spec_size ) )
- {
- base_addr = entries1[spec[i].entry_type];
- entry_ptr = &(base_addr[spec[i].entry_index]);
-
- if ( ( entry_ptr->loaded != spec[i].expected_loaded ) ||
- ( entry_ptr->cleared != spec[i].expected_cleared ) ||
- ( entry_ptr->flushed != spec[i].expected_flushed ) ||
- ( entry_ptr->destroyed != spec[i].expected_destroyed ) ) {
-
-#if 0 /* This is useful debugging code. Lets keep it around. */
-
- HDfprintf(stdout,
- "loaded = %d(%d), clrd = %d(%d), flshd = %d(%d), dest = %d(%d)\n",
- (int)(entry_ptr->loaded),
- (int)(spec[i].expected_loaded),
- (int)(entry_ptr->cleared),
- (int)(spec[i].expected_cleared),
- (int)(entry_ptr->flushed),
- (int)(spec[i].expected_flushed),
- (int)(entry_ptr->destroyed),
- (int)(spec[i].expected_destroyed));
-
- HDfprintf(stdout, "entry_ptr->header.is_dirty = %d\n",
- (int)(entry_ptr->header.is_dirty));
-#endif
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Bad status on entry %d after flush op test #%d.",
- i, test_num);
- failure_mssg1 = msg;
- }
- i++;
- }
-
- if ( pass1 ) {
-
- i = 0;
- while ( ( pass1 ) && ( i < check_size ) )
- {
- if ( check[i].in_cache != entry_in_cache1(cache_ptr,
- check[i].entry_type,
- check[i].entry_index) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Check1 failed on entry %d after flush op test #%d.",
- i, test_num);
- failure_mssg1 = msg;
- }
-
- base_addr = entries1[check[i].entry_type];
- entry_ptr = &(base_addr[check[i].entry_index]);
-
- if ( ( entry_ptr->size != check[i].expected_size ) ||
- ( ( ! entry_ptr->header.destroy_in_progress ) &&
- ( check[i].in_cache ) &&
- ( entry_ptr->header.size != check[i].expected_size ) ) ||
- ( entry_ptr->at_main_addr != check[i].at_main_addr ) ||
- ( entry_ptr->is_dirty != check[i].is_dirty ) ||
- ( entry_ptr->header.is_dirty != check[i].is_dirty ) ||
- ( entry_ptr->is_protected != check[i].is_protected ) ||
- ( entry_ptr->header.is_protected != check[i].is_protected ) ||
- ( entry_ptr->is_pinned != check[i].is_pinned ) ||
- ( entry_ptr->header.is_pinned != check[i].is_pinned ) ||
- ( entry_ptr->loaded != check[i].expected_loaded ) ||
- ( entry_ptr->cleared != check[i].expected_cleared ) ||
- ( entry_ptr->flushed != check[i].expected_flushed ) ||
- ( entry_ptr->destroyed != check[i].expected_destroyed ) ) {
-
-#if 0 /* This is useful debugging code. Lets keep it around for a while. */
-
- if ( entry_ptr->size != check[i].expected_size ) {
- HDfprintf(stdout, "entry_ptr->size (expected) = %d (%d).\n",
- (int)(entry_ptr->size),
- (int)(check[i].expected_size));
- }
- if ( ( ! entry_ptr->header.destroy_in_progress ) &&
- ( check[i].in_cache ) &&
- ( entry_ptr->header.size != check[i].expected_size ) ) {
- HDfprintf(stdout,
- "(!destroy in progress and in cache and size (expected) = %d (%d).\n",
- (int)(entry_ptr->header.size),
- (int)(check[i].expected_size));
- }
- if ( entry_ptr->at_main_addr != check[i].at_main_addr ) {
- HDfprintf(stdout, "(%d,%d) at main addr (expected) = %d (%d).\n",
- (int)(check[i].entry_type),
- (int)(check[i].entry_index),
- (int)(entry_ptr->at_main_addr),
- (int)(check[i].at_main_addr));
- }
- if ( entry_ptr->is_dirty != check[i].is_dirty ) {
- HDfprintf(stdout, "entry_ptr->is_dirty (expected) = %d (%d).\n",
- (int)(entry_ptr->is_dirty),
- (int)(check[i].is_dirty));
- }
- if ( entry_ptr->header.is_dirty != check[i].is_dirty ) {
- HDfprintf(stdout, "entry_ptr->header.is_dirty (expected) = %d (%d).\n",
- (int)(entry_ptr->header.is_dirty),
- (int)(check[i].is_dirty));
- }
- if ( entry_ptr->is_protected != check[i].is_protected ) {
- HDfprintf(stdout, "entry_ptr->is_protected (expected) = %d (%d).\n",
- (int)(entry_ptr->is_protected),
- (int)(check[i].is_protected));
- }
- if ( entry_ptr->header.is_protected != check[i].is_protected ) {
- HDfprintf(stdout, "entry_ptr->header.is_protected (expected) = %d (%d).\n",
- (int)(entry_ptr->is_protected),
- (int)(check[i].is_protected));
- }
- if ( entry_ptr->is_pinned != check[i].is_pinned ) {
- HDfprintf(stdout, "entry_ptr->is_pinned (expected) = %d (%d).\n",
- (int)(entry_ptr->is_pinned),
- (int)(check[i].is_pinned));
- }
- if ( entry_ptr->header.is_pinned != check[i].is_pinned ) {
- HDfprintf(stdout, "entry_ptr->header.is_pinned (expected) = %d (%d).\n",
- (int)(entry_ptr->header.is_pinned),
- (int)(check[i].is_pinned));
- }
- if ( entry_ptr->loaded != check[i].expected_loaded ) {
- HDfprintf(stdout, "entry_ptr->loaded (expected) = %d (%d).\n",
- (int)(entry_ptr->loaded),
- (int)(check[i].expected_loaded));
- }
- if ( entry_ptr->cleared != check[i].expected_cleared ) {
- HDfprintf(stdout, "entry_ptr->cleared (expected) = %d (%d).\n",
- (int)(entry_ptr->cleared),
- (int)(check[i].expected_cleared));
- }
- if ( entry_ptr->flushed != check[i].expected_flushed ) {
- HDfprintf(stdout, "entry_ptr->flushed (expected) = %d (%d).\n",
- (int)(entry_ptr->flushed),
- (int)(check[i].expected_flushed));
- }
- if ( entry_ptr->destroyed != check[i].expected_destroyed ) {
- HDfprintf(stdout, "entry_ptr->destroyed (expected) = %d (%d).\n",
- (int)(entry_ptr->destroyed),
- (int)(check[i].expected_destroyed));
- }
-#endif
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Check2 failed on entry %d after flush op test #%d.",
- i, test_num);
- failure_mssg1 = msg;
- }
- i++;
- }
- }
-
- if ( pass1 ) {
-
- if ( ( ( (flush_flags & H5C1__FLUSH_INVALIDATE_FLAG) == 0 )
- &&
- ( ( cache_ptr->index_len != expected_index_len )
- ||
- ( cache_ptr->index_size != expected_index_size )
- )
- )
- ||
- ( ( (flush_flags & H5C1__FLUSH_INVALIDATE_FLAG) != 0 )
- &&
- ( ( cache_ptr->index_len != 0 )
- ||
- ( cache_ptr->index_size != 0 )
- )
- )
- ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Unexpected cache len/size after flush in flush op test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- }
-
- /* clean up the cache to prep for the next test */
- if ( pass1 ) {
-
- result = H5C1_flush_cache(NULL, -1, -1, cache_ptr,
- H5C1__FLUSH_INVALIDATE_FLAG);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Flush failed on cleanup in flush op test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- else if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Unexpected cache len/size after cleanup in flush op test #%d.",
- test_num);
- failure_mssg1 = msg;
-
- }
- }
-
- i = 0;
- while ( ( pass1 ) && ( i < spec_size ) )
- {
- base_addr = entries1[spec[i].entry_type];
- entry_ptr = &(base_addr[spec[i].entry_index]);
-
- entry_ptr->size = entry_sizes1[spec[i].entry_type];
-
- entry_ptr->loaded = FALSE;
- entry_ptr->cleared = FALSE;
- entry_ptr->flushed = FALSE;
- entry_ptr->destroyed = FALSE;
-
- i++;
- }
-
- i = 0;
- while ( ( pass1 ) && ( i < check_size ) )
- {
- base_addr = entries1[check[i].entry_type];
- entry_ptr = &(base_addr[check[i].entry_index]);
-
- entry_ptr->size = entry_sizes1[check[i].entry_type];
-
- entry_ptr->loaded = FALSE;
- entry_ptr->cleared = FALSE;
- entry_ptr->flushed = FALSE;
- entry_ptr->destroyed = FALSE;
-
- i++;
- }
-
- return;
-
-} /* check_flush_cache1__flush_op_test() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_flush_cache1__flush_op_eviction_test()
- *
- * Purpose: Verify that flush operations work as expected when an
- * entry is evicted.
- *
- * Do nothing if pass1 is FALSE on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 10/3/06
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_flush_cache1__flush_op_eviction_test(H5C1_t * cache_ptr)
-{
- /* const char * fcn_name = "check_flush_cache1__flush_op_eviction_test"; */
- int i;
- int num_variable_entries1 = 8;
- int num_monster_entries1 = 31;
- int num_large_entries1 = 0;
- herr_t result;
- test_entry_t * entry_ptr;
- test_entry_t * base_addr;
- struct expected_entry_status expected[8 + 31 + 14] =
- {
- /* the expected array is used to maintain a table of the expected status of every
- * entry used in this test. Note that since the function that processes this
- * array only processes as much of it as it is told to, we don't have to
- * worry about maintaining the status of entries that we haven't used yet.
- */
- /* entry entry in at main */
- /* type: index: size: cache: addr: dirty: prot: pinned: loaded: clrd: flshd: dest: */
- { VARIABLE_ENTRY_TYPE, 0, VARIABLE_ENTRY_SIZE/2, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE },
- { VARIABLE_ENTRY_TYPE, 1, VARIABLE_ENTRY_SIZE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { VARIABLE_ENTRY_TYPE, 2, VARIABLE_ENTRY_SIZE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { VARIABLE_ENTRY_TYPE, 3, VARIABLE_ENTRY_SIZE/2, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { VARIABLE_ENTRY_TYPE, 4, VARIABLE_ENTRY_SIZE/2, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { VARIABLE_ENTRY_TYPE, 5, VARIABLE_ENTRY_SIZE/2, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { VARIABLE_ENTRY_TYPE, 6, VARIABLE_ENTRY_SIZE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { VARIABLE_ENTRY_TYPE, 7, VARIABLE_ENTRY_SIZE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 0, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 1, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 2, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 3, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 4, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 5, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 6, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 7, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 8, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 9, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 10, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 11, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 12, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 13, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 14, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 15, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 16, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 17, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 18, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 19, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 20, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 21, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 22, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 23, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 24, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 25, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 26, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 27, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 28, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 29, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { MONSTER_ENTRY_TYPE, 30, MONSTER_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { LARGE_ENTRY_TYPE, 0, LARGE_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { LARGE_ENTRY_TYPE, 1, LARGE_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { LARGE_ENTRY_TYPE, 2, LARGE_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { LARGE_ENTRY_TYPE, 3, LARGE_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { LARGE_ENTRY_TYPE, 4, LARGE_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { LARGE_ENTRY_TYPE, 5, LARGE_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { LARGE_ENTRY_TYPE, 6, LARGE_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { LARGE_ENTRY_TYPE, 7, LARGE_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { LARGE_ENTRY_TYPE, 8, LARGE_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { LARGE_ENTRY_TYPE, 9, LARGE_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { LARGE_ENTRY_TYPE, 10, LARGE_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { LARGE_ENTRY_TYPE, 11, LARGE_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { LARGE_ENTRY_TYPE, 12, LARGE_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE },
- { LARGE_ENTRY_TYPE, 13, LARGE_ENTRY_SIZE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE }
- };
-
- if ( cache_ptr == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "cache_ptr NULL on entry to flush ops test.";
- }
- else if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "cache not empty at start of flush ops eviction test.";
- }
- else if ( ( cache_ptr->max_cache_size != (2 * 1024 * 1024 ) ) ||
- ( cache_ptr->min_clean_size != (1 * 1024 * 1024 ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "unexpected cache config at start of flush op eviction test.";
-
- } else {
-
- /* set min clean size to zero for this test as it simplifies
- * computing the expected cache size after each operation.
- */
-
- cache_ptr->min_clean_size = 0;
- }
-
- if ( pass1 ) {
-
- /* the basic idea in this test is to insert a bunch of entries
- * with flush operations associated with them, and then load
- * other entries into the cache until the cache is full. At
- * that point, load yet more entries into the cache, and see
- * if the flush operations are performed as expected.
- *
- * To make things a bit more interesting, we also include a
- * couple of pins.
- */
-
- /* reset the stats before we start. If stats are enabled, we will
- * check to see if they are as expected at the end.
- */
- H5C1_stats__reset(cache_ptr);
-
-
- /* load a few entries with pin relationships and flush ops.
- * Start by just loading the entries.
- */
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 0);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 0,
- H5C1__DIRTIED_FLAG | H5C1__SIZE_CHANGED_FLAG,
- (VARIABLE_ENTRY_SIZE / 2));
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 1);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 1,
- H5C1__NO_FLAGS_SET, (size_t)0);
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 2);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 2,
- H5C1__NO_FLAGS_SET, (size_t)0);
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 3);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 3,
- H5C1__DIRTIED_FLAG | H5C1__SIZE_CHANGED_FLAG,
- (VARIABLE_ENTRY_SIZE / 2));
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 4);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 4,
- H5C1__DIRTIED_FLAG | H5C1__SIZE_CHANGED_FLAG,
- (VARIABLE_ENTRY_SIZE / 2));
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 5);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 5,
- H5C1__DIRTIED_FLAG | H5C1__SIZE_CHANGED_FLAG,
- (VARIABLE_ENTRY_SIZE / 2));
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 6);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 6,
- H5C1__NO_FLAGS_SET, (size_t)0);
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 7);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 7,
- H5C1__NO_FLAGS_SET, (size_t)0);
-
- if ( ( cache_ptr->index_len != 8 ) ||
- ( cache_ptr->index_size != (4 * (VARIABLE_ENTRY_SIZE / 2)) +
- (4 * VARIABLE_ENTRY_SIZE) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "unexpected size/len in flush op eviction test 1.";
- }
- }
-
- if ( pass1 ) {
-
- /* Now set up the pinning relationships:
- *
- * Briefly, (VET, 0) is pinned by (VET, 1), (VET, 2), and (VET, 3)
- * (VET, 7) is pinned by (VET, 3), and (VET, 5)
- */
- create_pinned_entry_dependency1(cache_ptr, VARIABLE_ENTRY_TYPE, 1,
- VARIABLE_ENTRY_TYPE, 0);
- create_pinned_entry_dependency1(cache_ptr, VARIABLE_ENTRY_TYPE, 2,
- VARIABLE_ENTRY_TYPE, 0);
- create_pinned_entry_dependency1(cache_ptr, VARIABLE_ENTRY_TYPE, 3,
- VARIABLE_ENTRY_TYPE, 0);
- create_pinned_entry_dependency1(cache_ptr, VARIABLE_ENTRY_TYPE, 3,
- VARIABLE_ENTRY_TYPE, 7);
- create_pinned_entry_dependency1(cache_ptr, VARIABLE_ENTRY_TYPE, 5,
- VARIABLE_ENTRY_TYPE, 7);
-
- /* Next, set up the flush operations:
- *
- * Briefly, (VET, 1) dirties (VET, 0)
- * resizes (VET, 0) to 3/4 VARIABLE_ENTRY_SIZE
- *
- * (VET, 2) dirties (VET, 0)
- * resizes (VET, 0) to VARIABLE_ENTRY_SIZE
- * renames (VET, 0) to its alternate address
- *
- * (VET, 3) dirties (VET, 0)
- * resizes itself to VARIABLE_ENTRY_SIZE
- *
- * (VET, 7) dirties (VET, 6)
- */
- add_flush_op1(VARIABLE_ENTRY_TYPE, 1, FLUSH_OP__DIRTY,
- VARIABLE_ENTRY_TYPE, 0, FALSE, (size_t)0);
- add_flush_op1(VARIABLE_ENTRY_TYPE, 1, FLUSH_OP__RESIZE,
- VARIABLE_ENTRY_TYPE, 0, FALSE,
- 3 * VARIABLE_ENTRY_SIZE / 4);
-
- add_flush_op1(VARIABLE_ENTRY_TYPE, 2, FLUSH_OP__DIRTY,
- VARIABLE_ENTRY_TYPE, 0, FALSE, (size_t)0);
- add_flush_op1(VARIABLE_ENTRY_TYPE, 2, FLUSH_OP__RESIZE,
- VARIABLE_ENTRY_TYPE, 0, FALSE, VARIABLE_ENTRY_SIZE);
- add_flush_op1(VARIABLE_ENTRY_TYPE, 2, FLUSH_OP__RENAME,
- VARIABLE_ENTRY_TYPE, 0, FALSE, (size_t)0);
-
- add_flush_op1(VARIABLE_ENTRY_TYPE, 3, FLUSH_OP__DIRTY,
- VARIABLE_ENTRY_TYPE, 0, FALSE, (size_t)0);
- add_flush_op1(VARIABLE_ENTRY_TYPE, 3, FLUSH_OP__RESIZE,
- VARIABLE_ENTRY_TYPE, 3, FALSE, VARIABLE_ENTRY_SIZE);
-
- add_flush_op1(VARIABLE_ENTRY_TYPE, 7, FLUSH_OP__DIRTY,
- VARIABLE_ENTRY_TYPE, 6, FALSE, (size_t)0);
- }
-
- if ( pass1 ) {
-
- /* to summarize, at present the following variable size entries
- * are in cache with the following characteristics:
- *
- * in
- * entry: cache? size: dirty? pinned? pins: flush operations:
- *
- * (VET, 0) Y 5 KB Y Y - -
- *
- * (VET, 1) Y 10 KB N N 0 dirty (VET, 0),
- * resize (VET, 0) to 7.5 KB
- *
- * (VET, 2) Y 10 KB N N 0 dirty (VET, 0)
- * resize (VET, 0) to 10 KB
- * rename (VET, 0) to its alternate address
- *
- * (VET, 3) Y 5 KB Y N 0, 7 dirty (VET, 0)
- * resize (VET, 3) to 10 KB
- *
- * (VET, 4) Y 5 KB Y N - -
- *
- * (VET, 5) Y 5 KB Y N 7 -
- *
- * (VET, 6) Y 10 KB N N - -
- *
- * (VET, 7) Y 10 KB N Y - dirty (VET, 6)
- *
- * Recall that in this test bed, flush operations are excuted the
- * first time the associated entry is flushed, and are then
- * deleted.
- */
-
- /* Now fill up the cache with other, unrelated entries */
- for ( i = 0; i < 31; i++ )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
- unprotect_entry1_with_size_change(cache_ptr, MONSTER_ENTRY_TYPE, i,
- H5C1__DIRTIED_FLAG, (size_t)0);
- }
-
- for ( i = 0; i < 1; i++ )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
- unprotect_entry1_with_size_change(cache_ptr, LARGE_ENTRY_TYPE, i,
- H5C1__DIRTIED_FLAG, (size_t)0);
- }
-
- /* The cache should now be exactly full */
- if ( ( cache_ptr->index_len != 40 ) ||
- ( cache_ptr->index_size != 2 * 1024 * 1024 ) ||
- ( cache_ptr->index_size != ((4 * VARIABLE_ENTRY_SIZE / 2) +
- (4 * VARIABLE_ENTRY_SIZE) +
- (31 * MONSTER_ENTRY_SIZE) +
- (1 * LARGE_ENTRY_SIZE)) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "unexpected size/len in flush op eviction test 2.";
-
- } else {
-
- /* verify the expected status of all entries we have loaded to date: */
- num_large_entries1 = 1;
- verify_entry_status1(cache_ptr,
- 0,
- (num_variable_entries1 + num_monster_entries1 + num_large_entries1),
- expected);
- }
- }
-
-
- if ( pass1 ) {
-
- /* Now load a large entry. This should result in the eviction
- * of (VET,1), and the increase in the size of (VET, 0) from .5
- * VARIABLE_ENTRY_SIZE to .75 VARIABLE_ENTRY_SIZE.
- *
- * The following table illustrates the intended state of affairs
- * after the eviction:
- *
- * in
- * entry: cache? size: dirty? pinned? pins: flush operations:
- *
- * (VET, 0) Y 7.5 KB Y Y - -
- *
- * (VET, 1) N 10 KB N N - -
- *
- * (VET, 2) Y 10 KB N N 0 dirty (VET, 0)
- * resize (VET, 0) to 10 KB
- * rename (VET, 0) to its alternate address
- *
- * (VET, 3) Y 5 KB Y N 0, 7 dirty (VET, 0)
- * resize (VET, 3) to 10 KB
- *
- * (VET, 4) Y 5 KB Y N - -
- *
- * (VET, 5) Y 5 KB Y N 7 -
- *
- * (VET, 6) Y 10 KB N N - -
- *
- * (VET, 7) Y 10 KB Y Y - dirty (VET, 6)
- *
- * Start by updating the expected table for the expected changes in entry status:
- */
- expected[0].size = 3 * VARIABLE_ENTRY_SIZE / 4;
- expected[1].in_cache = FALSE;
- expected[1].flushed = TRUE;
- expected[1].destroyed = TRUE;
-
- num_large_entries1 = 2;
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 1);
- unprotect_entry1_with_size_change(cache_ptr, LARGE_ENTRY_TYPE, 1,
- H5C1__DIRTIED_FLAG, (size_t)0);
-
- if ( ( cache_ptr->index_len != 40 ) ||
- ( cache_ptr->index_size != (2 * 1024 * 1024) -
- (VARIABLE_ENTRY_SIZE) +
- (VARIABLE_ENTRY_SIZE / 4) +
- (LARGE_ENTRY_SIZE) ) ||
- ( cache_ptr->index_size != ((1 * 3 * VARIABLE_ENTRY_SIZE / 4 ) +
- (3 * VARIABLE_ENTRY_SIZE / 2 ) +
- (3 * VARIABLE_ENTRY_SIZE) +
- (31 * MONSTER_ENTRY_SIZE) +
- (2 * LARGE_ENTRY_SIZE)) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "unexpected size/len in flush op eviction test 3.";
- }
-
- /* verify entry status */
- verify_entry_status1(cache_ptr,
- 1,
- (num_variable_entries1 + num_monster_entries1 + num_large_entries1),
- expected);
- }
-
- if ( pass1 ) {
-
- /* Now load another large entry. This should result in the eviction
- * of (VET, 2), the increase in the size of (VET, 0) from .75
- * VARIABLE_ENTRY_SIZE to 1.0 VARIABLE_ENTRY_SIZE, and the renaming
- * of (VET, 0) to its alternate address.
- *
- * The following table shows the expected states of the variable
- * size entries after the test.
- *
- * in
- * entry: cache? size: dirty? pinned? pins: flush operations:
- *
- * (VET, 0) Y 10 KB Y Y - -
- *
- * (VET, 1) N 10 KB N N - -
- *
- * (VET, 2) N 10 KB N N - -
- *
- * (VET, 3) Y 5 KB Y N 0, 7 dirty (VET, 0)
- * resize (VET, 3) to 10 KB
- *
- * (VET, 4) Y 5 KB Y N - -
- *
- * (VET, 5) Y 5 KB Y N 7 -
- *
- * (VET, 6) Y 10 KB N N - -
- *
- * (VET, 7) Y 10 KB Y Y - dirty (VET, 6)
- *
- * Start by updating the expected table for the expected changes in entry status:
- */
- expected[0].size = VARIABLE_ENTRY_SIZE;
- expected[0].at_main_addr = FALSE;
- expected[2].in_cache = FALSE;
- expected[2].flushed = TRUE;
- expected[2].destroyed = TRUE;
-
- num_large_entries1 = 3;
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 2);
- unprotect_entry1_with_size_change(cache_ptr, LARGE_ENTRY_TYPE, 2,
- H5C1__DIRTIED_FLAG, (size_t)0);
-
- if ( ( cache_ptr->index_len != 40 ) ||
- ( cache_ptr->index_size != (2 * 1024 * 1024) -
- (2 * VARIABLE_ENTRY_SIZE) +
- (VARIABLE_ENTRY_SIZE / 2) +
- (2 * LARGE_ENTRY_SIZE) ) ||
- ( cache_ptr->index_size != ((3 * VARIABLE_ENTRY_SIZE / 2) +
- (3 * VARIABLE_ENTRY_SIZE) +
- (31 * MONSTER_ENTRY_SIZE) +
- (3 * LARGE_ENTRY_SIZE)) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "unexpected size/len in flush op eviction test 4.";
- }
-
- /* verify entry status */
- verify_entry_status1(cache_ptr,
- 2,
- (num_variable_entries1 + num_monster_entries1 + num_large_entries1),
- expected);
- }
-
- if ( pass1 ) {
-
- /* load two more large entries. This should result in (VET, 3) being
- * flushed, and increasing its size from 1/2 VARIABLE_ENTRY_SIZE to
- * VARIABLE_ENTRY_SIZE.
- *
- * As a result of this size increase, the cache will have to look
- * for another entry to evict. After flushing (VET, 4) and (VET, 5),
- * it should evict (VET, 6), yielding the needed memory.
- *
- * The following table shows the expected states of the variable
- * size entries after the test.
- *
- * in
- * entry: cache? size: dirty? pinned? pins: flush operations:
- *
- * (VET, 0) Y 10 KB Y Y - -
- *
- * (VET, 1) N 10 KB N N - -
- *
- * (VET, 2) N 10 KB N N - -
- *
- * (VET, 3) Y 10 KB N N 0, 7 -
- *
- * (VET, 4) Y 5 KB N N - -
- *
- * (VET, 5) Y 5 KB N N 7 -
- *
- * (VET, 6) N 10 KB N N - -
- *
- * (VET, 7) Y 10 KB Y Y - dirty (VET, 6)
- *
- * Start by updating the expected table for the expected changes in entry status:
- */
-
- expected[3].size = VARIABLE_ENTRY_SIZE;
- expected[3].is_dirty = FALSE;
- expected[3].flushed = TRUE;
- expected[4].is_dirty = FALSE;
- expected[4].flushed = TRUE;
- expected[5].is_dirty = FALSE;
- expected[5].flushed = TRUE;
- expected[6].in_cache = FALSE;
- expected[6].flushed = TRUE;
- expected[6].destroyed = TRUE;
-
- num_large_entries1 = 5;
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 3);
- unprotect_entry1_with_size_change(cache_ptr, LARGE_ENTRY_TYPE, 3,
- H5C1__DIRTIED_FLAG, (size_t)0);
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 4);
- unprotect_entry1_with_size_change(cache_ptr, LARGE_ENTRY_TYPE, 4,
- H5C1__DIRTIED_FLAG, (size_t)0);
-
- /* verify cache size */
- if ( ( cache_ptr->index_len != 41 ) ||
- ( cache_ptr->index_size != (2 * 1024 * 1024) -
- (3 * VARIABLE_ENTRY_SIZE) +
- (1 * VARIABLE_ENTRY_SIZE ) + /* size increases of (VET, 0) & (VET, 3) */
- (4 * LARGE_ENTRY_SIZE) ) ||
- ( cache_ptr->index_size != ((2 * VARIABLE_ENTRY_SIZE / 2) +
- (3 * VARIABLE_ENTRY_SIZE) +
- (31 * MONSTER_ENTRY_SIZE) +
- (5 * LARGE_ENTRY_SIZE)) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "unexpected size/len in flush op eviction test 5.";
- }
-
- /* verify entry status */
- verify_entry_status1(cache_ptr,
- 3,
- (num_variable_entries1 + num_monster_entries1 + num_large_entries1),
- expected);
- }
-
- if ( pass1 ) {
-
- /* now touch all the non VARIABLE_ENTRY_TYPE entries in the
- * cache to bring all the VARIABLE_ENTRY_TYPE entries to the
- * end of the LRU list.
- *
- * Note that we don't have to worry about (VET, 0) and (VET, 7)
- * as they are pinned and thus not in the LRU list to begin with.
- */
- for ( i = 0; i < 31; i++ )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
- unprotect_entry1_with_size_change(cache_ptr, MONSTER_ENTRY_TYPE, i,
- H5C1__DIRTIED_FLAG, (size_t)0);
- }
-
- for ( i = 0; i < 5; i++ )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
- unprotect_entry1_with_size_change(cache_ptr, LARGE_ENTRY_TYPE, i,
- H5C1__DIRTIED_FLAG, (size_t)0);
- }
-
- /* verify cache size */
- if ( ( cache_ptr->index_len != 41 ) ||
- ( cache_ptr->index_size != (2 * 1024 * 1024) -
- (2 * VARIABLE_ENTRY_SIZE) +
- (4 * LARGE_ENTRY_SIZE) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "unexpected size/len in flush op eviction test 6.";
- }
-
- /* verify entry status */
- verify_entry_status1(cache_ptr,
- 4,
- (num_variable_entries1 + num_monster_entries1 + num_large_entries1),
- expected);
- }
-
- if ( pass1 ) {
-
- /* Now load three more large entries. This should result
- * in the eviction of (VET, 3), and the unpinning of (VET, 0)
- *
- * The following table shows the expected states of the variable
- * size entries after the test.
- *
- * in
- * entry: cache? size: dirty? pinned? pins: flush operations:
- *
- * (VET, 0) Y 10 KB Y N - -
- *
- * (VET, 1) N 10 KB N N - -
- *
- * (VET, 2) N 10 KB N N - -
- *
- * (VET, 3) N 10 KB N N - -
- *
- * (VET, 4) Y 5 KB N N - -
- *
- * (VET, 5) Y 5 KB N N 7 -
- *
- * (VET, 6) N 10 KB N N - -
- *
- * (VET, 7) Y 10 KB Y Y - dirty (VET, 6)
- *
- * Start by updating the expected table for the expected changes in entry status:
- */
-
- expected[0].is_pinned = FALSE;
- expected[3].in_cache = FALSE;
- expected[3].destroyed = TRUE;
-
- num_large_entries1 = 8;
-
- for ( i = 5; i < 8; i++ )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
- unprotect_entry1_with_size_change(cache_ptr, LARGE_ENTRY_TYPE, i,
- H5C1__DIRTIED_FLAG, (size_t)0);
- }
-
- /* verify cache size */
- if ( ( cache_ptr->index_len != 43 ) ||
- ( cache_ptr->index_size != (2 * 1024 * 1024) -
- (3 * VARIABLE_ENTRY_SIZE) +
- (7 * LARGE_ENTRY_SIZE) ) ||
- ( cache_ptr->index_size != ((2 * VARIABLE_ENTRY_SIZE / 2) +
- (2 * VARIABLE_ENTRY_SIZE) +
- (31 * MONSTER_ENTRY_SIZE) +
- (8 * LARGE_ENTRY_SIZE)) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "unexpected size/len in flush op eviction test 7.";
- }
-
- /* verify entry status */
- verify_entry_status1(cache_ptr,
- 5,
- (num_variable_entries1 + num_monster_entries1 + num_large_entries1),
- expected);
- }
-
- if ( pass1 ) {
-
- /* load another large entry. (VET, 4) should be evicted.
- *
- * The following table shows the expected states of the variable
- * size entries after the test.
- *
- * in
- * entry: cache? size: dirty? pinned? pins: flush operations:
- *
- * (VET, 0) Y 10 KB Y N - -
- *
- * (VET, 1) N 10 KB N N - -
- *
- * (VET, 2) N 10 KB N N - -
- *
- * (VET, 3) N 10 KB N N - -
- *
- * (VET, 4) N 5 KB N N - -
- *
- * (VET, 5) Y 5 KB N N 7 -
- *
- * (VET, 6) N 10 KB N N - -
- *
- * (VET, 7) Y 10 KB Y Y - dirty (VET, 6)
- *
- * Start by updating the expected table for the expected changes in entry status:
- */
-
- expected[4].in_cache = FALSE;
- expected[4].destroyed = TRUE;
-
- num_large_entries1 = 9;
-
- for ( i = 8; i < 9; i++ )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
- unprotect_entry1_with_size_change(cache_ptr, LARGE_ENTRY_TYPE, i,
- H5C1__DIRTIED_FLAG, (size_t)0);
- }
-
- /* verify cache size */
- if ( ( cache_ptr->index_len != 43 ) ||
- ( cache_ptr->index_size != (2 * 1024 * 1024) -
- (3 * VARIABLE_ENTRY_SIZE) -
- (VARIABLE_ENTRY_SIZE / 2) +
- (8 * LARGE_ENTRY_SIZE) ) ||
- ( cache_ptr->index_size != ((1 * VARIABLE_ENTRY_SIZE / 2) +
- (2 * VARIABLE_ENTRY_SIZE) +
- (31 * MONSTER_ENTRY_SIZE) +
- (9 * LARGE_ENTRY_SIZE)) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "unexpected size/len in flush op eviction test 8.";
- }
-
- /* verify entry status */
- verify_entry_status1(cache_ptr,
- 6,
- (num_variable_entries1 + num_monster_entries1 + num_large_entries1),
- expected);
- }
-
- if ( pass1 ) {
-
- /* Load another large entry.
- *
- * (VET, 5) should be evicted, and (VET, 7) should be unpinned.
- *
- * The following table shows the expected states of the variable
- * size entries after the test.
- *
- * in
- * entry: cache? size: dirty? pinned? pins: flush operations:
- *
- * (VET, 0) Y 10 KB Y N - -
- *
- * (VET, 1) N 10 KB N N - -
- *
- * (VET, 2) N 10 KB N N - -
- *
- * (VET, 3) N 10 KB N N - -
- *
- * (VET, 4) N 5 KB N N - -
- *
- * (VET, 5) N 5 KB N N - -
- *
- * (VET, 6) N 10 KB N N - -
- *
- * (VET, 7) Y 10 KB Y N - dirty (VET, 6)
- *
- * Start by updating the expected table for the expected changes in entry status:
- */
-
- expected[5].in_cache = FALSE;
- expected[5].destroyed = TRUE;
- expected[7].is_pinned = FALSE;
-
- num_large_entries1 = 10;
-
- for ( i = 9; i < 10; i++ )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
- unprotect_entry1_with_size_change(cache_ptr, LARGE_ENTRY_TYPE, i,
- H5C1__DIRTIED_FLAG, (size_t)0);
- }
-
- /* verify cache size */
- if ( ( cache_ptr->index_len != 43 ) ||
- ( cache_ptr->index_size != (2 * 1024 * 1024) -
- (4 * VARIABLE_ENTRY_SIZE) +
- (9 * LARGE_ENTRY_SIZE) ) ||
- ( cache_ptr->index_size != ((2 * VARIABLE_ENTRY_SIZE) +
- (31 * MONSTER_ENTRY_SIZE) +
- (10 * LARGE_ENTRY_SIZE)) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "unexpected size/len in flush op eviction test 9.";
- }
-
- /* verify entry status */
- verify_entry_status1(cache_ptr,
- 7,
- (num_variable_entries1 + num_monster_entries1 + num_large_entries1),
- expected);
- }
-
- if ( pass1 ) {
-
- /* Again, touch all the non VARIABLE_ENTRY_TYPE entries in the
- * cache to bring all the VARIABLE_ENTRY_TYPE entries to the
- * end of the LRU list.
- *
- * Both (VET, 0) and (VET, 7) have been unpinned, so they are
- * now in the LRU list.
- */
- for ( i = 0; i < 31; i++ )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
- unprotect_entry1_with_size_change(cache_ptr, MONSTER_ENTRY_TYPE, i,
- H5C1__DIRTIED_FLAG, (size_t)0);
- }
-
- for ( i = 0; i < 10; i++ )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
- unprotect_entry1_with_size_change(cache_ptr, LARGE_ENTRY_TYPE, i,
- H5C1__DIRTIED_FLAG, (size_t)0);
- }
-
- /* verify cache size */
- if ( ( cache_ptr->index_len != 43 ) ||
- ( cache_ptr->index_size != (2 * 1024 * 1024) -
- (4 * VARIABLE_ENTRY_SIZE) +
- (9 * LARGE_ENTRY_SIZE) ) ||
- ( cache_ptr->index_size != ((2 * VARIABLE_ENTRY_SIZE) +
- (31 * MONSTER_ENTRY_SIZE) +
- (10 * LARGE_ENTRY_SIZE)) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "unexpected size/len in flush op eviction test 10.";
- }
-
- /* verify entry status */
- verify_entry_status1(cache_ptr,
- 8,
- (num_variable_entries1 + num_monster_entries1 + num_large_entries1),
- expected);
- }
-
- if ( pass1 ) {
-
- /* load two more large entries.
- *
- * (VET, 0) should be flushed, but not evicted initially since it is dirty.
- *
- * (VET, 7) should be evicted, but (VET, 7) has an eviction operation that
- * dirties (VET, 6). Since (VET, 6) is not in the cache, it will be loaded.
- * Since this results in no net increase in free space, the cache will
- * continue to attempt to create free space.
- *
- * The cache will then flush all the monster and large entries, but since they
- * are all dirty, they will not be evicted.
- *
- * Finally, it will reach (VET, 0) again, and evict it on the second pass1.
- * This finally makes the necessary space.
- *
- * The following table shows the expected states of the variable
- * size entries after the test.
- *
- * in
- * entry: cache? size: dirty? pinned? pins: flush operations:
- *
- * (VET, 0) N 10 KB N N - -
- *
- * (VET, 1) N 10 KB N N - -
- *
- * (VET, 2) N 10 KB N N - -
- *
- * (VET, 3) N 10 KB N N - -
- *
- * (VET, 4) N 5 KB N N - -
- *
- * (VET, 5) N 5 KB N N - -
- *
- * (VET, 6) Y 10 KB Y N - -
- *
- * (VET, 7) N 10 KB N N - -
- *
- * Start by updating the expected table for the expected changes in entry status:
- *
- * Note that we reset the loaded, cleared, flushed, and destroyed fields of
- * (VET,6) so we can track what is happening.
- */
- base_addr = entries1[VARIABLE_ENTRY_TYPE];
- entry_ptr = &(base_addr[6]);
- entry_ptr->loaded = FALSE;
- entry_ptr->cleared = FALSE;
- entry_ptr->flushed = FALSE;
- entry_ptr->destroyed = FALSE;
-
- expected[0].in_cache = FALSE;
- expected[0].is_dirty = FALSE;
- expected[0].flushed = TRUE;
- expected[0].destroyed = TRUE;
- expected[6].in_cache = TRUE;
- expected[6].is_dirty = TRUE;
- expected[6].loaded = TRUE;
- expected[6].flushed = FALSE;
- expected[6].destroyed = FALSE;
- expected[7].in_cache = FALSE;
- expected[7].flushed = TRUE;
- expected[7].destroyed = TRUE;
-
- num_large_entries1 = 12;
-
- /* a newly loaded entry is not inserted in the cache until after space has been
- * made for it. Thus (LET, 11) will not be flushed.
- */
- for ( i = num_variable_entries1;
- i < num_variable_entries1 + num_monster_entries1 + num_large_entries1 - 1;
- i++ )
- {
- expected[i].is_dirty = FALSE;
- expected[i].flushed = TRUE;
- }
-
- for ( i = 10; i < 12; i++ )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
- unprotect_entry1_with_size_change(cache_ptr, LARGE_ENTRY_TYPE, i,
- H5C1__DIRTIED_FLAG, (size_t)0);
- }
-
- /* verify cache size */
- if ( ( cache_ptr->index_len != 44 ) ||
- ( cache_ptr->index_size != (2 * 1024 * 1024) -
- (5 * VARIABLE_ENTRY_SIZE) +
- (11 * LARGE_ENTRY_SIZE) ) ||
- ( cache_ptr->index_size != ((1 * VARIABLE_ENTRY_SIZE) +
- (31 * MONSTER_ENTRY_SIZE) +
- (12 * LARGE_ENTRY_SIZE)) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "unexpected size/len in flush op eviction test 11.";
- }
-
- /* verify entry status */
- verify_entry_status1(cache_ptr,
- 9,
- (num_variable_entries1 + num_monster_entries1 + num_large_entries1),
- expected);
- }
-
- if ( pass1 ) {
-
- /* Again, touch all the non VARIABLE_ENTRY_TYPE entries in the
- * cache to bring the last remaining VARIABLE_ENTRY_TYPE entry to the
- * end of the LRU list.
- */
- for ( i = 0; i < num_monster_entries1; i++ )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
- unprotect_entry1_with_size_change(cache_ptr, MONSTER_ENTRY_TYPE, i,
- H5C1__DIRTIED_FLAG, (size_t)0);
- }
-
- for ( i = 0; i < num_large_entries1; i++ )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
- unprotect_entry1_with_size_change(cache_ptr, LARGE_ENTRY_TYPE, i,
- H5C1__DIRTIED_FLAG, (size_t)0);
- }
-
- /* update the expected array to mark all these entries dirty again. */
- for ( i = num_variable_entries1;
- i < num_variable_entries1 + num_monster_entries1 + num_large_entries1 - 1;
- i++ )
- {
- expected[i].is_dirty = TRUE;
- }
-
- /* verify cache size */
- if ( ( cache_ptr->index_len != 44 ) ||
- ( cache_ptr->index_size != (2 * 1024 * 1024) -
- (5 * VARIABLE_ENTRY_SIZE) +
- (11 * LARGE_ENTRY_SIZE) ) ||
- ( cache_ptr->index_size != ((1 * VARIABLE_ENTRY_SIZE) +
- (31 * MONSTER_ENTRY_SIZE) +
- (12 * LARGE_ENTRY_SIZE)) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "unexpected size/len in flush op eviction test 12.";
- }
-
- /* verify entry status */
- verify_entry_status1(cache_ptr,
- 10,
- (num_variable_entries1 + num_monster_entries1 + num_large_entries1),
- expected);
- }
-
- if ( pass1 ) {
-
- /* Load two more large entries.
- *
- * Since (VET, 6) is dirty, at first this will just cause (VET, 6) to be flushed.
- *
- * But all other entries in the cache are dirty, so the cache will flush them all,
- * and then evict (VET, 6) on the second pass1.
- *
- * The following table shows the expected states of the variable
- * size entries after the test.
- *
- * in
- * entry: cache? size: dirty? pinned? pins: flush operations:
- *
- * (VET, 0) N 10 KB N N - -
- *
- * (VET, 1) N 10 KB N N - -
- *
- * (VET, 2) N 10 KB N N - -
- *
- * (VET, 3) N 10 KB N N - -
- *
- * (VET, 4) N 5 KB N N - -
- *
- * (VET, 5) N 5 KB N N - -
- *
- * (VET, 6) N 10 KB N N - -
- *
- * (VET, 7) N 10 KB N N - -
- *
- * Start by updating the expected table for the expected changes in entry status:
- */
-
- expected[6].in_cache = FALSE;
- expected[6].is_dirty = FALSE;
- expected[6].flushed = TRUE;
- expected[6].destroyed = TRUE;
-
- num_large_entries1 = 14;
-
- /* a newly loaded entry is not inserted in the cache until after space has been
- * made for it. Thus (LET, 13) will not be flushed.
- */
- for ( i = num_variable_entries1;
- i < num_variable_entries1 + num_monster_entries1 + num_large_entries1 - 1;
- i++ )
- {
- expected[i].is_dirty = FALSE;
- expected[i].flushed = TRUE;
- }
-
- for ( i = 12; i < 14; i++ )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
- unprotect_entry1_with_size_change(cache_ptr, LARGE_ENTRY_TYPE, i,
- H5C1__DIRTIED_FLAG, (size_t)0);
- }
-
- /* verify cache size */
- if ( ( cache_ptr->index_len != 45 ) ||
- ( cache_ptr->index_size != (2 * 1024 * 1024) -
- (6 * VARIABLE_ENTRY_SIZE) +
- (13 * LARGE_ENTRY_SIZE) ) ||
- ( cache_ptr->index_size != ((31 * MONSTER_ENTRY_SIZE) +
- (14 * LARGE_ENTRY_SIZE)) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "unexpected size/len in flush op eviction test 13.";
- }
-
- /* verify entry status */
- verify_entry_status1(cache_ptr,
- 11,
- (num_variable_entries1 + num_monster_entries1 + num_large_entries1),
- expected);
- }
-
- /* at this point we have cycled all the variable size entries through the cache.
- *
- * flush the cache and end the test.
- */
-
- if ( pass1 ) {
-
- result = H5C1_flush_cache(NULL, -1, -1, cache_ptr,
- H5C1__FLUSH_INVALIDATE_FLAG);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Cache flush invalidate failed after flush op eviction test";
- }
- else if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache len/size after cleanup of flush op eviction test";
-
- }
- }
-
-#if H5C1_COLLECT_CACHE_STATS
- /* If we are collecting stats, check to see if we get the expected
- * values.
- *
- * Testing the stats code is fairly new, but given the extent
- * to which I find myself depending on the stats, I've decided
- * to start testing the stats whenever it is convenient to do
- * so.
- */
- if ( pass1 ) {
-
- if ( ( cache_ptr->insertions[VARIABLE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->pinned_insertions[VARIABLE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->clears[VARIABLE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->flushes[VARIABLE_ENTRY_TYPE] != 14 ) ||
- ( cache_ptr->evictions[VARIABLE_ENTRY_TYPE] != 9 ) ||
- ( cache_ptr->renames[VARIABLE_ENTRY_TYPE] != 1 ) ||
- ( cache_ptr->entry_flush_renames[VARIABLE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->cache_flush_renames[VARIABLE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->pins[VARIABLE_ENTRY_TYPE] != 2 ) ||
- ( cache_ptr->unpins[VARIABLE_ENTRY_TYPE] != 2 ) ||
- ( cache_ptr->dirty_pins[VARIABLE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->pinned_flushes[VARIABLE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->pinned_clears[VARIABLE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->size_increases[VARIABLE_ENTRY_TYPE] != 3 ) ||
- ( cache_ptr->size_decreases[VARIABLE_ENTRY_TYPE] != 4 ) ||
- ( cache_ptr->entry_flush_size_changes[VARIABLE_ENTRY_TYPE] != 1 ) ||
- ( cache_ptr->cache_flush_size_changes[VARIABLE_ENTRY_TYPE] != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected variable size entry stats.";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->insertions[LARGE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->pinned_insertions[LARGE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->clears[LARGE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->flushes[LARGE_ENTRY_TYPE] != 38 ) ||
- ( cache_ptr->evictions[LARGE_ENTRY_TYPE] != 14 ) ||
- ( cache_ptr->renames[LARGE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->entry_flush_renames[LARGE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->cache_flush_renames[LARGE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->pins[LARGE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->unpins[LARGE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->dirty_pins[LARGE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->pinned_flushes[LARGE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->pinned_clears[LARGE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->size_increases[LARGE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->size_decreases[LARGE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->entry_flush_size_changes[LARGE_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->cache_flush_size_changes[LARGE_ENTRY_TYPE] != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected monster entry stats.";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->insertions[MONSTER_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->pinned_insertions[MONSTER_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->clears[MONSTER_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->flushes[MONSTER_ENTRY_TYPE] != 93 ) ||
- ( cache_ptr->evictions[MONSTER_ENTRY_TYPE] != 31 ) ||
- ( cache_ptr->renames[MONSTER_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->entry_flush_renames[MONSTER_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->cache_flush_renames[MONSTER_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->pins[MONSTER_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->unpins[MONSTER_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->dirty_pins[MONSTER_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->pinned_flushes[MONSTER_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->pinned_clears[MONSTER_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->size_increases[MONSTER_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->size_decreases[MONSTER_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->entry_flush_size_changes[MONSTER_ENTRY_TYPE] != 0 ) ||
- ( cache_ptr->cache_flush_size_changes[MONSTER_ENTRY_TYPE] != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected monster entry stats.";
- }
- }
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
- if ( pass1 ) {
-
- reset_entries1();
- }
-
- return;
-
-} /* check_flush_cache1__flush_op_eviction_test() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_flush_cache1__single_entry()
- *
- * Purpose: Verify that flush_cache1 behaves as expected when the cache
- * contains only one element.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 1/12/05
- *
- * Modifications:
- *
- * JRM -- 3/29/06
- * Added tests for pinned entries.
- *
- * JRM -- 5/17/06
- * Complete reqrite of pinned entry tests to accomodate
- * the new H5C1_mark_pinned_or_protected_entry_dirty()
- * call.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_flush_cache1__single_entry(H5C1_t * cache_ptr)
-{
- /* const char * fcn_name = "check_flush_cache1__single_entry"; */
-
- if ( cache_ptr == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "cache_ptr NULL on entry to single entry case.";
- }
- else if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "cache not empty at beginning of single entry case.";
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 1,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__NO_FLAGS_SET,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 2,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__NO_FLAGS_SET,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 3,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 4,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 5,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 6,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 7,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 8,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 9,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 10,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 11,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 12,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 13,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG |
- H5C1__FLUSH_INVALIDATE_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 14,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG |
- H5C1__FLUSH_INVALIDATE_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 15,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG |
- H5C1__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 16,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG |
- H5C1__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 17,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__NO_FLAGS_SET,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 18,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__NO_FLAGS_SET,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 19,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 20,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 21,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 22,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 23,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 24,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 25,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 26,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 27,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 28,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 29,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG |
- H5C1__FLUSH_INVALIDATE_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 30,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG |
- H5C1__FLUSH_INVALIDATE_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 31,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG |
- H5C1__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 32,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ FALSE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG |
- H5C1__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_loaded */ TRUE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 33,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__NO_FLAGS_SET,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 34,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__NO_FLAGS_SET,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 35,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 36,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 37,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 38,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 39,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 40,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 41,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 42,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 43,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 44,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 45,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG |
- H5C1__FLUSH_INVALIDATE_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 46,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG |
- H5C1__FLUSH_INVALIDATE_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 47,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG |
- H5C1__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 48,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__NO_FLAGS_SET,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG |
- H5C1__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 49,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__NO_FLAGS_SET,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 50,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__NO_FLAGS_SET,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 51,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 52,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 53,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 54,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 55,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 56,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 57,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 58,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 59,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 60,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 61,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG |
- H5C1__FLUSH_INVALIDATE_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 62,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_MARKED_ENTRIES_FLAG |
- H5C1__FLUSH_INVALIDATE_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 63,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ FALSE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG |
- H5C1__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ TRUE
- );
- }
-
- if ( pass1 ) {
-
- check_flush_cache1__single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 64,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* insert_flag */ TRUE,
- /* dirty_flag */ TRUE,
- /* flags */ H5C1__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C1__FLUSH_INVALIDATE_FLAG |
- H5C1__FLUSH_CLEAR_ONLY_FLAG |
- H5C1__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_loaded */ FALSE,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ TRUE
- );
- }
-
-
- /* Now run single entry tests for pinned entries. Test all combinations
- * of:
- *
- * 1) Unpin by unprotect vs. unpin by call to H5C1_unpin_entry().
- *
- * 2) Marked dirty by unprotect or not.
- *
- * 3) Marked dirty by call to H5C1_mark_pinned_entry_dirty() or not.
- *
- * 4) Marked dirty by call to H5C1_mark_pinned_or_protected_entry_dirty()
- * while protected or not.
- *
- * 5) Marked dirty by call to H5C1_mark_pinned_or_protected_entry_dirty()
- * while pinned or not.
- *
- * 6) Entry marked for flush or not.
- *
- * 7) Call flush with H5C1__FLUSH_MARKED_ENTRIES_FLAG or not.
- *
- * 8) Call flush with H5C1__FLUSH_CLEAR_ONLY_FLAG or not.
- *
- * This yields a total of 256 tests.
- *
- * The tests and their expected results are given in the spec table
- * below. The values assigned to the expected_cleared, expected_flushed,
- * and expected_destroyed fields are somewhat arcane, so the following
- * overview may be useful.
- *
- * In addition to simply checking to see if the test case runs,
- * we also check to see if the desired operations take place on the
- * cache entry. Thus expected_cleared is set to TRUE if we expect
- * the entry to be flushed, expected_flushed is set to TRUE if we
- * we expect the entry to be flushed, and expected_destroyed is set
- * to TRUE if we expect the entry to be destroyed.
- *
- * In this test, we are working with pinned entries which can't be
- * evicted, so expected_destroyed is always FALSE. We could pull it
- * from the table, but it is a hold over from the code this test
- * was adapted from, and it doesn't do any particular harm.
- *
- * In general, we expect an entry to be flushed if it is dirty, and
- * flush in invoked WITHOUT the H5C1__FLUSH_CLEAR_ONLY_FLAG. However,
- * there are exceptions: If flush is invoked with the
- * H5C1__FLUSH_MARKED_ENTRIES_FLAG, only marked entries will be flushed.
- *
- * Further, unprotecting an entry with the H5C1__SET_FLUSH_MARKER_FLAG
- * will NOT mark the entry unless the entry has either been marked
- * dirty either before or durting the unprotect call. This results in
- * some counterintuitive entries in the table. It make be useful to
- * look in the test code to see the exact order of operations.
- *
- * Similarly, we expect an entry to be cleared if it is dirty, and
- * flush is invoked WITH the H5C1__FLUSH_CLEAR_ONLY_FLAG. Again, there
- * are exceptions -- If flush is also invoked with the
- * H5C1__FLUSH_MARKED_ENTRIES_FLAG, only the marked entries will be
- * cleared.
- *
- * The above comments about applying unprotect with the
- * H5C1__SET_FLUSH_MARKER_FLAG apply here as well.
- */
-
- if ( pass1 ) {
-
- int i;
- struct pinned_single_entry_test_spec
- {
- int test_num;
- int entry_type;
- int entry_idx;
- hbool_t dirty_flag;
- hbool_t mark_dirty;
- hbool_t pop_mark_dirty_prot;
- hbool_t pop_mark_dirty_pinned;
- hbool_t unprotect_unpin;
- unsigned int flags;
- unsigned int flush_flags;
- hbool_t expected_cleared;
- hbool_t expected_flushed;
- hbool_t expected_destroyed;
- } spec[256] =
- /* pop pop
- * ent mark mark
- * test entry -ry dirty mark dirty dirty unprot flush expect expect expect
- * num type idx flag dirty prot pinned unpin flags flags clear flush destroy
- */
- { { 1, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, FALSE, FALSE },
- { 2, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, FALSE, FALSE },
- { 3, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 4, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 5, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 6, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 7, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 8, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 9, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 10, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 11, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 12, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 13, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 14, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 15, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 16, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 17, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 18, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 19, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 20, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 21, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 22, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 23, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 24, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 25, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 26, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 27, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 28, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 29, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 30, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 31, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 32, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 33, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, FALSE, FALSE },
- { 34, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, FALSE, FALSE },
- { 35, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 36, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 37, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 38, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 39, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 40, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 41, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 42, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 43, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 44, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 45, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 46, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 47, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 48, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 49, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 50, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 51, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 52, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 53, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 54, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 55, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 56, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 57, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 58, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 59, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 60, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 61, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 62, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 63, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 64, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__NO_FLAGS_SET, FALSE, TRUE, FALSE },
- { 65, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 66, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 67, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 68, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 69, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 70, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 71, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 72, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 73, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 74, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 75, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 76, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 77, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 78, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 79, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 80, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 81, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 82, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 83, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 84, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 85, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 86, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 87, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 88, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 89, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 90, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 91, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 92, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 93, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 94, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 95, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 96, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 97, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 98, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 99, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 100, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 101, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 102, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 103, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 104, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 105, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 106, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 107, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 108, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
- { 109, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 110, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 111, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 112, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 113, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 114, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 115, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 116, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 117, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 118, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 119, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 120, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 121, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 122, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 123, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 124, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 125, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 126, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 127, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 128, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
- { 129, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 130, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 131, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 132, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 133, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 134, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 135, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 136, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 137, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 138, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 139, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 140, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 141, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 142, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 143, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 144, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 145, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 146, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 147, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 148, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 149, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 150, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 151, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 152, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 153, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 154, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 155, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 156, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 157, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 158, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 159, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 160, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 161, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 162, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 163, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 164, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 165, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 166, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 167, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 168, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 169, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 170, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 171, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 172, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 173, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 174, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 175, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 176, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 177, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 178, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 179, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 180, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 181, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 182, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 183, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 184, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 185, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 186, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 187, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 188, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 189, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 190, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 191, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 192, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 193, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 194, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 195, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 196, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 197, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 198, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 199, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 200, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 201, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 202, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 203, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 204, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 205, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 206, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 207, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 208, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 209, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 210, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 211, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 212, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 213, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 214, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 215, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 216, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 217, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 218, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 219, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 220, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 221, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 222, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 223, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, FALSE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 224, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, TRUE, H5C1__NO_FLAGS_SET, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 225, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 226, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 227, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 228, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 229, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 230, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 231, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 232, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 233, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 234, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 235, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 236, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
- { 237, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 238, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 239, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 240, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 241, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 242, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 243, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 244, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 245, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 246, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 247, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 248, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 249, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 250, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 251, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 252, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 253, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 254, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 255, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, FALSE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
- { 256, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, TRUE, H5C1__SET_FLUSH_MARKER_FLAG, H5C1__FLUSH_MARKED_ENTRIES_FLAG | H5C1__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE } };
-
- i = 0;
- while ( ( pass1 ) && ( i < 256 ) )
- {
- check_flush_cache1__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ spec[i].test_num,
- /* entry_type */ spec[i].entry_type,
- /* entry_idx */ spec[i].entry_idx,
- /* dirty_flag */ spec[i].dirty_flag,
- /* mark_dirty */ spec[i].mark_dirty,
- /* pop_mark_dirty_prot */ spec[i].pop_mark_dirty_prot,
- /* pop_mark_dirty_pinned */ spec[i].pop_mark_dirty_pinned,
- /* unprotect_unpin */ spec[i].unprotect_unpin,
- /* flags */ spec[i].flags,
- /* flush_flags */ spec[i].flush_flags,
- /* expected_cleared */ spec[i].expected_cleared,
- /* expected_flushed */ spec[i].expected_flushed,
- /* expected_destroyed */ spec[i].expected_destroyed
- );
- i++;
- }
- }
-
- return;
-
-} /* check_flush_cache1__single_entry() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_flush_cache1__single_entry_test()
- *
- * Purpose: Run a single entry flush cache test.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 1/12/05
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_flush_cache1__single_entry_test(H5C1_t * cache_ptr,
- int test_num,
- int entry_type,
- int entry_idx,
- hbool_t insert_flag,
- hbool_t dirty_flag,
- unsigned int flags,
- unsigned int flush_flags,
- hbool_t expected_loaded,
- hbool_t expected_cleared,
- hbool_t expected_flushed,
- hbool_t expected_destroyed)
-{
- /* const char * fcn_name = "check_flush_cache1__single_entry_test"; */
- static char msg[128];
- herr_t result;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- if ( cache_ptr == NULL ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "cache_ptr NULL on entry to single entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- else if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "cache not empty at beginning of single entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- else if ( ( entry_type < 0 ) || ( entry_type >= NUMBER_OF_ENTRY_TYPES ) ||
- ( entry_idx < 0 ) || ( entry_idx > max_indices1[entry_type] ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Bad parameters on entry to single entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
-
- if ( pass1 ) {
-
- base_addr = entries1[entry_type];
- entry_ptr = &(base_addr[entry_idx]);
-
- if ( insert_flag ) {
-
- insert_entry1(cache_ptr, entry_type, entry_idx, dirty_flag, flags);
-
- } else {
-
- protect_entry1(cache_ptr, entry_type, entry_idx);
-
- unprotect_entry1(cache_ptr, entry_type, entry_idx,
- (int)dirty_flag, flags);
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_flush_cache(NULL, -1, -1, cache_ptr, flush_flags);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "flush with flags 0x%x failed in single entry test #%d.",
- flush_flags, test_num);
- failure_mssg1 = msg;
- }
- else if ( ( entry_ptr->loaded != expected_loaded ) ||
- ( entry_ptr->cleared != expected_cleared ) ||
- ( entry_ptr->flushed != expected_flushed ) ||
- ( entry_ptr->destroyed != expected_destroyed ) ) {
-
-#if 0 /* This is useful debugging code -- lets keep it for a while */
-
- HDfprintf(stdout,
- "loaded = %d(%d), clrd = %d(%d), flshd = %d(%d), dest = %d(%d)\n",
- (int)(entry_ptr->loaded),
- (int)expected_loaded,
- (int)(entry_ptr->cleared),
- (int)expected_cleared,
- (int)(entry_ptr->flushed),
- (int)expected_flushed,
- (int)(entry_ptr->destroyed),
- (int)expected_destroyed);
-#endif
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Unexpected entry status after flush in single entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- else if ( ( ( (flush_flags & H5C1__FLUSH_INVALIDATE_FLAG) == 0 )
- &&
- ( ( cache_ptr->index_len != 1 )
- ||
- ( cache_ptr->index_size != entry_sizes1[entry_type] )
- )
- )
- ||
- ( ( (flush_flags & H5C1__FLUSH_INVALIDATE_FLAG) != 0 )
- &&
- ( ( cache_ptr->index_len != 0 )
- ||
- ( cache_ptr->index_size != 0 )
- )
- )
- ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Unexpected cache len/size after flush in single entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- }
-
-
- /* clean up the cache to prep for the next test */
- if ( pass1 ) {
-
- result = H5C1_flush_cache(NULL, -1, -1, cache_ptr,
- H5C1__FLUSH_INVALIDATE_FLAG);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Flush failed on cleanup in single entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- else if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Unexpected cache len/size after cleanup in single entry test #%d.",
- test_num);
- failure_mssg1 = msg;
-
- } else {
-
- entry_ptr->loaded = FALSE;
- entry_ptr->cleared = FALSE;
- entry_ptr->flushed = FALSE;
- entry_ptr->destroyed = FALSE;
- }
- }
-
- return;
-
-} /* check_flush_cache1__single_entry_test() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_flush_cache1__pinned_single_entry_test()
- *
- * Purpose: Run a pinned single entry flush cache test.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 3/28/06
- *
- * Modifications:
- *
- * JRM -- 5/17/06
- * Added the pop_mark_dirty_prot and pop_mark_dirty_pinned
- * flags and supporting code to allow us to test the
- * H5C1_mark_pinned_or_protected_entry_dirty() call. Use the
- * call to mark the entry dirty while the entry is protected
- * if pop_mark_dirty_prot is TRUE, and to mark the entry
- * dirty while it is pinned if pop_mark_dirty_pinned is TRUE.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_flush_cache1__pinned_single_entry_test(H5C1_t * cache_ptr,
- int test_num,
- int entry_type,
- int entry_idx,
- hbool_t dirty_flag,
- hbool_t mark_dirty,
- hbool_t pop_mark_dirty_prot,
- hbool_t pop_mark_dirty_pinned,
- hbool_t unprotect_unpin,
- unsigned int flags,
- unsigned int flush_flags,
- hbool_t expected_cleared,
- hbool_t expected_flushed,
- hbool_t expected_destroyed)
-{
- /* const char *fcn_name = "check_flush_cache1__pinned_single_entry_test"; */
- static char msg[128];
- hbool_t expected_loaded = TRUE;
- herr_t result;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- if ( cache_ptr == NULL ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "cache_ptr NULL on entry to pinned single entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- else if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "cache not empty at beginning of pinned single entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- else if ( ( entry_type < 0 ) || ( entry_type >= NUMBER_OF_ENTRY_TYPES ) ||
- ( entry_idx < 0 ) || ( entry_idx > max_indices1[entry_type] ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Bad parameters on entry to pinned single entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
-
- if ( pass1 ) {
-
- base_addr = entries1[entry_type];
- entry_ptr = &(base_addr[entry_idx]);
-
- protect_entry1(cache_ptr, entry_type, entry_idx);
-
- if ( pop_mark_dirty_prot ) {
-
- mark_pinned_or_protected_entry_dirty1(cache_ptr,
- entry_type,
- entry_idx);
- }
-
- unprotect_entry1(cache_ptr, entry_type, entry_idx,
- (int)dirty_flag, (flags | H5C1__PIN_ENTRY_FLAG));
-
- if ( mark_dirty ) {
-
- mark_pinned_entry_dirty1(cache_ptr, entry_type, entry_idx,
- FALSE, (size_t)0);
- }
-
- if ( pop_mark_dirty_pinned ) {
-
- mark_pinned_or_protected_entry_dirty1(cache_ptr,
- entry_type,
- entry_idx);
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_flush_cache(NULL, -1, -1, cache_ptr, flush_flags);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "flush with flags 0x%x failed in pinned single entry test #%d.",
- flush_flags, test_num);
- failure_mssg1 = msg;
- }
- else if ( ( entry_ptr->loaded != expected_loaded ) ||
- ( entry_ptr->cleared != expected_cleared ) ||
- ( entry_ptr->flushed != expected_flushed ) ||
- ( entry_ptr->destroyed != expected_destroyed ) ) {
-
- HDfprintf(stdout,
- "loaded = %d(%d), clrd = %d(%d), flshd = %d(%d), dest = %d(%d)\n",
- (int)(entry_ptr->loaded),
- (int)expected_loaded,
- (int)(entry_ptr->cleared),
- (int)expected_cleared,
- (int)(entry_ptr->flushed),
- (int)expected_flushed,
- (int)(entry_ptr->destroyed),
- (int)expected_destroyed);
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Unexpected entry status after flush in pinned single entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- else if ( ( ( (flush_flags & H5C1__FLUSH_INVALIDATE_FLAG) == 0 )
- &&
- ( ( cache_ptr->index_len != 1 )
- ||
- ( cache_ptr->index_size != entry_sizes1[entry_type] )
- )
- )
- ||
- ( ( (flush_flags & H5C1__FLUSH_INVALIDATE_FLAG) != 0 )
- &&
- ( ( cache_ptr->index_len != 0 )
- ||
- ( cache_ptr->index_size != 0 )
- )
- )
- ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Unexpected cache len/size after flush in pinned single entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- }
-
-
- /* clean up the cache to prep for the next test */
- if ( pass1 ) {
-
- if ( unprotect_unpin ) {
-
- protect_entry1(cache_ptr, entry_type, entry_idx);
-
- unprotect_entry1(cache_ptr, entry_type, entry_idx,
- (int)dirty_flag, H5C1__UNPIN_ENTRY_FLAG);
-
- } else {
-
- unpin_entry1(cache_ptr, entry_type, entry_idx);
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_flush_cache(NULL, -1, -1, cache_ptr,
- H5C1__FLUSH_INVALIDATE_FLAG);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Flush failed on cleanup in pinned single entry test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- else if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Unexpected cache len/size after cleanup in pinned single entry test #%d.",
- test_num);
- failure_mssg1 = msg;
-
- } else {
-
- entry_ptr->loaded = FALSE;
- entry_ptr->cleared = FALSE;
- entry_ptr->flushed = FALSE;
- entry_ptr->destroyed = FALSE;
- }
- }
-
- return;
-
-} /* check_flush_cache1__pinned_single_entry_test() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_get_entry_status()
- *
- * Purpose: Verify that H5C1_get_entry_status() behaves as expected.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/28/06
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_get_entry_status(void)
-{
- const char * fcn_name = "check_get_entry_status";
- static char msg[128];
- herr_t result;
- hbool_t in_cache;
- hbool_t is_dirty;
- hbool_t is_protected;
- hbool_t is_pinned;
- size_t entry_size;
- H5C1_t * cache_ptr = NULL;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- TESTING("H5C1_get_entry_status() functionality");
-
- pass1 = TRUE;
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024 * 1024),
- (size_t)(1 * 1024 * 1024));
-
- base_addr = entries1[0];
- entry_ptr = &(base_addr[0]);
- }
-
- if ( pass1 ) {
-
- /* entry not in cache -- only in_cache should be touched by
- * the call. Thus, only check that boolean.
- */
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 1.");
- failure_mssg1 = msg;
-
- } else if ( in_cache ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 1.");
- failure_mssg1 = msg;
- }
- }
-
- protect_entry1(cache_ptr, 0, 0);
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__NO_FLAGS_SET);
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 2.");
- failure_mssg1 = msg;
-
- } else if ( !in_cache || is_dirty || is_protected || is_pinned ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 2.");
- failure_mssg1 = msg;
- }
- }
-
- protect_entry1(cache_ptr, 0, 0);
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 3.");
- failure_mssg1 = msg;
-
- } else if ( !in_cache || is_dirty || !is_protected || is_pinned ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 3.");
- failure_mssg1 = msg;
- }
- }
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__PIN_ENTRY_FLAG);
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 4.");
- failure_mssg1 = msg;
-
- } else if ( !in_cache || is_dirty || is_protected || !is_pinned ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 4.");
- failure_mssg1 = msg;
- }
- }
-
- mark_pinned_entry_dirty1(cache_ptr, 0, 0, FALSE, (size_t)0);
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 5.");
- failure_mssg1 = msg;
-
- } else if ( !in_cache || !is_dirty || is_protected || !is_pinned ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 5.");
- failure_mssg1 = msg;
- }
- }
-
- unpin_entry1(cache_ptr, 0, 0);
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 6.");
- failure_mssg1 = msg;
-
- } else if ( !in_cache || !is_dirty || is_protected || is_pinned ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 6.");
- failure_mssg1 = msg;
- }
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_get_entry_status() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_expunge_entry1()
- *
- * Purpose: Verify that H5C1_expunge_entry() behaves as expected.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 7/5/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_expunge_entry1(void)
-{
- const char * fcn_name = "check_expunge_entry1";
- static char msg[128];
- herr_t result;
- hbool_t in_cache;
- hbool_t is_dirty;
- hbool_t is_protected;
- hbool_t is_pinned;
- size_t entry_size;
- H5C1_t * cache_ptr = NULL;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- TESTING("H5C1_expunge_entry() functionality");
-
- pass1 = TRUE;
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024 * 1024),
- (size_t)(1 * 1024 * 1024));
-
- base_addr = entries1[0];
- entry_ptr = &(base_addr[0]);
- }
-
- if ( pass1 ) {
-
- /* entry not in cache -- only in_cache should be touched by
- * the status call. Thus, only check that boolean.
- */
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected,
- &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 1.");
- failure_mssg1 = msg;
-
- } else if ( in_cache ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 1.");
- failure_mssg1 = msg;
-
- } else if ( ( entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 1.");
- failure_mssg1 = msg;
-
- }
- }
-
- /* protect an entry to force the cache to load it, and then unprotect
- * it without marking it dirty.
- */
-
- protect_entry1(cache_ptr, 0, 0);
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__NO_FLAGS_SET);
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 2.");
- failure_mssg1 = msg;
-
- } else if ( !in_cache || is_dirty || is_protected || is_pinned ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 2.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 2.");
- failure_mssg1 = msg;
-
- }
- }
-
- /* Expunge the entry and then verify that it is no longer in the cache.
- * Also verify that the entry was loaded, cleared, and destroyed, but
- * not flushed.
- */
- expunge_entry1(cache_ptr, 0, 0);
-
- if ( pass1 ) {
-
- /* entry shouldn't be in cache -- only in_cache should be touched
- * by the status call. Thus, only check that boolean.
- */
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 3.");
- failure_mssg1 = msg;
-
- } else if ( in_cache ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 3.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( ! entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( ! entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 3.");
- failure_mssg1 = msg;
-
- }
- }
-
- /* now repeat the process with a different entry. On unprotect
- * mark the entry as dirty. Verify that it is not flushed.
- */
-
- base_addr = entries1[0];
- entry_ptr = &(base_addr[1]);
-
- if ( pass1 ) {
-
- /* entry not in cache -- only in_cache should be touched by
- * the status call. Thus, only check that boolean.
- */
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected,
- &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 4.");
- failure_mssg1 = msg;
-
- } else if ( in_cache ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 4.");
- failure_mssg1 = msg;
-
- } else if ( ( entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 4.");
- failure_mssg1 = msg;
-
- }
- }
-
- /* protect the entry to force the cache to load it, and then unprotect
- * it with the dirty flag set.
- */
-
- protect_entry1(cache_ptr, 0, 1);
-
- unprotect_entry1(cache_ptr, 0, 1, TRUE, H5C1__NO_FLAGS_SET);
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected,
- &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 5.");
- failure_mssg1 = msg;
-
- } else if ( !in_cache || !is_dirty || is_protected || is_pinned ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 5.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 5.");
- failure_mssg1 = msg;
-
- }
- }
-
- /* Expunge the entry and then verify that it is no longer in the cache.
- * Also verify that the entry was loaded, cleared and destroyed, but not
- * flushed.
- */
- expunge_entry1(cache_ptr, 0, 1);
-
- if ( pass1 ) {
-
- /* entry shouldn't be in cache -- only in_cache should be touched
- * by the status call. Thus, only check that boolean.
- */
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected,
- &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 6.");
- failure_mssg1 = msg;
-
- } else if ( in_cache ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 6.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( ! entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( ! entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 6.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_expunge_entry1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_multiple_read_protect()
- *
- * Purpose: Verify that multiple, simultaneous read protects of a
- * single entry perform as expectd.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/1/07
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-
-static void
-check_multiple_read_protect(void)
-{
- const char * fcn_name = "check_multiple_read_protect()";
- H5C1_t * cache_ptr = NULL;
- test_entry_t * entry_ptr;
-
- TESTING("multiple read only protects on a single entry");
-
- pass1 = TRUE;
-
- /* allocate a cache. Should succeed.
- *
- * Then to start with, proceed as follows:
- *
- * Read protect an entry.
- *
- * Then read protect the entry again. Should succeed.
- *
- * Read protect yet again. Should succeed.
- *
- * Unprotect with no changes, and then read protect twice again.
- * Should succeed.
- *
- * Now unprotect three times. Should succeed.
- *
- * If stats are enabled, verify that correct stats are collected at
- * every step.
- *
- * Also, verify internal state of read protects at every step.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- entry_ptr = &((entries1[0])[0]);
-
- if ( ( entry_ptr->header.is_protected ) ||
- ( entry_ptr->header.is_read_only ) ||
- ( entry_ptr->header.ro_ref_count != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected ro protected status 1.\n";
- }
- }
-
-#if H5C1_COLLECT_CACHE_STATS
- if ( ( cache_ptr->write_protects[0] != 0 ) ||
- ( cache_ptr->read_protects[0] != 0 ) ||
- ( cache_ptr->max_read_protects[0] != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected protect stats 1.\n";
- }
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
- if ( pass1 )
- {
- protect_entry_ro1(cache_ptr, 0, 0);
-
- if ( ( ! ( entry_ptr->header.is_protected ) ) ||
- ( ! ( entry_ptr->header.is_read_only ) ) ||
- ( entry_ptr->header.ro_ref_count != 1 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected ro protected status 2.\n";
- }
- }
-
-#if H5C1_COLLECT_CACHE_STATS
- if ( ( cache_ptr->write_protects[0] != 0 ) ||
- ( cache_ptr->read_protects[0] != 1 ) ||
- ( cache_ptr->max_read_protects[0] != 1 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected protect stats 2.\n";
- }
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
- if ( pass1 )
- {
- protect_entry_ro1(cache_ptr, 0, 0);
-
- if ( ( ! ( entry_ptr->header.is_protected ) ) ||
- ( ! ( entry_ptr->header.is_read_only ) ) ||
- ( entry_ptr->header.ro_ref_count != 2 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected ro protected status 3.\n";
- }
- }
-
-#if H5C1_COLLECT_CACHE_STATS
- if ( ( cache_ptr->write_protects[0] != 0 ) ||
- ( cache_ptr->read_protects[0] != 2 ) ||
- ( cache_ptr->max_read_protects[0] != 2 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected protect stats 3.\n";
- }
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
- if ( pass1 )
- {
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__NO_FLAGS_SET);
-
- if ( ( ! ( entry_ptr->header.is_protected ) ) ||
- ( ! ( entry_ptr->header.is_read_only ) ) ||
- ( entry_ptr->header.ro_ref_count != 1 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected ro protected status 4.\n";
- }
- }
-
-#if H5C1_COLLECT_CACHE_STATS
- if ( ( cache_ptr->write_protects[0] != 0 ) ||
- ( cache_ptr->read_protects[0] != 2 ) ||
- ( cache_ptr->max_read_protects[0] != 2 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected protect stats 4.\n";
- }
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
- if ( pass1 )
- {
- protect_entry_ro1(cache_ptr, 0, 0);
-
- if ( ( ! ( entry_ptr->header.is_protected ) ) ||
- ( ! ( entry_ptr->header.is_read_only ) ) ||
- ( entry_ptr->header.ro_ref_count != 2 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected ro protected status 5.\n";
- }
- }
-
-#if H5C1_COLLECT_CACHE_STATS
- if ( ( cache_ptr->write_protects[0] != 0 ) ||
- ( cache_ptr->read_protects[0] != 3 ) ||
- ( cache_ptr->max_read_protects[0] != 2 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected protect stats 5.\n";
- }
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
- if ( pass1 )
- {
- protect_entry_ro1(cache_ptr, 0, 0);
-
- if ( ( ! ( entry_ptr->header.is_protected ) ) ||
- ( ! ( entry_ptr->header.is_read_only ) ) ||
- ( entry_ptr->header.ro_ref_count != 3 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected ro protected status 6.\n";
- }
- }
-
-#if H5C1_COLLECT_CACHE_STATS
- if ( ( cache_ptr->write_protects[0] != 0 ) ||
- ( cache_ptr->read_protects[0] != 4 ) ||
- ( cache_ptr->max_read_protects[0] != 3 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected protect stats 6.\n";
- }
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
- if ( pass1 )
- {
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__NO_FLAGS_SET);
-
- if ( ( ! ( entry_ptr->header.is_protected ) ) ||
- ( ! ( entry_ptr->header.is_read_only ) ) ||
- ( entry_ptr->header.ro_ref_count != 2 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected ro protected status 7.\n";
- }
- }
-
-#if H5C1_COLLECT_CACHE_STATS
- if ( ( cache_ptr->write_protects[0] != 0 ) ||
- ( cache_ptr->read_protects[0] != 4 ) ||
- ( cache_ptr->max_read_protects[0] != 3 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected protect stats 7.\n";
- }
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
- if ( pass1 )
- {
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__NO_FLAGS_SET);
-
- if ( ( ! ( entry_ptr->header.is_protected ) ) ||
- ( ! ( entry_ptr->header.is_read_only ) ) ||
- ( entry_ptr->header.ro_ref_count != 1 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected ro protected status 8.\n";
- }
- }
-
-#if H5C1_COLLECT_CACHE_STATS
- if ( ( cache_ptr->write_protects[0] != 0 ) ||
- ( cache_ptr->read_protects[0] != 4 ) ||
- ( cache_ptr->max_read_protects[0] != 3 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected protect stats 8.\n";
- }
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
- if ( pass1 )
- {
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__NO_FLAGS_SET);
-
- if ( ( entry_ptr->header.is_protected ) ||
- ( entry_ptr->header.is_read_only ) ||
- ( entry_ptr->header.ro_ref_count != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected ro protected status 9.\n";
- }
- }
-
-#if H5C1_COLLECT_CACHE_STATS
- if ( ( cache_ptr->write_protects[0] != 0 ) ||
- ( cache_ptr->read_protects[0] != 4 ) ||
- ( cache_ptr->max_read_protects[0] != 3 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected protect stats 9.\n";
- }
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
-
- /* If we get this far, do a write protect and unprotect to verify
- * that the stats are getting collected properly here as well.
- */
-
- if ( pass1 )
- {
- protect_entry1(cache_ptr, 0, 0);
-
- if ( ( ! ( entry_ptr->header.is_protected ) ) ||
- ( entry_ptr->header.is_read_only ) ||
- ( entry_ptr->header.ro_ref_count != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected ro protected status 10.\n";
- }
- }
-
-#if H5C1_COLLECT_CACHE_STATS
- if ( ( cache_ptr->write_protects[0] != 1 ) ||
- ( cache_ptr->read_protects[0] != 4 ) ||
- ( cache_ptr->max_read_protects[0] != 3 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected protect stats 10.\n";
- }
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
- if ( pass1 )
- {
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__NO_FLAGS_SET);
-
- if ( ( entry_ptr->header.is_protected ) ||
- ( entry_ptr->header.is_read_only ) ||
- ( entry_ptr->header.ro_ref_count != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected ro protected status 11.\n";
- }
- }
-
-#if H5C1_COLLECT_CACHE_STATS
- if ( ( cache_ptr->write_protects[0] != 1 ) ||
- ( cache_ptr->read_protects[0] != 4 ) ||
- ( cache_ptr->max_read_protects[0] != 3 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected protect stats 11.\n";
- }
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
-
- /* Finally, mix things up a little, using a mix of reads and
- * and writes on different entries. Also include a pin to verify
- * that it works as well.
- *
- * Stats are looking OK, so we will only test them one more time
- * at the end to ensure that all is at it should be.
- */
-
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, 0, 2); /* (0,2) write */
- protect_entry_ro1(cache_ptr, 0, 4); /* (0,4) read only (1) */
- protect_entry1(cache_ptr, 0, 6); /* (0,6) write */
-
- unprotect_entry1(cache_ptr, 0, 2, FALSE, /* (0,2) unprotect */
- H5C1__NO_FLAGS_SET);
-
- protect_entry_ro1(cache_ptr, 0, 2); /* (0,2) read only (1) */
- protect_entry1(cache_ptr, 0, 1); /* (0,1) write */
- protect_entry_ro1(cache_ptr, 0, 4); /* (0,4) read only (2) */
- protect_entry1(cache_ptr, 0, 0); /* (0,0) write */
- protect_entry_ro1(cache_ptr, 0, 2); /* (0,2) read only (2) */
-
- unprotect_entry1(cache_ptr, 0, 2, FALSE, /* (0,2) read only (1) pin */
- H5C1__PIN_ENTRY_FLAG);
- unprotect_entry1(cache_ptr, 0, 6, FALSE, /* (0,6) unprotect */
- H5C1__NO_FLAGS_SET);
-
- protect_entry_ro1(cache_ptr, 0, 4); /* (0,4) read only (3) */
-
- unprotect_entry1(cache_ptr, 0, 2, FALSE, /* (0,2) unprotect */
- H5C1__NO_FLAGS_SET);
- unprotect_entry1(cache_ptr, 0, 1, FALSE, /* (0,1) unprotect */
- H5C1__NO_FLAGS_SET);
-
- if ( pass1 ) {
-
- entry_ptr = &((entries1[0])[4]);
-
- if ( H5C1_pin_protected_entry(cache_ptr, (void *)entry_ptr) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_pin_protected_entry() failed.\n";
-
- } else if ( ! (entry_ptr->header.is_pinned) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "entry (0,4) not pinned.\n";
-
- } else {
-
- /* keep test bed sanity checks happy */
- entry_ptr->is_pinned = TRUE;
-
- }
- }
-
- unprotect_entry1(cache_ptr, 0, 4, FALSE, /* (0,4) read only (2) */
- H5C1__NO_FLAGS_SET);
- unprotect_entry1(cache_ptr, 0, 4, FALSE, /* (0,4) read only (1) */
- H5C1__UNPIN_ENTRY_FLAG);
-
- if ( ( pass1 ) && ( entry_ptr->header.is_pinned ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "enty (0,4) still pinned.\n";
-
- }
-
- unprotect_entry1(cache_ptr, 0, 4, FALSE, /* (0,4) unprotect */
- H5C1__NO_FLAGS_SET);
- unprotect_entry1(cache_ptr, 0, 0, FALSE, /* (0,0) unprotect */
- H5C1__NO_FLAGS_SET);
-
- unpin_entry1(cache_ptr, 0, 2);
- }
-
-#if H5C1_COLLECT_CACHE_STATS
- if ( ( cache_ptr->write_protects[0] != 5 ) ||
- ( cache_ptr->read_protects[0] != 9 ) ||
- ( cache_ptr->max_read_protects[0] != 3 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected protect stats 11.\n";
- }
-#endif /* H5C1_COLLECT_CACHE_STATS */
-
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_multiple_read_protect() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_rename_entry1()
- *
- * Purpose: Verify that H5C1_rename_entry behaves as expected. In
- * particular, verify that it works correctly with pinned
- * entries.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/26/06
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_rename_entry1(void)
-{
- const char * fcn_name = "check_rename_entry1";
- int i;
- H5C1_t * cache_ptr = NULL;
- struct rename_entry_test_spec test_specs[4] =
- {
- {
- /* int entry_type = */ PICO_ENTRY_TYPE,
- /* int entry_index = */ 10,
- /* hbool_t is_dirty = */ FALSE,
- /* hbool_t is_pinned = */ FALSE
- },
- {
- /* int entry_type = */ PICO_ENTRY_TYPE,
- /* int entry_index = */ 20,
- /* hbool_t is_dirty = */ TRUE,
- /* hbool_t is_pinned = */ FALSE
- },
- {
- /* int entry_type = */ PICO_ENTRY_TYPE,
- /* int entry_index = */ 30,
- /* hbool_t is_dirty = */ FALSE,
- /* hbool_t is_pinned = */ TRUE
- },
- {
- /* int entry_type = */ PICO_ENTRY_TYPE,
- /* int entry_index = */ 40,
- /* hbool_t is_dirty = */ TRUE,
- /* hbool_t is_pinned = */ TRUE
- }
- };
-
- TESTING("H5C1_rename_entry() functionality");
-
- pass1 = TRUE;
-
- /* allocate a cache, load entries into it, and then rename
- * them. To the extent possible, verify that the desired
- * actions took place.
- *
- * At present, we should do the following tests:
- *
- * 1) Rename a clean, unprotected, unpinned entry.
- *
- * 2) Rename a dirty, unprotected, unpinned entry.
- *
- * 3) Rename a clean, unprotected, pinned entry.
- *
- * 4) Rename a dirty, unprotected, pinned entry.
- *
- * In all cases, the entry should have moved to its
- * new location, and have been marked dirty if it wasn't
- * already.
- *
- * Unpinned entries should have been moved to the head
- * of the LRU list.
- *
- * Pinned entries should remain untouched on the pinned entry
- * list.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024 * 1024),
- (size_t)(1 * 1024 * 1024));
- }
-
- i = 0;
- while ( ( pass1 ) && ( i < 4 ) )
- {
- check_rename_entry1__run_test(cache_ptr, i, &(test_specs[i]));
- i++;
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_rename_entry1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_rename_entry1__run_test()
- *
- * Purpose: Run a rename entry test.
- *
- * Do nothing if pass1 is FALSE on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/27/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_rename_entry1__run_test(H5C1_t * cache_ptr,
- int test_num,
- struct rename_entry_test_spec * spec_ptr)
-{
- /* const char * fcn_name = "check_rename_entry1__run_test"; */
- static char msg[128];
- unsigned int flags = H5C1__NO_FLAGS_SET;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr = NULL;
- H5C1_cache_entry_t * test_ptr = NULL;
-
- if ( cache_ptr == NULL ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "cache_ptr NULL on entry to rename test #%d.",
- test_num);
- failure_mssg1 = msg;
-
- } else if ( spec_ptr == NULL ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "spec_ptr NULL on entry to rename test #%d.",
- test_num);
- failure_mssg1 = msg;
-
- }
-
- if ( pass1 ) {
-
- base_addr = entries1[spec_ptr->entry_type];
- entry_ptr = &(base_addr[spec_ptr->entry_index]);
-
- if ( ( entry_ptr->self != entry_ptr ) ||
- ( ( entry_ptr->cache_ptr != cache_ptr ) &&
- ( entry_ptr->cache_ptr != NULL ) ) ||
- ( ! ( entry_ptr->at_main_addr ) ) ||
- ( entry_ptr->addr != entry_ptr->main_addr ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "bad entry_ptr in rename test #%d.",
- test_num);
- failure_mssg1 = msg;
-
- } else if ( spec_ptr->is_pinned ) {
-
- flags |= H5C1__PIN_ENTRY_FLAG;
- }
- }
-
- protect_entry1(cache_ptr, spec_ptr->entry_type, spec_ptr->entry_index);
-
- unprotect_entry1(cache_ptr, spec_ptr->entry_type, spec_ptr->entry_index,
- (int)(spec_ptr->is_dirty), flags);
-
- rename_entry1(cache_ptr, spec_ptr->entry_type, spec_ptr->entry_index, FALSE);
-
- if ( pass1 ) {
-
- /* verify that the rename took place, and that the cache's internal
- * structures are as expected. Note that some sanity checking is
- * done by rename_entry1(), so we don't have to repeat it here.
- */
-
- if ( spec_ptr->is_pinned ) {
-
- if ( ! ( entry_ptr->header.is_pinned ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Pinned entry not pinned after rename in test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
-
- if ( pass1 ) {
-
- test_ptr = cache_ptr->pel_head_ptr;
-
- while ( ( test_ptr != NULL ) &&
- ( test_ptr != (H5C1_cache_entry_t *)entry_ptr ) )
- {
- test_ptr = test_ptr->next;
- }
-
- if ( test_ptr == NULL ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Pinned entry not in pel after rename in test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- }
-
- unpin_entry1(cache_ptr, spec_ptr->entry_type, spec_ptr->entry_index);
-
- } else {
-
- if ( entry_ptr->header.is_pinned ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Unpinned entry pinned after rename in test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
-
- if ( ( entry_ptr->header.prev != NULL ) ||
- ( cache_ptr->LRU_head_ptr != (H5C1_cache_entry_t *)entry_ptr ) )
- {
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Entry not at head of LRU after rename in test #%d.",
- test_num);
- failure_mssg1 = msg;
- }
- }
- }
-
- /* put the entry back where it started from */
- rename_entry1(cache_ptr, spec_ptr->entry_type, spec_ptr->entry_index, TRUE);
-
- return;
-
-} /* check_rename_entry1__run_test() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_pin_protected_entry1()
- *
- * Purpose: Verify that H5C1_pin_protected_entry behaves as expected.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/28/06
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_pin_protected_entry1(void)
-{
- const char * fcn_name = "check_pin_protected_entry1";
- static char msg[128];
- herr_t result;
- H5C1_t * cache_ptr = NULL;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- TESTING("H5C1_pin_protected_entry() functionality");
-
- pass1 = TRUE;
-
- /* Create a cache, protect an entry, and then use H5C1_pin_protected_entry()
- * to pin it. Verify that the entry is in fact pined. Unprotect the entry
- * to unpin it, and then destroy the cache.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024 * 1024),
- (size_t)(1 * 1024 * 1024));
- }
-
- protect_entry1(cache_ptr, 0, 0);
-
- if ( pass1 ) {
-
- base_addr = entries1[0];
- entry_ptr = &(base_addr[0]);
-
- result = H5C1_pin_protected_entry(cache_ptr, (void *)entry_ptr);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5C1_pin_protected_entry() reports failure.");
- failure_mssg1 = msg;
-
- } else if ( ! ( entry_ptr->header.is_pinned ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "entry not pinned when it should be.");
- failure_mssg1 = msg;
-
- } else {
-
- entry_ptr->is_pinned = TRUE;
- }
- }
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__UNPIN_ENTRY_FLAG);
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_pin_protected_entry1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_resize_entry1()
- *
- * Purpose: Verify that H5C1_resize_entry1() and H5C1_unprotect() resize
- * entries as expected.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 7/7/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_resize_entry1(void)
-{
- const char * fcn_name = "check_resize_entry1";
- static char msg[128];
- herr_t result;
- hbool_t in_cache;
- hbool_t is_dirty;
- hbool_t is_protected;
- hbool_t is_pinned;
- size_t entry_size;
- size_t reported_entry_size;
- H5C1_t * cache_ptr = NULL;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- TESTING("entry resize functionality");
-
- /* Setup a cache and verify that it is empty.
- *
- * Then force the load of an entry by protecting it, and verify that
- * the entry and cache have the expected sizes.
- *
- * Then unprotect the entry with the size changed flag and a reduced
- * size. Verify that the entry and cache have the expected expected
- * sizes.
- *
- * Use a second protect/unprotect cycle to restore the entry to
- * its original size. Verify that the entry and cache have the
- * expected sizes.
- *
- * Protect and unprotect the entry again to pin it. Use
- * H5C1_resize_entry1 to reduce its size. Verify that the entry
- * and cache have the expected sizes.
- *
- * Use H5C1_resize_entry1 again to restore the entry to its original
- * size. Verify that the entry and cache have the expected sizes.
- *
- * Use a protect / unprotect cycle to unpin and destroy the entry.
- * Verify that the entry and cache have the expected sizes.
- *
- *
- * Obesrve that all the above tests have been done with only one
- * entry in the cache. Repeat the tests with several entries in
- * the cache.
- */
-
- pass1 = TRUE;
-
- /* tests with only one entry in the cache: */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024 * 1024),
- (size_t)(1 * 1024 * 1024));
-
- base_addr = entries1[LARGE_ENTRY_TYPE];
- entry_ptr = &(base_addr[0]);
- entry_size = LARGE_ENTRY_SIZE;
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ||
- ( cache_ptr->slist_len != 0 ) ||
- ( cache_ptr->slist_size != 0 ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 1.");
- failure_mssg1 = msg;
-
- }
- }
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 1 ) ||
- ( cache_ptr->index_size != LARGE_ENTRY_SIZE ) ||
- ( cache_ptr->slist_len != 0 ) ||
- ( cache_ptr->slist_size != 0 ) ) {
-
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 2.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr,
- &reported_entry_size, &in_cache,
- &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 1.");
- failure_mssg1 = msg;
-
- } else if ( !in_cache || is_dirty || !is_protected || is_pinned ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 1.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 1.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_unprotect(NULL, -1, -1, cache_ptr,
- &(types1[LARGE_ENTRY_TYPE]), entry_ptr->addr,
- (void *)entry_ptr,
- H5C1__SIZE_CHANGED_FLAG | H5C1__DIRTIED_FLAG,
- (LARGE_ENTRY_SIZE / 2));
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "H5C1_unprotect() reports failure 1.");
- failure_mssg1 = msg;
-
- } else {
-
- /* tidy up so we play nice with the standard protect / unprotect
- * calls.
- */
- entry_ptr->is_protected = FALSE;
- entry_ptr->is_dirty = TRUE;
- entry_ptr->size = LARGE_ENTRY_SIZE / 2;
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 1 ) ||
- ( cache_ptr->index_size != (LARGE_ENTRY_SIZE / 2) ) ||
- ( cache_ptr->slist_len != 1 ) ||
- ( cache_ptr->slist_size != (LARGE_ENTRY_SIZE / 2) ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 3.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr,
- &reported_entry_size, &in_cache,
- &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 2.");
- failure_mssg1 = msg;
-
- } else if ( !in_cache || !is_dirty || is_protected || is_pinned ||
- ( reported_entry_size != (LARGE_ENTRY_SIZE / 2) ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 2.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 2.");
- failure_mssg1 = msg;
-
- }
- }
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
-
- result = H5C1_unprotect(NULL, -1, -1, cache_ptr,
- &(types1[LARGE_ENTRY_TYPE]), entry_ptr->addr,
- (void *)entry_ptr,
- (H5C1__DIRTIED_FLAG | H5C1__SIZE_CHANGED_FLAG),
- LARGE_ENTRY_SIZE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "H5C1_unprotect() reports failure 2.");
- failure_mssg1 = msg;
-
- } else {
-
- /* tidy up so we play nice with the standard protect / unprotect
- * calls.
- */
- entry_ptr->is_protected = FALSE;
- entry_ptr->is_dirty = TRUE;
- entry_ptr->size = LARGE_ENTRY_SIZE;
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 1 ) ||
- ( cache_ptr->index_size != LARGE_ENTRY_SIZE ) ||
- ( cache_ptr->slist_len != 1 ) ||
- ( cache_ptr->slist_size != LARGE_ENTRY_SIZE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 4.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr,
- &reported_entry_size, &in_cache,
- &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 3.");
- failure_mssg1 = msg;
-
- } else if ( !in_cache || !is_dirty || is_protected || is_pinned ||
- ( reported_entry_size != LARGE_ENTRY_SIZE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 3.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 3.");
- failure_mssg1 = msg;
-
- }
- }
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 0);
-
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 0, FALSE, H5C1__PIN_ENTRY_FLAG);
-
- if ( pass1 ) {
-
- result = H5C1_resize_pinned_entry(cache_ptr, (void *)entry_ptr,
- (LARGE_ENTRY_SIZE / 4));
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5C1_resize_pinned_entry() reports failure 1.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 1 ) ||
- ( cache_ptr->index_size != (LARGE_ENTRY_SIZE / 4) ) ||
- ( cache_ptr->slist_len != 1 ) ||
- ( cache_ptr->slist_size != (LARGE_ENTRY_SIZE / 4) ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 5.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr,
- &reported_entry_size, &in_cache,
- &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 4.");
- failure_mssg1 = msg;
-
- } else if ( !in_cache || !is_dirty || is_protected || ! is_pinned ||
- ( reported_entry_size != (LARGE_ENTRY_SIZE / 4) ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 4.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 4.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_resize_pinned_entry(cache_ptr, (void *)entry_ptr,
- LARGE_ENTRY_SIZE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5C1_resize_pinned_entry() reports failure 2.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 1 ) ||
- ( cache_ptr->index_size != LARGE_ENTRY_SIZE ) ||
- ( cache_ptr->slist_len != 1 ) ||
- ( cache_ptr->slist_size != LARGE_ENTRY_SIZE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 6.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr,
- &reported_entry_size, &in_cache,
- &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 5.");
- failure_mssg1 = msg;
-
- } else if ( !in_cache || !is_dirty || is_protected || ! is_pinned ||
- ( reported_entry_size != LARGE_ENTRY_SIZE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 5.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 5.");
- failure_mssg1 = msg;
-
- }
- }
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 0);
-
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 0, FALSE,
- H5C1__UNPIN_ENTRY_FLAG | H5C1__DELETED_FLAG);
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected,
- &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 6.");
- failure_mssg1 = msg;
-
- } else if ( in_cache ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 6.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( ! entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( ! entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 6.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ||
- ( cache_ptr->slist_len != 0 ) ||
- ( cache_ptr->slist_size != 0 ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 7.");
- failure_mssg1 = msg;
-
- }
- }
-
-
- /* now repreat the above tests with several entries in the cache: */
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ||
- ( cache_ptr->slist_len != 0 ) ||
- ( cache_ptr->slist_size != 0 ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 8.");
- failure_mssg1 = msg;
-
- }
- base_addr = entries1[LARGE_ENTRY_TYPE];
- entry_ptr = &(base_addr[3]);
- entry_size = LARGE_ENTRY_SIZE;
- }
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 0);
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 0, FALSE, H5C1__NO_FLAGS_SET);
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 1);
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 1, TRUE, H5C1__NO_FLAGS_SET);
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 2);
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 2, FALSE, H5C1__NO_FLAGS_SET);
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 3 ) ||
- ( cache_ptr->index_size != 3 * LARGE_ENTRY_SIZE ) ||
- ( cache_ptr->slist_len != 1 ) ||
- ( cache_ptr->slist_size != LARGE_ENTRY_SIZE ) ) {
-
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 9.");
- failure_mssg1 = msg;
-
- }
- }
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 3);
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 4 * LARGE_ENTRY_SIZE ) ||
- ( cache_ptr->slist_len != 1 ) ||
- ( cache_ptr->slist_size != LARGE_ENTRY_SIZE ) ) {
-
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 10.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr,
- &reported_entry_size, &in_cache,
- &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 7.");
- failure_mssg1 = msg;
-
- } else if ( !in_cache || is_dirty || !is_protected || is_pinned ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 7.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 7.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_unprotect(NULL, -1, -1, cache_ptr,
- &(types1[LARGE_ENTRY_TYPE]), entry_ptr->addr,
- (void *)entry_ptr,
- H5C1__SIZE_CHANGED_FLAG | H5C1__DIRTIED_FLAG,
- (LARGE_ENTRY_SIZE / 2));
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "H5C1_unprotect() reports failure 3.");
- failure_mssg1 = msg;
-
- } else {
-
- /* tidy up so we play nice with the standard protect / unprotect
- * calls.
- */
- entry_ptr->is_protected = FALSE;
- entry_ptr->is_dirty = TRUE;
- entry_ptr->size = LARGE_ENTRY_SIZE / 2;
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size !=
- ((3 * LARGE_ENTRY_SIZE) + (LARGE_ENTRY_SIZE / 2)) ) ||
- ( cache_ptr->slist_len != 2 ) ||
- ( cache_ptr->slist_size !=
- (LARGE_ENTRY_SIZE + (LARGE_ENTRY_SIZE / 2)) ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 11.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr,
- &reported_entry_size, &in_cache,
- &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 8.");
- failure_mssg1 = msg;
-
- } else if ( !in_cache || !is_dirty || is_protected || is_pinned ||
- ( reported_entry_size != (LARGE_ENTRY_SIZE / 2) ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 8.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 8.");
- failure_mssg1 = msg;
-
- }
- }
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 3);
-
- if ( pass1 ) {
-
- result = H5C1_unprotect(NULL, -1, -1, cache_ptr,
- &(types1[LARGE_ENTRY_TYPE]), entry_ptr->addr,
- (void *)entry_ptr,
- (H5C1__DIRTIED_FLAG | H5C1__SIZE_CHANGED_FLAG),
- LARGE_ENTRY_SIZE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "H5C1_unprotect() reports failure 4.");
- failure_mssg1 = msg;
-
- } else {
-
- /* tidy up so we play nice with the standard protect / unprotect
- * calls.
- */
- entry_ptr->is_protected = FALSE;
- entry_ptr->is_dirty = TRUE;
- entry_ptr->size = LARGE_ENTRY_SIZE;
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 4 * LARGE_ENTRY_SIZE ) ||
- ( cache_ptr->slist_len != 2 ) ||
- ( cache_ptr->slist_size != 2 * LARGE_ENTRY_SIZE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 12.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr,
- &reported_entry_size, &in_cache,
- &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 9.");
- failure_mssg1 = msg;
-
- } else if ( !in_cache || !is_dirty || is_protected || is_pinned ||
- ( reported_entry_size != LARGE_ENTRY_SIZE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 9.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 9.");
- failure_mssg1 = msg;
-
- }
- }
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 3);
-
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 3, FALSE, H5C1__PIN_ENTRY_FLAG);
-
- if ( pass1 ) {
-
- result = H5C1_resize_pinned_entry(cache_ptr, (void *)entry_ptr,
- (LARGE_ENTRY_SIZE / 4));
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5C1_resize_pinned_entry() reports failure 3.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size !=
- ((3 * LARGE_ENTRY_SIZE) + (LARGE_ENTRY_SIZE / 4)) ) ||
- ( cache_ptr->slist_len != 2 ) ||
- ( cache_ptr->slist_size !=
- (LARGE_ENTRY_SIZE + (LARGE_ENTRY_SIZE / 4)) ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 13.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr,
- &reported_entry_size, &in_cache,
- &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 10.");
- failure_mssg1 = msg;
-
- } else if ( !in_cache || !is_dirty || is_protected || ! is_pinned ||
- ( reported_entry_size != (LARGE_ENTRY_SIZE / 4) ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 10.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 10.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_resize_pinned_entry(cache_ptr, (void *)entry_ptr,
- LARGE_ENTRY_SIZE);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5C1_resize_pinned_entry() reports failure 4.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != (4 * LARGE_ENTRY_SIZE) ) ||
- ( cache_ptr->slist_len != 2 ) ||
- ( cache_ptr->slist_size != (2 * LARGE_ENTRY_SIZE) ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 14.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr,
- &reported_entry_size, &in_cache,
- &is_dirty, &is_protected, &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 11.");
- failure_mssg1 = msg;
-
- } else if ( !in_cache || !is_dirty || is_protected || ! is_pinned ||
- ( reported_entry_size != LARGE_ENTRY_SIZE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 11.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 11.");
- failure_mssg1 = msg;
-
- }
- }
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 3);
-
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 3, FALSE,
- H5C1__UNPIN_ENTRY_FLAG | H5C1__DELETED_FLAG);
-
- if ( pass1 ) {
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr, &entry_size,
- &in_cache, &is_dirty, &is_protected,
- &is_pinned);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 12.");
- failure_mssg1 = msg;
-
- } else if ( in_cache ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 12.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( ! entry_ptr->cleared ) ||
- ( entry_ptr->flushed ) ||
- ( ! entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 12.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 3 ) ||
- ( cache_ptr->index_size != (3 * LARGE_ENTRY_SIZE) ) ||
- ( cache_ptr->slist_len != 1 ) ||
- ( cache_ptr->slist_size != LARGE_ENTRY_SIZE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 15.");
- failure_mssg1 = msg;
-
- }
- }
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 2);
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 2, FALSE, H5C1__DELETED_FLAG);
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 1);
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 1, FALSE, H5C1__DELETED_FLAG);
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 0);
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 0, FALSE, H5C1__DELETED_FLAG);
-
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ||
- ( cache_ptr->slist_len != 0 ) ||
- ( cache_ptr->slist_size != 0 ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 16.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_resize_entry1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_evictions_enabled()
- *
- * Purpose: Verify that H5C1_get_evictions_enabled() and
- * H5C1_set_evictions_enabled() functions perform as expected.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 8/2/07
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_evictions_enabled(void)
-{
- const char * fcn_name = "check_evictions_enabled";
- static char msg[128];
- herr_t result;
- hbool_t show_progress = FALSE;
- hbool_t evictions_enabled;
- hbool_t in_cache;
- int i;
- int mile_stone = 1;
- size_t entry_size;
- H5C1_t * cache_ptr = NULL;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- TESTING("evictions enabled/disabled functionality");
-
- /* Setup a cache and verify that it is empty.
- *
- * Use H5C1_get_evictions_enabled() to determine if evictions are
- * currently enabled -- they should be.
- *
- * Load entries until the cache is full. Load one more. Verify that
- * this caused an entry to be evicted.
- *
- * Insert an entry. Verify that this cases and entry to be evicted.
- *
- * Used H5C1_set_evictions_enabled() to disable evictions. Verify
- * with a call to H5C1_get_evictions_enabled().
- *
- * Load another entry -- verify that this does not cause an entry
- * to be evicted.
- *
- * Insert an entry -- verify that this does not cause an entry to
- * be evicted.
- *
- * Use H5C1_set_evictions_enabled() to re-enable evictions. Verify
- * with a call to H5C1_get_evictions_enabled().
- *
- * Protect and unprotect some of the entries in the cache. Verify
- * that there are no evictions (since we only try to make space
- * when we either insert or load a new entry).
- *
- * Protect an entry not in the cache. Verify that this causes
- * two evictions.
- *
- * Used H5C1_set_evictions_enabled() to disable evictions again.
- * Verify with a call to H5C1_get_evictions_enabled().
- *
- * Now flush and discard the cache -- should succeed.
- */
-
- pass1 = TRUE;
-
- if ( show_progress ) /* 1 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* create the cache */
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(1 * 1024 * 1024),
- (size_t)( 512 * 1024));
-
- base_addr = entries1[MONSTER_ENTRY_TYPE];
- entry_size = MONSTER_ENTRY_SIZE;
- }
-
- if ( show_progress ) /* 2 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* verivy that it is empty */
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ||
- ( cache_ptr->slist_len != 0 ) ||
- ( cache_ptr->slist_size != 0 ) ||
- ( cache_ptr->evictions_enabled != TRUE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 1.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( show_progress ) /* 3 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* verify that H5C1_get_evictions_enabled() returns the expected value */
- if ( pass1 ) {
-
- result = H5C1_get_evictions_enabled(cache_ptr, &evictions_enabled);
-
- if ( ( result != SUCCEED ) || ( evictions_enabled != TRUE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected evictions enabled 1.");
- failure_mssg1 = msg;
- }
- }
-
- if ( show_progress ) /* 4 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* fill the cache */
- for ( i = 0; i < 16 ; i++ )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- FALSE, H5C1__NO_FLAGS_SET);
- }
-
- if ( show_progress ) /* 5 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* verify that the cache is full */
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 16 ) ||
- ( cache_ptr->index_size != 16 * MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->slist_len != 0 ) ||
- ( cache_ptr->slist_size != 0 ) ||
- ( cache_ptr->evictions_enabled != TRUE ) ) {
-
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 2.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( show_progress ) /* 6 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* protect and unprotect another entry */
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 16);
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 16,
- FALSE, H5C1__NO_FLAGS_SET);
-
- if ( show_progress ) /* 7 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* verify that the an entry has been evicted */
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 16 ) ||
- ( cache_ptr->index_size != 16 * MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->slist_len != 0 ) ||
- ( cache_ptr->slist_size != 0 ) ||
- ( cache_ptr->evictions_enabled != TRUE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 3.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( show_progress ) /* 8 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- entry_ptr = &(base_addr[0]);
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr,
- NULL, &in_cache, NULL, NULL, NULL);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 1.");
- failure_mssg1 = msg;
-
- } else if ( in_cache ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 1.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( ! entry_ptr->flushed ) ||
- ( ! entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 1.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( show_progress ) /* 9 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* insert an entry */
- insert_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 17, TRUE, H5C1__NO_FLAGS_SET);
-
- if ( show_progress ) /* 10 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* verify that another entry has been evicted */
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 16 ) ||
- ( cache_ptr->index_size != 16 * MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->slist_len != 1 ) ||
- ( cache_ptr->slist_size != MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->evictions_enabled != TRUE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 4.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( show_progress ) /* 11 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- entry_ptr = &(base_addr[1]);
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr,
- NULL, &in_cache, NULL, NULL, NULL);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 2.");
- failure_mssg1 = msg;
-
- } else if ( in_cache ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 2.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( ! entry_ptr->flushed ) ||
- ( ! entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 2.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( show_progress ) /* 12 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* disable evictions */
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, FALSE);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "can't disable evictions 1.");
- failure_mssg1 = msg;
- }
- }
-
- if ( show_progress ) /* 13 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* verify that evictions are disabled */
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 16 ) ||
- ( cache_ptr->index_size != 16 * MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->slist_len != 1 ) ||
- ( cache_ptr->slist_size != MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->evictions_enabled != FALSE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 5.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( show_progress ) /* 14 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* protect and unprotect another entry */
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 18);
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 18,
- FALSE, H5C1__NO_FLAGS_SET);
-
- if ( show_progress ) /* 15 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* verify that no entry has been evicted */
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 17 ) ||
- ( cache_ptr->index_size != 17 * MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->slist_len != 1 ) ||
- ( cache_ptr->slist_size != MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->evictions_enabled != FALSE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 6.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( show_progress ) /* 16 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* insert another entry */
- insert_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 19, TRUE, H5C1__NO_FLAGS_SET);
-
- if ( show_progress ) /* 17 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* verify that no entry has been evicted */
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 18 ) ||
- ( cache_ptr->index_size != 18 * MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->slist_len != 2 ) ||
- ( cache_ptr->slist_size != 2 * MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->evictions_enabled != FALSE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 7.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( show_progress ) /* 18 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* re-enable evictions */
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, TRUE);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "can't enable evictions 1.");
- failure_mssg1 = msg;
- }
- }
-
- if ( show_progress ) /* 19 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* protect and unprotect an entry that is in the cache */
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 19);
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 19,
- FALSE, H5C1__NO_FLAGS_SET);
-
- if ( show_progress ) /* 20 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* verify that no entries have been evicted */
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 18 ) ||
- ( cache_ptr->index_size != 18 * MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->slist_len != 2 ) ||
- ( cache_ptr->slist_size != 2 * MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->evictions_enabled != TRUE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 8.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( show_progress ) /* 21 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* protect and unprotect an entry that isn't in the cache */
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 20);
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 20,
- FALSE, H5C1__NO_FLAGS_SET);
-
- if ( show_progress ) /* 22 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* verify that the entries have been evicted to bring the
- * cache back down to its normal size.
- */
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 16 ) ||
- ( cache_ptr->index_size != 16 * MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->slist_len != 2 ) ||
- ( cache_ptr->slist_size != 2 * MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->evictions_enabled != TRUE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 9.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( show_progress ) /* 23 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- entry_ptr = &(base_addr[2]);
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr,
- NULL, &in_cache, NULL, NULL, NULL);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 3.");
- failure_mssg1 = msg;
-
- } else if ( in_cache ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 3.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( ! entry_ptr->flushed ) ||
- ( ! entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 3.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( show_progress ) /* 24 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- entry_ptr = &(base_addr[3]);
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr,
- NULL, &in_cache, NULL, NULL, NULL);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 4.");
- failure_mssg1 = msg;
-
- } else if ( in_cache ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 4.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( ! entry_ptr->flushed ) ||
- ( ! entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 4.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( show_progress ) /* 25 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* disable evictions again */
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, FALSE);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "can't disable evictions 2.");
- failure_mssg1 = msg;
- }
- }
-
- if ( show_progress ) /* 26 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* protect and unprotect an entry that isn't in the cache, forcing
- * the cache to grow.
- */
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 21);
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 21,
- FALSE, H5C1__NO_FLAGS_SET);
-
-
- if ( show_progress ) /* 27 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* verify that the cache has grown */
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 17 ) ||
- ( cache_ptr->index_size != 17 * MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->slist_len != 2 ) ||
- ( cache_ptr->slist_size != 2 * MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->evictions_enabled != FALSE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 10.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( show_progress ) /* 28 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* re-enable evictions again */
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, TRUE);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "can't enable evictions 2.");
- failure_mssg1 = msg;
- }
- }
-
- if ( show_progress ) /* 29 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* insert an entry */
- insert_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 22, TRUE, H5C1__NO_FLAGS_SET);
-
- if ( show_progress ) /* 30 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* verify that the cache has returned to its maximum size */
- if ( pass1 ) {
-
- if ( ( cache_ptr->index_len != 16 ) ||
- ( cache_ptr->index_size != 16 * MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->slist_len != 3 ) ||
- ( cache_ptr->slist_size != 3 * MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->evictions_enabled != TRUE ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected cache status 11.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( show_progress ) /* 31 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- entry_ptr = &(base_addr[4]);
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->addr,
- NULL, &in_cache, NULL, NULL, NULL);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5AC1_get_entry_status() reports failure 5.");
- failure_mssg1 = msg;
-
- } else if ( in_cache ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected status 5.");
- failure_mssg1 = msg;
-
- } else if ( ( ! entry_ptr->loaded ) ||
- ( entry_ptr->cleared ) ||
- ( ! entry_ptr->flushed ) ||
- ( ! entry_ptr->destroyed ) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Unexpected entry history 5.");
- failure_mssg1 = msg;
-
- }
- }
-
- if ( show_progress ) /* 32 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- /* disable evictions one last time before we shut down */
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, FALSE);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "can't disable evictions 3.");
- failure_mssg1 = msg;
- }
- }
-
- if ( show_progress ) /* 33 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( show_progress ) /* 34 */
- HDfprintf(stdout, "%s() - %0d -- pass1 = %d\n",
- fcn_name, mile_stone++, (int)pass1);
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_evictions_enabled() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_flush_protected_err()
- *
- * Purpose: Verify that an attempt to flush the cache when it contains
- * a protected entry will generate an error.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/24/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_flush_protected_err(void)
-{
- const char * fcn_name = "check_flush_protected_err";
- H5C1_t * cache_ptr = NULL;
-
- TESTING("flush cache with protected entry error");
-
- pass1 = TRUE;
-
- /* allocate a cache, protect an entry, and try to flush. This
- * should fail. Unprotect the entry and flush again -- should
- * succeed.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- protect_entry1(cache_ptr, 0, 0);
-
- if ( H5C1_flush_cache(NULL, -1, -1, cache_ptr, H5C1__NO_FLAGS_SET)
- >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "flush succeeded on cache with protected entry.\n";
-
- } else {
-
- unprotect_entry1(cache_ptr, 0, 0, TRUE, H5C1__NO_FLAGS_SET);
-
- if ( H5C1_flush_cache(NULL, -1, -1, cache_ptr, H5C1__NO_FLAGS_SET)
- < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "flush failed after unprotect.\n";
-
- } else {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
- }
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_flush_protected_err() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_destroy_pinned_err()
- *
- * Purpose: Verify that an attempt to destroy the cache when it contains
- * a pinned entry that can't be unpined during the flush destroy
- * will generate an error.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/7/06
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_destroy_pinned_err(void)
-{
- const char * fcn_name = "check_destroy_pinned_err()";
- H5C1_t * cache_ptr = NULL;
-
- TESTING("destroy cache with permanently pinned entry error");
-
- pass1 = TRUE;
-
- /* allocate a cache, pin an entry, and try to flush destroy. This
- * should fail. Unpin the entry and flush destroy again -- should
- * succeed.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- protect_entry1(cache_ptr, 0, 0);
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__PIN_ENTRY_FLAG);
-
- if ( H5C1_dest(NULL, -1, -1, cache_ptr) >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "destroy succeeded on cache with pinned entry.\n";
-
- } else {
-
- unpin_entry1(cache_ptr, 0, 0);
-
- if ( H5C1_dest(NULL, -1, -1, cache_ptr) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "destroy failed after unpin.\n";
-
- }
- }
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_destroy_pinned_err() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_destroy_protected_err()
- *
- * Purpose: Verify that an attempt to destroy the cache when it contains
- * a protected entry will generate an error.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/24/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_destroy_protected_err(void)
-{
- const char * fcn_name = "check_destroy_protected_err";
- H5C1_t * cache_ptr = NULL;
-
- TESTING("destroy cache with protected entry error");
-
- pass1 = TRUE;
-
- /* allocate a cache, protect an entry, and try to flush. This
- * should fail. Unprotect the entry and flush again -- should
- * succeed.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- protect_entry1(cache_ptr, 0, 0);
-
- if ( H5C1_dest(NULL, -1, -1, cache_ptr) >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "destroy succeeded on cache with protected entry.\n";
-
- } else {
-
- unprotect_entry1(cache_ptr, 0, 0, TRUE, H5C1__NO_FLAGS_SET);
-
- if ( H5C1_dest(NULL, -1, -1, cache_ptr) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "destroy failed after unprotect.\n";
-
- }
- }
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_destroy_protected_err() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_duplicate_insert_err()
- *
- * Purpose: Verify that an attempt to insert and entry that is
- * alread in the cache will generate an error.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/24/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_duplicate_insert_err(void)
-{
- const char * fcn_name = "check_duplicate_insert_err";
- herr_t result;
- H5C1_t * cache_ptr = NULL;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- TESTING("duplicate entry insertion error");
-
- pass1 = TRUE;
-
- /* allocate a cache, protect an entry, and then try to insert
- * the entry again. This should fail. Unprotect the entry and
- * destroy the cache -- should succeed.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- protect_entry1(cache_ptr, 0, 0);
-
- if ( pass1 ) {
-
- base_addr = entries1[0];
- entry_ptr = &(base_addr[0]);
-
- result = H5C1_insert_entry(NULL, -1, -1, cache_ptr,
- &(types1[0]), entry_ptr->addr,
- (void *)entry_ptr, H5C1__NO_FLAGS_SET);
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "insert of duplicate entry succeeded.\n";
-
- } else {
-
- unprotect_entry1(cache_ptr, 0, 0, TRUE, H5C1__NO_FLAGS_SET);
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
- }
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s(): failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_duplicate_insert_err() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_rename_err()
- *
- * Purpose: Verify that an attempt to rename an entry to the address
- * of an existing entry will generate an error.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/24/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_rename_err(void)
-{
- const char * fcn_name = "check_rename_err()";
- herr_t result;
- H5C1_t * cache_ptr = NULL;
- test_entry_t * entry_0_0_ptr;
- test_entry_t * entry_0_1_ptr;
- test_entry_t * entry_1_0_ptr;
-
- TESTING("rename to existing entry errors");
-
- pass1 = TRUE;
-
- /* allocate a cache, and insert several entries. Try to rename
- * entries to other entries resident in the cache. This should
- * fail. Destroy the cache -- should succeed.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- insert_entry1(cache_ptr, 0, 0, TRUE, H5C1__NO_FLAGS_SET);
- insert_entry1(cache_ptr, 0, 1, TRUE, H5C1__NO_FLAGS_SET);
- insert_entry1(cache_ptr, 1, 0, TRUE, H5C1__NO_FLAGS_SET);
-
- entry_0_0_ptr = &((entries1[0])[0]);
- entry_0_1_ptr = &((entries1[0])[1]);
- entry_1_0_ptr = &((entries1[1])[0]);
- }
-
- if ( pass1 ) {
-
- result = H5C1_rename_entry(cache_ptr, &(types1[0]),
- entry_0_0_ptr->addr, entry_0_1_ptr->addr);
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "rename to addr of same type succeeded.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_rename_entry(cache_ptr, &(types1[0]),
- entry_0_0_ptr->addr, entry_1_0_ptr->addr);
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "rename to addr of different type succeeded.\n";
- }
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_rename_err() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_double_pin_err()
- *
- * Purpose: Verify that an attempt to pin an entry that is already
- * pinned will generate an error.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/24/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_double_pin_err(void)
-{
- const char * fcn_name = "check_double_pin_err()";
- herr_t result;
- H5C1_t * cache_ptr = NULL;
- test_entry_t * entry_ptr;
-
- TESTING("pin a pinned entry error");
-
- pass1 = TRUE;
-
- /* allocate a cache, protect an entry, unprotect it with the pin flag,
- * protect it again, and then try to unprotect it again with the pin
- * flag. This should fail. Unpin the entry and destroy the cache
- * -- should succeed.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- protect_entry1(cache_ptr, 0, 0);
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__PIN_ENTRY_FLAG);
-
- protect_entry1(cache_ptr, 0, 0);
-
- entry_ptr = &((entries1[0])[0]);
- }
-
- if ( pass1 ) {
-
- result = H5C1_unprotect(NULL, -1, -1, cache_ptr, &(types1[0]),
- entry_ptr->addr, (void *)entry_ptr,
- H5C1__PIN_ENTRY_FLAG, (size_t)0);
-
- if ( result > 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "attempt to pin a pinned entry succeeded.\n";
-
- } else {
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__UNPIN_ENTRY_FLAG);
- }
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_double_pin_err() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_double_unpin_err()
- *
- * Purpose: Verify that an attempt to unpin an unpinned entry will
- * generate an error.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/24/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_double_unpin_err(void)
-{
- const char * fcn_name = "check_double_unpin_err()";
- herr_t result;
- H5C1_t * cache_ptr = NULL;
- test_entry_t * entry_ptr;
-
- TESTING("unpin an unpinned entry error");
-
- pass1 = TRUE;
-
- /* allocate a cache, protect an entry, unprotect it with the unpin flag.
- * -- This should fail.
- *
- * Try again with H5C1_unpin_entry -- this should also fail.
- *
- * Destroy the cache -- should succeed.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- protect_entry1(cache_ptr, 0, 0);
-
- entry_ptr = &((entries1[0])[0]);
- }
-
- if ( pass1 ) {
-
- result = H5C1_unprotect(NULL, -1, -1, cache_ptr, &(types1[0]),
- entry_ptr->addr, (void *)entry_ptr,
- H5C1__UNPIN_ENTRY_FLAG, (size_t)0);
-
- if ( result > 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "attempt to unpin an unpinned entry succeeded 1.\n";
-
- } else {
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__NO_FLAGS_SET);
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_unpin_entry(cache_ptr, (void *)entry_ptr);
-
- if ( result > 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "attempt to unpin an unpinned entry succeeded 2.\n";
-
- }
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_double_unpin_err() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_pin_entry_errs()
- *
- * Purpose: Verify that invalid calls to H5C1_pin_protected_entry()
- * generate errors as expected.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/24/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_pin_entry_errs(void)
-{
- const char * fcn_name = "check_pin_entry_errs()";
- herr_t result;
- H5C1_t * cache_ptr = NULL;
- test_entry_t * entry_ptr;
-
- TESTING("pin entry related errors");
-
- pass1 = TRUE;
-
- /* Allocate a cache, protect an entry, unprotect it with no flags,
- * and then call H5C1_pin_protected_entry() to pin it -- This should fail.
- *
- * Protect the entry again, unprotect it with a pin flag, protect it
- * again, and then call H5C1_pin_protected_entry() to pin it -- This
- * should fail also.
- *
- * Unprotect the entry with the unpin flag.
- *
- * Destroy the cache -- should succeed.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- protect_entry1(cache_ptr, 0, 0);
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__NO_FLAGS_SET);
-
- entry_ptr = &((entries1[0])[0]);
- }
-
- if ( pass1 ) {
-
- result = H5C1_pin_protected_entry(cache_ptr, (void *)entry_ptr);
-
- if ( result > 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "attempt to pin an unprotected entry succeeded.\n";
-
- } else {
-
- protect_entry1(cache_ptr, 0, 0);
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__PIN_ENTRY_FLAG);
-
- protect_entry1(cache_ptr, 0, 0);
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_pin_protected_entry(cache_ptr, (void *)entry_ptr);
-
- if ( result > 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "attempt to pin a pinned, protected entry succeeded.\n";
-
- } else {
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__UNPIN_ENTRY_FLAG);
-
- }
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_pin_entry_errs() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_double_protect_err()
- *
- * Purpose: Verify that an attempt to protect an entry that is already
- * protected will generate an error.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/24/04
- *
- * Modifications:
- *
- * - Modified call to H5C1_protect() to pass1 H5C1__NO_FLAGS_SET in the
- * the new flags parameter.
- *
- * JRM -- 3/28/07
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_double_protect_err(void)
-{
- const char * fcn_name = "check_double_protect_err()";
- H5C1_t * cache_ptr = NULL;
- test_entry_t * entry_ptr;
- H5C1_cache_entry_t * cache_entry_ptr;
-
- TESTING("protect a protected entry error");
-
- pass1 = TRUE;
-
- /* allocate a cache, protect an entry, and then try to protect
- * the entry again. This should fail. Unprotect the entry and
- * destroy the cache -- should succeed.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- protect_entry1(cache_ptr, 0, 0);
-
- entry_ptr = &((entries1[0])[0]);
- }
-
- if ( pass1 ) {
-
- cache_entry_ptr = H5C1_protect(NULL, -1, -1, cache_ptr, &(types1[0]),
- entry_ptr->addr, NULL, NULL,
- H5C1__NO_FLAGS_SET);
-
- if ( cache_entry_ptr != NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "attempt to protect a protected entry succeeded.\n";
- }
- }
-
- if ( pass1 ) {
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__NO_FLAGS_SET);
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_double_protect_err() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_double_unprotect_err()
- *
- * Purpose: Verify that an attempt to unprotect an entry that is already
- * unprotected will generate an error.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/24/04
- *
- * Modifications:
- *
- * JRM -- 6/17/05
- * Modified function to use the new dirtied parameter in
- * H5C1_unprotect().
- *
- * JRM -- 9/8/05
- * Updated function for the new size change parameter in
- * H5C1_unprotect(). We don't use them for now.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_double_unprotect_err(void)
-{
- const char * fcn_name = "check_double_unprotect_err()";
- herr_t result;
- H5C1_t * cache_ptr = NULL;
- test_entry_t * entry_ptr;
-
- TESTING("unprotect an unprotected entry error");
-
- pass1 = TRUE;
-
- /* allocate a cache, protect an entry, unprotect it, and then try to
- * unprotect the entry again. This should fail. Destroy the cache
- * -- should succeed.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- protect_entry1(cache_ptr, 0, 0);
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__NO_FLAGS_SET);
-
- entry_ptr = &((entries1[0])[0]);
- }
-
- if ( pass1 ) {
-
- result = H5C1_unprotect(NULL, -1, -1, cache_ptr, &(types1[0]),
- entry_ptr->addr, (void *)entry_ptr,
- H5C1__NO_FLAGS_SET, (size_t)0);
-
- if ( result > 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "attempt to unprotect an unprotected entry succeeded 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_double_unprotect_err() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_mark_entry_dirty_errs()
- *
- * Purpose: Verify that:
- *
- * 1) a call to H5C1_mark_pinned_entry_dirty with an upinned
- * entry as the target will generate an error.
- *
- * 2) a call to H5C1_mark_pinned_entry_dirty with a protected
- * entry as the target will generate an error.
- *
- * 3) a call to H5C1_mark_pinned_or_protected_entry_dirty with
- * and unpinned and unprotected entry will generate an
- * error.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 5/17/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_mark_entry_dirty_errs(void)
-{
- const char * fcn_name = "check_mark_entry_dirty_errs()";
- herr_t result;
- H5C1_t * cache_ptr = NULL;
- test_entry_t * entry_ptr;
-
- TESTING("mark entry dirty related errors");
-
- pass1 = TRUE;
-
- /* allocate a cache, protect an entry, and then attempt to mark it dirty
- * with the H5C1_mark_pinned_entry_dirty() call -- This should fail.
- *
- * Then unprotect the entry without pinning it, and try to mark it dirty
- * again -- this should fail too.
- *
- * Try it again using H5C1_mark_pinned_or_protected_entry_dirty -- this
- * should fail as well.
- *
- * Destroy the cache -- should succeed.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- protect_entry1(cache_ptr, 0, 0);
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__PIN_ENTRY_FLAG);
-
- protect_entry1(cache_ptr, 0, 0);
-
- entry_ptr = &((entries1[0])[0]);
- }
-
- if ( pass1 ) {
-
- result = H5C1_mark_pinned_entry_dirty(cache_ptr, (void *)entry_ptr,
- FALSE, (size_t)0);
-
- if ( result > 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "attempt dirty a pinned and protected entry succeeded.\n";
-
- } else {
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__UNPIN_ENTRY_FLAG);
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_mark_pinned_entry_dirty(cache_ptr, (void *)entry_ptr,
- FALSE, (size_t)0);
-
-
- if ( result > 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "attempt to dirty a unpinned and unprotected entry succeeded 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_mark_pinned_or_protected_entry_dirty(cache_ptr,
- (void *)entry_ptr);
-
-
- if ( result > 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "attempt to dirty a unpinned and unprotected entry succeeded 2.\n";
- }
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_mark_entry_dirty_errs() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_expunge_entry1_errs()
- *
- * Purpose: Verify that invalid calls to H5C1_expunge_entry()
- * generate errors as expected.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 7/6/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_expunge_entry1_errs(void)
-{
- const char * fcn_name = "check_expunge_entry1_errs()";
- herr_t result;
- H5C1_t * cache_ptr = NULL;
- test_entry_t * entry_ptr;
-
- TESTING("expunge entry related errors");
-
- pass1 = TRUE;
-
- /* Allocate a cache, protect an entry, and then call H5C1_expunge_entry()
- * to expunge it -- this should fail
- *
- * Unprotect the the entry with the pinned flag, and then call
- * H5C1_expunge_entry() again. This should fail too.
- *
- * Finally, unpin the entry and call H5C1_expunge_entry() yet again.
- * This should succeed.
- *
- * Destroy the cache -- should succeed.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- entry_ptr = &((entries1[0])[0]);
-
- protect_entry1(cache_ptr, 0, 0);
-
- }
-
- if ( pass1 ) {
-
- result = H5C1_expunge_entry(NULL, -1, -1, cache_ptr,
- &(types1[0]), entry_ptr->addr);
-
- if ( result > 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "attempt to expunge a protected entry succeeded.\n";
-
- } else {
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__PIN_ENTRY_FLAG);
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_expunge_entry(NULL, -1, -1, cache_ptr,
- &(types1[0]), entry_ptr->addr);
-
- if ( result > 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "attempt to expunge a pinned entry succeeded.\n";
-
- } else {
-
- unpin_entry1(cache_ptr, 0, 0);
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_expunge_entry(NULL, -1, -1, cache_ptr,
- &(types1[0]), entry_ptr->addr);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "attempt to expunge an unpinned and unprotected entry failed.\n";
-
- }
- }
-
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_expunge_entry1_errs() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_resize_entry1_errs()
- *
- * Purpose: Verify that invalid calls to H5C1_resize_pinned_entry()
- * generates errors as expected.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 7/7/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_resize_entry1_errs(void)
-{
- const char * fcn_name = "check_resize_entry1_errs()";
- herr_t result;
- H5C1_t * cache_ptr = NULL;
- test_entry_t * entry_ptr;
-
- TESTING("resize entry related errors");
-
- pass1 = TRUE;
-
- /* Allocate a cache, protect an entry, and then call
- * H5C1_resize_pinned_entry() to resize it -- this should fail.
- *
- * Unprotect the the entry with the pinned flag, and then call
- * H5C1_resize_pinned_entry() again with new size of zero.
- * This should fail too.
- *
- * Finally, unpin the entry and destroy the cache.
- * This should succeed.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- entry_ptr = &((entries1[0])[0]);
-
- protect_entry1(cache_ptr, 0, 0);
-
- }
-
- if ( pass1 ) {
-
- result = H5C1_resize_pinned_entry(cache_ptr, (void *)entry_ptr, (size_t)1);
-
- if ( result > 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "Call to H5C1_resize_pinned_entry on a protected entry succeeded.\n";
-
- } else {
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__PIN_ENTRY_FLAG);
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_resize_pinned_entry(cache_ptr, (void *)entry_ptr, (size_t)0);
-
- if ( result > 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "Call to H5C1_resize_pinned_entry with 0 new size succeeded.\n";
-
- } else {
-
- unpin_entry1(cache_ptr, 0, 0);
-
- }
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_resize_entry1_errs() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_unprotect_ro_dirty_err()
- *
- * Purpose: If an entry is protected read only, verify that unprotecting
- * it dirty will generate an error.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/3/07
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_unprotect_ro_dirty_err(void)
-{
- const char * fcn_name = "check_unprotect_ro_dirty_err()";
- herr_t result;
- H5C1_t * cache_ptr = NULL;
- test_entry_t * entry_ptr;
-
- TESTING("unprotect a read only entry dirty error");
-
- pass1 = TRUE;
-
- /* allocate a cache, protect an entry read only, and then unprotect it
- * with the dirtied flag set. This should fail. Destroy the cache
- * -- should succeed.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- protect_entry_ro1(cache_ptr, 0, 0);
-
- entry_ptr = &((entries1[0])[0]);
- }
-
- if ( pass1 ) {
-
- result = H5C1_unprotect(NULL, -1, -1, cache_ptr, &(types1[0]),
- entry_ptr->addr, (void *)entry_ptr,
- H5C1__DIRTIED_FLAG, (size_t)0);
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "attempt to unprotect a ro entry dirty succeeded 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__NO_FLAGS_SET);
-
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- /* allocate a another cache, protect an entry read only twice, and
- * then unprotect it with the dirtied flag set. This should fail.
- * Unprotect it with no flags set twice and then destroy the cache.
- * This should succeed.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- protect_entry_ro1(cache_ptr, 0, 0);
- protect_entry_ro1(cache_ptr, 0, 0);
-
- entry_ptr = &((entries1[0])[0]);
- }
-
- if ( pass1 ) {
-
- result = H5C1_unprotect(NULL, -1, -1, cache_ptr, &(types1[0]),
- entry_ptr->addr, (void *)entry_ptr,
- H5C1__DIRTIED_FLAG, (size_t)0);
-
- if ( result > 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "attempt to unprotect a ro entry dirty succeeded 2.\n";
- }
- }
-
- if ( pass1 ) {
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__NO_FLAGS_SET);
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__NO_FLAGS_SET);
-
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_unprotect_ro_dirty_err() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_protect_ro_rw_err()
- *
- * Purpose: If an entry is protected read only, verify that protecting
- * it rw will generate an error.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/9/07
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_protect_ro_rw_err(void)
-{
- const char * fcn_name = "check_protect_ro_rw_err()";
- H5C1_t * cache_ptr = NULL;
- test_entry_t * entry_ptr;
- void * thing_ptr = NULL;
-
- TESTING("protect a read only entry rw error");
-
- pass1 = TRUE;
-
- /* allocate a cache, protect an entry read only, and then try to protect
- * it again rw. This should fail.
- *
- * Unprotect the entry and destroy the cache -- should succeed.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
-
- protect_entry_ro1(cache_ptr, 0, 0);
-
- entry_ptr = &((entries1[0])[0]);
- }
-
- if ( pass1 ) {
-
- thing_ptr = H5C1_protect(NULL, -1, -1, cache_ptr, &(types1[0]),
- entry_ptr->addr, NULL, NULL, H5C1__NO_FLAGS_SET);
-
- if ( thing_ptr != NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "attempt to protect a ro entry rw succeeded.\n";
- }
- }
-
- if ( pass1 ) {
-
- unprotect_entry1(cache_ptr, 0, 0, FALSE, H5C1__NO_FLAGS_SET);
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_protect_ro_rw_err() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_evictions_enabled_err()
- *
- * Purpose: Verify that H5C1_get_evictions_enabled() and
- * H5C1_set_evictions_enabled() generate errors as expected.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 8/3/07
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_check_evictions_enabled_err(void)
-{
- const char * fcn_name = "check_evictions_enabled_err()";
- herr_t result;
- hbool_t evictions_enabled;
- H5C1_t * cache_ptr = NULL;
-
- TESTING("get/set evictions enabled errors");
-
- pass1 = TRUE;
-
- /* allocate a cache.
- *
- * Call H5C1_get_evictions_enabled(), pass1ing it a NULL cache_ptr,
- * should fail.
- *
- * Repeat with a NULL evictions_enabled_ptr, should fail as well.
- *
- * Configure the cache to use auto cache resize. Call
- * H5C1_set_evictions_enabled() to disable evictions. Should fail.
- *
- * Unprotect the entry and destroy the cache -- should succeed.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_evictions_enabled(NULL, &evictions_enabled);
-
- if ( result == SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_evictions_enabled succeeded() 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_evictions_enabled(cache_ptr, NULL);
-
- if ( result == SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_evictions_enabled succeeded() 2.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_set_evictions_enabled(cache_ptr, TRUE);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_evictions_enabled failed().\n";
-
- }
- }
-
- if ( pass1 ) {
-
- (cache_ptr->resize_ctl).incr_mode = H5C1_incr__threshold;
-
- result = H5C1_get_evictions_enabled(cache_ptr, FALSE);
-
- if ( result == SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_evictions_enabled succeeded() 1.\n";
-
- } else if ( cache_ptr->evictions_enabled == TRUE ) {
-
- }
-
- (cache_ptr->resize_ctl).incr_mode = H5C1_incr__off;
- }
-
- if ( pass1 ) {
-
- (cache_ptr->resize_ctl).decr_mode = H5C1_decr__threshold;
-
- result = H5C1_get_evictions_enabled(cache_ptr, FALSE);
-
- if ( result == SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_evictions_enabled succeeded() 2.\n";
- }
-
- (cache_ptr->resize_ctl).decr_mode = H5C1_decr__off;
- }
-
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_evictions_enabled_err() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_auto_cache_resize()
- *
- * Purpose: Exercise the automatic cache resizing functionality.
- * The objective is to operate the auto-resize code in
- * all possible modes. Unfortunately, there are quite
- * a few of them.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 10/29/04
- *
- * Modifications:
- *
- * John Mainzer 1/8/08
- * Added a basic set of tests for the flash cache size
- * increment code.
- *
- *-------------------------------------------------------------------------
- */
-
-hbool_t rpt_fcn_called = FALSE;
-enum H5C1_resize_status rpt_status;
-
-static void test_rpt_fcn(UNUSED H5C1_t * cache_ptr,
- UNUSED int32_t version,
- UNUSED double hit_rate,
- enum H5C1_resize_status status,
- UNUSED size_t old_max_cache_size,
- UNUSED size_t new_max_cache_size,
- UNUSED size_t old_min_clean_size,
- UNUSED size_t new_min_clean_size)
-{
- rpt_fcn_called = TRUE;
- rpt_status = status;
-}
-
-static void
-check_auto_cache_resize(void)
-{
- const char * fcn_name = "check_auto_cache_resize()";
- hbool_t show_progress = FALSE;
- herr_t result;
- int32_t i;
- int32_t checkpoint = 0;
- H5C1_t * cache_ptr = NULL;
- H5C1_auto_size_ctl_t auto_size_ctl =
- {
- /* int32_t version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* H5C1_auto_resize_report_fcn rpt_fcn = */ test_rpt_fcn,
-
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (512 * 1024),
-
- /* double min_clean_fraction = */ 0.5,
-
- /* size_t max_size = */ (14 * 1024 * 1024),
- /* size_t min_size = */ (512 * 1024),
-
- /* int64_t epoch_length = */ 1000,
-
-
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
-
- /* double lower_hr_threshold = */ 0.75,
-
- /* double increment = */ 2.0,
-
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
-
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
-
-
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__threshold,
-
- /* double upper_hr_threshold = */ 0.995,
-
- /* double decrement = */ 0.1,
-
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
-
- /* int32_t epochs_before_eviction = */ 3,
-
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.05
- };
-
- TESTING("automatic cache resizing");
-
- pass1 = TRUE;
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* allocate a cache, enable automatic cache resizing, and then force
- * the cache through all its operational modes. Verify that all
- * performs as expected.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
- }
-
- if ( pass1 ) {
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (512 * 1024) ) ||
- ( cache_ptr->min_clean_size != (256 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after initialization.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate with cache not full -- should result in not
- * full status.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, PICO_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, PICO_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != not_full ) ||
- ( cache_ptr->max_cache_size != (512 * 1024) ) ||
- ( cache_ptr->min_clean_size != (256 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 1.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate with cache full -- should result in increase
- * of cache size from .5 to 1 meg.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != increase ) ||
- ( cache_ptr->max_cache_size != (1 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (512 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 2.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate with cache not full -- should result in not
- * full status.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, PICO_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, PICO_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != not_full ) ||
- ( cache_ptr->max_cache_size != (1 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (512 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 3.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate with cache full again -- should result in increase
- * of cache size from 1 to 2 meg.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != increase ) ||
- ( cache_ptr->max_cache_size != (2 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 4.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate with cache full again -- should result in increase
- * of cache size from 2 to 4 meg.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != increase ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 5.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate with cache full again -- should result in increase
- * of cache size from 4 to 8 meg.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != increase ) ||
- ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 6.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate with cache full again -- should result in increase
- * of cache size from 8 to 12 meg. Note that max increase reduced the
- * size of the increase.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != increase ) ||
- ( cache_ptr->max_cache_size != (12 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (6 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 7.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate with cache full again -- should result in increase
- * of cache size from 12 to 14 meg.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != increase ) ||
- ( cache_ptr->max_cache_size != (14 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (7 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 8.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate with cache full and at maximum size -- should
- * in no change in size and a result of at_max_size.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_max_size ) ||
- ( cache_ptr->max_cache_size != (14 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (7 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 9.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate with cache full and at maximum size -- should
- * result in a decrease from 14 to 13 Meg -- note that max decrease
- * reduced the size of the reduction
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (13 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (6 * 1024 * 1024 + 512 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 10.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* the current cache configuration is inconvenient for testing cache
- * size reduction, so lets change it some something easier to work
- * with.
- */
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 4 * 1000 * 1000 + 10;
-
- auto_size_ctl.min_clean_fraction = 0.1;
-
- auto_size_ctl.max_size = 8 * 1000 * 1000;
- auto_size_ctl.min_size = 500 * 1000;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (4 * 1000 * 1000);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = (1 * 1000 * 1000);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 2.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (4 * 1000 * 1000 + 10) ) ||
- ( cache_ptr->min_clean_size != (400 * 1000 + 1) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 1.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate -- should result in a decrease from ~4 to ~3
- * M -- note that max decrease reduces the size of the reduction
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (3 * 1000 * 1000 + 10) ) ||
- ( cache_ptr->min_clean_size != (300 * 1000 + 1) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 11.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate again -- should result in a decrease from ~3
- * to ~2 M -- again note that max decrease reduces the size of the
- * reduction.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (2 * 1000 * 1000 + 10) ) ||
- ( cache_ptr->min_clean_size != (200 * 1000 + 1) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 12.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate again -- should result in a decrease from ~2
- * to ~1 M -- again note that max decrease reduces the size of the
- * reduction, but only by five bites.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (1 * 1000 * 1000 + 10) ) ||
- ( cache_ptr->min_clean_size != (100 * 1000 + 1) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 13.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate again -- should result in a decrease from ~1
- * to ~0.5 M -- max decrease is no longer a factor. New size is five
- * bytes above the minimum.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (500 * 1000 + 5) ) ||
- ( cache_ptr->min_clean_size != (50 * 1000) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 14.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate again -- should result in a decrease of five
- * bytes to the minimum cache size.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (500 * 1000) ) ||
- ( cache_ptr->min_clean_size != (50 * 1000) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 15.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate again -- Already at minimum size so no change in
- * cache size and result should be at_min_size.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_min_size ) ||
- ( cache_ptr->max_cache_size != (500 * 1000) ) ||
- ( cache_ptr->min_clean_size != (50 * 1000) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 16.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force in range hit rate -- should be no change in cache size,
- * and result should be in_spec.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 900 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i + 1000);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i + 1000,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (500 * 1000) ) ||
- ( cache_ptr->min_clean_size != (50 * 1000) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 17.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate with cache full -- should
- * increase cache size from .5 to 1 M.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != increase ) ||
- ( cache_ptr->max_cache_size != (1 * 1000 * 1000) ) ||
- ( cache_ptr->min_clean_size != (100 * 1000) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 18.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate -- should result in a decrease to the
- * minimum cache size.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (500 * 1000) ) ||
- ( cache_ptr->min_clean_size != (50 * 1000) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 19.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /******************************************************************
- * now do some tests with the maximum increase and decrease sizes
- * disabled.
- ******************************************************************/
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 16 * 1024 * 1024;
- auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 4.0;
-
- auto_size_ctl.apply_max_increment = FALSE;
- auto_size_ctl.max_increment = (4 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.25;
-
- auto_size_ctl.apply_max_decrement = FALSE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 3.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 2.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate -- should result in a decrease to the
- * minimum cache size.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (1 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (512 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 20.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate with cache full -- should increase cache size
- * from 1 to 4 Meg.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != increase ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 21.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate again with cache full -- should increase cache
- * size from 4 to 16 Meg.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != increase ) ||
- ( cache_ptr->max_cache_size != (16 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != ( 8 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 22.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate -- should result in a decrease cache size from
- * 16 to 4 Meg.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 23.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /******************************************************************
- * We have tested the threshold increment and decrement modes.
- * must now test the ageout decrement mode.
- *
- * Reconfigure the cache for this testing.
- ******************************************************************/
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 8 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 8 * 1024 * 1024;
- auto_size_ctl.min_size = 512 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (4 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__age_out;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = FALSE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = FALSE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 4.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 3.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
-
- /* fill the cache with 1024 byte entries -- nothing should happen
- * for three epochs while the markers are inserted into the cache
- *
- * Note that hit rate will be zero, so the cache will attempt to
- * increase its size. Since we are already at max size, it will
- * not be able to.
- */
- if ( pass1 ) { /* first epoch */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_max_size ) ||
- ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 24.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* second epoch */
-
- rpt_fcn_called = FALSE;
- i = 1000;
- while ( ( pass1 ) && ( i < 2000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_max_size ) ||
- ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 25.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* third epoch */
-
- rpt_fcn_called = FALSE;
- i = 2000;
- while ( ( pass1 ) && ( i < 3000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_max_size ) ||
- ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 26.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* fourth epoch -- If the hit rate were above the lower threshold,
- * we would see cache size reduction now. However, nothing will
- * happen until we get the hit rate above the lower threshold.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 3000;
- while ( ( pass1 ) && ( i < 4000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_max_size ) ||
- ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 27.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* fifth epoch -- force the hit rate to 100%. We should see cache size
- * reduction now.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 3000;
- while ( ( pass1 ) && ( i < 4000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (2001 * 1024) ) ||
- ( cache_ptr->min_clean_size != (int)(2001 * 512) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 28.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* sixth epoch -- force the hit rate to 100% again.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 3000;
- while ( ( pass1 ) && ( i < 4000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (1001 * 1024) ) ||
- ( cache_ptr->min_clean_size != (int)(1001 * 512) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 29.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* seventh epoch -- force the hit rate to 100% again.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 3000;
- while ( ( pass1 ) && ( i < 4000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (int)(1000 * 512) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 30.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* eigth epoch -- force the hit rate to 100% again -- should be steady
- * state.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 3000;
- while ( ( pass1 ) && ( i < 4000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (int)(1000 * 512) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 31.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "*check point %d\n", checkpoint++);
-
- /* now just bang on one entry -- after three epochs, this should
- * get all entries other than the one evicted, and the cache size
- * should be decreased to the minimum.
- */
- if ( pass1 ) { /* ninth epoch */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (int)(1000 * 512) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 32.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* tenth epoch */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (int)(1000 * 512) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 33.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* eleventh epoch -- cache size reduction */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (512 * 1024) ) ||
- ( cache_ptr->min_clean_size != (256 * 1024) ) ||
- ( cache_ptr->index_len != 2 ) ||
- ( cache_ptr->index_size !=
- MONSTER_ENTRY_SIZE + MEDIUM_ENTRY_SIZE ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 34.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* twelth epoch -- at minimum size so no more ageouts */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_min_size ) ||
- ( cache_ptr->max_cache_size != (512 * 1024) ) ||
- ( cache_ptr->min_clean_size != (256 * 1024) ) ||
- ( cache_ptr->index_len != 2 ) ||
- ( cache_ptr->index_size !=
- MONSTER_ENTRY_SIZE + MEDIUM_ENTRY_SIZE ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 35.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
-
- /* repeat the above test, but with max_decrement enabled to see
- * if that features works as it should. Note that this will change
- * the structure of the test a bit.
- */
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 8 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 8 * 1024 * 1024;
- auto_size_ctl.min_size = 512 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (4 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__age_out;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = FALSE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 5.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 4.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
-
- /* fill the cache with 1024 byte entries -- nothing should happen
- * for three epochs while the markers are inserted into the cache
- *
- * Note that hit rate will be zero, so the cache will attempt to
- * increase its size. Since we are already at max size, it will
- * not be able to.
- */
- if ( pass1 ) { /* first epoch */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_max_size ) ||
- ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 36.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* second epoch */
-
- rpt_fcn_called = FALSE;
- i = 1000;
- while ( ( pass1 ) && ( i < 2000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_max_size ) ||
- ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 37.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* third epoch */
-
- rpt_fcn_called = FALSE;
- i = 2000;
- while ( ( pass1 ) && ( i < 3000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_max_size ) ||
- ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 38.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* fourth epoch -- If the hit rate were above the lower threshold,
- * we would see cache size reduction now. However, nothing will
- * happen until we get the hit rate above the lower threshold.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 3000;
- while ( ( pass1 ) && ( i < 4000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_max_size ) ||
- ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 39.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* fifth epoch -- force the hit rate to 100%. We should see cache size
- * reduction now.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 3000;
- while ( ( pass1 ) && ( i < 4000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (7 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (7 * 512 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 40.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* sixth epoch -- force the hit rate to 100% again.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 2000;
- while ( ( pass1 ) && ( i < 3000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (6 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (6 * 512 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 41.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* seventh epoch -- keep hit rate at 100%, and keep 2K entries active.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 3000;
- while ( ( pass1 ) && ( i < 4000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (5 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (5 * 512 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 42.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* eigth epoch -- still 100% hit rate
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 2000;
- while ( ( pass1 ) && ( i < 3000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 512 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 43.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* ninth epoch --hit rate at 100%.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 3000;
- while ( ( pass1 ) && ( i < 4000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (3 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 512 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 44.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* tenth epoch -- still 100% hit rate
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 2000;
- while ( ( pass1 ) && ( i < 3000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (2 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 512 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 45.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* eleventh epoch -- hit rate at 100% -- starting to stableize
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 3000;
- while ( ( pass1 ) && ( i < 4000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (2000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (int)(2000 * 512) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 46.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* twelth epoch -- force the hit rate to 100% again -- should be steady
- * state.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 2000;
- while ( ( pass1 ) && ( i < 3000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (2000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (int)(2000 * 512) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 47.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* now just bang on one entry -- after three epochs, this should
- * get all entries other than the one evicted, and the cache size
- * should be decreased to the minimum.
- */
- if ( pass1 ) { /* thirteenth epoch */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (2000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (int)(2000 * 512) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 48.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* fourteenth epoch */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size !=
- (1001 * 1024 + MONSTER_ENTRY_SIZE) ) ||
- ( cache_ptr->min_clean_size !=
- (1001 * 512 + MONSTER_ENTRY_SIZE / 2) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 49.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* fifteenth epoch -- cache size reduction */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (512 * 1024) ) ||
- ( cache_ptr->min_clean_size != (256 * 1024) ) ||
- ( cache_ptr->index_len != 2 ) ||
- ( cache_ptr->index_size !=
- MONSTER_ENTRY_SIZE + MEDIUM_ENTRY_SIZE ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 50.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* sixteenth epoch -- at minimum size so no more ageouts */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_min_size ) ||
- ( cache_ptr->max_cache_size != (512 * 1024) ) ||
- ( cache_ptr->min_clean_size != (256 * 1024) ) ||
- ( cache_ptr->index_len != 2 ) ||
- ( cache_ptr->index_size !=
- MONSTER_ENTRY_SIZE + MEDIUM_ENTRY_SIZE ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 51.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
-
- /* repeat the test yet again, this time with empty reserve enabled.
- * Again, some structural changes in the test are necessary.
- */
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 8 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 8 * 1024 * 1024;
- auto_size_ctl.min_size = 512 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (4 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__age_out;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = FALSE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.5; /* for ease of testing */
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 6.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 5.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
-
- /* fill the cache with 1024 byte entries -- nothing should happen
- * for three epochs while the markers are inserted into the cache
- *
- * Note that hit rate will be zero, so the cache will attempt to
- * increase its size. Since we are already at max size, it will
- * not be able to.
- */
- if ( pass1 ) { /* first epoch */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_max_size ) ||
- ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 52.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* second epoch */
-
- rpt_fcn_called = FALSE;
- i = 1000;
- while ( ( pass1 ) && ( i < 2000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_max_size ) ||
- ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 53.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* third epoch */
-
- rpt_fcn_called = FALSE;
- i = 2000;
- while ( ( pass1 ) && ( i < 3000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_max_size ) ||
- ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 54.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* fourth epoch -- If the hit rate were above the lower threshold,
- * we would see cache size reduction now. However, nothing will
- * happen until we get the hit rate above the lower threshold.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 3000;
- while ( ( pass1 ) && ( i < 4000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_max_size ) ||
- ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 55.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* fifth epoch -- force the hit rate to 100%. We should see cache size
- * reduction now.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 3000;
- while ( ( pass1 ) && ( i < 4000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (4002 * 1024) ) ||
- ( cache_ptr->min_clean_size != (int)(4002 * 512) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 56.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* sixth epoch -- force the hit rate to 100% again.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 3000;
- while ( ( pass1 ) && ( i < 4000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (2002 * 1024) ) ||
- ( cache_ptr->min_clean_size != (int)(2002 * 512) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 57.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* seventh epoch -- force the hit rate to 100% again.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 3000;
- while ( ( pass1 ) && ( i < 4000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (2000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (int)(2000 * 512) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 58.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* eigth epoch -- force the hit rate to 100% again -- should be steady
- * state.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 3000;
- while ( ( pass1 ) && ( i < 4000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (2000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (int)(2000 * 512) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 59.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* now just bang on one entry -- after three epochs, this should
- * get all entries other than the one evicted, and the cache size
- * should be decreased to the minimum.
- */
- if ( pass1 ) { /* ninth epoch */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (2000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (int)(2000 * 512) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 60.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* tenth epoch */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (2000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2000 * 512) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 61.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* eleventh epoch -- cache size reduction */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (512 * 1024) ) ||
- ( cache_ptr->min_clean_size != (256 * 1024) ) ||
- ( cache_ptr->index_len != 2 ) ||
- ( cache_ptr->index_size !=
- MONSTER_ENTRY_SIZE + MEDIUM_ENTRY_SIZE ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 62.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* twelth epoch -- at minimum size so no more ageouts */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_min_size ) ||
- ( cache_ptr->max_cache_size != (512 * 1024) ) ||
- ( cache_ptr->min_clean_size != (256 * 1024) ) ||
- ( cache_ptr->index_len != 2 ) ||
- ( cache_ptr->index_size !=
- MONSTER_ENTRY_SIZE + MEDIUM_ENTRY_SIZE ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 63.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
-
- /* Repeat the test again, this time using the age out with threshold
- * mode. To simplify the testing, set epochs to eviction to 1.
- *
- * Again, there are some minor structural changes in the test.
- */
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 8 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 8 * 1024 * 1024;
- auto_size_ctl.min_size = 512 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__off;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (4 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__age_out_with_threshold;
-
- auto_size_ctl.upper_hr_threshold = 0.999; /* for ease of testing */
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = FALSE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 1; /* for ease of testing */
-
- auto_size_ctl.apply_empty_reserve = FALSE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 7.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 6.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
-
- /* fill the cache with 4K byte entries -- increment mode is off,
- * so cache size reduction should kick in as soon as we get the
- * hit rate above .999.
- */
- if ( pass1 ) { /* first epoch -- hit rate 0 */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 64.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* second epoch -- hit rate 0 */
-
- rpt_fcn_called = FALSE;
- i = 1000;
- while ( ( pass1 ) && ( i < 2000 ) )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 65.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* third epoch -- hit rate 1.0 -- should see decrease */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (1001 * LARGE_ENTRY_SIZE) ) ||
- ( cache_ptr->min_clean_size != (1001 * LARGE_ENTRY_SIZE / 2) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 66.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* fourth epoch -- load up the cache again -- hit rate 0 */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (1001 * LARGE_ENTRY_SIZE) ) ||
- ( cache_ptr->min_clean_size != (1001 * LARGE_ENTRY_SIZE / 2) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 67.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* fifth epoch -- still loading up the cache -- hit rate 0 */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 1000;
- while ( ( pass1 ) && ( i < 2000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (1001 * LARGE_ENTRY_SIZE) ) ||
- ( cache_ptr->min_clean_size != (1001 * LARGE_ENTRY_SIZE / 2) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 68.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* sixth epoch -- force hit rate to .998 -- should be no reduction */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 1002;
- while ( ( pass1 ) && ( i < 2002 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (1001 * LARGE_ENTRY_SIZE) ) ||
- ( cache_ptr->min_clean_size != (1001 * LARGE_ENTRY_SIZE / 2) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 69.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* seventh epoch -- force hit rate to .999 -- should see reduction
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 1003;
- while ( ( pass1 ) && ( i < 2003 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (1000 * MEDIUM_ENTRY_SIZE) ) ||
- ( cache_ptr->min_clean_size != (1000 * MEDIUM_ENTRY_SIZE / 2) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 70.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
-
- /* We have now tested all the major ageout modes individually.
- * Lets try them all together to look for unexpected interactions
- * and/or bugs.
- */
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 8 * 1000 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 8 * 1000 * 1024;
- auto_size_ctl.min_size = 512 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (4 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__age_out_with_threshold;
-
- auto_size_ctl.upper_hr_threshold = 0.999; /* for ease of testing */
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = (1 * 1000 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 1; /* for ease of testing */
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.5; /* for ease of testing */
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 8.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (8 * 1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1000 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 7.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* fill the cache with 4K byte entries -- increment mode is threshold,
- * so the decrease code will not be executed until the hit rate exceeds
- * .75.
- */
- if ( pass1 ) { /* first epoch -- hit rate 0 */
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_max_size ) ||
- ( cache_ptr->max_cache_size != (8 * 1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1000 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 71.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { /* second epoch -- hit rate 0 */
-
- rpt_fcn_called = FALSE;
- i = 1000;
- while ( ( pass1 ) && ( i < 2000 ) )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_max_size ) ||
- ( cache_ptr->max_cache_size != (8 * 1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1000 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 72.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* third epoch -- force the hit rate to 1.0. Should be no change
- * in the cache size due to the combination of the empty reserve
- * and the max decrease. Max decrease will limit the evictions
- * in any one epoch, and the empty reserve will not permit cache
- * size reduction unless the specified empty reserve is maintained.
- *
- * In this epoch, all we should see is a reduction in the index size.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (8 * 1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1000 * 1024) ) ||
- ( cache_ptr->index_size != (7 * 1000 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 73.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* fourth epoch -- hit rate still 1.0. Index size should decrease,
- * but otherwise no change expected.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (8 * 1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1000 * 1024) ) ||
- ( cache_ptr->index_size != (6 * 1000 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 74.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* fifth epoch -- hit rate still 1.0. Index size should decrease,
- * but otherwise no change expected.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (8 * 1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1000 * 1024) ) ||
- ( cache_ptr->index_size != (5 * 1000 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 75.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* sixth epoch -- hit rate still 1.0. Index size should decrease,
- * but otherwise no change expected. Note that the cache size is
- * now just on the edge of meeting the clean reserve.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (8 * 1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1000 * 1024) ) ||
- ( cache_ptr->index_size != (4 * 1000 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 76.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* seventh epoch -- hit rate still 1.0. No change in index size expected.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (8 * 1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1000 * 1024) ) ||
- ( cache_ptr->index_size != (4 * 1000 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 77.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* eighth epoch -- start loading 1 KB entries. Hit rate 0 so
- * decrease code shouldn't be called.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != at_max_size ) ||
- ( cache_ptr->max_cache_size != (8 * 1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1000 * 1024) ) ||
- ( cache_ptr->index_size != (5 * 1000 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 78.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* ninth epoch -- access the 1 KB entries again, driving the hit rate
- * to 1.0. Decrease code should be triggered, but the max decrease
- * should prevent the empty reserve from being met in this epoch.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (8 * 1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1000 * 1024) ) ||
- ( cache_ptr->index_size != (4 * 1000 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 79.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* tenth epoch -- access the 1 KB entries yet again, forcing hit rate
- * to 1.0. Decrease code should be triggered, and the empty reserve
- * should finally be met.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (7 * 1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (7 * 1000 * 1024 / 2) ) ||
- ( cache_ptr->index_size != (3 * 1000 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 80.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* eleventh epoch -- access the 1 KB entries yet again, forcing hit rate
- * to 1.0. Decrease code should be triggered, and the empty reserve
- * should be met again.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (6 * 1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1000 * 1024) ) ||
- ( cache_ptr->index_size != (2 * 1000 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 81.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* twelth epoch -- hit rate 1.0 -- decrease as before.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (5 * 1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (5 * 1000 * 1024 / 2) ) ||
- ( cache_ptr->index_size != (1 * 1000 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 82.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* thirteenth epoch -- hit rate 1.0 -- decrease as before.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (4 * 1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1000 * 1024) ) ||
- ( cache_ptr->index_size != (1 * 1000 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 83.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* fourteenth epoch -- hit rate 1.0 -- decrease as before.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (3 * 1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1000 * 1024 / 2) ) ||
- ( cache_ptr->index_size != (1 * 1000 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 84.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* fifteenth epoch -- hit rate 1.0 -- decrease as before.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (2 * 1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1000 * 1024) ) ||
- ( cache_ptr->index_size != (1 * 1000 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 85.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* sixteenth epoch -- hit rate 1.0 -- should be stable now
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (2 * 1000 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1000 * 1024) ) ||
- ( cache_ptr->index_size != (1 * 1000 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 86.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- /* now test the flash cache size increment code. At least at present,
- * there should be no interaction between the regular auto-resize
- * code and the flash cache size increment code other than a reset
- * of the counter and stats collection used by the regular auto-resize
- * code. Thus we do only limited tests of the two pieces of code
- * operating together.
- *
- * Start with simple test to verify that the flash cache increment
- * code increases the cache size when and as expected.
- */
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* allocate a cache, enable the flash cache size increase code, and
- * then force the flash size increase code through all its operational
- * modes. Verify that all performs as expected.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* now repeat the above tests using the add space flash cache size
- * increment algorithm.
- */
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 64 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 1024 * 1024;
- auto_size_ctl.min_size = 5 * 1024;
-
- auto_size_ctl.epoch_length = 100;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (32 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__add_space;
- auto_size_ctl.flash_multiple = 1.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__age_out_with_threshold;
-
- auto_size_ctl.upper_hr_threshold = 0.999; /* for ease of testing */
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = (1 * 1000 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 1; /* for ease of testing */
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.5; /* for ease of testing */
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 12.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (64 * 1024) ) ||
- ( cache_ptr->min_clean_size != (32 * 1024) ) ||
- ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ||
- ( cache_ptr->cache_accesses != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (0).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Load a huge entry into the cache */
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, HUGE_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, HUGE_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (64 * 1024) ) ||
- ( cache_ptr->min_clean_size != (32 * 1024) ) ||
- ( cache_ptr->index_len != 1 ) ||
- ( cache_ptr->index_size != HUGE_ENTRY_SIZE ) ||
- ( cache_ptr->cache_accesses != 1 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (1).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Now load a monster entry. Since a monster entry is larger than
- * half the size of the cache, and there is not sufficient space
- * for a monster entry in the cache, we will add space to the
- * cache to make room for the entry.
- */
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (80 * 1024) ) ||
- ( cache_ptr->min_clean_size != (40 * 1024) ) ||
- ( cache_ptr->index_len != 2 ) ||
- ( cache_ptr->index_size != (HUGE_ENTRY_SIZE +
- MONSTER_ENTRY_SIZE) ) ||
- ( cache_ptr->cache_accesses != 1 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (2).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Load a second moster entry. Since the monster entry is larger
- * than half the size of the cache yet again, and there is not
- * sufficient space for the monster entry in the cache, we again
- * add space to the cache to make space for the entry.
- */
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 1);
-
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 1,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (144 * 1024) ) ||
- ( cache_ptr->min_clean_size != ( 72 * 1024) ) ||
- ( cache_ptr->index_len != 3 ) ||
- ( cache_ptr->index_size != ((2 * MONSTER_ENTRY_SIZE) +
- HUGE_ENTRY_SIZE) ) ||
- ( cache_ptr->cache_accesses != 1 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (3).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Load a third moster entry. Should be no cache size increase this
- * time.
- */
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 2);
-
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 2,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (144 * 1024) ) ||
- ( cache_ptr->min_clean_size != ( 72 * 1024) ) ||
- ( cache_ptr->index_len != 2 ) ||
- ( cache_ptr->index_size != (2 * MONSTER_ENTRY_SIZE) ) ||
- ( cache_ptr->cache_accesses != 2 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (4).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* delete existing entries to prepare for next test, and reset
- * the size of the cache.
- */
- if ( pass1 ) {
-
- expunge_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 1);
- expunge_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 2);
-
- if ( pass1 ) {
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 13.\n";
- }
- }
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (64 * 1024) ) ||
- ( cache_ptr->min_clean_size != (32 * 1024) ) ||
- ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ||
- ( cache_ptr->cache_accesses != 0 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (5).\n";
- }
- }
-
- /* repeat the above basic test, only this time, use inserts to add
- * entries to the cache, not protects.
- */
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* insert a huge entry into the cache */
- if ( pass1 ) {
-
- insert_entry1(cache_ptr, HUGE_ENTRY_TYPE, 1, TRUE,
- H5C1__NO_FLAGS_SET);
- /* protect and unprotect a couple times to increment cache_accesses */
- protect_entry1(cache_ptr, HUGE_ENTRY_TYPE, 1);
- unprotect_entry1(cache_ptr, HUGE_ENTRY_TYPE, 1,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- protect_entry1(cache_ptr, HUGE_ENTRY_TYPE, 1);
- unprotect_entry1(cache_ptr, HUGE_ENTRY_TYPE, 1,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (64 * 1024) ) ||
- ( cache_ptr->min_clean_size != (32 * 1024) ) ||
- ( cache_ptr->index_len != 1 ) ||
- ( cache_ptr->index_size != HUGE_ENTRY_SIZE ) ||
- ( cache_ptr->cache_accesses != 2 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (6).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Now insert a monster entry. Since a monster entry is larger than
- * half the size of the cache, and there is not sufficient space
- * for a monster entry in the cache, we will add space to the
- * cache to make room for the entry.
- */
- if ( pass1 ) {
-
- insert_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 4, TRUE,
- H5C1__NO_FLAGS_SET);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (80 * 1024) ) ||
- ( cache_ptr->min_clean_size != (40 * 1024) ) ||
- ( cache_ptr->index_len != 2 ) ||
- ( cache_ptr->index_size !=
- HUGE_ENTRY_SIZE + MONSTER_ENTRY_SIZE ) ||
- ( cache_ptr->cache_accesses != 0 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (7).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Insert a second monster entry. Cache size should increase again.
- */
- if ( pass1 ) {
-
- insert_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 5, TRUE,
- H5C1__NO_FLAGS_SET);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (144 * 1024) ) ||
- ( cache_ptr->min_clean_size != ( 72 * 1024) ) ||
- ( cache_ptr->index_len != 3 ) ||
- ( cache_ptr->index_size !=
- 2 * MONSTER_ENTRY_SIZE + HUGE_ENTRY_SIZE ) ||
- ( cache_ptr->cache_accesses != 0 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (8).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Insert a third monster entry. Should be no cache size increase this
- * time.
- */
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 6);
-
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 6,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (144 * 1024) ) ||
- ( cache_ptr->min_clean_size != ( 72 * 1024) ) ||
- ( cache_ptr->index_len != 2 ) ||
- ( cache_ptr->index_size != (2 * MONSTER_ENTRY_SIZE) ) ||
- ( cache_ptr->cache_accesses != 1 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (9).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* delete existing entries to prepare for next test, and reset
- * the size of the cache. We must also change the size of the needed
- * variable entries before we run the test, so will protect and
- * unprotect them now so as to get the correct initial size.
- */
- if ( pass1 ) {
-
- expunge_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 5);
- expunge_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 6);
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 10,
- H5C1__DIRTIED_FLAG|H5C1__SIZE_CHANGED_FLAG, 1024);
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 11);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 11,
- H5C1__DIRTIED_FLAG|H5C1__SIZE_CHANGED_FLAG, 1024);
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 12);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 12,
- H5C1__DIRTIED_FLAG|H5C1__SIZE_CHANGED_FLAG, 1024);
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 13);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 13,
- H5C1__DIRTIED_FLAG|H5C1__SIZE_CHANGED_FLAG, 1024);
-
- flush_cache1(cache_ptr, TRUE, FALSE, FALSE);
-
-
- if ( pass1 ) {
-
- auto_size_ctl.initial_size = 6 * 1024;
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 13.\n";
- }
- }
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (6 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024) ) ||
- ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ||
- ( cache_ptr->cache_accesses != 0 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (10).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Now load the variable entries into the cache */
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10);
- unprotect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 11);
- unprotect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 11, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 12);
- unprotect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 12, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 13);
- unprotect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 13, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (6 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024) ) ||
- ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 4 * 1024 ) ||
- ( cache_ptr->cache_accesses != 4 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (11).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* protect a variable entry, and re-size it to 3K. Should be
- * no effect on the size of the cache.
- */
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 10,
- H5C1__DIRTIED_FLAG|H5C1__SIZE_CHANGED_FLAG, 3 * 1024);
-
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (6 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024) ) ||
- ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 6 * 1024 ) ||
- ( cache_ptr->cache_accesses != 5 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (12).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* protect the variable entry again, and re-size it to 10K. Should
- * resize the cache to 13 KB. Note that cache_accesses will be 0
- * in this case, since cache_accesses is incremented on the protect.
- */
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 10,
- H5C1__DIRTIED_FLAG|H5C1__SIZE_CHANGED_FLAG, 10 * 1024);
-
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (13 * 1024) ) ||
- ( cache_ptr->min_clean_size != (13 * 512) ) ||
- ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 13 * 1024 ) ||
- ( cache_ptr->cache_accesses != 0 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (13).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* protect a second variable entry, and re-size it to 10K. Should
- * resize to 22 KB.
- */
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 11);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 11,
- H5C1__DIRTIED_FLAG|H5C1__SIZE_CHANGED_FLAG, 10 * 1024);
-
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (22 * 1024) ) ||
- ( cache_ptr->min_clean_size != (11 * 1024) ) ||
- ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 22 * 1024 ) ||
- ( cache_ptr->cache_accesses != 0 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (14).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* protect a third variable entry, and re-size it to 10K. Should
- * be no change in cache size.
- */
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 12);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 12,
- H5C1__DIRTIED_FLAG|H5C1__SIZE_CHANGED_FLAG, 10 * 1024);
-
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (22 * 1024) ) ||
- ( cache_ptr->min_clean_size != (11 * 1024) ) ||
- ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 31 * 1024 ) ||
- ( cache_ptr->cache_accesses != 1 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (15).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* re-size the variable entries back down to their initial size, and
- * restore the cache to its initial size as well, in preparation
- * for the next test.
- */
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 10,
- H5C1__DIRTIED_FLAG|H5C1__SIZE_CHANGED_FLAG, 1 * 1024);
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 11);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 11,
- H5C1__DIRTIED_FLAG|H5C1__SIZE_CHANGED_FLAG, 1 * 1024);
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 12);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 12,
- H5C1__DIRTIED_FLAG|H5C1__SIZE_CHANGED_FLAG, 1 * 1024);
-
- if ( pass1 ) {
-
- auto_size_ctl.initial_size = 6 * 1024;
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 14.\n";
- }
- }
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (6 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024) ) ||
- ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 4 * 1024 ) ||
- ( cache_ptr->cache_accesses != 0 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (16).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Now test flash cache resizes with pinned entries...
- */
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10);
- unprotect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10, NO_CHANGE,
- H5C1__PIN_ENTRY_FLAG);
- resize_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10, 2 * 1024, TRUE);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (6 * 1024) ) ||
- ( cache_ptr->min_clean_size != (6 * 512) ) ||
- ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 5 * 1024 ) ||
- ( cache_ptr->cache_accesses != 1 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (17).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) {
-
- resize_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10, 10 * 1024, TRUE);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (13 * 1024) ) ||
- ( cache_ptr->min_clean_size != (13 * 512) ) ||
- ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 13 * 1024 ) ||
- ( cache_ptr->cache_accesses != 0 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (18).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 11);
- unprotect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 11, NO_CHANGE,
- H5C1__PIN_ENTRY_FLAG);
- resize_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 11, 10 * 1024, TRUE);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (22 * 1024) ) ||
- ( cache_ptr->min_clean_size != (11 * 1024) ) ||
- ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 22 * 1024 ) ||
- ( cache_ptr->cache_accesses != 0 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (19).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 12);
- unprotect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 12, NO_CHANGE,
- H5C1__PIN_ENTRY_FLAG);
- resize_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 12, 10 * 1024, TRUE);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (22 * 1024) ) ||
- ( cache_ptr->min_clean_size != (11 * 1024) ) ||
- ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 31 * 1024 ) ||
- ( cache_ptr->cache_accesses != 1 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (20).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Unpin the entries. Note that no entries are evicted as we don't
- * load any entries.
- */
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10);
- unprotect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10, NO_CHANGE,
- H5C1__UNPIN_ENTRY_FLAG);
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 11);
- unprotect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 11, NO_CHANGE,
- H5C1__UNPIN_ENTRY_FLAG);
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 12);
- unprotect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 12, NO_CHANGE,
- H5C1__UNPIN_ENTRY_FLAG);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (22 * 1024) ) ||
- ( cache_ptr->min_clean_size != (11 * 1024) ) ||
- ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 31 * 1024 ) ||
- ( cache_ptr->cache_accesses != 4 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (21).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* re-size the variable entries back down to their initial size, and
- * restore the cache to its initial size as well, in preparation
- * for the next test.
- */
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 10,
- H5C1__DIRTIED_FLAG|H5C1__SIZE_CHANGED_FLAG, 1 * 1024);
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 11);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 11,
- H5C1__DIRTIED_FLAG|H5C1__SIZE_CHANGED_FLAG, 1 * 1024);
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 12);
- unprotect_entry1_with_size_change(cache_ptr, VARIABLE_ENTRY_TYPE, 12,
- H5C1__DIRTIED_FLAG|H5C1__SIZE_CHANGED_FLAG, 1 * 1024);
-
- if ( pass1 ) {
-
- auto_size_ctl.initial_size = 6 * 1024;
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 15.\n";
- }
- }
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (6 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024) ) ||
- ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 4 * 1024 ) ||
- ( cache_ptr->cache_accesses != 0 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (22).\n";
- }
- }
-
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10);
- unprotect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10, NO_CHANGE,
- H5C1__PIN_ENTRY_FLAG);
- resize_pinned_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10, 2 * 1024);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (6 * 1024) ) ||
- ( cache_ptr->min_clean_size != (6 * 512) ) ||
- ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 5 * 1024 ) ||
- ( cache_ptr->cache_accesses != 1 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (23).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) {
-
- resize_pinned_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10, 10 * 1024);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (13 * 1024) ) ||
- ( cache_ptr->min_clean_size != (13 * 512) ) ||
- ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 13 * 1024 ) ||
- ( cache_ptr->cache_accesses != 0 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (24).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 11);
- unprotect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 11, NO_CHANGE,
- H5C1__PIN_ENTRY_FLAG);
- resize_pinned_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 11, 10 * 1024);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (22 * 1024) ) ||
- ( cache_ptr->min_clean_size != (11 * 1024) ) ||
- ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 22 * 1024 ) ||
- ( cache_ptr->cache_accesses != 0 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (25).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 12);
- unprotect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 12, NO_CHANGE,
- H5C1__PIN_ENTRY_FLAG);
- resize_pinned_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 12, 10 * 1024);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (22 * 1024) ) ||
- ( cache_ptr->min_clean_size != (11 * 1024) ) ||
- ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 31 * 1024 ) ||
- ( cache_ptr->cache_accesses != 1 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (26).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Unpin the entries. Note that no entries are evicted as we don't
- * load any entries.
- */
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10);
- unprotect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10, NO_CHANGE,
- H5C1__UNPIN_ENTRY_FLAG);
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 11);
- unprotect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 11, NO_CHANGE,
- H5C1__UNPIN_ENTRY_FLAG);
-
- protect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 12);
- unprotect_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 12, NO_CHANGE,
- H5C1__UNPIN_ENTRY_FLAG);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (22 * 1024) ) ||
- ( cache_ptr->min_clean_size != (11 * 1024) ) ||
- ( cache_ptr->index_len != 4 ) ||
- ( cache_ptr->index_size != 31 * 1024 ) ||
- ( cache_ptr->cache_accesses != 4 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (27).\n";
- }
- }
-
- /* We have finished a basic check of the flash cache size increment
- * code. Tidy up for a more extensive test...
- */
- if ( pass1 ) {
-
- expunge_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 10);
- expunge_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 11);
- expunge_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 12);
- expunge_entry1(cache_ptr, VARIABLE_ENTRY_TYPE, 13);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (22 * 1024) ) ||
- ( cache_ptr->min_clean_size != (11 * 1024) ) ||
- ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ||
- ( cache_ptr->cache_accesses != 4 ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (28).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* ...and then reconfigure. Note that we change the flash_multiple
- * and flash_threshold just to make sure that such changed perform
- * as expected.
- */
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 4 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 20 * 1024;
- auto_size_ctl.min_size = 4 * 1024;
-
- auto_size_ctl.epoch_length = 100;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (4 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__add_space;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.4;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__age_out_with_threshold;
-
- auto_size_ctl.upper_hr_threshold = 0.999; /* for ease of testing */
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = (2 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 1; /* for ease of testing */
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.5; /* for ease of testing */
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 15.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (4 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 512) ) ||
- ( cache_ptr->index_len != 0 ) ||
- ( cache_ptr->index_size != 0 ) ||
- ( cache_ptr->cache_accesses != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache after initialization 15.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* protect and unprotect a large entry -- no change in cache size since
- * a large entry will just fill the available space in the cache.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 0);
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 0, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (4 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 512) ) ||
- ( cache_ptr->index_len != 1 ) ||
- ( cache_ptr->index_size != LARGE_ENTRY_SIZE ) ||
- ( cache_ptr->cache_accesses != 1 ) ||
- ( rpt_fcn_called == TRUE ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (29).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* protect and unprotect another a large entry -- should trigger a
- * flash cache size increase to 12 KB (remember that flash_multiple is
- * set to 2.0).
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 1);
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 1, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (12 * 1024) ) ||
- ( cache_ptr->min_clean_size != (12 * 512) ) ||
- ( cache_ptr->index_len != 2 ) ||
- ( cache_ptr->index_size != 2 * LARGE_ENTRY_SIZE ) ||
- ( cache_ptr->cache_accesses != 1 ) ||
- ( rpt_fcn_called != TRUE ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (30).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* protect and unprotect two more large entries -- shouldnt trigger a
- * flash cache size increase.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 2);
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 2, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 3);
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 3, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (12 * 1024) ) ||
- ( cache_ptr->min_clean_size != (12 * 512) ) ||
- ( cache_ptr->index_len != 3 ) ||
- ( cache_ptr->index_size != 3 * LARGE_ENTRY_SIZE ) ||
- ( cache_ptr->cache_accesses != 3 ) ||
- ( rpt_fcn_called != FALSE ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (31).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* do many accesses of a single entry to talk the cache into reducing
- * its size to the minimum.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, TINY_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, TINY_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->max_cache_size != (4 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024) ) ||
- ( cache_ptr->index_size != (1 * TINY_ENTRY_SIZE) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (32).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Force another flash increase */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 0);
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 0, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (4 * 1024 + 128) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 + 64) ) ||
- ( cache_ptr->index_len != 2 ) ||
- ( cache_ptr->index_size !=
- LARGE_ENTRY_SIZE + TINY_ENTRY_SIZE ) ||
- ( cache_ptr->cache_accesses != 1 ) ||
- ( rpt_fcn_called == FALSE ) ||
- ( rpt_status != flash_increase ) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (33).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force regular size increase up to maximum */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 500 ) )
- {
- protect_entry1(cache_ptr, TINY_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, TINY_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( cache_ptr->max_cache_size != (20 * 1024) ) ||
- ( cache_ptr->min_clean_size != (10 * 1024) ) ||
- ( rpt_fcn_called == FALSE ) ||
- ( rpt_status != at_max_size ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache config (34).\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_auto_cache_resize() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_auto_cache_resize_disable()
- *
- * Purpose: Test the various ways in which the resize code can
- * be disabled. Unfortunately, there are quite a few of them.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 12/16/04
- *
- * Modifications:
- *
- * Added code to include the flash cache size increment
- * code in this test.
- * JRM -- 1/10/08
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_auto_cache_resize_disable(void)
-{
- const char * fcn_name = "check_auto_cache_resize_disable()";
- hbool_t show_progress = FALSE;
- herr_t result;
- int32_t i;
- int32_t checkpoint = 0;
- H5C1_t * cache_ptr = NULL;
- H5C1_auto_size_ctl_t auto_size_ctl =
- {
- /* int32_t version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* H5C1_auto_resize_report_fcn rpt_fcn = */ test_rpt_fcn,
-
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (512 * 1024),
-
- /* double min_clean_fraction = */ 0.5,
-
- /* size_t max_size = */ (14 * 1024 * 1024),
- /* size_t min_size = */ (512 * 1024),
-
- /* int64_t epoch_length = */ 1000,
-
-
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
-
- /* double lower_hr_threshold = */ 0.75,
-
- /* double increment = */ 2.0,
-
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
-
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 1.0,
- /* double flash_threshold = */ 0.25,
-
-
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__threshold,
-
- /* double upper_hr_threshold = */ 0.995,
-
- /* double decrement = */ 0.1,
-
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
-
- /* int32_t epochs_before_eviction = */ 3,
-
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.05
- };
-
- TESTING("automatic cache resize disable");
-
- pass1 = TRUE;
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* allocate a cache, enable automatic cache resizing, and then force
- * the cache through all its operational modes. Verify that all
- * performs as expected.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
- }
-
- if ( pass1 ) {
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (512 * 1024) ) ||
- ( cache_ptr->min_clean_size != (256 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after initialization.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
-
- /******************************************************************
- * So far, we have forced the auto cache resize through all modes
- * other than increase_disabled and decrease_disabled. Force these
- * modes now. Note that there are several ways we can reach these
- * modes.
- ******************************************************************/
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 16 * 1024 * 1024;
- auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 1.0; /* disable size increases */
-
- auto_size_ctl.apply_max_increment = FALSE;
- auto_size_ctl.max_increment = (4 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = FALSE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 2.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 1.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate with cache full -- increase disabled so should
- * be no change in cache size, and result should be increase_disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( rpt_status != increase_disabled ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 1.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate -- make sure that we haven't disabled decreases.
- * should result in a decrease cache size from 4 to 2 Meg.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (2 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 2.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate again -- increase disabled so should
- * be no change in cache size, and result should be increase_disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( rpt_status != increase_disabled ) ||
- ( cache_ptr->max_cache_size != (2 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 3.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Repeat the above tests, disabling increase through the lower
- * threshold instead of the increment.
- */
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 16 * 1024 * 1024;
- auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.0; /* disable size increases */
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = FALSE;
- auto_size_ctl.max_increment = (4 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = FALSE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 3.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 2.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate with cache full -- increase disabled so should
- * be no change in cache size, and result should be in_spec.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 4.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate -- make sure that we haven't disabled decreases.
- * should result in a decrease cache size from 4 to 2 Meg.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (2 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 5.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate again -- increase disabled so should
- * be no change in cache size, and result should be increase_disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (2 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 6.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Repeat the above tests yet again, disabling increase through the
- * incr_mode.
- */
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 16 * 1024 * 1024;
- auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__off;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = FALSE;
- auto_size_ctl.max_increment = (4 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = FALSE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 4.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 3.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate with cache full -- increase disabled so should
- * be no change in cache size, and result should be in_spec.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 7.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate -- make sure that we haven't disabled decreases.
- * should result in a decrease cache size from 4 to 2 Meg.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (2 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 8.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate again -- increase disabled so should
- * be no change in cache size, and result should be increase_disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (2 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 9.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Now, disable size decreases, and repeat the above tests.
- */
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 16 * 1024 * 1024;
- auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 1.0; /* disable size decreases */
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 5.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 4.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate -- should be no change in cache size,
- * and result should be decrease_disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease_disabled ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 10.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate -- cache size should increase from 4 to 6 Meg.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != increase ) ||
- ( cache_ptr->max_cache_size != (6 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 11.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate again -- should be no change in cache size,
- * and result should be decrease_disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease_disabled ) ||
- ( cache_ptr->max_cache_size != (6 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 12.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Repeat the above tests, disabling decrease through the upper
- * threshold instead of the decrement.
- */
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 16 * 1024 * 1024;
- auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- auto_size_ctl.upper_hr_threshold = 1.0; /* disable size decreases */
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 6.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 5.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate -- should be no change in cache size,
- * and result should be in_spec.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 13.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate -- cache size should increase from 4 to 6 Meg.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != increase ) ||
- ( cache_ptr->max_cache_size != (6 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 14.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate again -- should be no change in cache size,
- * and result should be in_spec.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (6 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 15.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Repeat the above tests, disabling decrease through the decr_mode.
- */
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 16 * 1024 * 1024;
- auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__off;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 7.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 6.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate -- should be no change in cache size,
- * and result should be in_spec.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 16.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate -- cache size should increase from 4 to 6 Meg.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != increase ) ||
- ( cache_ptr->max_cache_size != (6 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 17.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate again -- should be no change in cache size,
- * and result should be in_spec.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (6 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 18.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Now do tests disabling size decrement in age out mode.
- *
- * Start by disabling size decrement by setting max_decrement to zero.
- */
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 16 * 1024 * 1024;
- auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__age_out;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = 0; /* disable decrement */
-
- auto_size_ctl.epochs_before_eviction = 1;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 8.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 7.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* flush the cache and destroy all entries so we start from a known point */
- flush_cache1(cache_ptr, TRUE, FALSE, FALSE);
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* load up the cache with small entries. Note that it will take an
- * epoch for the ageout code to initialize itself if it is enabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( rpt_status != not_full ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 19.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Load up some more small entries.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 1000;
- while ( ( pass1 ) && ( i < 2000 ) )
- {
- protect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( rpt_status != not_full ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 20.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Now force a high hit rate so that the size increase code is
- * is satisfied. We would see a decrease here if decrease were
- * possible.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( rpt_status != decrease_disabled ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 21.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate -- cache size should increase from 4 to 6 Meg.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != increase ) ||
- ( cache_ptr->max_cache_size != (6 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 22.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* just bang on a single entry. This will see to it that there are
- * many entries that could be aged out were decreases enabled.
- * Should be no change in cache size, and result should be
- * decrease_disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( rpt_status != decrease_disabled ) ||
- ( cache_ptr->max_cache_size != (6 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 23.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Now disable size decrement in age out mode via the empty reserve.
- */
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 16 * 1024 * 1024;
- auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__age_out;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 1;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 1.0; /* disable decrement */
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 9.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 8.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* flush the cache and destroy all entries so we start from a known point */
- flush_cache1(cache_ptr, TRUE, FALSE, FALSE);
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* load up the cache with small entries. Note that it will take an
- * epoch for the ageout code to initialize itself if it is enabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( rpt_status != not_full ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 24.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Load up some more small entries.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 1000;
- while ( ( pass1 ) && ( i < 2000 ) )
- {
- protect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( rpt_status != not_full ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 25.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Now force a high hit rate so that the size increase code is
- * is satisfied. We would see a decrease here if decrease were
- * possible.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( rpt_status != decrease_disabled ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 26.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate -- cache size should increase from 4 to 6 Meg.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != increase ) ||
- ( cache_ptr->max_cache_size != (6 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 27.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* just bang on a single entry. This will see to it that there are
- * many entries that could be aged out were decreases enabled.
- * Should be no change in cache size, and result should be
- * decrease_disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( rpt_status != decrease_disabled ) ||
- ( cache_ptr->max_cache_size != (6 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 28.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Now work with age out with threshold. One can argue that we should
- * repeat the above age out tests with age out with threshold, but the
- * same code is executed in both cases so I don't see the point. If
- * that ever changes, this test should be updated.
- *
- * There is only one way of disabling decrements that is peculiar
- * to age out with threshold, which is to set the upper threshold
- * to 1.0. Test this now.
- */
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 16 * 1024 * 1024;
- auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__age_out_with_threshold;
-
- auto_size_ctl.upper_hr_threshold = 1.0;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 1;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 10.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 9.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* flush the cache and destroy all entries so we start from a known point */
- flush_cache1(cache_ptr, TRUE, FALSE, FALSE);
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* load up the cache with small entries. Note that it will take an
- * epoch for the ageout code to initialize itself if it is enabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( rpt_status != not_full ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 29.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Load up some more small entries.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 1000;
- while ( ( pass1 ) && ( i < 2000 ) )
- {
- protect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( rpt_status != not_full ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 30.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Now force a high hit rate so that the size increase code is
- * is satisfied. We would see a decrease here if decrease were
- * possible, but the upper threshold cannot be met, so no decrease.
- *
- * rpt_status should be decrease_disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( rpt_status != decrease_disabled ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ||
- ( cache_ptr->index_len != 2000 ) ||
- ( cache_ptr->index_size != 2000 * SMALL_ENTRY_SIZE ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 31.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate -- cache size should increase from 4 to 6 Meg.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != increase ) ||
- ( cache_ptr->max_cache_size != (6 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 32.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* just bang on a single entry. This keeps the hit rate high, and sees
- * to it that there are many entries that could be aged out were
- * decreases enabled.
- *
- * Should be no change in cache size, and result should be
- * decrease_disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 999);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 999,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( rpt_status != decrease_disabled ) ||
- ( cache_ptr->max_cache_size != (6 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 33.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
-
- /*********************************************************************
- * Finally, use the auto cache resize code to set the size of the
- * cache and keep it there. Again, due to the complexity of the
- * interface, there are lots of ways of doing this. We have to
- * check them all.
- *********************************************************************/
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 2 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 16 * 1024 * 1024;
- auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.0; /* disable size increases */
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- auto_size_ctl.upper_hr_threshold = 1.0; /* disable size decreases */
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 11.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (2 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 10.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate -- should be no response as the auto-resize
- * code should be disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( rpt_fcn_called ) ||
- ( cache_ptr->resize_enabled ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( cache_ptr->max_cache_size != (2 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 34.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate -- should be no response as the auto-resize
- * code should be disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( rpt_fcn_called ) ||
- ( cache_ptr->resize_enabled ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( cache_ptr->max_cache_size != (2 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 35.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.25;
-
- auto_size_ctl.max_size = 16 * 1024 * 1024;
- auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 1.0; /* disable size increment */
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 1.0; /* disable size decrement */
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 12.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 11.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate -- should be no response as the auto-resize
- * code should be disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( rpt_fcn_called ) ||
- ( cache_ptr->resize_enabled ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 36.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate -- should be no response as the auto-resize
- * code should be disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( rpt_fcn_called ) ||
- ( cache_ptr->resize_enabled ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 37.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = FALSE;
- auto_size_ctl.initial_size = 2 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 6 * 1024 * 1024; /* no resize */
- auto_size_ctl.min_size = 6 * 1024 * 1024; /* no resize */
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 13.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (6 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 12.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate -- should be no response as the auto-resize
- * code should be disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( rpt_fcn_called ) ||
- ( cache_ptr->resize_enabled ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( cache_ptr->max_cache_size != (6 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 38.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate -- should be no response as the auto-resize
- * code should be disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( rpt_fcn_called ) ||
- ( cache_ptr->resize_enabled ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( cache_ptr->max_cache_size != (6 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (3 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 39.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.25;
-
- auto_size_ctl.max_size = 16 * 1024 * 1024;
- auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 1.0; /* disable size increment */
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- auto_size_ctl.upper_hr_threshold = 1.0; /* disable size decrement */
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 14.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 13.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate -- should be no response as the auto-resize
- * code should be disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( rpt_fcn_called ) ||
- ( cache_ptr->resize_enabled ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 40.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate -- should be no response as the auto-resize
- * code should be disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( rpt_fcn_called ) ||
- ( cache_ptr->resize_enabled ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (1 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 41.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 16 * 1024 * 1024;
- auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.0; /* disable size increment */
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 1.0; /* disable size decrement */
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.05;
-
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 15.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 14.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate -- should be no response as the auto-resize
- * code should be disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( rpt_fcn_called ) ||
- ( cache_ptr->resize_enabled ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 42.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate -- should be no response as the auto-resize
- * code should be disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( rpt_fcn_called ) ||
- ( cache_ptr->resize_enabled ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 43.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 16 * 1024 * 1024;
- auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__off;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__off;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.05;
-
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 16.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 15.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force low hit rate -- should be no response as the auto-resize
- * code should be disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( rpt_fcn_called ) ||
- ( cache_ptr->resize_enabled ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 44.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* force high hit rate -- should be no response as the auto-resize
- * code should be disabled.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( rpt_fcn_called ) ||
- ( cache_ptr->resize_enabled ) ||
- ( cache_ptr->size_increase_possible ) ||
- ( cache_ptr->size_decrease_possible ) ||
- ( cache_ptr->max_cache_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (2 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 45.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Now test the flash cache size increment code to verify that it
- * is disabled when it should be.
- *
- * Since the flash size increase code doesn't look at hit rate, or
- * use epochs (other than to start a new epoch if a flash cache size
- * increase is triggered), we go about these tests somewhat differently
- * than the rest of the tests in this function.
- *
- * As of this writing, there is only one flash cache size increment
- * mode (add space), which is triggered whenever the size of a newly
- * loaded or inserted entry, or the delta between old and new entry
- * sizes exceeds some fraction of the current maximum cache size, and
- * the cache doesn't have enough free space to accomodate the new/
- * resize entry without performing evictions. The range of permissible
- * values for the flash_threshold (0.1 to 1.0 as of this writing), and
- * for the flash_multiple (0.1 to 10.0) do not permit the facility to
- * be turned off by configuration. Thus, flash cache size increases
- * can be disabled only via the flash_incr_mode, and by setting the
- * current max_cache_size equal to max_size.
- *
- * We have already tested the latter in check_auto_cache_resize(), so
- * we need only thest the former here. Do this by disabling flash
- * cache size increments via the flash_incr_mode, and then creating
- * situations that would trigger flash cache size increases were that
- * code enabled.
- */
-
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 64 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 256 * 1024;
- auto_size_ctl.min_size = 32 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (2 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 1.0;
- auto_size_ctl.flash_threshold = 0.25;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__age_out_with_threshold;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = TRUE;
- auto_size_ctl.max_decrement = (1 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 3;
-
- auto_size_ctl.apply_empty_reserve = TRUE;
- auto_size_ctl.empty_reserve = 0.05;
-
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 17.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (64 * 1024) ) ||
- ( cache_ptr->min_clean_size != (32 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 16.\n";
- }
- }
-
- /* We have reduced the max cache size to well below the current index
- * size. Protect and unprotect an entry to allow the cache to evict
- * entries and get within bounds
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
-
- protect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 0);
- unprotect_entry1(cache_ptr, LARGE_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (64 * 1024) ) ||
- ( cache_ptr->min_clean_size != (32 * 1024) ) ||
- ( cache_ptr->index_len != 1 ) ||
- ( cache_ptr->index_size != LARGE_ENTRY_SIZE ) ||
- ( rpt_fcn_called != FALSE ) ) ) ) {
-
- HDfprintf(stdout, "\nmax_cache_size = %ld.\n",
- (long)(cache_ptr->max_cache_size));
- HDfprintf(stdout, "min_clean_size = %ld.\n",
- (long)(cache_ptr->min_clean_size));
- HDfprintf(stdout, "index_len = %ld.\n",
- (long)(cache_ptr->index_len));
- HDfprintf(stdout, "index_size = %ld.\n",
- (long)(cache_ptr->index_size));
- HDfprintf(stdout, "rpt_fcn_called = %ld.\n",
- (long)(rpt_fcn_called));
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 46.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Now protect and unprotect a monster entry. If the flash cache
- * size increment code was active, this would trigger an increase.
- * Verify that it doesn't.
- *
- * This finishes the additional tests needed for the flash cache
- * size increase code.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
-
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
-
- if ( ( pass1 ) &&
- ( ( ( cache_ptr->max_cache_size != (64 * 1024) ) ||
- ( cache_ptr->min_clean_size != (32 * 1024) ) ||
- ( cache_ptr->index_len != 1 ) ||
- ( cache_ptr->index_size != MONSTER_ENTRY_SIZE ) ||
- ( rpt_fcn_called != FALSE ) ) ) ) {
-
- HDfprintf(stdout, "\nmax_cache_size = %ld.\n",
- (long)(cache_ptr->max_cache_size));
- HDfprintf(stdout, "min_clean_size = %ld.\n",
- (long)(cache_ptr->min_clean_size));
- HDfprintf(stdout, "index_len = %ld.\n",
- (long)(cache_ptr->index_len));
- HDfprintf(stdout, "index_size = %ld.\n",
- (long)(cache_ptr->index_size));
- HDfprintf(stdout, "rpt_fcn_called = %ld.\n",
- (long)(rpt_fcn_called));
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 47.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_auto_cache_resize_disable() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_auto_cache_resize_epoch_markers()
- *
- * Purpose: Verify that the auto-resize code manages epoch markers
- * correctly.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 12/16/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_auto_cache_resize_epoch_markers(void)
-{
- const char * fcn_name = "check_auto_cache_resize_epoch_markers()";
- hbool_t show_progress = FALSE;
- herr_t result;
- int32_t i;
- int32_t j;
- int32_t checkpoint = 0;
- H5C1_t * cache_ptr = NULL;
- H5C1_auto_size_ctl_t auto_size_ctl =
- {
- /* int32_t version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* H5C1_auto_resize_report_fcn rpt_fcn = */ test_rpt_fcn,
-
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (512 * 1024),
-
- /* double min_clean_fraction = */ 0.5,
-
- /* size_t max_size = */ (14 * 1024 * 1024),
- /* size_t min_size = */ (512 * 1024),
-
- /* int64_t epoch_length = */ 1000,
-
-
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
-
- /* double lower_hr_threshold = */ 0.75,
-
- /* double increment = */ 2.0,
-
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
-
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
-
-
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__threshold,
-
- /* double upper_hr_threshold = */ 0.995,
-
- /* double decrement = */ 0.1,
-
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
-
- /* int32_t epochs_before_eviction = */ 3,
-
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.05
- };
-
- TESTING("automatic cache resize epoch marker management");
-
- pass1 = TRUE;
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
- }
-
- if ( pass1 ) {
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (512 * 1024) ) ||
- ( cache_ptr->min_clean_size != (256 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after initialization.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
-
- /* Now make sure that we are managing the epoch markers correctly.
- */
-
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 8 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 8 * 1024 * 1024;
- auto_size_ctl.min_size = 512 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__off;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (4 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__age_out;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = FALSE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 10;
-
- auto_size_ctl.apply_empty_reserve = FALSE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 2.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 1.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Since we just created the cache, there should be no epoch markers
- * active. Verify that this is true.
- */
-
- if ( pass1 ) {
-
- if ( cache_ptr->epoch_markers_active != 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected # of epoch markers 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MEDIUM_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ||
- ( cache_ptr->index_size != (1 * 1000 * MEDIUM_ENTRY_SIZE) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 0.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
-
- if ( pass1 ) {
-
- j = 2;
- while ( ( pass1 ) && ( j <= 10 ) )
- {
-
- rpt_fcn_called = FALSE;
- i = (j - 2) * 1000;
- while ( ( pass1 ) && ( i < (j - 1) * 1000 ) )
- {
- protect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->epoch_markers_active != j ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected # of epoch markers 2.\n";
- }
-
- j++;
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* we now have a full complement of epoch markers -- see if
- * we get the expected reduction.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 9000;
- while ( ( pass1 ) && ( i < 10000 ) )
- {
- protect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size !=
- (10 * 1000 * SMALL_ENTRY_SIZE + MEDIUM_ENTRY_SIZE) ) ||
- ( cache_ptr->min_clean_size !=
- ((10 * 1000 * SMALL_ENTRY_SIZE + MEDIUM_ENTRY_SIZE) / 2) ) ||
- ( cache_ptr->index_size !=
- (10 * 1000 * SMALL_ENTRY_SIZE + MEDIUM_ENTRY_SIZE) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 1.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* now reduce the epochs before eviction, and see if the cache
- * deletes the extra markers
- */
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 8 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 8 * 1024 * 1024;
- auto_size_ctl.min_size = 512 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__off;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (4 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__age_out;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = FALSE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 1;
-
- auto_size_ctl.apply_empty_reserve = FALSE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 3.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 2.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* There should be exactly one active epoch marker at present.
- */
- if ( pass1 ) {
-
- if ( cache_ptr->epoch_markers_active != 1 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected # of epoch markers 3.\n";
- }
- }
-
- /* Now do an epochs worth of accesses, and verify that everything
- * not accessed in this epoch gets evicted, and the cache size
- * is reduced.
- */
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 9000;
- while ( ( pass1 ) && ( i < 10000 ) )
- {
- protect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != decrease ) ||
- ( cache_ptr->max_cache_size != (512 * 1024) ) ||
- ( cache_ptr->min_clean_size != (256 * 1024) ) ||
- ( cache_ptr->index_size != (1 * 1000 * SMALL_ENTRY_SIZE) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 2.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* There should be exactly one active epoch marker at present...
- */
- if ( pass1 ) {
-
- if ( cache_ptr->epoch_markers_active != 1 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected # of epoch markers 4.\n";
- }
- }
-
- /* shift the decrement mode to threshold, and verify that we remove
- * all epoch markers.
- */
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 8 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 8 * 1024 * 1024;
- auto_size_ctl.min_size = 512 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__off;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (4 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = FALSE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 1;
-
- auto_size_ctl.apply_empty_reserve = FALSE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 4.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after set resize re-config 3.\n";
- }
- }
-
- /* ... and now there should be none.
- */
- if ( pass1 ) {
-
- if ( cache_ptr->epoch_markers_active != 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected # of epoch markers 5.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* shift the decrement mode to age out with threshold. Set epochs
- * before eviction to 10 again.
- */
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 8 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 8 * 1024 * 1024;
- auto_size_ctl.min_size = 512 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__off;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (4 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__age_out_with_threshold;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = FALSE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 10;
-
- auto_size_ctl.apply_empty_reserve = FALSE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 5.\n";
- }
- }
-
- /* Verify that there are no active epoch markers.
- */
- if ( pass1 ) {
-
- if ( cache_ptr->epoch_markers_active != 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected # of epoch markers 6.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* build up a full set of epoch markers. */
- if ( pass1 ) {
-
- j = 1;
- while ( ( pass1 ) && ( j <= 10 ) )
- {
-
- rpt_fcn_called = FALSE;
- i = (j - 1) * 1000;
- while ( ( pass1 ) && ( i < j * 1000 ) )
- {
- protect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i);
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, SMALL_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
-
- if ( ( ! rpt_fcn_called ) ||
- ( rpt_status != in_spec ) ||
- ( cache_ptr->epoch_markers_active != j ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected # of epoch markers 7.\n";
- }
-
- j++;
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* Verify that there are now 10 active epoch markers.
- */
- if ( pass1 ) {
-
- if ( cache_ptr->epoch_markers_active != 10 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected # of epoch markers 8.\n";
- }
- }
-
- /* shift the decrement mode to off. This should cause all epoch
- * markers to be removed.
- */
- if ( pass1 ) {
-
- auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- auto_size_ctl.rpt_fcn = test_rpt_fcn;
-
- auto_size_ctl.set_initial_size = TRUE;
- auto_size_ctl.initial_size = 8 * 1024 * 1024;
-
- auto_size_ctl.min_clean_fraction = 0.5;
-
- auto_size_ctl.max_size = 8 * 1024 * 1024;
- auto_size_ctl.min_size = 512 * 1024;
-
- auto_size_ctl.epoch_length = 1000;
-
-
- auto_size_ctl.incr_mode = H5C1_incr__off;
-
- auto_size_ctl.lower_hr_threshold = 0.75;
-
- auto_size_ctl.increment = 2.0;
-
- auto_size_ctl.apply_max_increment = TRUE;
- auto_size_ctl.max_increment = (4 * 1024 * 1024);
-
- auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- auto_size_ctl.flash_multiple = 2.0;
- auto_size_ctl.flash_threshold = 0.5;
-
-
- auto_size_ctl.decr_mode = H5C1_decr__off;
-
- auto_size_ctl.upper_hr_threshold = 0.995;
-
- auto_size_ctl.decrement = 0.5;
-
- auto_size_ctl.apply_max_decrement = FALSE;
- auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- auto_size_ctl.epochs_before_eviction = 10;
-
- auto_size_ctl.apply_empty_reserve = FALSE;
- auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr, &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 6.\n";
- }
- }
-
- /* Verify that there are now no active epoch markers.
- */
- if ( pass1 ) {
-
- if ( cache_ptr->epoch_markers_active != 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected # of epoch markers 9.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- /* verify that we still have the expected number of entries in the cache,
- * and that the cache is of the expected size.
- */
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (8 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (4 * 1024 * 1024) )||
- ( cache_ptr->index_size != (10 * 1000 * SMALL_ENTRY_SIZE) ) ||
- ( cache_ptr->index_len != 10000 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache size change results 3.\n";
- }
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( show_progress ) HDfprintf(stderr, "check point %d\n", checkpoint++);
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_auto_cache_resize_epoch_markers() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_auto_cache_resize_input_errs()
- *
- * Purpose: Verify that H5C1_set_cache_auto_resize_config() detects
- * and rejects invalid input.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 10/29/04
- *
- * Modifications:
- *
- * Added code to verify that errors in the flash cache size
- * increment related fields are caught as well.
- *
- * JRM -- 1/17/08
- *
- *-------------------------------------------------------------------------
- */
-
-#define RESIZE_CONFIGS_ARE_EQUAL(a, b, compare_init) \
-( ( (a).version == (b).version ) && \
- ( (a).rpt_fcn == (b).rpt_fcn ) && \
- ( ( ! compare_init ) || \
- ( (a).set_initial_size == (b).set_initial_size ) ) && \
- ( ( ! compare_init ) || \
- ( (a).initial_size == (b).initial_size ) ) && \
- ( (a).min_clean_fraction == (b).min_clean_fraction ) && \
- ( (a).max_size == (b).max_size ) && \
- ( (a).min_size == (b).min_size ) && \
- ( (a).epoch_length == (b).epoch_length ) && \
- ( (a).incr_mode == (b).incr_mode ) && \
- ( (a).lower_hr_threshold == (b).lower_hr_threshold ) && \
- ( (a).increment == (b).increment ) && \
- ( (a).apply_max_increment == (b).apply_max_increment ) && \
- ( (a).max_increment == (b).max_increment ) && \
- ( (a).flash_incr_mode == (b).flash_incr_mode ) && \
- ( (a).flash_multiple == (b).flash_multiple ) && \
- ( (a).flash_threshold == (b).flash_threshold ) && \
- ( (a).decr_mode == (b).decr_mode ) && \
- ( (a).upper_hr_threshold == (b).upper_hr_threshold ) && \
- ( (a).flash_incr_mode == (b).flash_incr_mode ) && \
- ( (a).flash_multiple == (b).flash_multiple ) && \
- ( (a).flash_threshold == (b).flash_threshold ) && \
- ( (a).decrement == (b).decrement ) && \
- ( (a).apply_max_decrement == (b).apply_max_decrement ) && \
- ( (a).max_decrement == (b).max_decrement ) && \
- ( (a).epochs_before_eviction == (b).epochs_before_eviction ) && \
- ( (a).apply_empty_reserve == (b).apply_empty_reserve ) && \
- ( (a).empty_reserve == (b).empty_reserve ) )
-
-static void
-check_auto_cache_resize_input_errs(void)
-{
- const char * fcn_name = "check_auto_cache_resize_input_errs()";
- herr_t result;
- H5C1_t * cache_ptr = NULL;
- H5C1_auto_size_ctl_t ref_auto_size_ctl =
- {
- /* int32_t version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* H5C1_auto_resize_report_fcn rpt_fcn = */ test_rpt_fcn,
-
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (512 * 1024),
-
- /* double min_clean_fraction = */ 0.5,
-
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ (512 * 1024),
-
- /* int64_t epoch_length = */ 1000,
-
-
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
-
- /* double lower_hr_threshold = */ 0.75,
-
- /* double increment = */ 2.0,
-
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
-
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
-
-
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__threshold,
-
- /* double upper_hr_threshold = */ 0.995,
-
- /* double decrement = */ 0.1,
-
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
-
- /* int32_t epochs_before_eviction = */ 3,
-
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.05
- };
-
- H5C1_auto_size_ctl_t invalid_auto_size_ctl;
- H5C1_auto_size_ctl_t test_auto_size_ctl;
-
- TESTING("automatic cache resize input errors");
-
- pass1 = TRUE;
-
- /* allocate a cache, and set a reference automatic cache control
- * configuration. Then feed H5C1_set_cache_auto_resize_config()
- * invalid input, and verify that the correct error is returned,
- * and that the configuration is not modified.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
- }
-
- if ( pass1 ) {
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &ref_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (512 * 1024) ) ||
- ( cache_ptr->min_clean_size != (256 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after initialization.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 1.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 1.";
- }
- }
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.5;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.7;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.5;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(NULL,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted NULL cache_ptr.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 2.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 2.";
- }
- }
-
-
- /* check bad version rejection. */
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = -1; /* INVALID */
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.5;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.7;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.5;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad version.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 3.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 3.";
- }
- }
-
-
- /* check bad initial size rejection */
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 16 * 1024 * 1024 + 1;
- /* INVALID */
-
- invalid_auto_size_ctl.min_clean_fraction = 0.5;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.5;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad init size 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 4.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 4.";
- }
- }
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 1 * 1024 * 1024 - 1;
- /* INVALID */
-
- invalid_auto_size_ctl.min_clean_fraction = 0.5;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.5;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad init size 2.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 5.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 5.";
- }
- }
-
-
- /* test for invalid min clean fraction rejection. */
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 1.00001; /* INVALID */
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.5;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad min clean frac 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 6.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 6.";
- }
- }
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = -0.00001; /* INVALID */
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.5;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad min clean frac 2.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 7.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 7.";
- }
- }
-
-
- /* test for invalid max_size and/or min_size rejection */
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.5;
-
- invalid_auto_size_ctl.max_size = H5C1__MAX_MAX_CACHE_SIZE + 1;
- /* INVALID */
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.5;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad max_size.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 8.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 8.";
- }
- }
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.5;
-
- invalid_auto_size_ctl.max_size = 1 * 1024 * 1024;/* INVALID */
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024 + 1;/*PAIR */
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.5;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad size pair.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 9.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 9.";
- }
- }
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.5;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = H5C1__MIN_MAX_CACHE_SIZE - 1;
- /* INVALID */
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.5;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad min_size.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 10.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 10.";
- }
- }
-
-
- /* test for invalid epoch_length rejection */
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = H5C1__MAX_AR_EPOCH_LENGTH + 1;
- /* INVALID */
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.9;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad epoch len 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 11.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 11.";
- }
- }
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = H5C1__MIN_AR_EPOCH_LENGTH - 1;
- /* INVALID */
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.9;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad epoch len 2.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 12.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 12.";
- }
- }
-
-
- /* test for bad incr_mode rejection */
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode =
- (enum H5C1_cache_incr_mode) -1; /* INVALID */
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.9;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad incr_mode 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 13.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 13.";
- }
- }
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode =
- (enum H5C1_cache_incr_mode) 2; /* INVALID */
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.9;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad incr_mode 2.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 14.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 14.";
- }
- }
-
-
- /* check for bad upper and/or lower threshold rejection */
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.5;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.7;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 1.01; /* INVALID */
-
- invalid_auto_size_ctl.decrement = 0.5;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad upper threshold.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 15.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 15.";
- }
- }
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.5;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.8; /* INVALID */
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.7; /* INVALID */
-
- invalid_auto_size_ctl.decrement = 0.5;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad threshold pair.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 16.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 16.";
- }
- }
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.5;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = -0.0001; /* INVALID */
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.5;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad lower threshold.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 17.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 17.";
- }
- }
-
-
- /* test for bad increment rejection */
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 0.99999; /* INVALID */
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.5;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad increment.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 18.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 18.";
- }
- }
-
-
- /* test for bad flash_incr_mode rejection */
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode =
- (enum H5C1_cache_flash_incr_mode) -1; /* INVALID */
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.9;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad flash_incr_mode.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 19.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 19.";
- }
- }
-
- /* test for bad flash_multiple rejection */
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode =
- H5C1_flash_incr__add_space;
- invalid_auto_size_ctl.flash_multiple = 0.09; /* INVALID */
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.9;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad flash_multiple(1).\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 20.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 20.";
- }
- }
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode =
- H5C1_flash_incr__add_space;
- invalid_auto_size_ctl.flash_multiple = 10.01; /* INVALID */
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.9;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad flash_multiple(2).\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 21.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 21.";
- }
- }
-
- /* test for bad flash_threshold rejection */
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode =
- H5C1_flash_incr__add_space;
- invalid_auto_size_ctl.flash_multiple = 1.0;
- invalid_auto_size_ctl.flash_threshold = 0.09; /* INVALID */
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.9;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad flash_threshold(1).\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 22.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 22.";
- }
- }
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode =
- H5C1_flash_incr__add_space;
- invalid_auto_size_ctl.flash_multiple = 1.0;
- invalid_auto_size_ctl.flash_threshold = 1.001; /* INVALID */
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.9;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad flash_threshold(2).\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 23.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 23.";
- }
- }
-
- /* test for bad decr_mode rejection */
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode =
- (enum H5C1_cache_decr_mode) -1; /* INVALID */
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.9;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad decr_mode 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 24.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 24.";
- }
- }
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode =
- (enum H5C1_cache_decr_mode) 4; /* INVALID */
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.9;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad decr_mode 2.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 25.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 25.";
- }
- }
-
-
- /* check for bad decrement rejection */
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 1.000001; /* INVALID */
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad decrement 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 26.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 26.";
- }
- }
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = -0.000001; /* INVALID */
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_set_cache_auto_resize_config accepted bad decrement 2.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 27.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 27.";
- }
- }
-
-
- /* check for rejection of bad epochs_before_eviction */
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__age_out;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.9;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 0; /* INVALID */
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config accepted bad epochs_before_eviction 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 28.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 28.";
- }
- }
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__age_out_with_threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.9;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction =
- H5C1__MAX_EPOCH_MARKERS + 1; /* INVALID */
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config accepted bad epochs_before_eviction 2.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 29.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 29.";
- }
- }
-
-
- /* Check for bad apply_empty_reserve rejection */
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__age_out;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.9;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction = 3;
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = -0.0000001; /* INVALID */
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config accepted bad empty_reserve 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 30.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 30.";
- }
- }
-
- if ( pass1 ) {
-
- invalid_auto_size_ctl.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- invalid_auto_size_ctl.rpt_fcn = NULL;
-
- invalid_auto_size_ctl.set_initial_size = TRUE;
- invalid_auto_size_ctl.initial_size = 4 * 1024 * 1024;
-
- invalid_auto_size_ctl.min_clean_fraction = 0.1;
-
- invalid_auto_size_ctl.max_size = 16 * 1024 * 1024;
- invalid_auto_size_ctl.min_size = 1 * 1024 * 1024;
-
- invalid_auto_size_ctl.epoch_length = 5000;
-
-
- invalid_auto_size_ctl.incr_mode = H5C1_incr__threshold;
-
- invalid_auto_size_ctl.lower_hr_threshold = 0.75;
-
- invalid_auto_size_ctl.increment = 2.0;
-
- invalid_auto_size_ctl.apply_max_increment = TRUE;
- invalid_auto_size_ctl.max_increment = (2 * 1024 * 1024);
-
- invalid_auto_size_ctl.flash_incr_mode = H5C1_flash_incr__off;
- invalid_auto_size_ctl.flash_multiple = 2.0;
- invalid_auto_size_ctl.flash_threshold = 0.5;
-
-
- invalid_auto_size_ctl.decr_mode = H5C1_decr__age_out_with_threshold;
-
- invalid_auto_size_ctl.upper_hr_threshold = 0.999;
-
- invalid_auto_size_ctl.decrement = 0.9;
-
- invalid_auto_size_ctl.apply_max_decrement = TRUE;
- invalid_auto_size_ctl.max_decrement = (1 * 1024 * 1024);
-
- invalid_auto_size_ctl.epochs_before_eviction =
- H5C1__MAX_EPOCH_MARKERS + 1; /* INVALID */
-
- invalid_auto_size_ctl.apply_empty_reserve = TRUE;
- invalid_auto_size_ctl.empty_reserve = 0.05;
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &invalid_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config accepted bad empty_reserve 2.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr,
- &test_auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_auto_resize_config failed 31.";
-
- } else if ( ! RESIZE_CONFIGS_ARE_EQUAL(test_auto_size_ctl, \
- ref_auto_size_ctl, FALSE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected auto resize config 31.";
- }
- }
-
-
- /* finally, before we finish, try feeding
- * H5C1_get_cache_auto_resize_config invalid data.
- */
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(NULL, &test_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_auto_resize_config accepted NULL cache_ptr.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config((H5C1_t *)&test_auto_size_ctl,
- &test_auto_size_ctl);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_auto_resize_config accepted bad cache_ptr.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_auto_resize_config(cache_ptr, NULL);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_auto_resize_config accepted NULL config ptr.\n";
- }
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_auto_cache_resize_input_errs() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_auto_cache_resize_aux_fcns()
- *
- * Purpose: Verify that the auxilary functions associated with
- * the automatic cache resize capability are operating
- * correctly. These functions are:
- *
- * H5C1_get_cache_size()
- * H5C1_get_cache_hit_rate()
- * H5C1_reset_cache_hit_rate_stats()
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 11/4/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_auto_cache_resize_aux_fcns(void)
-{
- const char * fcn_name = "check_auto_cache_resize_aux_fcns()";
- herr_t result;
- int32_t i;
- H5C1_t * cache_ptr = NULL;
- double hit_rate;
- size_t max_size;
- size_t min_clean_size;
- size_t cur_size;
- int32_t cur_num_entries;
- H5C1_auto_size_ctl_t auto_size_ctl =
- {
- /* int32_t version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
-#if 1
- /* H5C1_auto_resize_report_fcn rpt_fcn = */ NULL,
-#else
- /* H5C1_auto_resize_report_fcn rpt_fcn = */ H5C1_def_auto_resize_rpt_fcn,
-#endif
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
-
- /* double min_clean_fraction = */ 0.5,
-
- /* size_t max_size = */ (16 * 1024 * 1025),
- /* size_t min_size = */ (512 * 1024),
-
- /* int64_t epoch_length = */ 50000,
-
-
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__off,
-
- /* double lower_hr_threshold = */ 0.75,
-
- /* double increment = */ 2.0,
-
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
-
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
-
-
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__off,
-
- /* double upper_hr_threshold = */ 0.995,
-
- /* double decrement = */ 0.9,
-
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
-
- /* int32_t epochs_before_eviction = */ 3,
-
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.5
- };
-
-
- TESTING("automatic cache resize auxilary functions");
-
- pass1 = TRUE;
-
- /* allocate a cache, and then test the various auxilary functions.
- */
-
- if ( pass1 ) {
-
- reset_entries1();
-
- cache_ptr = setup_cache1((size_t)(2 * 1024),
- (size_t)(1 * 1024));
- }
-
- if ( pass1 ) {
-
- result = H5C1_set_cache_auto_resize_config(cache_ptr,
- &auto_size_ctl);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_set_cache_auto_resize_config failed 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( ( cache_ptr->max_cache_size != (1 * 1024 * 1024) ) ||
- ( cache_ptr->min_clean_size != (512 * 1024) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "bad cache size after initialization.\n";
- }
- }
-
- /* lets start with the H5C1_get_cache_hit_rate(),
- * H5C1_reset_cache_hit_rate_stats() pair.
- */
-
- if ( pass1 ) {
-
- if ( ( H5C1_get_cache_hit_rate(NULL, &hit_rate) != FAIL ) ||
- ( H5C1_get_cache_hit_rate(cache_ptr, NULL) != FAIL ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_hit_rate accepts bad params.\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_hit_rate(cache_ptr, &hit_rate);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_hit_rate failed.\n";
-
- } else if ( hit_rate != 0.0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_hit_rate returned unexpected hit rate 1.\n";
- }
- }
-
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, PICO_ENTRY_TYPE, i);
-
- if ( pass1 ) {
-
- unprotect_entry1(cache_ptr, PICO_ENTRY_TYPE, i,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_hit_rate(cache_ptr, &hit_rate);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_hit_rate failed.\n";
-
- } else if ( hit_rate != 0.0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_hit_rate returned unexpected hit rate 2.\n";
-
- } else if ( ( cache_ptr->cache_accesses != 1000 ) ||
- ( cache_ptr->cache_hits != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache hit rate stats.\n";
-
- } else if ( rpt_fcn_called ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Report function called?.\n";
-
- }
- }
-
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, PICO_ENTRY_TYPE, 0);
-
- if ( pass1 ) {
-
- unprotect_entry1(cache_ptr, PICO_ENTRY_TYPE, 0,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_hit_rate(cache_ptr, &hit_rate);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_hit_rate failed.\n";
-
- } else if ( hit_rate != 0.5 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_hit_rate returned unexpected hit rate 3.\n";
-
- } else if ( ( cache_ptr->cache_accesses != 2000 ) ||
- ( cache_ptr->cache_hits != 1000 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache hit rate stats.\n";
-
- } else if ( rpt_fcn_called ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Report function called?.\n";
-
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_reset_cache_hit_rate_stats(NULL);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_reset_cache_hit_rate_stats accepted NULL cache_ptr.\n";
-
- } else if ( ( cache_ptr->cache_accesses != 2000 ) ||
- ( cache_ptr->cache_hits != 1000 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "Failed call to H5C1_reset_cache_hit_rate_stats altered stats?\n";
- }
- }
-
- if ( pass1 ) {
-
- result = H5C1_reset_cache_hit_rate_stats(cache_ptr);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_reset_cache_hit_rate_stats failed.\n";
-
- } else if ( ( cache_ptr->cache_accesses != 0 ) ||
- ( cache_ptr->cache_hits != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache hit rate stats.\n";
-
- }
- }
-
- if ( pass1 ) {
-
- rpt_fcn_called = FALSE;
- i = 0;
- while ( ( pass1 ) && ( i < 1000 ) )
- {
- protect_entry1(cache_ptr, PICO_ENTRY_TYPE, i + 500);
-
- if ( pass1 ) {
-
- unprotect_entry1(cache_ptr, PICO_ENTRY_TYPE, i + 500,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- }
- i++;
- }
- }
-
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_hit_rate(cache_ptr, &hit_rate);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_hit_rate failed.\n";
-
- } else if ( hit_rate != 0.5 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_hit_rate returned unexpected hit rate 4.\n";
-
- } else if ( ( cache_ptr->cache_accesses != 1000 ) ||
- ( cache_ptr->cache_hits != 500 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected cache hit rate stats.\n";
-
- } else if ( rpt_fcn_called ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Report function called?.\n";
-
- }
- }
-
- /***************************************************
- * So much for testing H5C1_get_cache_hit_rate() and
- * H5C1_reset_cache_hit_rate_stats(). Now on to
- * H5C1_get_cache_size().
- ***************************************************/
-
- if ( pass1 ) {
-
- result = H5C1_get_cache_size(NULL, &max_size, &min_clean_size,
- &cur_size, &cur_num_entries);
-
- if ( result != FAIL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_size accepted NULL cache_ptr.\n";
- }
- }
-
- if ( pass1 ) {
-
- max_size = 0;
- min_clean_size = 0;
- cur_size = 0;
- cur_num_entries = 0;
-
- result = H5C1_get_cache_size(cache_ptr, &max_size, &min_clean_size,
- &cur_size, &cur_num_entries);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_size failed 1.\n";
-
- } else if ( max_size != (1 * 1024 * 1024) ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_size reports unexpected max_size 1.\n";
-
- } else if ( min_clean_size != (512 * 1024) ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_size reports unexpected min_clean_size 1.\n";
-
- } else if ( cur_size != (1500 * PICO_ENTRY_SIZE) ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_size reports unexpected cur_size 1.\n";
-
- } else if ( cur_num_entries != 1500 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_size reports unexpected cur_num_entries 1.\n";
- }
- }
-
- /* read a larger entry so that cur_size and cur_num_entries will be
- * different.
- */
- if ( pass1 ) {
-
- protect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0);
- }
-
- if ( pass1 ) {
- unprotect_entry1(cache_ptr, MONSTER_ENTRY_TYPE, 0, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
- }
-
- if ( pass1 ) {
-
- max_size = 0;
- min_clean_size = 0;
- cur_size = 0;
- cur_num_entries = 0;
-
- result = H5C1_get_cache_size(cache_ptr, &max_size, &min_clean_size,
- &cur_size, &cur_num_entries);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_size failed 2.\n";
-
- } else if ( max_size != (1 * 1024 * 1024) ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_size reports unexpected max_size 2.\n";
-
- } else if ( min_clean_size != (512 * 1024) ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_size reports unexpected min_clean_size 2.\n";
-
- } else if ( cur_size !=
- ((1500 * PICO_ENTRY_SIZE) + MONSTER_ENTRY_SIZE) ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_size reports unexpected cur_size 2.\n";
-
- } else if ( cur_num_entries != 1501 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_size reports unexpected cur_num_entries 2.\n";
- }
- }
-
- if ( pass1 ) {
-
- max_size = 0;
- min_clean_size = 0;
- cur_size = 0;
- cur_num_entries = 0;
-
- result = H5C1_get_cache_size(cache_ptr, &max_size, NULL, NULL, NULL);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_size failed 3.\n";
-
- } else if ( max_size != (1 * 1024 * 1024) ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_size reports unexpected max_size 3.\n";
-
- } else if ( ( min_clean_size != 0 ) ||
- ( cur_size != 0 ) ||
- ( cur_num_entries != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Phantom returns from H5C1_get_cache_size?\n";
-
- }
- }
-
- if ( pass1 ) {
-
- max_size = 0;
- min_clean_size = 0;
- cur_size = 0;
- cur_num_entries = 0;
-
- result = H5C1_get_cache_size(cache_ptr, NULL, &min_clean_size,
- NULL, NULL);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_size failed 4.\n";
-
- } else if ( min_clean_size != (512 * 1024) ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_size reports unexpected min_clean_size 4.\n";
-
- } else if ( ( max_size != 0 ) ||
- ( cur_size != 0 ) ||
- ( cur_num_entries != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Phantom returns from H5C1_get_cache_size?\n";
-
- }
- }
-
- if ( pass1 ) {
-
- max_size = 0;
- min_clean_size = 0;
- cur_size = 0;
- cur_num_entries = 0;
-
- result = H5C1_get_cache_size(cache_ptr, NULL, NULL, &cur_size, NULL);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_size failed 5.\n";
-
- } else if ( cur_size !=
- ((1500 * PICO_ENTRY_SIZE) + MONSTER_ENTRY_SIZE) ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_size reports unexpected cur_size 5.\n";
-
- } else if ( ( max_size != 0 ) ||
- ( min_clean_size != 0 ) ||
- ( cur_num_entries != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Phantom returns from H5C1_get_cache_size?\n";
-
- }
- }
-
- if ( pass1 ) {
-
- max_size = 0;
- min_clean_size = 0;
- cur_size = 0;
- cur_num_entries = 0;
-
- result = H5C1_get_cache_size(cache_ptr, NULL, NULL, NULL,
- &cur_num_entries);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_get_cache_size failed 6.\n";
-
- } else if ( cur_num_entries != 1501 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5C1_get_cache_size reports unexpected cur_num_entries 2.\n";
-
- } else if ( ( max_size != 0 ) ||
- ( min_clean_size != 0 ) ||
- ( cur_size != 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Phantom returns from H5C1_get_cache_size?\n";
-
- }
- }
-
- if ( pass1 ) {
-
- takedown_cache1(cache_ptr, FALSE, FALSE);
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 ) {
-
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
- }
-
- return;
-
-} /* check_auto_cache_resize_aux_fcns() */
-
-
-/*-------------------------------------------------------------------------
- * Function: main
- *
- * Purpose: Run tests on the cache code contained in H5C.c
- *
- * Return: Success:
- *
- * Failure:
- *
- * Programmer: John Mainzer
- * 6/24/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-int
-main(void)
-{
- H5open();
-
- skip_long_tests1 = FALSE;
-
-#ifdef NDEBUG
- run_full_test1 = TRUE;
-#else /* NDEBUG */
- run_full_test1 = FALSE;
-#endif /* NDEBUG */
-
-#if 0
- run_full_test1 = TRUE;
-#endif
-
-#if 1
- smoke_check_1();
- smoke_check_2();
- smoke_check_3();
- smoke_check_4();
- smoke_check_5();
- smoke_check_6();
- smoke_check_7();
- smoke_check_8();
- smoke_check_9();
- smoke_check_10();
-#endif
-
- write_permitted1_check();
- check_insert_entry1();
- check_flush_cache1();
- check_get_entry_status();
- check_expunge_entry1();
- check_multiple_read_protect();
- check_rename_entry1();
- check_pin_protected_entry1();
- check_resize_entry1();
- check_evictions_enabled();
- check_flush_protected_err();
- check_destroy_pinned_err();
- check_destroy_protected_err();
- check_duplicate_insert_err();
- check_rename_err();
- check_double_pin_err();
- check_double_unpin_err();
- check_pin_entry_errs();
- check_double_protect_err();
- check_double_unprotect_err();
- check_mark_entry_dirty_errs();
- check_expunge_entry1_errs();
- check_resize_entry1_errs();
- check_unprotect_ro_dirty_err();
- check_protect_ro_rw_err();
- check_check_evictions_enabled_err();
- check_auto_cache_resize();
- check_auto_cache_resize_disable();
- check_auto_cache_resize_epoch_markers();
- check_auto_cache_resize_input_errs();
- check_auto_cache_resize_aux_fcns();
-
- return(0);
-
-} /* main() */
diff --git a/test/cache1_api.c b/test/cache1_api.c
deleted file mode 100644
index 8fe57ec..0000000
--- a/test/cache1_api.c
+++ /dev/null
@@ -1,4058 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* Programmer: John Mainzer
- * 11/10/05
- *
- * This file contains tests for the API calls associated
- * with the cache implemented in H5C.c
- */
-
-#include "h5test.h"
-#include "H5Iprivate.h"
-#include "H5AC1private.h"
-#include "cache1_common.h"
-
-/* global variable declarations: */
-
-const char *FILENAME1[] = {
- "cache1_api",
- NULL
-};
-
-/* macro definitions */
-
-#define RESIZE_CONFIGS_ARE_EQUAL(a, b, compare_init) \
-( ( (a).version == (b).version ) && \
- ( (a).rpt_fcn == (b).rpt_fcn ) && \
- ( ( ! compare_init ) || \
- ( (a).set_initial_size == (b).set_initial_size ) ) && \
- ( ( ! compare_init ) || \
- ( (a).initial_size == (b).initial_size ) ) && \
- ( (a).min_clean_fraction == (b).min_clean_fraction ) && \
- ( (a).max_size == (b).max_size ) && \
- ( (a).min_size == (b).min_size ) && \
- ( (a).epoch_length == (b).epoch_length ) && \
- ( (a).incr_mode == (b).incr_mode ) && \
- ( (a).lower_hr_threshold == (b).lower_hr_threshold ) && \
- ( (a).increment == (b).increment ) && \
- ( (a).apply_max_increment == (b).apply_max_increment ) && \
- ( (a).max_increment == (b).max_increment ) && \
- ( (a).flash_incr_mode == (b).flash_incr_mode ) && \
- ( (a).flash_multiple == (b).flash_multiple ) && \
- ( (a).flash_threshold == (b).flash_threshold ) && \
- ( (a).decr_mode == (b).decr_mode ) && \
- ( (a).upper_hr_threshold == (b).upper_hr_threshold ) && \
- ( (a).decrement == (b).decrement ) && \
- ( (a).apply_max_decrement == (b).apply_max_decrement ) && \
- ( (a).max_decrement == (b).max_decrement ) && \
- ( (a).epochs_before_eviction == (b).epochs_before_eviction ) && \
- ( (a).apply_empty_reserve == (b).apply_empty_reserve ) && \
- ( (a).empty_reserve == (b).empty_reserve ) )
-
-
-/* private function declarations: */
-
-static void check_fapl_mdc_api_calls(void);
-
-static void validate_mdc_config(hid_t file_id,
- H5AC1_cache_config_t * ext_config_ptr,
- hbool_t compare_init,
- int test_num);
-
-static void check_file_mdc_api_calls(void);
-
-static void check_and_validate_cache_hit_rate(hid_t file_id,
- double * hit_rate_ptr,
- hbool_t dump_data,
- int64_t min_accesses,
- double min_hit_rate);
-
-static void check_and_validate_cache_size(hid_t file_id,
- size_t * max_size_ptr,
- size_t * min_clean_size_ptr,
- size_t * cur_size_ptr,
- int32_t * cur_num_entries_ptr,
- hbool_t dump_data);
-
-static void mdc_api_call_smoke_check(int express_test1);
-
-static void check_fapl_mdc_api_errs(void);
-
-static void check_file_mdc_api_errs(void);
-
-
-/**************************************************************************/
-/**************************************************************************/
-/********************************* tests: *********************************/
-/**************************************************************************/
-/**************************************************************************/
-
-/*-------------------------------------------------------------------------
- * Function: check_fapl_mdc_api_calls()
- *
- * Purpose: Verify that the file access property list related
- * metadata cache related API calls are functioning
- * correctly.
- *
- * Since we have tested the H5C code elsewhere, it should
- * be sufficient to verify that the desired configuration
- * data is getting to the cache.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/12/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-#define CACHE_CONFIGS_EQUAL(a, b, cmp_set_init, cmp_init_size) \
- ( ( (a).version == (b).version ) && \
- ( (a).rpt_fcn_enabled == (b).rpt_fcn_enabled ) && \
- ( (a).open_trace_file == (b).open_trace_file ) && \
- ( (a).close_trace_file == (b).close_trace_file ) && \
- ( ( (a).open_trace_file == FALSE ) || \
- ( strcmp((a).trace_file_name, (b).trace_file_name) == 0 ) ) && \
- ( (a).evictions_enabled == (b).evictions_enabled ) && \
- ( ( ! cmp_set_init ) || \
- ( (a).set_initial_size == (b).set_initial_size ) ) && \
- ( ( ! cmp_init_size ) || \
- ( (a).initial_size == (b).initial_size ) ) && \
- ( (a).min_clean_fraction == (b).min_clean_fraction ) && \
- ( (a).max_size == (b).max_size ) && \
- ( (a).min_size == (b).min_size ) && \
- ( (a).epoch_length == (b).epoch_length ) && \
- ( (a).incr_mode == (b).incr_mode ) && \
- ( (a).lower_hr_threshold == (b).lower_hr_threshold ) && \
- ( (a).increment == (b).increment ) && \
- ( (a).apply_max_increment == (b).apply_max_increment ) && \
- ( (a).max_increment == (b).max_increment ) && \
- ( (a).flash_incr_mode == (b).flash_incr_mode ) && \
- ( (a).flash_multiple == (b).flash_multiple ) && \
- ( (a).flash_threshold == (b).flash_threshold ) && \
- ( (a).decr_mode == (b).decr_mode ) && \
- ( (a).upper_hr_threshold == (b).upper_hr_threshold ) && \
- ( (a).decrement == (b).decrement ) && \
- ( (a).apply_max_decrement == (b).apply_max_decrement ) && \
- ( (a).max_decrement == (b).max_decrement ) && \
- ( (a).epochs_before_eviction == (b).epochs_before_eviction ) && \
- ( (a).apply_empty_reserve == (b).apply_empty_reserve ) && \
- ( (a).empty_reserve == (b).empty_reserve ) )
-
-#define XLATE_EXT_TO_INT_MDC_CONFIG(i, e) \
-{ \
- (i).version = H5C1__CURR_AUTO_SIZE_CTL_VER; \
- if ( (e).rpt_fcn_enabled ) \
- (i).rpt_fcn = H5C1_def_auto_resize_rpt_fcn; \
- else \
- (i).rpt_fcn = NULL; \
- (i).set_initial_size = (e).set_initial_size; \
- (i).initial_size = (e).initial_size; \
- (i).min_clean_fraction = (e).min_clean_fraction; \
- (i).max_size = (e).max_size; \
- (i).min_size = (e).min_size; \
- (i).epoch_length = (long int)((e).epoch_length); \
- (i).incr_mode = (e).incr_mode; \
- (i).lower_hr_threshold = (e).lower_hr_threshold; \
- (i).increment = (e).increment; \
- (i).apply_max_increment = (e).apply_max_increment; \
- (i).max_increment = (e).max_increment; \
- (i).flash_incr_mode = (e).flash_incr_mode; \
- (i).flash_multiple = (e).flash_multiple; \
- (i).flash_threshold = (e).flash_threshold; \
- (i).decr_mode = (e).decr_mode; \
- (i).upper_hr_threshold = (e).upper_hr_threshold; \
- (i).flash_incr_mode = (e).flash_incr_mode; \
- (i).flash_multiple = (e).flash_multiple; \
- (i).flash_threshold = (e).flash_threshold; \
- (i).decrement = (e).decrement; \
- (i).apply_max_decrement = (e).apply_max_decrement; \
- (i).max_decrement = (e).max_decrement; \
- (i).epochs_before_eviction = (int)((e).epochs_before_eviction); \
- (i).apply_empty_reserve = (e).apply_empty_reserve; \
- (i).empty_reserve = (e).empty_reserve; \
-}
-
-static void
-check_fapl_mdc_api_calls(void)
-{
- const char * fcn_name = "check_fapl_mdc_api_calls()";
- char filename[512];
- herr_t result;
- hid_t fapl_id = -1;
- hid_t test_fapl_id = -1;
- hid_t file_id = -1;
- H5F_t * file_ptr = NULL;
- H5C1_t * cache_ptr = NULL;
- H5AC1_cache_config_t default_config = H5AC1__DEFAULT_CACHE_CONFIG;
- H5AC1_cache_config_t mod_config =
- {
- /* int version = */
- H5AC1__CURR_CACHE_CONFIG_VERSION,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024 + 1),
- /* double min_clean_fraction = */ 0.2,
- /* size_t max_size = */ (16 * 1024 * 1024 + 1),
- /* size_t min_size = */ ( 1 * 1024 * 1024 + 1),
- /* long int epoch_length = */ 50001,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.91,
- /* double increment = */ 2.1,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024 + 1),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out,
- /* double upper_hr_threshold = */ 0.998,
- /* double decrement = */ 0.91,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024 - 1),
- /* int epochs_before_eviction = */ 4,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.05,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- };
- H5AC1_cache_config_t scratch;
- H5C1_auto_size_ctl_t default_auto_size_ctl;
- H5C1_auto_size_ctl_t mod_auto_size_ctl;
-
- TESTING("MDC/FAPL related API calls");
-
- pass1 = TRUE;
-
- XLATE_EXT_TO_INT_MDC_CONFIG(default_auto_size_ctl, default_config)
- XLATE_EXT_TO_INT_MDC_CONFIG(mod_auto_size_ctl, mod_config)
-
- /* Create a FAPL and verify that it contains the default
- * initial mdc configuration
- */
-
- if ( pass1 ) {
-
- fapl_id = H5Pcreate(H5P_FILE_ACCESS);
-
- if ( fapl_id < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pcreate(H5P_FILE_ACCESS) failed.\n";
- }
- }
-
- if ( pass1 ) {
-
- scratch.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
-
- result = H5Pget_mdc_config(fapl_id, &scratch);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pget_mdc_config() failed.\n";
-
- } else if (!CACHE_CONFIGS_EQUAL(default_config, scratch, TRUE, TRUE)) {
-
- pass1 = FALSE;
- failure_mssg1 = "retrieved config doesn't match default.";
- }
- }
-
-
- /* Modify the initial mdc configuration in a FAPL, and verify that
- * the changes can be read back
- */
-
- if ( pass1 ) {
-
- result = H5Pset_mdc_config(fapl_id, &mod_config);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pset_mdc_config() failed.\n";
- }
- }
-
- if ( pass1 ) {
-
- scratch.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
-
- result = H5Pget_mdc_config(fapl_id, &scratch);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pget_mdc_config() failed.\n";
-
- } else if ( ! CACHE_CONFIGS_EQUAL(mod_config, scratch, TRUE, TRUE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "retrieved config doesn't match mod config.";
- }
- }
-
- if ( pass1 ) {
-
- if ( H5Pclose(fapl_id) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pclose() failed.\n";
- }
- }
-
- /* Open a file using the default FAPL. Verify that the resulting
- * metadata cache uses the default configuration as well. Get a
- * copy of the FAPL from the file, and verify that it contains the
- * default initial meta data cache configuration. Close and delete
- * the file.
- */
-
- /* setup the file name */
- if ( pass1 ) {
-
- if ( h5_fixname(FILENAME1[0], H5P_DEFAULT, filename, sizeof(filename))
- == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "h5_fixname() failed.\n";
- }
- }
-
- /* create the file using the default FAPL */
- if ( pass1 ) {
-
- file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
-
- if ( file_id < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fcreate() failed.\n";
- }
- }
-
- /* get a pointer to the files internal data structure */
- if ( pass1 ) {
-
- file_ptr = H5I_object_verify(file_id, H5I_FILE);
-
- if ( file_ptr == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Can't get file_ptr.\n";
-
- } else {
-
- cache_ptr = file_ptr->shared->cache1;
- }
- }
-
- /* verify that we can access the internal version of the cache config */
- if ( pass1 ) {
-
- if ( ( cache_ptr == NULL ) ||
- ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ||
- ( cache_ptr->resize_ctl.version != H5C1__CURR_AUTO_SIZE_CTL_VER ) ){
-
- pass1 = FALSE;
- failure_mssg1 = "Can't access cache resize_ctl.\n";
- }
- }
-
- /* conpare the cache's internal configuration with the expected value */
- if ( pass1 ) {
-
- if ( ! RESIZE_CONFIGS_ARE_EQUAL(default_auto_size_ctl, \
- cache_ptr->resize_ctl, TRUE) ) {
-
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected value(s) in cache resize_ctl.\n";
- }
- }
-
- /* get a copy of the files FAPL */
- if ( pass1 ) {
-
- fapl_id = H5Fget_access_plist(file_id);
-
- if ( fapl_id < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fget_access_plist() failed.\n";
- }
- }
-
- /* compare the initial cache config from the copy of the file's FAPL
- * to the expected value. If all goes well, close the copy of the FAPL.
- */
- if ( pass1 ) {
-
- scratch.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
-
- result = H5Pget_mdc_config(fapl_id, &scratch);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pget_mdc_config() failed.\n";
-
- } else if (!CACHE_CONFIGS_EQUAL(default_config, scratch, TRUE, TRUE)) {
-
- pass1 = FALSE;
- failure_mssg1 = "config retrieved from file doesn't match default.";
-
- } else if ( H5Pclose(fapl_id) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pclose() failed.\n";
- }
- }
-
- /* close the file and delete it */
- if ( pass1 ) {
-
- if ( H5Fclose(file_id) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fclose() failed.\n";
-
- } else if ( HDremove(filename) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "HDremove() failed.\n";
- }
- }
-
-
- /* Open a file using a FAPL with a modified initial metadata cache
- * configuration. Verify that the resulting metadata cache uses the
- * modified configuration as well. Get a copy of the FAPL from the
- * file, and verify that it contains the modified initial meta data
- * cache configuration. Close and delete the file.
- */
-
- /* Create a FAPL */
- if ( pass1 ) {
-
- fapl_id = H5Pcreate(H5P_FILE_ACCESS);
-
- if ( fapl_id < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pcreate(H5P_FILE_ACCESS) failed.\n";
- }
- }
-
- /* Modify the initial mdc configuration in the FAPL. */
-
- if ( pass1 ) {
-
- result = H5Pset_mdc_config(fapl_id, &mod_config);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pset_mdc_config() failed.\n";
- }
- }
-
- /* setup the file name */
- if ( pass1 ) {
-
- if ( h5_fixname(FILENAME1[0], H5P_DEFAULT, filename, sizeof(filename))
- == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "h5_fixname() failed.\n";
- }
- }
-
- /* create the file using the modified FAPL */
- if ( pass1 ) {
-
- file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
-
- if ( file_id < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fcreate() failed.\n";
- }
- }
-
- /* get a pointer to the files internal data structure */
- if ( pass1 ) {
-
- file_ptr = H5I_object_verify(file_id, H5I_FILE);
-
- if ( file_ptr == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Can't get file_ptr.\n";
-
- } else {
-
- cache_ptr = file_ptr->shared->cache1;
- }
- }
-
- /* verify that we can access the internal version of the cache config */
- if ( pass1 ) {
-
- if ( ( cache_ptr == NULL ) ||
- ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ||
- ( cache_ptr->resize_ctl.version != H5C1__CURR_AUTO_SIZE_CTL_VER ) ){
-
- pass1 = FALSE;
- failure_mssg1 = "Can't access cache resize_ctl.\n";
- }
- }
-
- /* conpare the cache's internal configuration with the expected value */
- if ( pass1 ) {
-
- if ( ! RESIZE_CONFIGS_ARE_EQUAL(mod_auto_size_ctl, \
- cache_ptr->resize_ctl, TRUE) ) {
-
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpected value(s) in cache resize_ctl.\n";
- }
- }
-
- /* get a copy of the files FAPL */
- if ( pass1 ) {
-
- test_fapl_id = H5Fget_access_plist(file_id);
-
- if ( test_fapl_id < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fget_access_plist() failed.\n";
- }
- }
-
- /* compare the initial cache config from the copy of the file's FAPL
- * to the expected value. If all goes well, close the copy of the FAPL.
- */
- if ( pass1 ) {
-
- scratch.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
-
- result = H5Pget_mdc_config(test_fapl_id, &scratch);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pget_mdc_config() failed.\n";
-
- } else if ( ! CACHE_CONFIGS_EQUAL(mod_config, scratch, TRUE, TRUE) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "config retrieved from file doesn't match.";
-
- } else if ( H5Pclose(test_fapl_id) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pclose() failed.\n";
- }
- }
-
- /* close the fapl used to create the file */
- if ( pass1 ) {
-
- if ( H5Pclose(fapl_id) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pclose() failed.\n";
- }
- }
-
- /* close the file and delete it */
- if ( pass1 ) {
-
- if ( H5Fclose(file_id) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fclose() failed.\n";
-
- } else if ( HDremove(filename) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "HDremove() failed.\n";
- }
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 )
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
-
-} /* check_fapl_mdc_api_calls() */
-
-
-/*-------------------------------------------------------------------------
- * Function: validate_mdc_config()
- *
- * Purpose: Verify that the file indicated by the file_id parameter
- * has both internal and external configuration matching
- * *config_ptr.
- *
- * Do nothin on success. On failure, set pass1 to FALSE, and
- * load an error message into failue_mssg. Note that
- * failure_msg is assumed to be at least 128 bytes in length.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/14/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-validate_mdc_config(hid_t file_id,
- H5AC1_cache_config_t * ext_config_ptr,
- hbool_t compare_init,
- int test_num)
-{
- /* const char * fcn_name = "validate_mdc_config()"; */
- static char msg[256];
- H5F_t * file_ptr = NULL;
- H5C1_t * cache_ptr = NULL;
- H5AC1_cache_config_t scratch;
- H5C1_auto_size_ctl_t int_config;
-
- XLATE_EXT_TO_INT_MDC_CONFIG(int_config, (*ext_config_ptr))
-
- /* get a pointer to the files internal data structure */
- if ( pass1 ) {
-
- file_ptr = H5I_object_verify(file_id, H5I_FILE);
-
- if ( file_ptr == NULL ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128, "Can't get file_ptr #%d.", test_num);
- failure_mssg1 = msg;
-
- } else {
-
- cache_ptr = file_ptr->shared->cache1;
- }
- }
-
- /* verify that we can access the internal version of the cache config */
- if ( pass1 ) {
-
- if ( ( cache_ptr == NULL ) ||
- ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ||
- ( cache_ptr->resize_ctl.version != H5C1__CURR_AUTO_SIZE_CTL_VER ) ){
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Can't access cache resize_ctl #%d.", test_num);
- failure_mssg1 = msg;
- }
- }
-
- /* compare the cache's internal configuration with the expected value */
- if ( pass1 ) {
-
- if ( ! RESIZE_CONFIGS_ARE_EQUAL(int_config, cache_ptr->resize_ctl,
- compare_init) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Unexpected internal config #%d.", test_num);
- failure_mssg1 = msg;
- }
- }
-
- /* obtain external cache config */
- if ( pass1 ) {
-
- scratch.version = H5AC1__CURR_CACHE_CONFIG_VERSION;
-
- if ( H5Fget_mdc_config(file_id, &scratch) < 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5Fget_mdc_config() failed #%d.", test_num);
- failure_mssg1 = msg;
- }
- }
-
- if ( pass1 ) {
-
- /* Recall that in any configuration supplied by the cache
- * at run time, the set_initial_size field will always
- * be FALSE, regardless of the value pass1ed in. Thus we
- * always presume that this field need not match that of
- * the supplied external configuration.
- *
- * The cache also sets the initial_size field to the current
- * cache max size instead of the value initialy supplied.
- * Depending on circumstances, this may or may not match
- * the original. Hence the compare_init parameter.
- */
- if ( ! CACHE_CONFIGS_EQUAL((*ext_config_ptr), scratch, \
- FALSE, compare_init) ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "Unexpected external config #%d.", test_num);
- failure_mssg1 = msg;
- }
- }
-
- return;
-
-} /* validate_mdc_config() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_file_mdc_api_calls()
- *
- * Purpose: Verify that the file related metadata cache API calls are
- * functioning correctly.
- *
- * Since we have tested the H5C code elsewhere, it should
- * be sufficient to verify that the desired configuration
- * data is getting in and out of the cache. Similarly,
- * we need only verify that the cache monitoring calls
- * return the data that the cache thinks they should return.
- * We shouldn't need to verify data correctness beyond that
- * point.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/14/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_file_mdc_api_calls(void)
-{
- const char * fcn_name = "check_file_mdc_api_calls()";
- char filename[512];
- hid_t file_id = -1;
- size_t max_size;
- size_t min_clean_size;
- size_t cur_size;
- int cur_num_entries;
- double hit_rate;
- H5AC1_cache_config_t default_config = H5AC1__DEFAULT_CACHE_CONFIG;
- H5AC1_cache_config_t mod_config_1 =
- {
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024 + 1),
- /* double min_clean_fraction = */ 0.2,
- /* size_t max_size = */ (16 * 1024 * 1024 + 1),
- /* size_t min_size = */ ( 1 * 1024 * 1024 + 1),
- /* long int epoch_length = */ 50001,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.91,
- /* double increment = */ 2.1,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024 + 1),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out,
- /* double upper_hr_threshold = */ 0.998,
- /* double decrement = */ 0.91,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024 - 1),
- /* int epochs_before_eviction = */ 4,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.05,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- };
- H5AC1_cache_config_t mod_config_2 =
- {
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ TRUE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (512 * 1024),
- /* double min_clean_fraction = */ 0.1,
- /* size_t max_size = */ ( 8 * 1024 * 1024),
- /* size_t min_size = */ ( 512 * 1024),
- /* long int epoch_length = */ 25000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (2 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 1.5,
- /* double flash_threshold = */ 0.4,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__threshold,
- /* double upper_hr_threshold = */ 0.9995,
- /* double decrement = */ 0.95,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (512 * 1024),
- /* int epochs_before_eviction = */ 4,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.05,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- };
- H5AC1_cache_config_t mod_config_3 =
- {
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.2,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__off,
- /* double lower_hr_threshold = */ 0.90,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.1,
- /* double flash_threshold = */ 0.6,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__off,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ FALSE,
- /* size_t max_decrement = */ (1 * 1024 * 1024 - 1),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ FALSE,
- /* double empty_reserve = */ 0.05,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- };
- H5AC1_cache_config_t mod_config_4 =
- {
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.15,
- /* size_t max_size = */ (20 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 75000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (2 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 1.1,
- /* double flash_threshold = */ 0.3,
- /* enum H5C1_cache_decr_mode decr_mode = */
- H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- };
-
- TESTING("MDC/FILE related API calls");
-
- pass1 = TRUE;
-
- /* Open a file with the default FAPL. Verify that the cache is
- * configured as per the default both by looking at its internal
- * configuration, and via the H5Fget_mdc_config() call.
- *
- * Then set serveral different configurations, and verify that
- * they took as per above.
- */
-
- /* setup the file name */
- if ( pass1 ) {
-
- if ( h5_fixname(FILENAME1[0], H5P_DEFAULT, filename, sizeof(filename))
- == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "h5_fixname() failed.\n";
- }
- }
-
- /* create the file using the default FAPL */
- if ( pass1 ) {
-
- file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
-
- if ( file_id < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fcreate() failed.\n";
- }
- }
-
- /* verify that the cache is set to the default config */
- validate_mdc_config(file_id, &default_config, TRUE, 1);
-
- /* set alternate config 1 */
- if ( pass1 ) {
-
- if ( H5Fset_mdc_config(file_id, &mod_config_1) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fset_mdc_config() failed 1.\n";
- }
- }
-
- /* verify that the cache is now set to the alternate config */
- validate_mdc_config(file_id, &mod_config_1, TRUE, 2);
-
- /* set alternate config 2 */
- if ( pass1 ) {
-
- if ( H5Fset_mdc_config(file_id, &mod_config_2) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fset_mdc_config() failed 2.\n";
- }
- }
-
- /* verify that the cache is now set to the alternate config */
- validate_mdc_config(file_id, &mod_config_2, TRUE, 3);
-
- /* set alternate config 3 */
- if ( pass1 ) {
-
- if ( H5Fset_mdc_config(file_id, &mod_config_3) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fset_mdc_config() failed 3.\n";
- }
- }
-
- /* verify that the cache is now set to the alternate config */
- validate_mdc_config(file_id, &mod_config_3, TRUE, 4);
-
- /* set alternate config 4 */
- if ( pass1 ) {
-
- if ( H5Fset_mdc_config(file_id, &mod_config_4) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fset_mdc_config() failed 4.\n";
- }
- }
-
- /* verify that the cache is now set to the alternate config */
- validate_mdc_config(file_id, &mod_config_4, TRUE, 5);
-
-
- /* Run some quick smoke checks on the cache status monitoring
- * calls -- no interesting data as the cache hasn't had a
- * chance to do much yet.
- */
-
- if ( pass1 ) {
-
- if ( H5Fget_mdc_hit_rate(file_id, &hit_rate) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fget_mdc_hit_rate() failed 1.\n";
-
- } else if ( hit_rate != 0.0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5Fget_mdc_hit_rate() returned unexpected hit rate.\n";
-
- }
-#if 0 /* this may be useful now and then -- keep it around */
- else {
-
- HDfprintf(stdout,
- "H5Fget_mdc_hit_rate() reports hit_rate = %lf:\n",
- hit_rate);
- }
-#endif
- }
-
- if ( pass1 ) {
-
- if ( H5Fget_mdc_size(file_id, &max_size, &min_clean_size,
- &cur_size, &cur_num_entries) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fget_mdc_size() failed 1.\n";
-
- } else if ( ( mod_config_4.initial_size != max_size ) ||
- ( min_clean_size != (size_t)
- ((double)max_size * mod_config_4.min_clean_fraction) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fget_mdc_size() returned unexpected value(s).\n";
-
- }
-#if 0 /* this may be useful now and then -- keep it around */
- else {
-
- HDfprintf(stdout, "H5Fget_mdc_size() reports:\n");
- HDfprintf(stdout, " max_size: %ld, min_clean_size: %ld\n",
- (long)max_size, (long)min_clean_size);
- HDfprintf(stdout, " cur_size: %ld, cur_num_entries: %d\n",
- (long)cur_size, cur_num_entries);
- }
-#endif
- }
-
- /* close the file and delete it */
- if ( pass1 ) {
-
- if ( H5Fclose(file_id) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fclose() failed.\n";
-
- } else if ( HDremove(filename) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "HDremove() failed.\n";
- }
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 )
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
-
-} /* check_file_mdc_api_calls() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_and_validate_cache_hit_rate()
- *
- * Purpose: Use the API functions to get and reset the cache hit rate.
- * Verify that the value returned by the API call agrees with
- * the cache internal data structures.
- *
- * If the number of cache accesses exceeds the value provided
- * in the min_accesses parameter, and the hit rate is less than
- * min_hit_rate, set pass1 to FALSE, and set failure_mssg1 to
- * a string indicating that hit rate was unexpectedly low.
- *
- * Return hit rate in *hit_rate_ptr, and print the data to
- * stdout if requested.
- *
- * If an error is detected, set pass1 to FALSE, and set
- * failure_mssg1 to an appropriate value.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/18/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_and_validate_cache_hit_rate(hid_t file_id,
- double * hit_rate_ptr,
- hbool_t dump_data,
- int64_t min_accesses,
- double min_hit_rate)
-{
- /* const char * fcn_name = "check_and_validate_cache_hit_rate()"; */
- herr_t result;
- int64_t cache_hits = 0;
- int64_t cache_accesses = 0;
- double expected_hit_rate;
- double hit_rate;
- H5F_t * file_ptr = NULL;
- H5C1_t * cache_ptr = NULL;
-
- /* get a pointer to the files internal data structure */
- if ( pass1 ) {
-
- file_ptr = H5I_object_verify(file_id, H5I_FILE);
-
- if ( file_ptr == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Can't get file_ptr.";
-
- } else {
-
- cache_ptr = file_ptr->shared->cache1;
- }
- }
-
- /* verify that we can access the cache data structure */
- if ( pass1 ) {
-
- if ( ( cache_ptr == NULL ) ||
- ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Can't access cache resize_ctl.";
- }
- }
-
- /* compare the cache's internal configuration with the expected value */
- if ( pass1 ) {
-
- cache_hits = cache_ptr->cache_hits;
- cache_accesses = cache_ptr->cache_accesses;
-
- if ( cache_accesses > 0 ) {
-
- expected_hit_rate = ((double)cache_hits) / ((double)cache_accesses);
-
- } else {
-
- expected_hit_rate = 0.0;
- }
-
- result = H5Fget_mdc_hit_rate(file_id, &hit_rate);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fget_mdc_hit_rate() failed.";
-
- } else if ( hit_rate != expected_hit_rate ) {
-
- pass1 = FALSE;
- failure_mssg1 = "unexpected hit rate.";
- }
- }
-
- if ( pass1 ) { /* reset the hit rate */
-
- result = H5Freset_mdc_hit_rate_stats(file_id);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Freset_mdc_hit_rate_stats() failed.";
- }
- }
-
- /* set *hit_rate_ptr if appropriate */
- if ( ( pass1 ) && ( hit_rate_ptr != NULL ) ) {
-
- *hit_rate_ptr = hit_rate;
- }
-
- /* dump data to stdout if requested */
- if ( ( pass1 ) && ( dump_data ) ) {
-
- HDfprintf(stdout,
- "cache_hits: %ld, cache_accesses: %ld, hit_rate: %lf\n",
- (long)cache_hits, (long)cache_accesses, hit_rate);
- }
-
- if ( ( pass1 ) &&
- ( cache_accesses > min_accesses ) &&
- ( hit_rate < min_hit_rate ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Unexpectedly low hit rate.";
- }
-
- return;
-
-} /* check_and_validate_cache_hit_rate() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_and_validate_cache_size()
- *
- * Purpose: Use the API function to get the cache size data. Verify
- * that the values returned by the API call agree with
- * the cache internal data structures.
- *
- * Return size data in the locations specified by the pointer
- * parameters if these parameters are not NULL. Print the
- * data to stdout if requested.
- *
- * If an error is detected, set pass1 to FALSE, and set
- * failure_mssg1 to an appropriate value.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/18/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_and_validate_cache_size(hid_t file_id,
- size_t * max_size_ptr,
- size_t * min_clean_size_ptr,
- size_t * cur_size_ptr,
- int32_t * cur_num_entries_ptr,
- hbool_t dump_data)
-{
- /* const char * fcn_name = "check_and_validate_cache_size()"; */
- herr_t result;
- size_t expected_max_size;
- size_t max_size;
- size_t expected_min_clean_size;
- size_t min_clean_size;
- size_t expected_cur_size;
- size_t cur_size;
- int32_t expected_cur_num_entries;
- int cur_num_entries;
- H5F_t * file_ptr = NULL;
- H5C1_t * cache_ptr = NULL;
-
- /* get a pointer to the files internal data structure */
- if ( pass1 ) {
-
- file_ptr = H5I_object_verify(file_id, H5I_FILE);
-
- if ( file_ptr == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Can't get file_ptr.";
-
- } else {
-
- cache_ptr = file_ptr->shared->cache1;
- }
- }
-
- /* verify that we can access the cache data structure */
- if ( pass1 ) {
-
- if ( ( cache_ptr == NULL ) ||
- ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "Can't access cache data structure.";
- }
- }
-
- /* compare the cache's internal configuration with the expected value */
- if ( pass1 ) {
-
- expected_max_size = cache_ptr->max_cache_size;
- expected_min_clean_size = cache_ptr->min_clean_size;
- expected_cur_size = cache_ptr->index_size;
- expected_cur_num_entries = cache_ptr->index_len;
-
- result = H5Fget_mdc_size(file_id,
- &max_size,
- &min_clean_size,
- &cur_size,
- &cur_num_entries);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fget_mdc_size() failed.";
-
- } else if ( ( max_size != expected_max_size ) ||
- ( min_clean_size != expected_min_clean_size ) ||
- ( cur_size != expected_cur_size ) ||
- ( cur_num_entries != (int)expected_cur_num_entries ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fget_mdc_size() returned unexpected value(s).";
-
- }
- }
-
- /* return size values if requested */
- if ( ( pass1 ) && ( max_size_ptr != NULL ) ) {
-
- *max_size_ptr = max_size;
- }
-
- if ( ( pass1 ) && ( min_clean_size_ptr != NULL ) ) {
-
- *min_clean_size_ptr = min_clean_size;
- }
-
- if ( ( pass1 ) && ( cur_size_ptr != NULL ) ) {
-
- *cur_size_ptr = cur_size;
- }
-
- if ( ( pass1 ) && ( cur_num_entries_ptr != NULL ) ) {
-
- *cur_num_entries_ptr = cur_num_entries;
- }
-
-
- /* dump data to stdout if requested */
- if ( ( pass1 ) && ( dump_data ) ) {
-
- HDfprintf(stdout,
- "max_sz: %ld, min_clean_sz: %ld, cur_sz: %ld, cur_ent: %ld\n",
- (long)max_size, (long)min_clean_size, (long)cur_size,
- (long)cur_num_entries);
- }
-
- return;
-
-} /* check_and_validate_cache_size() */
-
-
-/*-------------------------------------------------------------------------
- * Function: mdc_api_call_smoke_check()
- *
- * Purpose:
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/14/04
- *
- * Modifications:
- *
- * JRM -- 7/12/06
- * Added progress reporting code.
- *
- *-------------------------------------------------------------------------
- */
-
-#define CHUNK_SIZE 2
-#define DSET_SIZE (200 * CHUNK_SIZE)
-#define NUM_DSETS 6
-#define NUM_RANDOM_ACCESSES 200000
-
-static void
-mdc_api_call_smoke_check(int express_test1)
-{
- const char * fcn_name = "mdc_api_call_smoke_check()";
- char filename[512];
- hbool_t valid_chunk;
- hbool_t report_progress = FALSE;
- hbool_t dump_hit_rate = FALSE;
- int64_t min_accesses = 1000;
- double min_hit_rate = 0.90;
- hbool_t dump_cache_size = FALSE;
- hid_t file_id = -1;
- hid_t dataspace_id = -1;
- hid_t filespace_ids[NUM_DSETS];
- hid_t memspace_id = -1;
- hid_t dataset_ids[NUM_DSETS];
- hid_t properties;
- char dset_name[64];
- int i, j, k, l, m, n;
- int progress_counter;
- herr_t status;
- hsize_t dims[2];
- hsize_t a_size[2];
- hsize_t offset[2];
- hsize_t chunk_size[2];
- int data_chunk[CHUNK_SIZE][CHUNK_SIZE];
- H5AC1_cache_config_t default_config = H5AC1__DEFAULT_CACHE_CONFIG;
- H5AC1_cache_config_t mod_config_1 =
- {
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ 500000,
- /* double min_clean_fraction = */ 0.1,
- /* size_t max_size = */ 16000000,
- /* size_t min_size = */ 250000,
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__off,
- /* double lower_hr_threshold = */ 0.95,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ FALSE,
- /* size_t max_increment = */ 4000000,
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__off,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ FALSE,
- /* size_t max_decrement = */ 1000000,
- /* int epochs_before_eviction = */ 2,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.05,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- };
- H5AC1_cache_config_t mod_config_2 =
- {
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ 12000000,
- /* double min_clean_fraction = */ 0.1,
- /* size_t max_size = */ 16000000,
- /* size_t min_size = */ 250000,
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__off,
- /* double lower_hr_threshold = */ 0.95,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ FALSE,
- /* size_t max_increment = */ 4000000,
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__off,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ FALSE,
- /* size_t max_decrement = */ 1000000,
- /* int epochs_before_eviction = */ 2,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.05,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- };
- H5AC1_cache_config_t mod_config_3 =
- {
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ 2000000,
- /* double min_clean_fraction = */ 0.1,
- /* size_t max_size = */ 16000000,
- /* size_t min_size = */ 250000,
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__off,
- /* double lower_hr_threshold = */ 0.95,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ FALSE,
- /* size_t max_increment = */ 4000000,
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__off,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ FALSE,
- /* size_t max_decrement = */ 1000000,
- /* int epochs_before_eviction = */ 2,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.05,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- };
-
- TESTING("MDC API smoke check");
-
- if ( express_test1 > 0 ) {
-
- SKIPPED();
-
- HDfprintf(stdout, " Long tests disabled.\n");
-
- return;
- }
-
- pass1 = TRUE;
-
- /* Open a file with the default FAPL. Verify that the cache is
- * configured as per the default both by looking at its internal
- * configuration, and via the H5Fget_mdc_config() call.
- *
- * Then set the cache to mod_config_1, which fixes cache size at
- * 500000 bytes, and turns off automatic cache resize.
- */
-
- /* setup the file name */
-
- if ( ( pass1 ) && ( report_progress ) ) {
-
- HDfprintf(stdout,"\nSetting up file ... ");
- HDfflush(stdout);
- }
-
- if ( pass1 ) {
-
- if ( h5_fixname(FILENAME1[0], H5P_DEFAULT, filename, sizeof(filename))
- == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "h5_fixname() failed.\n";
- }
- }
-
- /* create the file using the default FAPL */
- if ( pass1 ) {
-
- file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
-
- if ( file_id < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fcreate() failed.\n";
- }
- }
-
- /* verify that the cache is set to the default config */
- validate_mdc_config(file_id, &default_config, TRUE, 1);
-
- /* set alternate config 1 */
- if ( pass1 ) {
-
- if ( H5Fset_mdc_config(file_id, &mod_config_1) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fset_mdc_config() failed 1.\n";
- }
- }
-
- /* verify that the cache is now set to the alternate config */
- validate_mdc_config(file_id, &mod_config_1, TRUE, 2);
-
- if ( ( pass1 ) && ( report_progress ) ) {
-
- HDfprintf(stdout,"Done.\n"); /* setting up file */
- HDfflush(stdout);
- }
-
-
- /* create the datasets */
-
- if ( ( pass1 ) && ( report_progress ) ) {
-
- HDfprintf(stdout,"Creating datasets ... ");
- HDfflush(stdout);
- }
-
- if ( pass1 ) {
-
- i = 0;
-
- while ( ( pass1 ) && ( i < NUM_DSETS ) )
- {
- /* create a dataspace for the chunked dataset */
- dims[0] = DSET_SIZE;
- dims[1] = DSET_SIZE;
- dataspace_id = H5Screate_simple(2, dims, NULL);
-
- if ( dataspace_id < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Screate_simple() failed.";
- }
-
- /* set the dataset creation plist to specify that the raw data is
- * to be partioned into 10X10 element chunks.
- */
-
- if ( pass1 ) {
-
- chunk_size[0] = CHUNK_SIZE;
- chunk_size[1] = CHUNK_SIZE;
- properties = H5Pcreate(H5P_DATASET_CREATE);
-
- if ( properties < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pcreate() failed.";
- }
- }
-
- if ( pass1 ) {
-
- if ( H5Pset_chunk(properties, 2, chunk_size) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pset_chunk() failed.";
- }
- }
-
- /* create the dataset */
- if ( pass1 ) {
-
- sprintf(dset_name, "/dset%03d", i);
- dataset_ids[i] = H5Dcreate2(file_id, dset_name, H5T_STD_I32BE,
- dataspace_id, H5P_DEFAULT, properties, H5P_DEFAULT);
-
- if ( dataset_ids[i] < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Dcreate2() failed.";
- }
- }
-
- /* get the file space ID */
- if ( pass1 ) {
-
- filespace_ids[i] = H5Dget_space(dataset_ids[i]);
-
- if ( filespace_ids[i] < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Dget_space() failed.";
- }
- }
-
- i++;
- }
- }
-
- /* create the mem space to be used to read and write chunks */
- if ( pass1 ) {
-
- dims[0] = CHUNK_SIZE;
- dims[1] = CHUNK_SIZE;
- memspace_id = H5Screate_simple(2, dims, NULL);
-
- if ( memspace_id < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Screate_simple() failed.";
- }
- }
-
- /* select in memory hyperslab */
- if ( pass1 ) {
-
- offset[0] = 0; /*offset of hyperslab in memory*/
- offset[1] = 0;
- a_size[0] = CHUNK_SIZE; /*size of hyperslab*/
- a_size[1] = CHUNK_SIZE;
- status = H5Sselect_hyperslab(memspace_id, H5S_SELECT_SET, offset, NULL,
- a_size, NULL);
-
- if ( status < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Sselect_hyperslab() failed.";
- }
- }
-
- if ( ( pass1 ) && ( report_progress ) ) {
-
- HDfprintf(stdout,"Done.\n");
- HDfflush(stdout);
- }
-
- /* initialize all datasets on a round robin basis */
- i = 0;
- progress_counter = 0;
-
- if ( ( pass1 ) && ( report_progress ) ) {
-
- HDfprintf(stdout, "Initializing datasets ");
- HDfflush(stdout);
- }
-
- while ( ( pass1 ) && ( i < DSET_SIZE ) )
- {
- j = 0;
- while ( ( pass1 ) && ( j < DSET_SIZE ) )
- {
- m = 0;
- while ( ( pass1 ) && ( m < NUM_DSETS ) )
- {
- /* initialize the slab */
- for ( k = 0; k < CHUNK_SIZE; k++ )
- {
- for ( l = 0; l < CHUNK_SIZE; l++ )
- {
- data_chunk[k][l] = (DSET_SIZE * DSET_SIZE * m) +
- (DSET_SIZE * (i + k)) + j + l;
- }
- }
-
- /* select on disk hyperslab */
- offset[0] = i; /*offset of hyperslab in file*/
- offset[1] = j;
- a_size[0] = CHUNK_SIZE; /*size of hyperslab*/
- a_size[1] = CHUNK_SIZE;
- status = H5Sselect_hyperslab(filespace_ids[m], H5S_SELECT_SET,
- offset, NULL, a_size, NULL);
-
- if ( status < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "disk H5Sselect_hyperslab() failed.";
- }
-
- /* write the chunk to file */
- status = H5Dwrite(dataset_ids[m], H5T_NATIVE_INT, memspace_id,
- filespace_ids[m], H5P_DEFAULT, data_chunk);
-
- if ( status < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Dwrite() failed.";
- }
- m++;
- }
- j += CHUNK_SIZE;
- }
-
- /* check the cache hit rate, and reset the counters.
- * Hit rate should be just about unity here, so we will just
- * get the data and (possibly) print it without checking it
- * beyond ensuring that it agrees with the cache internal
- * data structures.
- *
- * similarly, check cache size.
- */
-
- if ( ( pass1 ) && ( i % (DSET_SIZE / 4) == 0 ) ) {
-
- check_and_validate_cache_hit_rate(file_id, NULL, dump_hit_rate,
- min_accesses, min_hit_rate);
-
- check_and_validate_cache_size(file_id, NULL, NULL, NULL, NULL,
- dump_cache_size);
- }
-
- i += CHUNK_SIZE;
-
- if ( ( pass1 ) && ( report_progress ) ) {
-
- progress_counter += CHUNK_SIZE;
-
- if ( progress_counter >= DSET_SIZE / 20 ) {
-
- progress_counter = 0;
- HDfprintf(stdout, ".");
- HDfflush(stdout);
- }
- }
- }
-
- if ( ( pass1 ) && ( report_progress ) ) {
-
- HDfprintf(stdout," Done.\n"); /* initializing data sets */
- HDfflush(stdout);
- }
-
- /* set alternate config 2 */
- if ( pass1 ) {
-
- if ( H5Fset_mdc_config(file_id, &mod_config_2) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fset_mdc_config() failed 2.\n";
- }
- }
-
- /* verify that the cache is now set to the alternate config */
- validate_mdc_config(file_id, &mod_config_2, TRUE, 3);
-
- /* do random reads on all datasets */
-
- if ( ( pass1 ) && ( report_progress ) ) {
-
- HDfprintf(stdout, "Doing random reads on all datasets ");
- HDfflush(stdout);
- }
-
- n = 0;
- progress_counter = 0;
- while ( ( pass1 ) && ( n < NUM_RANDOM_ACCESSES ) )
- {
- m = rand() % NUM_DSETS;
- i = (rand() % (DSET_SIZE / CHUNK_SIZE)) * CHUNK_SIZE;
- j = (rand() % (DSET_SIZE / CHUNK_SIZE)) * CHUNK_SIZE;
-
- /* select on disk hyperslab */
- offset[0] = i; /*offset of hyperslab in file*/
- offset[1] = j;
- a_size[0] = CHUNK_SIZE; /*size of hyperslab*/
- a_size[1] = CHUNK_SIZE;
- status = H5Sselect_hyperslab(filespace_ids[m], H5S_SELECT_SET,
- offset, NULL, a_size, NULL);
-
- if ( status < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "disk hyperslab create failed.";
- }
-
- /* read the chunk from file */
- if ( pass1 ) {
-
- status = H5Dread(dataset_ids[m], H5T_NATIVE_INT, memspace_id,
- filespace_ids[m], H5P_DEFAULT, data_chunk);
-
- if ( status < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "disk hyperslab create failed.";
- }
- }
-
- /* validate the slab */
- if ( pass1 ) {
-
- valid_chunk = TRUE;
- for ( k = 0; k < CHUNK_SIZE; k++ )
- {
- for ( l = 0; l < CHUNK_SIZE; l++ )
- {
- if ( data_chunk[k][l]
- !=
- ((DSET_SIZE * DSET_SIZE * m) +
- (DSET_SIZE * (i + k)) + j + l) ) {
-
- valid_chunk = FALSE;
-#if 0 /* this will be useful from time to time -- lets keep it*/
- HDfprintf(stdout,
- "data_chunk[%0d][%0d] = %0d, expect %0d.\n",
- k, l, data_chunk[k][l],
- ((DSET_SIZE * DSET_SIZE * m) +
- (DSET_SIZE * (i + k)) + j + l));
- HDfprintf(stdout,
- "m = %d, i = %d, j = %d, k = %d, l = %d\n",
- m, i, j, k, l);
-#endif
- }
- }
- }
-
- if ( ! valid_chunk ) {
-#if 1
- pass1 = FALSE;
- failure_mssg1 = "slab validation failed.";
-#else /* as above */
- fprintf(stdout, "Chunk (%0d, %0d) in /dset%03d is invalid.\n",
- i, j, m);
-#endif
- }
- }
-
- if ( ( pass1 ) && ( n % (NUM_RANDOM_ACCESSES / 4) == 0 ) ) {
-
- check_and_validate_cache_hit_rate(file_id, NULL, dump_hit_rate,
- min_accesses, min_hit_rate);
-
- check_and_validate_cache_size(file_id, NULL, NULL, NULL, NULL,
- dump_cache_size);
- }
-
- n++;
-
- if ( ( pass1 ) && ( report_progress ) ) {
-
- progress_counter++;
-
- if ( progress_counter >= NUM_RANDOM_ACCESSES / 20 ) {
-
- progress_counter = 0;
- HDfprintf(stdout, ".");
- HDfflush(stdout);
- }
- }
- }
-
- if ( ( pass1 ) && ( report_progress ) ) {
-
- HDfprintf(stdout, " Done.\n"); /* random reads on all data sets */
- HDfflush(stdout);
- }
-
-
- /* close the file spaces we are done with */
- i = 1;
- while ( ( pass1 ) && ( i < NUM_DSETS ) )
- {
- if ( H5Sclose(filespace_ids[i]) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Sclose() failed.";
- }
- i++;
- }
-
-
- /* close the datasets we are done with */
- i = 1;
- while ( ( pass1 ) && ( i < NUM_DSETS ) )
- {
- if ( H5Dclose(dataset_ids[i]) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Dclose() failed.";
- }
- i++;
- }
-
- /* set alternate config 3 */
- if ( pass1 ) {
-
- if ( H5Fset_mdc_config(file_id, &mod_config_3) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fset_mdc_config() failed 3.\n";
- }
- }
-
- /* verify that the cache is now set to the alternate config */
- validate_mdc_config(file_id, &mod_config_3, TRUE, 4);
-
- /* do random reads on data set 0 only */
-
- if ( ( pass1 ) && ( report_progress ) ) {
-
- HDfprintf(stdout, "Doing random reads on dataset 0 ");
- HDfflush(stdout);
- }
-
- m = 0;
- n = 0;
- progress_counter = 0;
- while ( ( pass1 ) && ( n < NUM_RANDOM_ACCESSES ) )
- {
- i = (rand() % (DSET_SIZE / CHUNK_SIZE)) * CHUNK_SIZE;
- j = (rand() % (DSET_SIZE / CHUNK_SIZE)) * CHUNK_SIZE;
-
- /* select on disk hyperslab */
- offset[0] = i; /*offset of hyperslab in file*/
- offset[1] = j;
- a_size[0] = CHUNK_SIZE; /*size of hyperslab*/
- a_size[1] = CHUNK_SIZE;
- status = H5Sselect_hyperslab(filespace_ids[m], H5S_SELECT_SET,
- offset, NULL, a_size, NULL);
-
- if ( status < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "disk hyperslab create failed.";
- }
-
- /* read the chunk from file */
- if ( pass1 ) {
-
- status = H5Dread(dataset_ids[m], H5T_NATIVE_INT, memspace_id,
- filespace_ids[m], H5P_DEFAULT, data_chunk);
-
- if ( status < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "disk hyperslab create failed.";
- }
- }
-
- /* validate the slab */
- if ( pass1 ) {
-
- valid_chunk = TRUE;
- for ( k = 0; k < CHUNK_SIZE; k++ )
- {
- for ( l = 0; l < CHUNK_SIZE; l++ )
- {
- if ( data_chunk[k][l]
- !=
- ((DSET_SIZE * DSET_SIZE * m) +
- (DSET_SIZE * (i + k)) + j + l) ) {
-
- valid_chunk = FALSE;
- }
-#if 0 /* this will be useful from time to time -- lets keep it */
- HDfprintf(stdout, "data_chunk[%0d][%0d] = %0d, expect %0d.\n",
- k, l, data_chunk[k][l],
- ((DSET_SIZE * DSET_SIZE * m) +
- (DSET_SIZE * (i + k)) + j + l));
-#endif
- }
- }
-
- if ( ! valid_chunk ) {
-
- pass1 = FALSE;
- failure_mssg1 = "slab validation failed.";
-#if 0 /* as above */
- fprintf(stdout, "Chunk (%0d, %0d) in /dset%03d is invalid.\n",
- i, j, m);
-#endif
- }
- }
-
- if ( ( pass1 ) && ( n % (NUM_RANDOM_ACCESSES / 4) == 0 ) ) {
-
- check_and_validate_cache_hit_rate(file_id, NULL, dump_hit_rate,
- min_accesses, min_hit_rate);
-
- check_and_validate_cache_size(file_id, NULL, NULL, NULL, NULL,
- dump_cache_size);
- }
-
- n++;
-
- if ( ( pass1 ) && ( report_progress ) ) {
-
- progress_counter++;
-
- if ( progress_counter >= NUM_RANDOM_ACCESSES / 20 ) {
-
- progress_counter = 0;
- HDfprintf(stdout, ".");
- HDfflush(stdout);
- }
- }
- }
-
- if ( ( pass1 ) && ( report_progress ) ) {
-
- HDfprintf(stdout, " Done.\n"); /* random reads data set 0 */
- HDfflush(stdout);
- }
-
-
- if ( ( pass1 ) && ( report_progress ) ) {
-
- HDfprintf(stdout,"Shutting down ... ");
- HDfflush(stdout);
- }
-
-
- /* close file space 0 */
- if ( pass1 ) {
-
- if ( H5Sclose(filespace_ids[0]) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Sclose(filespace_ids[0]) failed.";
- }
- }
-
- /* close the data space */
- if ( pass1 ) {
-
- if ( H5Sclose(dataspace_id) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Sclose(dataspace) failed.";
- }
- }
-
- /* close the mem space */
- if ( pass1 ) {
-
- if ( H5Sclose(memspace_id) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Sclose(memspace_id) failed.";
- }
- }
-
- /* close dataset 0 */
- if ( pass1 ) {
-
- if ( H5Dclose(dataset_ids[0]) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Dclose(dataset_ids[0]) failed.";
- }
- }
-
- /* close the file and delete it */
- if ( pass1 ) {
-
- if ( H5Fclose(file_id) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fclose() failed.\n";
-
- }
- else if ( HDremove(filename) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "HDremove() failed.\n";
- }
- }
-
- if ( ( pass1 ) && ( report_progress ) ) {
-
- HDfprintf(stdout,"Done.\n"); /* shutting down */
- HDfflush(stdout);
- }
-
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 )
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
-
-} /* mdc_api_call_smoke_check() */
-
-
-/* The following array of invalid external MDC cache configurations is
- * used to test error rejection in the MDC related API calls.
- */
-
-#define NUM_INVALID_CONFIGS 41
-
-H5AC1_cache_config_t invalid_configs[NUM_INVALID_CONFIGS] =
-{
- {
- /* 0 -- bad version */
- /* int version = */ -1,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 1 -- bad rpt_fcn_enabled */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ (hbool_t)-1,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 2 -- bad open_trace_file */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ (hbool_t)-1,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 3 -- bad close_trace_file */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ (hbool_t)-1,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 4 -- open_trace_file == TRUE and empty trace_file_name */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ TRUE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 5 -- bad set_initial_size */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ 2,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 6 -- max_size too big */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ H5C1__MAX_MAX_CACHE_SIZE + 1,
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 7 -- min_size too small */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ H5C1__MIN_MAX_CACHE_SIZE - 1,
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 8 -- min_size > max_size */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ FALSE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ (16 * 1024 * 1024 + 1),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 9 -- initial size out of range (too big) */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (16 * 1024 * 1024 + 1),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 10 -- initial_size out of range (too small) */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024 - 1),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 11 -- min_clean_fraction too big */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 1.000001,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 12 -- min_clean_fraction too small */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ -0.00000001,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 13 -- epoch_length too small */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ H5C1__MIN_AR_EPOCH_LENGTH - 1,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 14 -- epoch_length too big */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ H5C1__MAX_AR_EPOCH_LENGTH + 1,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 15 -- invalid incr_mode */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ -1,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 16 -- lower_hr_threshold too small */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ -0.000001,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 17 -- lower_hr_threshold too big */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 1.00000001,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 18 -- increment too small */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 0.999999999999,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 19 -- bad apply_max_increment */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ (hbool_t)-1,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 20 -- invalid flash_incr_mode */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ -1,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 21 -- flash_multiple too small */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__add_space,
- /* double flash_multiple = */ 0.09,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 22 -- flash_multiple too big */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__add_space,
- /* double flash_multiple = */ 10.001,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 23 -- flash_threshold too small */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__add_space,
- /* double flash_multiple = */ 1.0,
- /* double flash_threshold = */ 0.099,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 24 -- flash_threshold too big */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__add_space,
- /* double flash_multiple = */ 1.0,
- /* double flash_threshold = */ 1.001,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 25 -- bad decr_mode */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ -1,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 26 -- upper_hr_threshold too big */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__threshold,
- /* double upper_hr_threshold = */ 1.00001,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 27 -- decrement too small */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ -0.0000000001,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 28 -- decrement too big */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 1.0000000001,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 29 -- epochs_before_eviction too small */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 0,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 30 -- epochs_before_eviction too big */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ H5C1__MAX_EPOCH_MARKERS + 1,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 31 -- invalid apply_empty_reserve */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ 2,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 32 -- empty_reserve too small */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ -0.0000000001,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 33 -- empty_reserve too big */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 1.00000000001,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 34 -- upper_hr_threshold too small */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ -0.000000001,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 35 -- upper_hr_threshold too big */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 1.00000001,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 36 -- upper_hr_threshold <= lower_hr_threshold */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.9,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 37 -- dirty_bytes_threshold too small */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.999,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (H5C1__MIN_MAX_CACHE_SIZE / 2) - 1
- },
- {
- /* 38 -- dirty_bytes_threshold too big */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ TRUE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out_with_threshold,
- /* double upper_hr_threshold = */ 0.9,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (H5C1__MAX_MAX_CACHE_SIZE / 4) + 1
- },
- {
- /* 39 -- attempt to disable evictions when auto incr enabled */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ FALSE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__off,
- /* double upper_hr_threshold = */ 0.9,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- },
- {
- /* 40 -- attempt to disable evictions when auto decr enabled */
- /* int version = */ H5C1__CURR_AUTO_SIZE_CTL_VER,
- /* hbool_t rpt_fcn_enabled = */ FALSE,
- /* hbool_t open_trace_file = */ FALSE,
- /* hbool_t close_trace_file = */ FALSE,
- /* char trace_file_name[] = */ "",
- /* hbool_t evictions_enabled = */ FALSE,
- /* hbool_t set_initial_size = */ TRUE,
- /* size_t initial_size = */ (1 * 1024 * 1024),
- /* double min_clean_fraction = */ 0.25,
- /* size_t max_size = */ (16 * 1024 * 1024),
- /* size_t min_size = */ ( 1 * 1024 * 1024),
- /* long int epoch_length = */ 50000,
- /* enum H5C1_cache_incr_mode incr_mode = */ H5C1_incr__threshold,
- /* double lower_hr_threshold = */ 0.9,
- /* double increment = */ 2.0,
- /* hbool_t apply_max_increment = */ TRUE,
- /* size_t max_increment = */ (4 * 1024 * 1024),
- /* enum H5C1_cache_flash_incr_mode */
- /* flash_incr_mode = */ H5C1_flash_incr__off,
- /* double flash_multiple = */ 2.0,
- /* double flash_threshold = */ 0.5,
- /* enum H5C1_cache_decr_mode decr_mode = */ H5C1_decr__age_out,
- /* double upper_hr_threshold = */ 0.9,
- /* double decrement = */ 0.9,
- /* hbool_t apply_max_decrement = */ TRUE,
- /* size_t max_decrement = */ (1 * 1024 * 1024),
- /* int epochs_before_eviction = */ 3,
- /* hbool_t apply_empty_reserve = */ TRUE,
- /* double empty_reserve = */ 0.1,
- /* int dirty_bytes_threshold = */ (256 * 1024)
- }
-};
-
-
-/*-------------------------------------------------------------------------
- * Function: check_fapl_mdc_api_errs()
- *
- * Purpose: Verify that the FAPL related MDC API calls reject input
- * errors gracefully.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/19/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_fapl_mdc_api_errs(void)
-{
- const char * fcn_name = "check_fapl_mdc_api_errs()";
- static char msg[128];
- int i;
- herr_t result;
- hid_t fapl_id = -1;
- H5AC1_cache_config_t default_config = H5AC1__DEFAULT_CACHE_CONFIG;
- H5AC1_cache_config_t scratch;
-
- TESTING("MDC/FAPL related API input errors");
-
- pass1 = TRUE;
-
-
- /* first test H5Pget_mdc_config().
- */
-
- scratch.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- if ( pass1 ) {
-
- H5E_BEGIN_TRY { result = H5Pget_mdc_config(-1, &scratch); } H5E_END_TRY;
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pget_mdc_config() accepted invalid plist_id.";
- }
- }
-
- /* Create a FAPL for test purposes, and verify that it contains the
- * default MDC configuration.
- */
-
- if ( pass1 ) {
-
- fapl_id = H5Pcreate(H5P_FILE_ACCESS);
-
- if ( fapl_id < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pcreate(H5P_FILE_ACCESS) failed.\n";
- }
- }
-
- scratch.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- if ( ( pass1 ) &&
- ( ( H5Pget_mdc_config(fapl_id, &scratch) < 0 ) ||
- ( !CACHE_CONFIGS_EQUAL(default_config, scratch, TRUE, TRUE) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "New FAPL has unexpected metadata cache config?!?!?.\n";
- }
-
- if ( pass1 ) {
-
- H5E_BEGIN_TRY {
- result = H5Pget_mdc_config(fapl_id, NULL);
- } H5E_END_TRY;
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pget_mdc_config() accepted NULL config_ptr.";
- }
- }
-
- /* one last test for H5Pget_mdc_config() */
-
- scratch.version = -1; /* a convenient, invalid value */
- if ( pass1 ) {
-
- H5E_BEGIN_TRY {
- result = H5Pget_mdc_config(fapl_id, &scratch);
- } H5E_END_TRY;
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pget_mdc_config() accepted bad config version.";
- }
- }
-
-
- /* now test H5Pset_mdc_config()
- */
-
- scratch.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- if ( pass1 ) {
-
- H5E_BEGIN_TRY {
- result = H5Pset_mdc_config(-1, &default_config);
- } H5E_END_TRY;
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pset_mdc_config() accepted bad invalid plist_id.";
- }
- }
-
- if ( pass1 ) {
-
- H5E_BEGIN_TRY {
- result = H5Pset_mdc_config(fapl_id, NULL);
- } H5E_END_TRY;
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Pset_mdc_config() accepted NULL config_ptr.";
- }
- }
-
- i = 0;
- while ( ( pass1 ) && ( i < NUM_INVALID_CONFIGS ) )
- {
- H5E_BEGIN_TRY {
- result = H5Pset_mdc_config(fapl_id, &(invalid_configs[i]));
- } H5E_END_TRY;
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5Pset_mdc_config() accepted invalid_configs[%d].", i);
- failure_mssg1 = msg;
- }
- i++;
- }
-
- /* verify that none of the above calls to H5Pset_mdc_config() changed
- * the configuration in the FAPL.
- */
- scratch.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- if ( ( pass1 ) &&
- ( ( H5Pget_mdc_config(fapl_id, &scratch) < 0 ) ||
- ( !CACHE_CONFIGS_EQUAL(default_config, scratch, TRUE, TRUE) ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "FAPL metadata cache config changed???.\n";
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 )
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
-
-} /* check_fapl_mdc_api_errs() */
-
-
-/*-------------------------------------------------------------------------
- * Function: check_file_mdc_api_errs()
- *
- * Purpose: Verify that the file related MDC API calls reject input
- * errors gracefully.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/19/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-static void
-check_file_mdc_api_errs(void)
-{
- const char * fcn_name = "check_file_mdc_api_errs()";
- char filename[512];
- static char msg[128];
- hbool_t show_progress = FALSE;
- int i;
- herr_t result;
- hid_t file_id = -1;
- size_t max_size;
- size_t min_clean_size;
- size_t cur_size;
- int cur_num_entries;
- double hit_rate;
- H5AC1_cache_config_t default_config = H5AC1__DEFAULT_CACHE_CONFIG;
- H5AC1_cache_config_t scratch;
-
- TESTING("MDC/FILE related API input errors");
-
- pass1 = TRUE;
-
- /* Create a file for test purposes, and veify that its metadata cache
- * set to the default MDC configuration.
- */
-
- /* setup the file name */
- if ( pass1 ) {
-
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: calling h5_fixname().\n", fcn_name);
- }
-
- if ( h5_fixname(FILENAME1[0], H5P_DEFAULT, filename, sizeof(filename))
- == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "h5_fixname() failed.\n";
- }
- }
-
- if ( pass1 ) {
-
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: calling H5Fcreate().\n", fcn_name);
- }
-
- file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
-
- if ( file_id < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fcreate() failed.\n";
- }
- }
-
- validate_mdc_config(file_id, &default_config, TRUE, 1);
-
-
- /* test H5Fget_mdc_config(). */
-
- scratch.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- if ( pass1 ) {
-
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: testing H5Fget_mdc_config() 1.\n", fcn_name);
- }
-
- H5E_BEGIN_TRY {
- result = H5Fget_mdc_config(-1, &scratch);
- } H5E_END_TRY;
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fget_mdc_config() accepted invalid file_id.";
- }
- }
-
- if ( pass1 ) {
-
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: testing H5Fget_mdc_config() 2.\n", fcn_name);
- }
-
- H5E_BEGIN_TRY {
- result = H5Fget_mdc_config(file_id, NULL);
- } H5E_END_TRY;
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fget_mdc_config() accepted NULL config_ptr.";
- }
- }
-
- scratch.version = -1; /* a convenient, invalid value */
- if ( pass1 ) {
-
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: testing H5Fget_mdc_config() 3.\n", fcn_name);
- }
-
- H5E_BEGIN_TRY {
- result = H5Fget_mdc_config(file_id, &scratch);
- } H5E_END_TRY;
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fget_mdc_config() accepted bad config version.";
- }
- }
-
-
- /* test H5Fset_mdc_config() */
-
- scratch.version = H5C1__CURR_AUTO_SIZE_CTL_VER;
- if ( pass1 ) {
-
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: testing H5Fset_mdc_config() 1.\n", fcn_name);
- }
-
- H5E_BEGIN_TRY {
- result = H5Fset_mdc_config(-1, &default_config);
- } H5E_END_TRY;
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fset_mdc_config() accepted bad invalid file_id.";
- }
- }
-
- if ( pass1 ) {
-
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: testing H5Fset_mdc_config() 2.\n", fcn_name);
- }
-
- H5E_BEGIN_TRY {
- result = H5Fset_mdc_config(file_id, NULL);
- } H5E_END_TRY;
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fset_mdc_config() accepted NULL config_ptr.";
- }
- }
-
- i = 0;
- while ( ( pass1 ) && ( i < NUM_INVALID_CONFIGS ) )
- {
- if ( show_progress ) {
-
- HDfprintf(stdout,
- "%s: testing H5Fset_mdc_config() with invalid config %d.\n",
- fcn_name, i);
- }
-
- H5E_BEGIN_TRY {
- result = H5Fset_mdc_config(file_id, &(invalid_configs[i]));
- } H5E_END_TRY;
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- HDsnprintf(msg, (size_t)128,
- "H5Fset_mdc_config() accepted invalid_configs[%d].", i);
- failure_mssg1 = msg;
- }
- i++;
- }
-
- /* verify that none of the above calls to H5Fset_mdc_config() changed
- * the configuration in the FAPL.
- */
- validate_mdc_config(file_id, &default_config, TRUE, 2);
-
-
- /* test H5Fget_mdc_hit_rate() */
- if ( pass1 ) {
-
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: testing H5Fget_mdc_hit_rate() 1.\n",
- fcn_name);
- }
-
- H5E_BEGIN_TRY {
- result = H5Fget_mdc_hit_rate(-1, &hit_rate);
- } H5E_END_TRY;
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fget_mdc_hit_rate() accepted bad file_id.";
- }
- }
-
- if ( pass1 ) {
-
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: testing H5Fget_mdc_hit_rate() 2.\n",
- fcn_name);
- }
-
- H5E_BEGIN_TRY {
- result = H5Fget_mdc_hit_rate(file_id, NULL);
- } H5E_END_TRY;
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fget_mdc_hit_rate() accepted NULL hit_rate_ptr.";
- }
- }
-
-
- /* test H5Freset_mdc_hit_rate_stats() */
- if ( pass1 ) {
-
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: testing H5Freset_mdc_hit_rate_stats().\n",
- fcn_name);
- }
-
- H5E_BEGIN_TRY {
- result = H5Freset_mdc_hit_rate_stats(-1);
- } H5E_END_TRY;
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "H5Freset_mdc_hit_rate_stats() accepted bad file_id.";
- }
- }
-
-
- /* test H5Fget_mdc_size() */
- if ( pass1 ) {
-
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: testing H5Fget_mdc_size() 1.\n", fcn_name);
- }
-
- H5E_BEGIN_TRY {
- result = H5Fget_mdc_size(-1, &max_size, &min_clean_size,
- &cur_size, &cur_num_entries);
- } H5E_END_TRY;
-
- if ( result >= 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fget_mdc_size() accepted bad file_id.";
- }
- }
-
- if ( pass1 ) {
-
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: testing H5Fget_mdc_size() 2.\n", fcn_name);
- }
-
- if ( ( H5Fget_mdc_size(file_id, &max_size, NULL, NULL, NULL) < 0 ) ||
- ( H5Fget_mdc_size(file_id, NULL, &min_clean_size,
- NULL, NULL) < 0 ) ||
- ( H5Fget_mdc_size(file_id, NULL, NULL, &cur_size, NULL) < 0 ) ||
- ( H5Fget_mdc_size(file_id, NULL, NULL, NULL,
- &cur_num_entries) < 0 ) ||
- ( H5Fget_mdc_size(file_id, NULL, NULL, NULL, NULL) < 0 ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fget_mdc_size() failed to handle NULL params.";
- }
- }
-
-
- /* close the file and delete it */
- if ( pass1 ) {
-
- if ( show_progress ) {
-
- HDfprintf(stdout, "%s: cleaning up from tests.\n", fcn_name);
- }
-
- if ( H5Fclose(file_id) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5Fclose() failed.\n";
-
- } else if ( HDremove(filename) < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "HDremove() failed.\n";
- }
- }
-
- if ( pass1 ) { PASSED(); } else { H5_FAILED(); }
-
- if ( ! pass1 )
- HDfprintf(stdout, "%s: failure_mssg1 = \"%s\".\n",
- fcn_name, failure_mssg1);
-
-} /* check_file_mdc_api_errs() */
-
-
-/*-------------------------------------------------------------------------
- * Function: main
- *
- * Purpose: Run tests on the cache code contained in H5C.c
- *
- * Return: Success:
- *
- * Failure:
- *
- * Programmer: John Mainzer
- * 6/24/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-int
-main(void)
-{
- int express_test1;
-
- H5open();
-
- express_test1 = GetTestExpress();
-
-#if 1
- check_fapl_mdc_api_calls();
-#endif
-#if 1
- check_file_mdc_api_calls();
-#endif
-#if 1
- mdc_api_call_smoke_check(express_test1);
-#endif
-#if 1
- check_fapl_mdc_api_errs();
-#endif
-#if 1
- check_file_mdc_api_errs();
-#endif
-
- return(0);
-
-} /* main() */
diff --git a/test/cache1_common.c b/test/cache1_common.c
deleted file mode 100644
index 584c9c1..0000000
--- a/test/cache1_common.c
+++ /dev/null
@@ -1,4613 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* Programmer: John Mainzer
- * 10/27/05
- *
- * This file contains common code for tests of the cache
- * implemented in H5C.c
- */
-#include "h5test.h"
-#include "H5Iprivate.h"
-#include "H5AC1private.h"
-#include "cache1_common.h"
-
-
-/* global variable declarations: */
-
-hbool_t write_permitted1 = TRUE;
-hbool_t pass1 = TRUE; /* set to false on error */
-hbool_t skip_long_tests1 = TRUE;
-hbool_t run_full_test1 = TRUE;
-const char *failure_mssg1 = NULL;
-
-test_entry_t pico_entries1[NUM_PICO_ENTRIES];
-test_entry_t nano_entries1[NUM_NANO_ENTRIES];
-test_entry_t micro_entries1[NUM_MICRO_ENTRIES];
-test_entry_t tiny_entries1[NUM_TINY_ENTRIES];
-test_entry_t small_entries1[NUM_SMALL_ENTRIES];
-test_entry_t medium_entries1[NUM_MEDIUM_ENTRIES];
-test_entry_t large_entries1[NUM_LARGE_ENTRIES];
-test_entry_t huge_entries1[NUM_HUGE_ENTRIES];
-test_entry_t monster_entries1[NUM_MONSTER_ENTRIES];
-test_entry_t variable_entries1[NUM_VARIABLE_ENTRIES];
-
-test_entry_t * entries1[NUMBER_OF_ENTRY_TYPES] =
-{
- pico_entries1,
- nano_entries1,
- micro_entries1,
- tiny_entries1,
- small_entries1,
- medium_entries1,
- large_entries1,
- huge_entries1,
- monster_entries1,
- variable_entries1
-};
-
-const int32_t max_indices1[NUMBER_OF_ENTRY_TYPES] =
-{
- NUM_PICO_ENTRIES - 1,
- NUM_NANO_ENTRIES - 1,
- NUM_MICRO_ENTRIES - 1,
- NUM_TINY_ENTRIES - 1,
- NUM_SMALL_ENTRIES - 1,
- NUM_MEDIUM_ENTRIES - 1,
- NUM_LARGE_ENTRIES - 1,
- NUM_HUGE_ENTRIES - 1,
- NUM_MONSTER_ENTRIES - 1,
- NUM_VARIABLE_ENTRIES - 1
-};
-
-const size_t entry_sizes1[NUMBER_OF_ENTRY_TYPES] =
-{
- PICO_ENTRY_SIZE,
- NANO_ENTRY_SIZE,
- MICRO_ENTRY_SIZE,
- TINY_ENTRY_SIZE,
- SMALL_ENTRY_SIZE,
- MEDIUM_ENTRY_SIZE,
- LARGE_ENTRY_SIZE,
- HUGE_ENTRY_SIZE,
- MONSTER_ENTRY_SIZE,
- VARIABLE_ENTRY_SIZE
-};
-
-const haddr_t base_addrs1[NUMBER_OF_ENTRY_TYPES] =
-{
- PICO_BASE_ADDR,
- NANO_BASE_ADDR,
- MICRO_BASE_ADDR,
- TINY_BASE_ADDR,
- SMALL_BASE_ADDR,
- MEDIUM_BASE_ADDR,
- LARGE_BASE_ADDR,
- HUGE_BASE_ADDR,
- MONSTER_BASE_ADDR,
- VARIABLE_BASE_ADDR
-};
-
-const haddr_t alt_base_addrs1[NUMBER_OF_ENTRY_TYPES] =
-{
- PICO_ALT_BASE_ADDR,
- NANO_ALT_BASE_ADDR,
- MICRO_ALT_BASE_ADDR,
- TINY_ALT_BASE_ADDR,
- SMALL_ALT_BASE_ADDR,
- MEDIUM_ALT_BASE_ADDR,
- LARGE_ALT_BASE_ADDR,
- HUGE_ALT_BASE_ADDR,
- MONSTER_ALT_BASE_ADDR,
- VARIABLE_ALT_BASE_ADDR
-};
-
-const char * entry_type_names1[NUMBER_OF_ENTRY_TYPES] =
-{
- "pico entries -- 1 B",
- "nano entries -- 4 B",
- "micro entries -- 16 B",
- "tiny entries -- 64 B",
- "small entries -- 256 B",
- "medium entries -- 1 KB",
- "large entries -- 4 KB",
- "huge entries -- 16 KB",
- "monster entries -- 64 KB",
- "variable entries -- 1B - 10KB"
-};
-
-
-/* callback table declaration */
-
-const H5C1_class_t types1[NUMBER_OF_ENTRY_TYPES] =
-{
- {
- PICO_ENTRY_TYPE,
- (H5C1_load_func_t)pico_load,
- (H5C1_flush_func_t)pico_flush,
- (H5C1_dest_func_t)pico_dest,
- (H5C1_clear_func_t)pico_clear,
- (H5C1_size_func_t)pico_size
- },
- {
- NANO_ENTRY_TYPE,
- (H5C1_load_func_t)nano_load,
- (H5C1_flush_func_t)nano_flush,
- (H5C1_dest_func_t)nano_dest,
- (H5C1_clear_func_t)nano_clear,
- (H5C1_size_func_t)nano_size
- },
- {
- MICRO_ENTRY_TYPE,
- (H5C1_load_func_t)micro_load,
- (H5C1_flush_func_t)micro_flush,
- (H5C1_dest_func_t)micro_dest,
- (H5C1_clear_func_t)micro_clear,
- (H5C1_size_func_t)micro_size
- },
- {
- TINY_ENTRY_TYPE,
- (H5C1_load_func_t)tiny_load,
- (H5C1_flush_func_t)tiny_flush,
- (H5C1_dest_func_t)tiny_dest,
- (H5C1_clear_func_t)tiny_clear,
- (H5C1_size_func_t)tiny_size
- },
- {
- SMALL_ENTRY_TYPE,
- (H5C1_load_func_t)small_load,
- (H5C1_flush_func_t)small_flush,
- (H5C1_dest_func_t)small_dest,
- (H5C1_clear_func_t)small_clear,
- (H5C1_size_func_t)small_size
- },
- {
- MEDIUM_ENTRY_TYPE,
- (H5C1_load_func_t)medium_load,
- (H5C1_flush_func_t)medium_flush,
- (H5C1_dest_func_t)medium_dest,
- (H5C1_clear_func_t)medium_clear,
- (H5C1_size_func_t)medium_size
- },
- {
- LARGE_ENTRY_TYPE,
- (H5C1_load_func_t)large_load,
- (H5C1_flush_func_t)large_flush,
- (H5C1_dest_func_t)large_dest,
- (H5C1_clear_func_t)large_clear,
- (H5C1_size_func_t)large_size
- },
- {
- HUGE_ENTRY_TYPE,
- (H5C1_load_func_t)huge_load,
- (H5C1_flush_func_t)huge_flush,
- (H5C1_dest_func_t)huge_dest,
- (H5C1_clear_func_t)huge_clear,
- (H5C1_size_func_t)huge_size
- },
- {
- MONSTER_ENTRY_TYPE,
- (H5C1_load_func_t)monster_load,
- (H5C1_flush_func_t)monster_flush,
- (H5C1_dest_func_t)monster_dest,
- (H5C1_clear_func_t)monster_clear,
- (H5C1_size_func_t)monster_size
- },
- {
- VARIABLE_ENTRY_TYPE,
- (H5C1_load_func_t)variable_load,
- (H5C1_flush_func_t)variable_flush,
- (H5C1_dest_func_t)variable_dest,
- (H5C1_clear_func_t)variable_clear,
- (H5C1_size_func_t)variable_size
- }
-};
-
-static herr_t clear(H5F_t * f, void * thing, hbool_t dest);
-static herr_t destroy(H5F_t * f, void * thing);
-static herr_t flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
- haddr_t addr, void *thing, unsigned UNUSED * flags_ptr);
-static void * load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2);
-static herr_t size(H5F_t * f, void * thing, size_t * size_ptr);
-
-
-
-/* address translation funtions: */
-
-/*-------------------------------------------------------------------------
- * Function: addr_to_type_and_index1
- *
- * Purpose: Given an address, compute the type and index of the
- * associated entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/10/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-void
-addr_to_type_and_index1(haddr_t addr,
- int32_t * type_ptr,
- int32_t * index_ptr)
-{
- int i;
- int32_t type;
- int32_t idx;
-
- HDassert( type_ptr );
- HDassert( index_ptr );
-
- /* we only have a small number of entry types1, so just do a
- * linear search. If NUMBER_OF_ENTRY_TYPES grows, we may want
- * to do a binary search instead.
- */
- i = 1;
- if ( addr >= PICO_ALT_BASE_ADDR ) {
-
- while ( ( i < NUMBER_OF_ENTRY_TYPES ) &&
- ( addr >= alt_base_addrs1[i] ) )
- {
- i++;
- }
-
- } else {
-
- while ( ( i < NUMBER_OF_ENTRY_TYPES ) &&
- ( addr >= base_addrs1[i] ) )
- {
- i++;
- }
- }
-
- type = i - 1;
-
- HDassert( ( type >= 0 ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
-
- if ( addr >= PICO_ALT_BASE_ADDR ) {
-
- idx = (int32_t)((addr - alt_base_addrs1[type]) / entry_sizes1[type]);
- HDassert( ( idx >= 0 ) && ( idx <= max_indices1[type] ) );
- HDassert( !((entries1[type])[idx].at_main_addr) );
- HDassert( addr == (entries1[type])[idx].alt_addr );
-
- } else {
-
- idx = (int32_t)((addr - base_addrs1[type]) / entry_sizes1[type]);
- HDassert( ( idx >= 0 ) && ( idx <= max_indices1[type] ) );
- HDassert( (entries1[type])[idx].at_main_addr );
- HDassert( addr == (entries1[type])[idx].main_addr );
- }
-
- HDassert( addr == (entries1[type])[idx].addr );
-
- *type_ptr = type;
- *index_ptr = idx;
-
- return;
-
-} /* addr_to_type_and_index1() */
-
-
-#if 0 /* This function has never been used, but we may want it
- * some time. Lets keep it for now.
- */
-/*-------------------------------------------------------------------------
- * Function: type_and_index_to_addr1
- *
- * Purpose: Given a type and index of an entry, compute the associated
- * addr and return that value.
- *
- * Return: computed addr
- *
- * Programmer: John Mainzer
- * 6/10/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-haddr_t
-type_and_index_to_addr1(int32_t type,
- int32_t idx)
-{
- haddr_t addr;
-
- HDassert( ( type >= 0 ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( idx >= 0 ) && ( idx <= max_indices1[type] ) );
-
- addr = base_addrs1[type] + (((haddr_t)idx) * entry_sizes1[type]);
-
- HDassert( addr == (entries1[type])[idx].addr );
-
- if ( (entries1[type])[idx].at_main_addr ) {
-
- HDassert( addr == (entries1[type])[idx].main_addr );
-
- } else {
-
- HDassert( addr == (entries1[type])[idx].alt_addr );
- }
-
- return(addr);
-
-} /* type_and_index_to_addr1() */
-
-#endif
-
-
-/* Call back functions: */
-
-/*-------------------------------------------------------------------------
- *
- * Function: check_if_write_permitted1
- *
- * Purpose: Determine if a write is permitted under the current
- * circumstances, and set *write_permitted1_ptr accordingly.
- * As a general rule it is, but when we are running in parallel
- * mode with collective I/O, we must ensure that a read cannot
- * cause a write.
- *
- * In the event of failure, the value of *write_permitted1_ptr
- * is undefined.
- *
- * Return: Non-negative on success/Negative on failure.
- *
- * Programmer: John Mainzer, 5/15/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-check_write_permitted1(const H5F_t UNUSED * f,
- hid_t UNUSED dxpl_id,
- hbool_t * write_permitted1_ptr)
-{
-
- HDassert( write_permitted1_ptr );
- *write_permitted1_ptr = write_permitted1;
-
- return(SUCCEED);
-
-} /* check_write_permitted1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: clear & friends
- *
- * Purpose: clear the entry. The helper functions verify that the
- * correct version of clear is being called, and then call
- * clear proper.
- *
- * Return: SUCCEED
- *
- * Programmer: John Mainzer
- * 6/10/04
- *
- * Modifications:
- *
- * Added variable_clear. -- JRM 8/30/06
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-clear(H5F_t * f,
- void * thing,
- hbool_t dest)
-{
- test_entry_t * entry_ptr;
- test_entry_t * base_addr;
-
- HDassert( thing );
-
- entry_ptr = (test_entry_t *)thing;
- base_addr = entries1[entry_ptr->type];
-
- HDassert( entry_ptr->index >= 0 );
- HDassert( entry_ptr->index <= max_indices1[entry_ptr->type] );
- HDassert( entry_ptr == &(base_addr[entry_ptr->index]) );
- HDassert( entry_ptr == entry_ptr->self );
- HDassert( entry_ptr->header.addr == entry_ptr->addr );
- HDassert( entry_ptr->header.size == entry_ptr->size );
- HDassert( ( entry_ptr->type == VARIABLE_ENTRY_TYPE ) ||
- ( entry_ptr->size == entry_sizes1[entry_ptr->type] ) );
-
- entry_ptr->header.is_dirty = FALSE;
- entry_ptr->is_dirty = FALSE;
-
- entry_ptr->cleared = TRUE;
-
- if ( dest ) {
-
- destroy(f, thing);
-
- }
-
- return(SUCCEED);
-
-} /* clear() */
-
-herr_t
-pico_clear(H5F_t * f, void * thing, hbool_t dest)
-{
- HDassert ( ((test_entry_t *)thing)->type == PICO_ENTRY_TYPE );
- return(clear(f, thing, dest));
-}
-
-herr_t
-nano_clear(H5F_t * f, void * thing, hbool_t dest)
-{
- HDassert ( ((test_entry_t *)thing)->type == NANO_ENTRY_TYPE );
- return(clear(f, thing, dest));
-}
-
-herr_t
-micro_clear(H5F_t * f, void * thing, hbool_t dest)
-{
- HDassert ( ((test_entry_t *)thing)->type == MICRO_ENTRY_TYPE );
- return(clear(f, thing, dest));
-}
-
-herr_t
-tiny_clear(H5F_t * f, void * thing, hbool_t dest)
-{
- HDassert ( ((test_entry_t *)thing)->type == TINY_ENTRY_TYPE );
- return(clear(f, thing, dest));
-}
-
-herr_t
-small_clear(H5F_t * f, void * thing, hbool_t dest)
-{
- HDassert ( ((test_entry_t *)thing)->type == SMALL_ENTRY_TYPE );
- return(clear(f, thing, dest));
-}
-
-herr_t
-medium_clear(H5F_t * f, void * thing, hbool_t dest)
-{
- HDassert ( ((test_entry_t *)thing)->type == MEDIUM_ENTRY_TYPE );
- return(clear(f, thing, dest));
-}
-
-herr_t
-large_clear(H5F_t * f, void * thing, hbool_t dest)
-{
- HDassert ( ((test_entry_t *)thing)->type == LARGE_ENTRY_TYPE );
- return(clear(f, thing, dest));
-}
-
-herr_t
-huge_clear(H5F_t * f, void * thing, hbool_t dest)
-{
- HDassert ( ((test_entry_t *)thing)->type == HUGE_ENTRY_TYPE );
- return(clear(f, thing, dest));
-}
-
-herr_t
-monster_clear(H5F_t * f, void * thing, hbool_t dest)
-{
- HDassert ( ((test_entry_t *)thing)->type == MONSTER_ENTRY_TYPE );
- return(clear(f, thing, dest));
-}
-
-herr_t
-variable_clear(H5F_t * f, void * thing, hbool_t dest)
-{
- HDassert ( ((test_entry_t *)thing)->type == VARIABLE_ENTRY_TYPE );
- return(clear(f, thing, dest));
-}
-
-
-
-/*-------------------------------------------------------------------------
- * Function: dest & friends
- *
- * Purpose: Destroy the entry. The helper functions verify that the
- * correct version of dest is being called, and then call
- * dest proper.
- *
- * Return: SUCCEED
- *
- * Programmer: John Mainzer
- * 6/10/04
- *
- * Modifications:
- *
- * JRM -- 4/4/06
- * Added code to decrement the pinning_ref_count s of entries
- * pinned by the target entry, and to unpin those entries
- * if the reference count drops to zero.
- *
- * JRM -- 8/30/06
- * Added variable_destroy().
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-destroy(H5F_t UNUSED * f,
- void * thing)
-{
- int i;
- test_entry_t * entry_ptr;
- test_entry_t * base_addr;
- test_entry_t * pinned_entry_ptr;
- test_entry_t * pinned_base_addr;
-
- HDassert( thing );
-
- entry_ptr = (test_entry_t *)thing;
- base_addr = entries1[entry_ptr->type];
-
- HDassert( entry_ptr->index >= 0 );
- HDassert( entry_ptr->index <= max_indices1[entry_ptr->type] );
- HDassert( entry_ptr == &(base_addr[entry_ptr->index]) );
- HDassert( entry_ptr == entry_ptr->self );
- HDassert( entry_ptr->cache_ptr != NULL );
- HDassert( entry_ptr->cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( ( entry_ptr->header.destroy_in_progress ) ||
- ( entry_ptr->header.addr == entry_ptr->addr ) );
- HDassert( entry_ptr->header.size == entry_ptr->size );
- HDassert( ( entry_ptr->type == VARIABLE_ENTRY_TYPE ) ||
- ( entry_ptr->size == entry_sizes1[entry_ptr->type] ) );
-
- HDassert( !(entry_ptr->is_dirty) );
- HDassert( !(entry_ptr->header.is_dirty) );
-
- if ( entry_ptr->num_pins > 0 ) {
-
- for ( i = 0; i < entry_ptr->num_pins; i++ )
- {
- pinned_base_addr = entries1[entry_ptr->pin_type[i]];
- pinned_entry_ptr = &(pinned_base_addr[entry_ptr->pin_idx[i]]);
-
- HDassert( 0 <= pinned_entry_ptr->type );
- HDassert( pinned_entry_ptr->type < NUMBER_OF_ENTRY_TYPES );
- HDassert( pinned_entry_ptr->type == entry_ptr->pin_type[i] );
- HDassert( pinned_entry_ptr->index >= 0 );
- HDassert( pinned_entry_ptr->index <=
- max_indices1[pinned_entry_ptr->type] );
- HDassert( pinned_entry_ptr->index == entry_ptr->pin_idx[i] );
- HDassert( pinned_entry_ptr == pinned_entry_ptr->self );
- HDassert( pinned_entry_ptr->header.is_pinned );
- HDassert( pinned_entry_ptr->is_pinned );
- HDassert( pinned_entry_ptr->pinning_ref_count > 0 );
-
- pinned_entry_ptr->pinning_ref_count--;
-
- if ( pinned_entry_ptr->pinning_ref_count <= 0 ) {
-
- unpin_entry1(pinned_entry_ptr->cache_ptr,
- pinned_entry_ptr->type,
- pinned_entry_ptr->index);
- }
-
- entry_ptr->pin_type[i] = -1;
- entry_ptr->pin_idx[i] = -1;
- }
- entry_ptr->num_pins = 0;
- }
-
- entry_ptr->destroyed = TRUE;
- entry_ptr->cache_ptr = NULL;
-
- return(SUCCEED);
-
-} /* dest() */
-
-herr_t
-pico_dest(H5F_t * f, void * thing)
-{
- HDassert ( ((test_entry_t *)thing)->type == PICO_ENTRY_TYPE );
- return(destroy(f, thing));
-}
-
-herr_t
-nano_dest(H5F_t * f, void * thing)
-{
- HDassert ( ((test_entry_t *)thing)->type == NANO_ENTRY_TYPE );
- return(destroy(f, thing));
-}
-
-herr_t
-micro_dest(H5F_t * f, void * thing)
-{
- HDassert ( ((test_entry_t *)thing)->type == MICRO_ENTRY_TYPE );
- return(destroy(f, thing));
-}
-
-herr_t
-tiny_dest(H5F_t * f, void * thing)
-{
- HDassert ( ((test_entry_t *)thing)->type == TINY_ENTRY_TYPE );
- return(destroy(f, thing));
-}
-
-herr_t
-small_dest(H5F_t * f, void * thing)
-{
- HDassert ( ((test_entry_t *)thing)->type == SMALL_ENTRY_TYPE );
- return(destroy(f, thing));
-}
-
-herr_t
-medium_dest(H5F_t * f, void * thing)
-{
- HDassert ( ((test_entry_t *)thing)->type == MEDIUM_ENTRY_TYPE );
- return(destroy(f, thing));
-}
-
-herr_t
-large_dest(H5F_t * f, void * thing)
-{
- HDassert ( ((test_entry_t *)thing)->type == LARGE_ENTRY_TYPE );
- return(destroy(f, thing));
-}
-
-herr_t
-huge_dest(H5F_t * f, void * thing)
-{
- HDassert ( ((test_entry_t *)thing)->type == HUGE_ENTRY_TYPE );
- return(destroy(f, thing));
-}
-
-herr_t
-monster_dest(H5F_t * f, void * thing)
-{
- HDassert ( ((test_entry_t *)thing)->type == MONSTER_ENTRY_TYPE );
- return(destroy(f, thing));
-}
-
-herr_t
-variable_dest(H5F_t * f, void * thing)
-{
- HDassert ( ((test_entry_t *)thing)->type == VARIABLE_ENTRY_TYPE );
- return(destroy(f, thing));
-}
-
-
-/*-------------------------------------------------------------------------
- * Function: flush & friends
- *
- * Purpose: flush the entry and mark it as clean. The helper functions
- * verify that the correct version of flush is being called,
- * and then call flush proper.
- *
- * Return: SUCCEED
- *
- * Programmer: John Mainzer
- * 6/10/04
- *
- * Modifications:
- *
- * JRM -- 8/30/06
- * Added variable_flush() and flags_ptr parameter.
- *
- * JRM -- 9/1/06
- * Added support for flush operations.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-flush(H5F_t *f,
- hid_t UNUSED dxpl_id,
- hbool_t dest,
- haddr_t
-#ifdef NDEBUG
- UNUSED
-#endif /* NDEBUG */
- addr,
- void *thing,
- unsigned * flags_ptr)
-{
- int i;
- test_entry_t * entry_ptr;
- test_entry_t * base_addr;
-
- HDassert( thing );
-
- entry_ptr = (test_entry_t *)thing;
- base_addr = entries1[entry_ptr->type];
-
- HDassert( entry_ptr->index >= 0 );
- HDassert( entry_ptr->index <= max_indices1[entry_ptr->type] );
- HDassert( entry_ptr == &(base_addr[entry_ptr->index]) );
- HDassert( entry_ptr == entry_ptr->self );
- HDassert( entry_ptr->header.addr == entry_ptr->addr );
- HDassert( entry_ptr->addr == addr );
- HDassert( entry_ptr->header.size == entry_ptr->size );
- HDassert( ( entry_ptr->type == VARIABLE_ENTRY_TYPE ) ||
- ( entry_ptr->size == entry_sizes1[entry_ptr->type] ) );
- HDassert( entry_ptr->header.is_dirty == entry_ptr->is_dirty );
- HDassert( entry_ptr->cache_ptr != NULL );
- HDassert( entry_ptr->cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( entry_ptr->num_flush_ops >= 0 );
- HDassert( entry_ptr->num_flush_ops < MAX_FLUSH_OPS );
-
- if ( entry_ptr->num_flush_ops > 0 ) {
-
- for ( i = 0; i < entry_ptr->num_flush_ops; i++ )
- {
- execute_flush_op1(entry_ptr->cache_ptr,
- entry_ptr,
- &((entry_ptr->flush_ops)[i]),
- flags_ptr);
- }
- entry_ptr->num_flush_ops = 0;
- entry_ptr->flush_op_self_resize_in_progress = FALSE;
- }
-
- entry_ptr->flushed = TRUE;
-
- if ( ( ! write_permitted1 ) && ( entry_ptr->is_dirty ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "called flush when write_permitted1 is FALSE.";
- }
-
- if ( entry_ptr->is_dirty ) {
-
- (entry_ptr->writes)++;
- entry_ptr->is_dirty = FALSE;
- entry_ptr->header.is_dirty = FALSE;
- }
-
- if ( dest ) {
-
- destroy(f, thing);
-
- }
-
- return(SUCCEED);
-
-} /* flush() */
-
-herr_t
-pico_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr,
- void *thing, unsigned * flags_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == PICO_ENTRY_TYPE );
- return(flush(f, dxpl_id, dest, addr, thing, flags_ptr));
-}
-
-herr_t
-nano_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr,
- void *thing, unsigned * flags_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == NANO_ENTRY_TYPE );
- return(flush(f, dxpl_id, dest, addr, thing, flags_ptr));
-}
-
-herr_t
-micro_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr,
- void *thing, unsigned * flags_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == MICRO_ENTRY_TYPE );
- return(flush(f, dxpl_id, dest, addr, thing, flags_ptr));
-}
-
-herr_t
-tiny_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr,
- void *thing, unsigned * flags_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == TINY_ENTRY_TYPE );
- return(flush(f, dxpl_id, dest, addr, thing, flags_ptr));
-}
-
-herr_t
-small_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr,
- void *thing, unsigned * flags_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == SMALL_ENTRY_TYPE );
- return(flush(f, dxpl_id, dest, addr, thing, flags_ptr));
-}
-
-herr_t
-medium_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr,
- void *thing, unsigned * flags_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == MEDIUM_ENTRY_TYPE );
- return(flush(f, dxpl_id, dest, addr, thing, flags_ptr));
-}
-
-herr_t
-large_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr,
- void *thing, unsigned * flags_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == LARGE_ENTRY_TYPE );
- return(flush(f, dxpl_id, dest, addr, thing, flags_ptr));
-}
-
-herr_t
-huge_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr,
- void *thing, unsigned * flags_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == HUGE_ENTRY_TYPE );
- return(flush(f, dxpl_id, dest, addr, thing, flags_ptr));
-}
-
-herr_t
-monster_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr,
- void *thing, unsigned * flags_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == MONSTER_ENTRY_TYPE );
- return(flush(f, dxpl_id, dest, addr, thing, flags_ptr));
-}
-
-herr_t
-variable_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr,
- void *thing, unsigned * flags_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == VARIABLE_ENTRY_TYPE );
- return(flush(f, dxpl_id, dest, addr, thing, flags_ptr));
-}
-
-
-
-/*-------------------------------------------------------------------------
- * Function: load & friends
- *
- * Purpose: "load" the requested entry and mark it as clean. The
- * helper functions verify that the correct version of load
- * is being called, and then call load proper.
- *
- * Return: SUCCEED
- *
- * Programmer: John Mainzer
- * 6/10/04
- *
- * Modifications:
- *
- * JRM -- 8/30/06
- * Added variable_load().
- *
- *-------------------------------------------------------------------------
- */
-
-void *
-load(H5F_t UNUSED *f,
- hid_t UNUSED dxpl_id,
- haddr_t addr,
- const void UNUSED *udata1,
- void UNUSED *udata2)
-{
- int32_t type;
- int32_t idx;
- test_entry_t * entry_ptr;
- test_entry_t * base_addr;
-
- addr_to_type_and_index1(addr, &type, &idx);
-
- base_addr = entries1[type];
- entry_ptr = &(base_addr[idx]);
-
- HDassert( entry_ptr->type == type );
- HDassert( entry_ptr->type >= 0 );
- HDassert( entry_ptr->type < NUMBER_OF_ENTRY_TYPES );
- HDassert( entry_ptr->index == idx );
- HDassert( entry_ptr->index >= 0 );
- HDassert( entry_ptr->index <= max_indices1[type] );
- HDassert( entry_ptr == entry_ptr->self );
- HDassert( entry_ptr->addr == addr );
-#if 1 /* JRM */
- if ( ! ( ( entry_ptr->type == VARIABLE_ENTRY_TYPE ) ||
- ( entry_ptr->size == entry_sizes1[type] ) ) ) {
-
- HDfprintf(stdout, "entry type/index/size = %d/%d/%ld\n",
- (int)(entry_ptr->type),
- (int)(entry_ptr->index),
- (long)(entry_ptr->size));
- }
-#endif /* JRM */
- HDassert( ( entry_ptr->type == VARIABLE_ENTRY_TYPE ) ||
- ( entry_ptr->size == entry_sizes1[type] ) );
-
- entry_ptr->loaded = TRUE;
-
- entry_ptr->header.is_dirty = FALSE;
- entry_ptr->is_dirty = FALSE;
-
- (entry_ptr->reads)++;
-
- return(entry_ptr);
-
-} /* load() */
-
-void *
-pico_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2)
-{
- return(load(f, dxpl_id, addr, udata1, udata2));
-}
-
-void *
-nano_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2)
-{
- return(load(f, dxpl_id, addr, udata1, udata2));
-}
-
-void *
-micro_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2)
-{
- return(load(f, dxpl_id, addr, udata1, udata2));
-}
-
-void *
-tiny_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2)
-{
- return(load(f, dxpl_id, addr, udata1, udata2));
-}
-
-void *
-small_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2)
-{
- return(load(f, dxpl_id, addr, udata1, udata2));
-}
-
-void *
-medium_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2)
-{
- return(load(f, dxpl_id, addr, udata1, udata2));
-}
-
-void *
-large_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2)
-{
- return(load(f, dxpl_id, addr, udata1, udata2));
-}
-
-void *
-huge_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2)
-{
- return(load(f, dxpl_id, addr, udata1, udata2));
-}
-
-void *
-monster_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2)
-{
- return(load(f, dxpl_id, addr, udata1, udata2));
-}
-
-void *
-variable_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2)
-{
- return(load(f, dxpl_id, addr, udata1, udata2));
-}
-
-
-/*-------------------------------------------------------------------------
- * Function: size & friends
- *
- * Purpose: Get the size of the specified entry. The helper functions
- * verify that the correct version of size is being called,
- * and then call size proper.
- *
- * Return: SUCCEED
- *
- * Programmer: John Mainzer
- * 6/10/04
- *
- * Modifications:
- *
- * JRM -- 8/30/06
- * Added variable_size().
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-size(H5F_t UNUSED * f,
- void * thing,
- size_t * size_ptr)
-{
- test_entry_t * entry_ptr;
- test_entry_t * base_addr;
-
- HDassert( size_ptr );
- HDassert( thing );
-
- entry_ptr = (test_entry_t *)thing;
- base_addr = entries1[entry_ptr->type];
-
- HDassert( entry_ptr->index >= 0 );
- HDassert( entry_ptr->index <= max_indices1[entry_ptr->type] );
- HDassert( entry_ptr == &(base_addr[entry_ptr->index]) );
- HDassert( entry_ptr == entry_ptr->self );
- HDassert( entry_ptr->header.addr == entry_ptr->addr );
- HDassert( ( entry_ptr->type == VARIABLE_ENTRY_TYPE ) || \
- ( entry_ptr->size == entry_sizes1[entry_ptr->type] ) );
-
- *size_ptr = entry_ptr->size;
-
- return(SUCCEED);
-
-} /* size() */
-
-herr_t
-pico_size(H5F_t * f, void * thing, size_t * size_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == PICO_ENTRY_TYPE );
- return(size(f, thing, size_ptr));
-}
-
-herr_t
-nano_size(H5F_t * f, void * thing, size_t * size_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == NANO_ENTRY_TYPE );
- return(size(f, thing, size_ptr));
-}
-
-herr_t
-micro_size(H5F_t * f, void * thing, size_t * size_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == MICRO_ENTRY_TYPE );
- return(size(f, thing, size_ptr));
-}
-
-herr_t
-tiny_size(H5F_t * f, void * thing, size_t * size_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == TINY_ENTRY_TYPE );
- return(size(f, thing, size_ptr));
-}
-
-herr_t
-small_size(H5F_t * f, void * thing, size_t * size_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == SMALL_ENTRY_TYPE );
- return(size(f, thing, size_ptr));
-}
-
-herr_t
-medium_size(H5F_t * f, void * thing, size_t * size_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == MEDIUM_ENTRY_TYPE );
- return(size(f, thing, size_ptr));
-}
-
-herr_t
-large_size(H5F_t * f, void * thing, size_t * size_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == LARGE_ENTRY_TYPE );
- return(size(f, thing, size_ptr));
-}
-
-herr_t
-huge_size(H5F_t * f, void * thing, size_t * size_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == HUGE_ENTRY_TYPE );
- return(size(f, thing, size_ptr));
-}
-
-herr_t
-monster_size(H5F_t * f, void * thing, size_t * size_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == MONSTER_ENTRY_TYPE );
- return(size(f, thing, size_ptr));
-}
-
-herr_t
-variable_size(H5F_t * f, void * thing, size_t * size_ptr)
-{
- HDassert ( ((test_entry_t *)thing)->type == VARIABLE_ENTRY_TYPE );
- return(size(f, thing, size_ptr));
-}
-
-
-
-/**************************************************************************/
-/**************************************************************************/
-/************************** test utility functions: ***********************/
-/**************************************************************************/
-/**************************************************************************/
-
-/*-------------------------------------------------------------------------
- * Function: add_flush_op1
- *
- * Purpose: Do noting if pass1 is FALSE on entry.
- *
- * Otherwise, add the specified flush operation to the
- * target instance of test_entry_t.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 9/1/06
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-void
-add_flush_op1(int target_type,
- int target_idx,
- int op_code,
- int type,
- int idx,
- hbool_t flag,
- size_t new_size)
-{
- int i;
- test_entry_t * target_base_addr;
- test_entry_t * target_entry_ptr;
-
- HDassert( ( 0 <= target_type ) && ( target_type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= target_idx ) &&
- ( target_idx <= max_indices1[target_type] ) );
- HDassert( ( 0 <= op_code ) && ( op_code <= FLUSH_OP__MAX_OP ) );
- HDassert( ( op_code != FLUSH_OP__RESIZE ) ||
- ( type == VARIABLE_ENTRY_TYPE ) );
- HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= idx ) && ( idx <= max_indices1[type] ) );
- HDassert( ( flag == TRUE ) || ( flag == FALSE ) );
- HDassert( new_size <= VARIABLE_ENTRY_SIZE );
-
- if ( pass1 ) {
-
- target_base_addr = entries1[target_type];
- target_entry_ptr = &(target_base_addr[target_idx]);
-
- HDassert( target_entry_ptr->index == target_idx );
- HDassert( target_entry_ptr->type == target_type );
- HDassert( target_entry_ptr == target_entry_ptr->self );
- HDassert( target_entry_ptr->num_flush_ops < MAX_FLUSH_OPS );
-
- i = (target_entry_ptr->num_flush_ops)++;
- (target_entry_ptr->flush_ops)[i].op_code = op_code;
- (target_entry_ptr->flush_ops)[i].type = type;
- (target_entry_ptr->flush_ops)[i].idx = idx;
- (target_entry_ptr->flush_ops)[i].flag = flag;
- (target_entry_ptr->flush_ops)[i].size = new_size;
-
- }
-
- return;
-
-} /* add_flush_op1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: create_pinned_entry_dependency1
- *
- * Purpose: Do noting if pass1 is FALSE on entry.
- *
- * Otherwise, set up a pinned entry dependency so we can
- * test the pinned entry modifications to the flush routine.
- *
- * Given the types1 and indicies of the pinned and pinning
- * entries, add the pinned entry to the list of pinned
- * entries in the pinning entry, increment the
- * pinning reference count of the pinned entry, and
- * if that count was zero initially, pin the entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/10/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-void
-create_pinned_entry_dependency1(H5C1_t * cache_ptr,
- int pinning_type,
- int pinning_idx,
- int pinned_type,
- int pinned_idx)
-{
- test_entry_t * pinning_base_addr;
- test_entry_t * pinning_entry_ptr;
- test_entry_t * pinned_base_addr;
- test_entry_t * pinned_entry_ptr;
-
- if ( pass1 ) {
-
- HDassert( ( 0 <= pinning_type ) &&
- ( pinning_type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= pinning_idx ) &&
- ( pinning_idx <= max_indices1[pinning_type] ) );
- HDassert( ( 0 <= pinned_type ) &&
- ( pinned_type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= pinned_idx ) &&
- ( pinned_idx <= max_indices1[pinned_type] ) );
-
- pinning_base_addr = entries1[pinning_type];
- pinning_entry_ptr = &(pinning_base_addr[pinning_idx]);
-
- pinned_base_addr = entries1[pinned_type];
- pinned_entry_ptr = &(pinned_base_addr[pinned_idx]);
-
- HDassert( pinning_entry_ptr->index == pinning_idx );
- HDassert( pinning_entry_ptr->type == pinning_type );
- HDassert( pinning_entry_ptr == pinning_entry_ptr->self );
- HDassert( pinning_entry_ptr->num_pins < MAX_PINS );
-
- HDassert( pinning_entry_ptr->index == pinning_idx );
- HDassert( pinning_entry_ptr->type == pinning_type );
- HDassert( pinning_entry_ptr == pinning_entry_ptr->self );
- HDassert( ! ( pinning_entry_ptr->is_protected ) );
-
- pinning_entry_ptr->pin_type[pinning_entry_ptr->num_pins] = pinned_type;
- pinning_entry_ptr->pin_idx[pinning_entry_ptr->num_pins] = pinned_idx;
- (pinning_entry_ptr->num_pins)++;
-
- if ( pinned_entry_ptr->pinning_ref_count == 0 ) {
-
- protect_entry1(cache_ptr, pinned_type, pinned_idx);
- unprotect_entry1(cache_ptr, pinned_type, pinned_idx, FALSE,
- H5C1__PIN_ENTRY_FLAG);
- }
-
- (pinned_entry_ptr->pinning_ref_count)++;
- }
-
- return;
-
-} /* create_pinned_entry_dependency1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: dirty_entry1
- *
- * Purpose: Given a pointer to a cache, an entry type, and an index,
- * dirty the target entry.
- *
- * If the dirty_pin parameter is true, verify that the
- * target entry is in the cache and is pinned. If it
- * isn't, scream and die. If it is, use the
- * H5C1_mark_pinned_entry_dirty() call to dirty it.
- *
- * Do nothing if pass1 is false on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/10/04
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-dirty_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx,
- hbool_t dirty_pin)
-{
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- HDassert( cache_ptr );
- HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= idx ) && ( idx <= max_indices1[type] ) );
-
- if ( pass1 ) {
-
- if ( dirty_pin ) {
-
- if ( ! entry_in_cache1(cache_ptr, type, idx) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "entry to be dirty pinned is not in cache.";
-
- } else {
-
- base_addr = entries1[type];
- entry_ptr = &(base_addr[idx]);
-
- HDassert( entry_ptr->index == idx );
- HDassert( entry_ptr->type == type );
- HDassert( entry_ptr == entry_ptr->self );
-
- if ( ! ( (entry_ptr->header).is_pinned ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "entry to be dirty pinned is not pinned.";
-
- } else {
-
- mark_pinned_entry_dirty1(cache_ptr, type, idx, FALSE, (size_t)0);
-
- }
- }
- } else {
-
- protect_entry1(cache_ptr, type, idx);
- unprotect_entry1(cache_ptr, type, idx, TRUE, H5C1__NO_FLAGS_SET);
- }
- }
-
- return;
-
-} /* dirty_entry1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: execute_flush_op1
- *
- * Purpose: Given a pointer to an instance of struct flush_op, execute
- * it.
- *
- * Do nothing if pass1 is false on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 9/1/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-execute_flush_op1(H5C1_t * cache_ptr,
- struct test_entry_t * entry_ptr,
- struct flush_op * op_ptr,
- unsigned * flags_ptr)
-{
- HDassert( cache_ptr != NULL );
- HDassert( cache_ptr->magic == H5C1__H5C1_T_MAGIC );
- HDassert( entry_ptr != NULL );
- HDassert( entry_ptr = entry_ptr->self );
- HDassert( entry_ptr->header.addr == entry_ptr->addr );
- HDassert( ( entry_ptr->flush_op_self_resize_in_progress ) ||
- ( entry_ptr->header.size == entry_ptr->size ) );
- HDassert( op_ptr != NULL );
- HDassert( ( 0 <= entry_ptr->type ) &&
- ( entry_ptr->type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= entry_ptr->index ) &&
- ( entry_ptr->index <= max_indices1[entry_ptr->type] ) );
- HDassert( ( 0 <= op_ptr->type ) &&
- ( op_ptr->type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= op_ptr->idx ) &&
- ( op_ptr->idx <= max_indices1[op_ptr->type] ) );
- HDassert( ( op_ptr->flag == FALSE ) || ( op_ptr->flag == TRUE ) );
- HDassert( flags_ptr != NULL );
-
- if ( pass1 ) {
-
- switch ( op_ptr->op_code )
- {
- case FLUSH_OP__NO_OP:
- break;
-
- case FLUSH_OP__DIRTY:
- HDassert( ( entry_ptr->type != op_ptr->type ) ||
- ( entry_ptr->index != op_ptr->idx ) );
-
- dirty_entry1(cache_ptr, op_ptr->type, op_ptr->idx, op_ptr->flag);
- break;
-
- case FLUSH_OP__RESIZE:
- if ( ( entry_ptr->type == op_ptr->type ) &&
- ( entry_ptr->index == op_ptr->idx ) ) {
-
- /* the flush operation is acting on the entry to
- * which it is attached. Handle this here:
- */
- HDassert( entry_ptr->type == VARIABLE_ENTRY_TYPE );
- HDassert( op_ptr->size > 0 );
- HDassert( op_ptr->size <= VARIABLE_ENTRY_SIZE );
-
- entry_ptr->size = op_ptr->size;
- (*flags_ptr) |= H5C1_CALLBACK__SIZE_CHANGED_FLAG;
- entry_ptr->flush_op_self_resize_in_progress = TRUE;
-
- /* if the entry is in the process of being destroyed,
- * set the header size to match the entry size so as
- * to avoid a spurious failure in the destroy callback.
- */
- if ( entry_ptr->header.destroy_in_progress ) {
-
- entry_ptr->header.size = entry_ptr->size;
- }
-
- } else {
-
- /* change the size of some other entry */
-
- resize_entry1(cache_ptr, op_ptr->type, op_ptr->idx,
- op_ptr->size, op_ptr->flag);
- }
- break;
-
- case FLUSH_OP__RENAME:
- rename_entry1(cache_ptr, op_ptr->type, op_ptr->idx,
- op_ptr->flag);
- break;
-
- default:
- pass1 = FALSE;
- failure_mssg1 = "Undefined flush op code.";
- break;
- }
- }
-
- return;
-
-} /* execute_flush_op1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: entry_in_cache1
- *
- * Purpose: Given a pointer to a cache, an entry type, and an index,
- * determine if the entry is currently in the cache.
- *
- * Return: TRUE if the entry is in the cache, and FALSE otherwise.
- *
- * Programmer: John Mainzer
- * 6/10/04
- *
- * Modifications:
- *
- * JRM - 10/12/04
- * Removed references to local_H5C1_t, as we now get direct
- * access to the definition of H5C1_t via H5Cpkg.h.
- *
- *-------------------------------------------------------------------------
- */
-
-hbool_t
-entry_in_cache1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx)
-{
- hbool_t in_cache = FALSE; /* will set to TRUE if necessary */
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
- H5C1_cache_entry_t * test_ptr = NULL;
-
- HDassert( cache_ptr );
- HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= idx ) && ( idx <= max_indices1[type] ) );
-
- base_addr = entries1[type];
- entry_ptr = &(base_addr[idx]);
-
- HDassert( entry_ptr->index == idx );
- HDassert( entry_ptr->type == type );
- HDassert( entry_ptr == entry_ptr->self );
-
- H5C1__SEARCH_INDEX(cache_ptr, entry_ptr->addr, test_ptr)
-
- if ( test_ptr != NULL ) {
-
- in_cache = TRUE;
- HDassert( test_ptr == (H5C1_cache_entry_t *)entry_ptr );
- HDassert( entry_ptr->addr == entry_ptr->header.addr );
- }
-
- return(in_cache);
-
-} /* entry_in_cache1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: reset_entries1
- *
- * Purpose: reset the contents of the entries arrays to know values.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/10/04
- *
- * Modifications:
- *
- * JRM -- 3/31/06
- * Added initialization for new pinned entry test related
- * fields.
- *
- * JRM -- 4/1/07
- * Added initialization for the new is_read_only, and
- * ro_ref_count fields.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-reset_entries1(void)
-
-{
- int i;
- int j;
- int k;
- int32_t max_index;
- haddr_t addr = 0;
- haddr_t alt_addr = PICO_ALT_BASE_ADDR;
- size_t entry_size;
- test_entry_t * base_addr;
-
- for ( i = 0; i < NUMBER_OF_ENTRY_TYPES; i++ )
- {
- entry_size = entry_sizes1[i];
- max_index = max_indices1[i];
- base_addr = entries1[i];
-
- HDassert( base_addr );
-
- for ( j = 0; j <= max_index; j++ )
- {
- /* one can argue that we should fill the header with garbage.
- * If this is desired, we can simply comment out the header
- * initialization - the headers will be full of garbage soon
- * enough.
- */
-
- base_addr[j].header.addr = (haddr_t)0;
- base_addr[j].header.size = (size_t)0;
- base_addr[j].header.type = NULL;
- base_addr[j].header.is_dirty = FALSE;
- base_addr[j].header.is_protected = FALSE;
- base_addr[j].header.is_read_only = FALSE;
- base_addr[j].header.ro_ref_count = FALSE;
- base_addr[j].header.next = NULL;
- base_addr[j].header.prev = NULL;
- base_addr[j].header.aux_next = NULL;
- base_addr[j].header.aux_prev = NULL;
-
- base_addr[j].self = &(base_addr[j]);
- base_addr[j].cache_ptr = NULL;
- base_addr[j].addr = addr;
- base_addr[j].at_main_addr = TRUE;
- base_addr[j].main_addr = addr;
- base_addr[j].alt_addr = alt_addr;
- base_addr[j].size = entry_size;
- base_addr[j].type = i;
- base_addr[j].index = j;
- base_addr[j].reads = 0;
- base_addr[j].writes = 0;
- base_addr[j].is_dirty = FALSE;
- base_addr[j].is_protected = FALSE;
- base_addr[j].is_read_only = FALSE;
- base_addr[j].ro_ref_count = FALSE;
-
- base_addr[j].is_pinned = FALSE;
- base_addr[j].pinning_ref_count = 0;
- base_addr[j].num_pins = 0;
- for ( k = 0; k < MAX_PINS; k++ )
- {
- base_addr[j].pin_type[k] = -1;
- base_addr[j].pin_idx[k] = -1;
- }
-
- base_addr[j].num_flush_ops = 0;
- for ( k = 0; k < MAX_FLUSH_OPS; k++ )
- {
- base_addr[j].flush_ops[k].op_code = FLUSH_OP__NO_OP;
- base_addr[j].flush_ops[k].type = -1;
- base_addr[j].flush_ops[k].idx = -1;
- base_addr[j].flush_ops[k].flag = FALSE;
- base_addr[j].flush_ops[k].size = 0;
- }
- base_addr[j].flush_op_self_resize_in_progress = FALSE;
-
- base_addr[j].loaded = FALSE;
- base_addr[j].cleared = FALSE;
- base_addr[j].flushed = FALSE;
- base_addr[j].destroyed = FALSE;
-
- addr += (haddr_t)entry_size;
- alt_addr += (haddr_t)entry_size;
- }
- }
-
- return;
-
-} /* reset_entries1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: resize_entry1
- *
- * Purpose: Given a pointer to a cache, an entry type, an index, and
- * a size, set the size of the target entry to the size. Note
- * that at present, the type of the entry must be
- * VARIABLE_ENTRY_TYPE.
- *
- * If the resize_pin parameter is true, verify that the
- * target entry is in the cache and is pinned. If it
- * isn't, scream and die. If it is, use the
- * H5C1_mark_pinned_entry_dirty() call to resize it.
- *
- * Do nothing if pass1 is false on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/10/04
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-resize_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx,
- size_t new_size,
- hbool_t resize_pin)
-{
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- HDassert( cache_ptr );
- HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( type == VARIABLE_ENTRY_TYPE );
- HDassert( ( 0 <= idx ) && ( idx <= max_indices1[type] ) );
- HDassert( ( 0 < new_size ) && ( new_size <= entry_sizes1[type] ) );
-
- if ( pass1 ) {
-
- base_addr = entries1[type];
- entry_ptr = &(base_addr[idx]);
-
- HDassert( entry_ptr->index == idx );
- HDassert( entry_ptr->type == type );
- HDassert( entry_ptr == entry_ptr->self );
-
- if ( resize_pin ) {
-
- if ( ! entry_in_cache1(cache_ptr, type, idx) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "entry to be resized pinned is not in cache.";
-
- } else {
-
- if ( ! ( (entry_ptr->header).is_pinned ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "entry to be resized pinned is not pinned.";
-
- } else {
-
- mark_pinned_entry_dirty1(cache_ptr, type, idx,
- TRUE, new_size);
- }
- }
- } else {
-
- protect_entry1(cache_ptr, type, idx);
- unprotect_entry1_with_size_change(cache_ptr, type, idx,
- H5C1__SIZE_CHANGED_FLAG, new_size);
- }
- }
-
- return;
-
-} /* resize_entry1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: resize_pinned_entry1
- *
- * Purpose: Given a pointer to a cache, an entry type, an index, and
- * a new size, change the size of the target pinned entry
- * to match the supplied new size.
- *
- * Do nothing if pass1 is false on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 1/11/08
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-resize_pinned_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx,
- size_t new_size)
-{
- herr_t result;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- HDassert( cache_ptr );
- HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= idx ) && ( idx <= max_indices1[type] ) );
- HDassert( type = VARIABLE_ENTRY_TYPE ) ;
- HDassert( ( 0 < new_size ) && ( new_size <= entry_sizes1[type] ) );
-
- if ( pass1 ) {
-
- if ( ! entry_in_cache1(cache_ptr, type, idx) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "entry not in cache.";
-
- } else {
-
- base_addr = entries1[type];
- entry_ptr = &(base_addr[idx]);
-
- HDassert( entry_ptr->index == idx );
- HDassert( entry_ptr->type == type );
- HDassert( entry_ptr == entry_ptr->self );
-
- if ( ! ( (entry_ptr->header).is_pinned ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "entry to be resized is not pinned.";
-
- } else {
-
- entry_ptr->size = new_size;
-
- result = H5C1_resize_pinned_entry(cache_ptr,
- (void *)entry_ptr,
- new_size);
-
- if ( result != SUCCEED ) {
-
- pass1 = FALSE;
- failure_mssg1 = "error(s) in H5C1_resize_pinned_entry().";
-
- } else {
-
- HDassert( entry_ptr->size = (entry_ptr->header).size );
-
- }
- }
- }
- }
-
- return;
-
-} /* resize_pinned_entry1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: verify_clean1
- *
- * Purpose: Verify that all cache entries are marked as clean. If any
- * are not, set pass1 to FALSE.
- *
- * Do nothing if pass1 is FALSE on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/10/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-void
-verify_clean1(void)
-
-{
- int i;
- int j;
- int dirty_count = 0;
- int32_t max_index;
- test_entry_t * base_addr;
-
- if ( pass1 ) {
-
- for ( i = 0; i < NUMBER_OF_ENTRY_TYPES; i++ )
- {
- max_index = max_indices1[i];
- base_addr = entries1[i];
-
- HDassert( base_addr );
-
- for ( j = 0; j <= max_index; j++ )
- {
- if ( ( base_addr[j].header.is_dirty ) ||
- ( base_addr[j].is_dirty ) ) {
-
- dirty_count++;
- }
- }
- }
-
- if ( dirty_count > 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "verify_clean1() found dirty entry(s).";
- }
- }
-
- return;
-
-} /* verify_clean1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: verify_entry_status1
- *
- * Purpose: Verify that a list of entries have the expected status.
- * If any discrepencies are found, set the failure message
- * and set pass1 to FALSE.
- *
- * Do nothing if pass1 is FALSE on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 10/8/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-void
-verify_entry_status1(H5C1_t * cache_ptr,
- int tag,
- int num_entries,
- struct expected_entry_status expected[])
-{
- static char msg[128];
- hbool_t in_cache = FALSE; /* will set to TRUE if necessary */
- int i;
- test_entry_t * entry_ptr;
- test_entry_t * base_addr;
-
- i = 0;
- while ( ( pass1 ) && ( i < num_entries ) )
- {
- base_addr = entries1[expected[i].entry_type];
- entry_ptr = &(base_addr[expected[i].entry_index]);
-
- if ( ( ! expected[i].in_cache ) &&
- ( ( expected[i].is_dirty ) ||
- ( expected[i].is_protected ) ||
- ( expected[i].is_pinned ) ) ) {
-
- pass1 = FALSE;
- sprintf(msg, "Contradictory data in expected[%d].\n", i);
- failure_mssg1 = msg;
- }
-
- if ( pass1 ) {
-
- in_cache = entry_in_cache1(cache_ptr, expected[i].entry_type,
- expected[i].entry_index);
-
- if ( in_cache != expected[i].in_cache ) {
-
- pass1 = FALSE;
- sprintf(msg,
- "%d entry (%d, %d) in cache actual/expected = %d/%d.\n",
- tag,
- (int)expected[i].entry_type,
- (int)expected[i].entry_index,
- (int)in_cache,
- (int)expected[i].in_cache);
- failure_mssg1 = msg;
- }
- }
-
- if ( pass1 ) {
-
- if ( entry_ptr->size != expected[i].size ) {
-
- pass1 = FALSE;
- sprintf(msg,
- "%d entry (%d, %d) size actualexpected = %ld/%ld.\n",
- tag,
- (int)expected[i].entry_type,
- (int)expected[i].entry_index,
- (long)(entry_ptr->size),
- (long)expected[i].size);
- failure_mssg1 = msg;
- }
- }
-
- if ( ( pass1 ) && ( in_cache ) ) {
-
- if ( entry_ptr->header.size != expected[i].size ) {
-
- pass1 = FALSE;
- sprintf(msg,
- "%d entry (%d, %d) header size actual/expected = %ld/%ld.\n",
- tag,
- (int)expected[i].entry_type,
- (int)expected[i].entry_index,
- (long)(entry_ptr->header.size),
- (long)expected[i].size);
- failure_mssg1 = msg;
- }
- }
-
- if ( pass1 ) {
-
- if ( entry_ptr->at_main_addr != expected[i].at_main_addr ) {
-
- pass1 = FALSE;
- sprintf(msg,
- "%d entry (%d, %d) at main addr actual/expected = %d/%d.\n",
- tag,
- (int)expected[i].entry_type,
- (int)expected[i].entry_index,
- (int)(entry_ptr->at_main_addr),
- (int)expected[i].at_main_addr);
- failure_mssg1 = msg;
- }
- }
-
- if ( pass1 ) {
-
- if ( entry_ptr->is_dirty != expected[i].is_dirty ) {
-
- pass1 = FALSE;
- sprintf(msg,
- "%d entry (%d, %d) is_dirty actual/expected = %d/%d.\n",
- tag,
- (int)expected[i].entry_type,
- (int)expected[i].entry_index,
- (int)(entry_ptr->is_dirty),
- (int)expected[i].is_dirty);
- failure_mssg1 = msg;
- }
- }
-
- if ( ( pass1 ) && ( in_cache ) ) {
-
- if ( entry_ptr->header.is_dirty != expected[i].is_dirty ) {
-
- pass1 = FALSE;
- sprintf(msg,
- "%d entry (%d, %d) header is_dirty actual/expected = %d/%d.\n",
- tag,
- (int)expected[i].entry_type,
- (int)expected[i].entry_index,
- (int)(entry_ptr->header.is_dirty),
- (int)expected[i].is_dirty);
- failure_mssg1 = msg;
- }
- }
-
- if ( pass1 ) {
-
- if ( entry_ptr->is_protected != expected[i].is_protected ) {
-
- pass1 = FALSE;
- sprintf(msg,
- "%d entry (%d, %d) is_protected actual/expected = %d/%d.\n",
- tag,
- (int)expected[i].entry_type,
- (int)expected[i].entry_index,
- (int)(entry_ptr->is_protected),
- (int)expected[i].is_protected);
- failure_mssg1 = msg;
- }
- }
-
- if ( ( pass1 ) && ( in_cache ) ) {
-
- if ( entry_ptr->header.is_protected != expected[i].is_protected ) {
-
- pass1 = FALSE;
- sprintf(msg,
- "%d entry (%d, %d) header is_protected actual/expected = %d/%d.\n",
- tag,
- (int)expected[i].entry_type,
- (int)expected[i].entry_index,
- (int)(entry_ptr->header.is_protected),
- (int)expected[i].is_protected);
- failure_mssg1 = msg;
- }
- }
-
- if ( pass1 ) {
-
- if ( entry_ptr->is_pinned != expected[i].is_pinned ) {
-
- pass1 = FALSE;
- sprintf(msg,
- "%d entry (%d, %d) is_pinned actual/expected = %d/%d.\n",
- tag,
- (int)expected[i].entry_type,
- (int)expected[i].entry_index,
- (int)(entry_ptr->is_pinned),
- (int)expected[i].is_pinned);
- failure_mssg1 = msg;
- }
- }
-
- if ( ( pass1 ) && ( in_cache ) ) {
-
- if ( entry_ptr->header.is_pinned != expected[i].is_pinned ) {
-
- pass1 = FALSE;
- sprintf(msg,
- "%d entry (%d, %d) header is_pinned actual/expected = %d/%d.\n",
- tag,
- (int)expected[i].entry_type,
- (int)expected[i].entry_index,
- (int)(entry_ptr->header.is_pinned),
- (int)expected[i].is_pinned);
- failure_mssg1 = msg;
- }
- }
-
- if ( pass1 ) {
-
- if ( ( entry_ptr->loaded != expected[i].loaded ) ||
- ( entry_ptr->cleared != expected[i].cleared ) ||
- ( entry_ptr->flushed != expected[i].flushed ) ||
- ( entry_ptr->destroyed != expected[i].destroyed ) ) {
-
- pass1 = FALSE;
- sprintf(msg,
- "%d entry (%d,%d) loaded = %d(%d), clrd = %d(%d), flshd = %d(%d), dest = %d(%d)\n",
- tag,
- (int)expected[i].entry_type,
- (int)expected[i].entry_index,
- (int)(entry_ptr->loaded),
- (int)(expected[i].loaded),
- (int)(entry_ptr->cleared),
- (int)(expected[i].cleared),
- (int)(entry_ptr->flushed),
- (int)(expected[i].flushed),
- (int)(entry_ptr->destroyed),
- (int)(expected[i].destroyed));
- failure_mssg1 = msg;
- }
- }
- i++;
- } /* while */
-
- return;
-
-} /* verify_entry_status1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: verify_unprotected1
- *
- * Purpose: Verify that no cache entries are marked as protected. If
- * any are, set pass1 to FALSE.
- *
- * Do nothing if pass1 is FALSE on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/10/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-void
-verify_unprotected1(void)
-
-{
- int i;
- int j;
- int protected_count = 0;
- int32_t max_index;
- test_entry_t * base_addr;
-
- if ( pass1 ) {
-
- for ( i = 0; i < NUMBER_OF_ENTRY_TYPES; i++ )
- {
- max_index = max_indices1[i];
- base_addr = entries1[i];
-
- HDassert( base_addr );
-
- for ( j = 0; j <= max_index; j++ )
- {
- HDassert( base_addr[j].header.is_protected ==
- base_addr[j].is_protected );
-
- if ( ( base_addr[j].header.is_protected ) ||
- ( base_addr[j].is_protected ) ) {
-
- protected_count++;
- }
- }
- }
-
- if ( protected_count > 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "verify_unprotected1() found protected entry(s).";
- }
- }
-
- return;
-
-} /* verify_unprotected1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: setup_cache1()
- *
- * Purpose: Allocate a cache of the desired size and configure it for
- * use in the test bed. Return a pointer to the new cache
- * structure.
- *
- * Return: Pointer to new cache, or NULL on failure.
- *
- * Programmer: John Mainzer
- * 6/11/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-H5C1_t *
-setup_cache1(size_t max_cache_size,
- size_t min_clean_size)
-{
- H5C1_t * cache_ptr = NULL;
-
- cache_ptr = H5C1_create(max_cache_size,
- min_clean_size,
- (NUMBER_OF_ENTRY_TYPES - 1),
- (const char **)entry_type_names1,
- check_write_permitted1,
- TRUE,
- NULL,
- NULL);
-
- if ( cache_ptr == NULL ) {
-
- pass1 = FALSE;
- failure_mssg1 = "H5C1_create() returned NULL.";
-
- } else {
-
- H5C1_set_skip_flags(cache_ptr, TRUE, TRUE);
- }
-
- return(cache_ptr);
-
-} /* setup_cache1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: takedown_cache1()
- *
- * Purpose: Flush the specified cache and disable it. If requested,
- * dump stats first. If pass1 is FALSE, do nothing.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/11/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-void
-takedown_cache1(H5C1_t * cache_ptr,
- hbool_t dump_stats,
- hbool_t dump_detailed_stats)
-{
- HDassert(cache_ptr);
-
- if ( pass1 ) {
-
- if ( dump_stats ) {
-
- H5C1_stats(cache_ptr, "test cache", dump_detailed_stats);
- }
-
- H5C1_dest(NULL, -1, -1, cache_ptr);
- }
-
- return;
-
-} /* takedown_cache1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: expunge_entry1()
- *
- * Purpose: Expunge the entry indicated by the type and index.
- *
- * Do nothing if pass1 is FALSE on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 7/6/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-expunge_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx)
-{
- /* const char * fcn_name = "expunge_entry1()"; */
- herr_t result;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- if ( pass1 ) {
-
- HDassert( cache_ptr );
- HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= idx ) && ( idx <= max_indices1[type] ) );
-
- base_addr = entries1[type];
- entry_ptr = &(base_addr[idx]);
-
- HDassert( entry_ptr->index == idx );
- HDassert( entry_ptr->type == type );
- HDassert( entry_ptr == entry_ptr->self );
- HDassert( entry_ptr->cache_ptr == cache_ptr );
- HDassert( ! ( entry_ptr->header.is_protected ) );
- HDassert( ! ( entry_ptr->is_protected ) );
- HDassert( ! ( entry_ptr->header.is_pinned ) );
- HDassert( ! ( entry_ptr->is_pinned ) );
-
- result = H5C1_expunge_entry(NULL, -1, -1, cache_ptr, &(types1[type]),
- entry_ptr->addr);
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "error in H5C1_expunge_entry().";
-
- }
- }
-
- return;
-
-} /* expunge_entry1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: flush_cache1()
- *
- * Purpose: Flush the specified cache, destroying all entries if
- requested. If requested, dump stats first.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/23/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-void
-flush_cache1(H5C1_t * cache_ptr,
- hbool_t destroy_entries,
- hbool_t dump_stats,
- hbool_t dump_detailed_stats)
-{
- herr_t result = 0;
-
- HDassert(cache_ptr);
-
- verify_unprotected1();
-
- if ( pass1 ) {
-
- if ( destroy_entries ) {
-
- result = H5C1_flush_cache(NULL, -1, -1, cache_ptr,
- H5C1__FLUSH_INVALIDATE_FLAG);
-
- } else {
-
- result = H5C1_flush_cache(NULL, -1, -1, cache_ptr,
- H5C1__NO_FLAGS_SET);
- }
- }
-
- if ( dump_stats ) {
-
- H5C1_stats(cache_ptr, "test cache", dump_detailed_stats);
- }
-
- if ( result < 0 ) {
-
- pass1 = FALSE;
- failure_mssg1 = "error in H5C1_flush_cache().";
- }
-
- return;
-
-} /* flush_cache1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: insert_entry1()
- *
- * Purpose: Insert the entry indicated by the type and index. Mark
- * it clean or dirty as indicated.
- *
- * Note that I don't see much practical use for inserting
- * a clean entry, but the interface permits it so we should
- * test it.
- *
- * Do nothing if pass1 is false.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/16/04
- *
- * Modifications:
- *
- * JRM -- 1/13/05
- * Updated function for the flags parameter in
- * H5C1_insert_entry(), and to allow access to this parameter.
- *
- * JRM -- 6/17/05
- * The interface no longer permits clean inserts.
- * Accordingly, the dirty parameter is no longer meaningfull.
- *
- * JRM -- 4/5/06
- * Added code to initialize the new cache_ptr field of the
- * test_entry_t structure.
- *
- * JRM -- 8/10/06
- * Updated to reflect the fact that entries can now be
- * inserted pinned.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-insert_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx,
- hbool_t UNUSED dirty,
- unsigned int flags)
-{
- herr_t result;
- hbool_t insert_pinned;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- if ( pass1 ) {
-
- HDassert( cache_ptr );
- HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= idx ) && ( idx <= max_indices1[type] ) );
-
- base_addr = entries1[type];
- entry_ptr = &(base_addr[idx]);
-
- HDassert( entry_ptr->index == idx );
- HDassert( entry_ptr->type == type );
- HDassert( entry_ptr == entry_ptr->self );
- HDassert( !(entry_ptr->is_protected) );
-
- insert_pinned = ((flags & H5C1__PIN_ENTRY_FLAG) != 0 );
-
- entry_ptr->is_dirty = TRUE;
-
- result = H5C1_insert_entry(NULL, -1, -1, cache_ptr, &(types1[type]),
- entry_ptr->addr, (void *)entry_ptr, flags);
-
- if ( ( result < 0 ) ||
- ( entry_ptr->header.is_protected ) ||
- ( entry_ptr->header.type != &(types1[type]) ) ||
- ( entry_ptr->size != entry_ptr->header.size ) ||
- ( entry_ptr->addr != entry_ptr->header.addr ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "error in H5C1_insert().";
-
-#if 0 /* This is useful debugging code. Lets keep it around. */
-
- HDfprintf(stdout, "result = %d\n", (int)result);
- HDfprintf(stdout, "entry_ptr->header.is_protected = %d\n",
- (int)(entry_ptr->header.is_protected));
- HDfprintf(stdout,
- "entry_ptr->header.type != &(types1[type]) = %d\n",
- (int)(entry_ptr->header.type != &(types1[type])));
- HDfprintf(stdout,
- "entry_ptr->size != entry_ptr->header.size = %d\n",
- (int)(entry_ptr->size != entry_ptr->header.size));
- HDfprintf(stdout,
- "entry_ptr->addr != entry_ptr->header.addr = %d\n",
- (int)(entry_ptr->addr != entry_ptr->header.addr));
-#endif
- }
- HDassert( entry_ptr->cache_ptr == NULL );
-
- entry_ptr->cache_ptr = cache_ptr;
-
- if ( insert_pinned ) {
-
- HDassert( entry_ptr->header.is_pinned );
- entry_ptr->is_pinned = TRUE;
-
- } else {
-
- HDassert( ! ( entry_ptr->header.is_pinned ) );
- entry_ptr->is_pinned = FALSE;
-
- }
- HDassert( entry_ptr->header.is_dirty );
- HDassert( ((entry_ptr->header).type)->id == type );
- }
-
- return;
-
-} /* insert_entry1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: mark_pinned_entry_dirty1()
- *
- * Purpose: Mark the specified entry as dirty.
- *
- * Do nothing if pass1 is FALSE on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 3/28/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-mark_pinned_entry_dirty1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx,
- hbool_t size_changed,
- size_t new_size)
-{
- /* const char * fcn_name = "mark_pinned_entry_dirty1()"; */
- herr_t result;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- if ( pass1 ) {
-
- HDassert( cache_ptr );
- HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= idx ) && ( idx <= max_indices1[type] ) );
-
- base_addr = entries1[type];
- entry_ptr = &(base_addr[idx]);
-
- HDassert( entry_ptr->index == idx );
- HDassert( entry_ptr->type == type );
- HDassert( entry_ptr == entry_ptr->self );
- HDassert( entry_ptr->cache_ptr == cache_ptr );
- HDassert( ! (entry_ptr->header.is_protected) );
- HDassert( entry_ptr->header.is_pinned );
- HDassert( entry_ptr->is_pinned );
-
- entry_ptr->is_dirty = TRUE;
-
- if ( size_changed ) {
-
- /* update entry size now to keep the sanity checks happy */
- entry_ptr->size = new_size;
- }
-
- result = H5C1_mark_pinned_entry_dirty(cache_ptr,
- (void *)entry_ptr,
- size_changed,
- new_size);
-
- if ( ( result < 0 ) ||
- ( ! (entry_ptr->header.is_dirty) ) ||
- ( ! (entry_ptr->header.is_pinned) ) ||
- ( entry_ptr->header.type != &(types1[type]) ) ||
- ( entry_ptr->size != entry_ptr->header.size ) ||
- ( entry_ptr->addr != entry_ptr->header.addr ) ) {
-
-#if 0 /* This is useful debugging code -- keep it around */
- HDfprintf(stdout, "result = %ld.\n", (long)result);
- HDfprintf(stdout, "entry_ptr->header.is_dirty = %d.\n",
- (int)(entry_ptr->header.is_dirty));
- HDfprintf(stdout, "entry_ptr->header.is_pinned = %d.\n",
- (int)(entry_ptr->header.is_pinned));
- HDfprintf(stdout,
- "(entry_ptr->header.type != &(types1[type])) = %d.\n",
- (int)(entry_ptr->header.type != &(types1[type])));
- HDfprintf(stdout,
- "entry_ptr->size = %ld, entry_ptr->header.size = %ld.\n",
- (long)(entry_ptr->size), (long)(entry_ptr->header.size));
- HDfprintf(stdout,
- "entry_ptr->addr = %ld, entry_ptr->header.addr = %ld.\n",
- (long)(entry_ptr->addr), (long)(entry_ptr->header.addr));
-#endif
- pass1 = FALSE;
- failure_mssg1 = "error in H5C1_mark_pinned_entry_dirty().";
-
- }
-
- HDassert( ((entry_ptr->header).type)->id == type );
-
- }
-
- return;
-
-} /* mark_pinned_entry_dirty1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: mark_pinned_or_protected_entry_dirty1()
- *
- * Purpose: Mark the specified entry as dirty.
- *
- * Do nothing if pass1 is FALSE on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 5/17/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-mark_pinned_or_protected_entry_dirty1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx)
-{
- /* const char * fcn_name = "mark_pinned_or_protected_entry_dirty1()"; */
- herr_t result;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- if ( pass1 ) {
-
- HDassert( cache_ptr );
- HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= idx ) && ( idx <= max_indices1[type] ) );
-
- base_addr = entries1[type];
- entry_ptr = &(base_addr[idx]);
-
- HDassert( entry_ptr->index == idx );
- HDassert( entry_ptr->type == type );
- HDassert( entry_ptr == entry_ptr->self );
- HDassert( entry_ptr->cache_ptr == cache_ptr );
- HDassert( entry_ptr->header.is_protected ||
- entry_ptr->header.is_pinned );
-
- entry_ptr->is_dirty = TRUE;
-
- result = H5C1_mark_pinned_or_protected_entry_dirty(cache_ptr,
- (void *)entry_ptr);
-
- if ( ( result < 0 )
- ||
- ( ( ! (entry_ptr->header.is_protected) )
- &&
- ( ! (entry_ptr->header.is_pinned) )
- )
- ||
- ( ( entry_ptr->header.is_protected )
- &&
- ( ! ( entry_ptr->header.dirtied ) )
- )
- ||
- ( ( ! ( entry_ptr->header.is_protected ) )
- &&
- ( ! ( entry_ptr->header.is_dirty ) )
- )
- ||
- ( entry_ptr->header.type != &(types1[type]) )
- ||
- ( entry_ptr->size != entry_ptr->header.size )
- ||
- ( entry_ptr->addr != entry_ptr->header.addr ) ) {
-
- pass1 = FALSE;
- failure_mssg1 =
- "error in H5C1_mark_pinned_or_protected_entry_dirty().";
-
- }
-
- HDassert( ((entry_ptr->header).type)->id == type );
-
- }
-
- return;
-
-} /* mark_pinned_or_protected_entry_dirty1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: rename_entry1()
- *
- * Purpose: Rename the entry indicated by the type and index to its
- * main or alternate address as indicated. If the entry is
- * already at the desired entry, do nothing.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/21/04
- *
- * Modifications:
- *
- * JRM -- 6/17/05
- * Updated code to reflect the fact that renames automatically
- * dirty entries.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-rename_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx,
- hbool_t main_addr)
-{
- herr_t result;
- hbool_t done = TRUE; /* will set to FALSE if we have work to do */
- haddr_t old_addr = HADDR_UNDEF;
- haddr_t new_addr = HADDR_UNDEF;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- HDassert( cache_ptr );
- HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= idx ) && ( idx <= max_indices1[type] ) );
-
- base_addr = entries1[type];
- entry_ptr = &(base_addr[idx]);
-
- HDassert( entry_ptr->index == idx );
- HDassert( entry_ptr->type == type );
- HDassert( entry_ptr == entry_ptr->self );
- HDassert( entry_ptr->cache_ptr == cache_ptr );
- HDassert( !(entry_ptr->is_protected) );
- HDassert( !(entry_ptr->header.is_protected) );
-
-
- if ( entry_ptr->at_main_addr && !main_addr ) {
-
- /* rename to alt addr */
-
- HDassert( entry_ptr->addr == entry_ptr->main_addr );
-
- done = FALSE;
- old_addr = entry_ptr->addr;
- new_addr = entry_ptr->alt_addr;
-
- } else if ( !(entry_ptr->at_main_addr) && main_addr ) {
-
- /* rename to main addr */
-
- HDassert( entry_ptr->addr == entry_ptr->alt_addr );
-
- done = FALSE;
- old_addr = entry_ptr->addr;
- new_addr = entry_ptr->main_addr;
- }
-
- if ( ! done ) {
-
- entry_ptr->is_dirty = TRUE;
-
- result = H5C1_rename_entry(cache_ptr, &(types1[type]),
- old_addr, new_addr);
- }
-
- if ( ! done ) {
-
- if ( ( result < 0 ) ||
- ( ( ! ( entry_ptr->header.destroy_in_progress ) ) &&
- ( entry_ptr->header.addr != new_addr ) ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "error in H5C1_rename_entry().";
-
- } else {
-
- entry_ptr->addr = new_addr;
- entry_ptr->at_main_addr = main_addr;
- }
- }
-
- HDassert( ((entry_ptr->header).type)->id == type );
-
- HDassert( entry_ptr->header.is_dirty );
- HDassert( entry_ptr->is_dirty );
-
- return;
-
-} /* rename_entry1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: protect_entry1()
- *
- * Purpose: Protect the entry indicated by the type and index.
- *
- * Do nothing if pass1 is FALSE on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/11/04
- *
- * Modifications:
- *
- * - Modified call to H5C1_protect to pass1 H5C1__NO_FLAGS_SET in the
- * new flags parameter.
- * JRM -- 3/28/07
- *
- *-------------------------------------------------------------------------
- */
-
-void
-protect_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx)
-{
- /* const char * fcn_name = "protect_entry1()"; */
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
- H5C1_cache_entry_t * cache_entry_ptr;
-
- if ( pass1 ) {
-
- HDassert( cache_ptr );
- HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= idx ) && ( idx <= max_indices1[type] ) );
-
- base_addr = entries1[type];
- entry_ptr = &(base_addr[idx]);
-
- HDassert( entry_ptr->index == idx );
- HDassert( entry_ptr->type == type );
- HDassert( entry_ptr == entry_ptr->self );
- HDassert( !(entry_ptr->is_protected) );
-
- cache_entry_ptr = H5C1_protect(NULL, -1, -1, cache_ptr, &(types1[type]),
- entry_ptr->addr, NULL, NULL,
- H5C1__NO_FLAGS_SET);
-
- if ( ( cache_entry_ptr != (void *)entry_ptr ) ||
- ( !(entry_ptr->header.is_protected) ) ||
- ( entry_ptr->header.type != &(types1[type]) ) ||
- ( entry_ptr->size != entry_ptr->header.size ) ||
- ( entry_ptr->addr != entry_ptr->header.addr ) ) {
-
-#if 0
- /* I've written the following debugging code several times
- * now. Lets keep it around so I don't have to write it
- * again.
- * - JRM
- */
- HDfprintf(stdout, "( cache_entry_ptr != (void *)entry_ptr ) = %d\n",
- (int)( cache_entry_ptr != (void *)entry_ptr ));
- HDfprintf(stdout, "cache_entry_ptr = 0x%lx, entry_ptr = 0x%lx\n",
- (long)cache_entry_ptr, (long)entry_ptr);
- HDfprintf(stdout, "entry_ptr->header.is_protected = %d\n",
- (int)(entry_ptr->header.is_protected));
- HDfprintf(stdout,
- "( entry_ptr->header.type != &(types1[type]) ) = %d\n",
- (int)( entry_ptr->header.type != &(types1[type]) ));
- HDfprintf(stdout,
- "entry_ptr->size = %d, entry_ptr->header.size = %d\n",
- (int)(entry_ptr->size), (int)(entry_ptr->header.size));
- HDfprintf(stdout,
- "entry_ptr->addr = %d, entry_ptr->header.addr = %d\n",
- (int)(entry_ptr->addr), (int)(entry_ptr->header.addr));
-#endif
- pass1 = FALSE;
- failure_mssg1 = "error in H5C1_protect().";
-
- } else {
-
- HDassert( ( entry_ptr->cache_ptr == NULL ) ||
- ( entry_ptr->cache_ptr == cache_ptr ) );
-
- entry_ptr->cache_ptr = cache_ptr;
- entry_ptr->is_protected = TRUE;
-
- }
-
- HDassert( ((entry_ptr->header).type)->id == type );
- }
-
- return;
-
-} /* protect_entry1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: protect_entry_ro1()
- *
- * Purpose: Do a read only protect the entry indicated by the type
- * and index.
- *
- * Do nothing if pass1 is FALSE on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/1/07
- *
- * Modifications:
- *
- * - None.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-protect_entry_ro1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx)
-{
- /* const char * fcn_name = "protect_entry_ro1()"; */
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
- H5C1_cache_entry_t * cache_entry_ptr;
-
- if ( pass1 ) {
-
- HDassert( cache_ptr );
- HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= idx ) && ( idx <= max_indices1[type] ) );
-
- base_addr = entries1[type];
- entry_ptr = &(base_addr[idx]);
-
- HDassert( entry_ptr->index == idx );
- HDassert( entry_ptr->type == type );
- HDassert( entry_ptr == entry_ptr->self );
- HDassert( ( ! ( entry_ptr->is_protected ) ) ||
- ( ( entry_ptr->is_read_only ) &&
- ( entry_ptr->ro_ref_count > 0 ) ) );
-
- cache_entry_ptr = H5C1_protect(NULL, -1, -1, cache_ptr, &(types1[type]),
- entry_ptr->addr, NULL, NULL,
- H5C1__READ_ONLY_FLAG);
-
- if ( ( cache_entry_ptr != (void *)entry_ptr ) ||
- ( !(entry_ptr->header.is_protected) ) ||
- ( !(entry_ptr->header.is_read_only) ) ||
- ( entry_ptr->header.ro_ref_count <= 0 ) ||
- ( entry_ptr->header.type != &(types1[type]) ) ||
- ( entry_ptr->size != entry_ptr->header.size ) ||
- ( entry_ptr->addr != entry_ptr->header.addr ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "error in read only H5C1_protect().";
-
- } else {
-
- HDassert( ( entry_ptr->cache_ptr == NULL ) ||
- ( entry_ptr->cache_ptr == cache_ptr ) );
-
- entry_ptr->cache_ptr = cache_ptr;
- entry_ptr->is_protected = TRUE;
- entry_ptr->is_read_only = TRUE;
- entry_ptr->ro_ref_count++;
- }
-
- HDassert( ((entry_ptr->header).type)->id == type );
- }
-
- return;
-
-} /* protect_entry_ro1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: unpin_entry1()
- *
- * Purpose: Unpin the entry indicated by the type and index.
- *
- * Do nothing if pass1 is FALSE on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 3/28/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-unpin_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx)
-{
- /* const char * fcn_name = "unpin_entry1()"; */
- herr_t result;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- if ( pass1 ) {
-
- HDassert( cache_ptr );
- HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= idx ) && ( idx <= max_indices1[type] ) );
-
- base_addr = entries1[type];
- entry_ptr = &(base_addr[idx]);
-
- HDassert( entry_ptr->index == idx );
- HDassert( entry_ptr->type == type );
- HDassert( entry_ptr == entry_ptr->self );
- HDassert( entry_ptr->cache_ptr == cache_ptr );
- HDassert( ! (entry_ptr->header.is_protected) );
- HDassert( entry_ptr->header.is_pinned );
- HDassert( entry_ptr->is_pinned );
-
- result = H5C1_unpin_entry(cache_ptr, (void *)entry_ptr);
-
- if ( ( result < 0 ) ||
- ( entry_ptr->header.is_pinned ) ||
- ( entry_ptr->header.type != &(types1[type]) ) ||
- ( entry_ptr->size != entry_ptr->header.size ) ||
- ( entry_ptr->addr != entry_ptr->header.addr ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "error in H5C1_unpin().";
-
- }
-
- entry_ptr->is_pinned = FALSE;
-
- HDassert( ((entry_ptr->header).type)->id == type );
-
- }
-
- return;
-
-} /* unpin_entry1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: unprotect_entry1()
- *
- * Purpose: Unprotect the entry indicated by the type and index.
- *
- * Do nothing if pass1 is FALSE on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/12/04
- *
- * Modifications:
- *
- * JRM -- 1/7/05
- * Updated for the replacement of the deleted parameter in
- * H5C1_unprotect() with the new flags parameter.
- *
- * JRM - 6/17/05
- * Modified function to use the new dirtied parameter of
- * H5C1_unprotect().
- *
- * JRM -- 9/8/05
- * Update for new entry size parameter in H5C1_unprotect().
- * We don't use them here for now.
- *
- * JRM -- 3/31/06
- * Update for pinned entries.
- *
- * JRM -- 4/1/07
- * Updated for new multiple read protects.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-unprotect_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx,
- int dirty,
- unsigned int flags)
-{
- /* const char * fcn_name = "unprotect_entry1()"; */
- herr_t result;
- hbool_t pin_flag_set;
- hbool_t unpin_flag_set;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- if ( pass1 ) {
-
- HDassert( cache_ptr );
- HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= idx ) && ( idx <= max_indices1[type] ) );
-
- base_addr = entries1[type];
- entry_ptr = &(base_addr[idx]);
-
- HDassert( entry_ptr->index == idx );
- HDassert( entry_ptr->type == type );
- HDassert( entry_ptr == entry_ptr->self );
- HDassert( entry_ptr->cache_ptr == cache_ptr );
- HDassert( entry_ptr->header.is_protected );
- HDassert( entry_ptr->is_protected );
-
- pin_flag_set = ((flags & H5C1__PIN_ENTRY_FLAG) != 0 );
- unpin_flag_set = ((flags & H5C1__UNPIN_ENTRY_FLAG) != 0 );
-
- HDassert ( ! ( pin_flag_set && unpin_flag_set ) );
- HDassert ( ( ! pin_flag_set ) || ( ! (entry_ptr->is_pinned) ) );
- HDassert ( ( ! unpin_flag_set ) || ( entry_ptr->is_pinned ) );
-
- if ( ( dirty == TRUE ) || ( dirty == FALSE ) ) {
-
- flags |= (dirty ? H5C1__DIRTIED_FLAG : H5C1__NO_FLAGS_SET);
- entry_ptr->is_dirty = (entry_ptr->is_dirty || dirty);
- }
-
- result = H5C1_unprotect(NULL, -1, -1, cache_ptr, &(types1[type]),
- entry_ptr->addr, (void *)entry_ptr,
- flags, (size_t)0);
-
- if ( ( result < 0 ) ||
- ( ( entry_ptr->header.is_protected ) &&
- ( ( ! ( entry_ptr->is_read_only ) ) ||
- ( entry_ptr->ro_ref_count <= 0 ) ) ) ||
- ( entry_ptr->header.type != &(types1[type]) ) ||
- ( entry_ptr->size != entry_ptr->header.size ) ||
- ( entry_ptr->addr != entry_ptr->header.addr ) ) {
-
-#if 1 /* JRM */
- if ( result < 0 ) {
- HDfprintf(stdout, "result is negative.\n");
- }
- if ( ( entry_ptr->header.is_protected ) &&
- ( ( ! ( entry_ptr->is_read_only ) ) ||
- ( entry_ptr->ro_ref_count <= 0 ) ) ) {
- HDfprintf(stdout, "protected and not RO or refcnt <= 0.\n");
- }
- if ( entry_ptr->header.type != &(types1[type]) ) {
- HDfprintf(stdout, "type disagreement.\n");
- }
- if ( entry_ptr->size != entry_ptr->header.size ) {
- HDfprintf(stdout, "size disagreement.\n");
- }
- if ( entry_ptr->addr != entry_ptr->header.addr ) {
- HDfprintf(stdout, "addr disagreement.\n");
- }
-#endif /* JRM */
-
- pass1 = FALSE;
- failure_mssg1 = "error in H5C1_unprotect().";
-
- }
- else
- {
- if ( entry_ptr->ro_ref_count > 1 ) {
-
- entry_ptr->ro_ref_count--;
-
- } else if ( entry_ptr->ro_ref_count == 1 ) {
-
- entry_ptr->is_protected = FALSE;
- entry_ptr->is_read_only = FALSE;
- entry_ptr->ro_ref_count = 0;
-
- } else {
-
- entry_ptr->is_protected = FALSE;
-
- }
-
- if ( pin_flag_set ) {
-
- HDassert ( entry_ptr->header.is_pinned );
- entry_ptr->is_pinned = TRUE;
-
- } else if ( unpin_flag_set ) {
-
- HDassert ( ! ( entry_ptr->header.is_pinned ) );
- entry_ptr->is_pinned = FALSE;
-
- }
- }
-
- HDassert( ((entry_ptr->header).type)->id == type );
-
- if ( ( flags & H5C1__DIRTIED_FLAG ) != 0
- && ( (flags & H5C1__DELETED_FLAG) == 0 ) ) {
-
- HDassert( entry_ptr->header.is_dirty );
- HDassert( entry_ptr->is_dirty );
- }
-
- HDassert( entry_ptr->header.is_protected == entry_ptr->is_protected );
- HDassert( entry_ptr->header.is_read_only == entry_ptr->is_read_only );
- HDassert( entry_ptr->header.ro_ref_count == entry_ptr->ro_ref_count );
- }
-
- return;
-
-} /* unprotect_entry1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: unprotect_entry1_with_size_change()
- *
- * Purpose: Version of unprotect_entry1() that allow access to the new
- * size change parameters in H5C1_unprotect_entry1()
- *
- * At present, only the sizes of VARIABLE_ENTRY_TYPE entries
- * can be changed. Thus this function will scream and die
- * if the H5C1__SIZE_CHANGED_FLAG is set and the type is not
- * VARIABLE_ENTRY_TYPE.
- *
- * Do nothing if pass1 is FALSE on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 8/31/06
- *
- * Modifications:
- *
- * None.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-unprotect_entry1_with_size_change(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx,
- unsigned int flags,
- size_t new_size)
-{
- /* const char * fcn_name = "unprotect_entry1_with_size_change()"; */
- herr_t result;
- hbool_t dirty_flag_set;
- hbool_t pin_flag_set;
- hbool_t unpin_flag_set;
- hbool_t size_changed_flag_set;
- test_entry_t * base_addr;
- test_entry_t * entry_ptr;
-
- if ( pass1 ) {
-
- HDassert( cache_ptr );
- HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
- HDassert( ( 0 <= idx ) && ( idx <= max_indices1[type] ) );
- HDassert( new_size <= entry_sizes1[type] );
-
- base_addr = entries1[type];
- entry_ptr = &(base_addr[idx]);
-
- HDassert( entry_ptr->index == idx );
- HDassert( entry_ptr->type == type );
- HDassert( entry_ptr == entry_ptr->self );
- HDassert( entry_ptr->cache_ptr == cache_ptr );
- HDassert( entry_ptr->header.is_protected );
- HDassert( entry_ptr->is_protected );
-
- dirty_flag_set = ((flags & H5C1__DIRTIED_FLAG) != 0 );
- pin_flag_set = ((flags & H5C1__PIN_ENTRY_FLAG) != 0 );
- unpin_flag_set = ((flags & H5C1__UNPIN_ENTRY_FLAG) != 0 );
- size_changed_flag_set = ((flags & H5C1__SIZE_CHANGED_FLAG) != 0 );
-
- HDassert ( ! ( pin_flag_set && unpin_flag_set ) );
- HDassert ( ( ! pin_flag_set ) || ( ! (entry_ptr->is_pinned) ) );
- HDassert ( ( ! unpin_flag_set ) || ( entry_ptr->is_pinned ) );
- HDassert ( ( ! size_changed_flag_set ) || ( new_size > 0 ) );
- HDassert ( ( ! size_changed_flag_set ) ||
- ( type == VARIABLE_ENTRY_TYPE ) );
-
- entry_ptr->is_dirty = (entry_ptr->is_dirty || dirty_flag_set);
-
- if ( size_changed_flag_set ) {
-
- entry_ptr->is_dirty = TRUE;
- entry_ptr->size = new_size;
- }
-
- result = H5C1_unprotect(NULL, -1, -1, cache_ptr, &(types1[type]),
- entry_ptr->addr, (void *)entry_ptr,
- flags, new_size);
-
- if ( ( result < 0 ) ||
- ( entry_ptr->header.is_protected ) ||
- ( entry_ptr->header.type != &(types1[type]) ) ||
- ( entry_ptr->size != entry_ptr->header.size ) ||
- ( entry_ptr->addr != entry_ptr->header.addr ) ) {
-
- pass1 = FALSE;
- failure_mssg1 = "error in H5C1_unprotect().";
-
- }
- else
- {
- entry_ptr->is_protected = FALSE;
-
- if ( pin_flag_set ) {
-
- HDassert ( entry_ptr->header.is_pinned );
- entry_ptr->is_pinned = TRUE;
-
- } else if ( unpin_flag_set ) {
-
- HDassert ( ! ( entry_ptr->header.is_pinned ) );
- entry_ptr->is_pinned = FALSE;
-
- }
- }
-
- HDassert( ((entry_ptr->header).type)->id == type );
-
- if ( ( flags & H5C1__DIRTIED_FLAG ) != 0
- && ( (flags & H5C1__DELETED_FLAG) == 0 ) ) {
-
- HDassert( entry_ptr->header.is_dirty );
- HDassert( entry_ptr->is_dirty );
- }
- }
-
- return;
-
-} /* unprotect_entry1_with_size_change() */
-
-
-/*-------------------------------------------------------------------------
- * Function: row_major_scan_forward1()
- *
- * Purpose: Do a sequence of inserts, protects, unprotects, renames,
- * destroys while scanning through the set of entries. If
- * pass1 is false on entry, do nothing.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/12/04
- *
- * Modifications:
- *
- * JRM -- 4/4/07
- * Added code supporting multiple read only protects.
- * Note that this increased the minimum lag to 10.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-row_major_scan_forward1(H5C1_t * cache_ptr,
- int32_t lag,
- hbool_t verbose,
- hbool_t reset_stats,
- hbool_t display_stats,
- hbool_t display_detailed_stats,
- hbool_t do_inserts,
- hbool_t dirty_inserts,
- hbool_t do_renames,
- hbool_t rename_to_main_addr,
- hbool_t do_destroys,
- hbool_t do_mult_ro_protects,
- int dirty_destroys,
- int dirty_unprotects)
-{
- const char * fcn_name = "row_major_scan_forward1";
- int32_t type;
- int32_t idx;
-
- if ( verbose )
- HDfprintf(stdout, "%s(): entering.\n", fcn_name);
-
- HDassert( lag >= 10 );
-
- type = 0;
-
- if ( ( pass1 ) && ( reset_stats ) ) {
-
- H5C1_stats__reset(cache_ptr);
- }
-
- while ( ( pass1 ) && ( type < NUMBER_OF_ENTRY_TYPES ) )
- {
- idx = -lag;
-
- while ( ( pass1 ) && ( idx <= (max_indices1[type] + lag) ) )
- {
- if ( verbose ) {
-
- HDfprintf(stdout, "%d:%d: ", type, idx);
- }
-
- if ( ( pass1 ) && ( do_inserts ) && ( (idx + lag) >= 0 ) &&
- ( (idx + lag) <= max_indices1[type] ) &&
- ( ((idx + lag) % 2) == 0 ) &&
- ( ! entry_in_cache1(cache_ptr, type, (idx + lag)) ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(i, %d, %d) ", type, (idx + lag));
-
- insert_entry1(cache_ptr, type, (idx + lag), dirty_inserts,
- H5C1__NO_FLAGS_SET);
- }
-
-
- if ( ( pass1 ) && ( (idx + lag - 1) >= 0 ) &&
- ( (idx + lag - 1) <= max_indices1[type] ) &&
- ( ( (idx + lag - 1) % 3 ) == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p, %d, %d) ", type, (idx + lag - 1));
-
- protect_entry1(cache_ptr, type, (idx + lag - 1));
- }
-
- if ( ( pass1 ) && ( (idx + lag - 2) >= 0 ) &&
- ( (idx + lag - 2) <= max_indices1[type] ) &&
- ( ( (idx + lag - 2) % 3 ) == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u, %d, %d) ", type, (idx + lag - 2));
-
- unprotect_entry1(cache_ptr, type, idx+lag-2, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
- }
-
-
- if ( ( pass1 ) && ( do_renames ) && ( (idx + lag - 2) >= 0 ) &&
- ( (idx + lag - 2) <= max_indices1[type] ) &&
- ( ( (idx + lag - 2) % 3 ) == 0 ) ) {
-
- rename_entry1(cache_ptr, type, (idx + lag - 2),
- rename_to_main_addr);
- }
-
-
- if ( ( pass1 ) && ( (idx + lag - 3) >= 0 ) &&
- ( (idx + lag - 3) <= max_indices1[type] ) &&
- ( ( (idx + lag - 3) % 5 ) == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p, %d, %d) ", type, (idx + lag - 3));
-
- protect_entry1(cache_ptr, type, (idx + lag - 3));
- }
-
- if ( ( pass1 ) && ( (idx + lag - 5) >= 0 ) &&
- ( (idx + lag - 5) <= max_indices1[type] ) &&
- ( ( (idx + lag - 5) % 5 ) == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u, %d, %d) ", type, (idx + lag - 5));
-
- unprotect_entry1(cache_ptr, type, idx+lag-5, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
- }
-
- if ( do_mult_ro_protects )
- {
- if ( ( pass1 ) && ( (idx + lag - 5) >= 0 ) &&
- ( (idx + lag - 5) < max_indices1[type] ) &&
- ( (idx + lag - 5) % 9 == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p-ro, %d, %d) ", type,
- (idx + lag - 5));
-
- protect_entry_ro1(cache_ptr, type, (idx + lag - 5));
- }
-
- if ( ( pass1 ) && ( (idx + lag - 6) >= 0 ) &&
- ( (idx + lag - 6) < max_indices1[type] ) &&
- ( (idx + lag - 6) % 11 == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p-ro, %d, %d) ", type,
- (idx + lag - 6));
-
- protect_entry_ro1(cache_ptr, type, (idx + lag - 6));
- }
-
- if ( ( pass1 ) && ( (idx + lag - 7) >= 0 ) &&
- ( (idx + lag - 7) < max_indices1[type] ) &&
- ( (idx + lag - 7) % 13 == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p-ro, %d, %d) ", type,
- (idx + lag - 7));
-
- protect_entry_ro1(cache_ptr, type, (idx + lag - 7));
- }
-
- if ( ( pass1 ) && ( (idx + lag - 7) >= 0 ) &&
- ( (idx + lag - 7) < max_indices1[type] ) &&
- ( (idx + lag - 7) % 9 == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u-ro, %d, %d) ", type,
- (idx + lag - 7));
-
- unprotect_entry1(cache_ptr, type, (idx + lag - 7),
- FALSE, H5C1__NO_FLAGS_SET);
- }
-
- if ( ( pass1 ) && ( (idx + lag - 8) >= 0 ) &&
- ( (idx + lag - 8) < max_indices1[type] ) &&
- ( (idx + lag - 8) % 11 == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u-ro, %d, %d) ", type,
- (idx + lag - 8));
-
- unprotect_entry1(cache_ptr, type, (idx + lag - 8),
- FALSE, H5C1__NO_FLAGS_SET);
- }
-
- if ( ( pass1 ) && ( (idx + lag - 9) >= 0 ) &&
- ( (idx + lag - 9) < max_indices1[type] ) &&
- ( (idx + lag - 9) % 13 == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u-ro, %d, %d) ", type,
- (idx + lag - 9));
-
- unprotect_entry1(cache_ptr, type, (idx + lag - 9),
- FALSE, H5C1__NO_FLAGS_SET);
- }
- } /* if ( do_mult_ro_protects ) */
-
- if ( ( pass1 ) && ( idx >= 0 ) && ( idx <= max_indices1[type] ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p, %d, %d) ", type, idx);
-
- protect_entry1(cache_ptr, type, idx);
- }
-
- if ( ( pass1 ) && ( (idx - lag + 2) >= 0 ) &&
- ( (idx - lag + 2) <= max_indices1[type] ) &&
- ( ( (idx - lag + 2) % 7 ) == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u, %d, %d) ", type, (idx - lag + 2));
-
- unprotect_entry1(cache_ptr, type, idx-lag+2, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
- }
-
- if ( ( pass1 ) && ( (idx - lag + 1) >= 0 ) &&
- ( (idx - lag + 1) <= max_indices1[type] ) &&
- ( ( (idx - lag + 1) % 7 ) == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p, %d, %d) ", type, (idx - lag + 1));
-
- protect_entry1(cache_ptr, type, (idx - lag + 1));
- }
-
-
- if ( do_destroys ) {
-
- if ( ( pass1 ) && ( (idx - lag) >= 0 ) &&
- ( ( idx - lag) <= max_indices1[type] ) ) {
-
- switch ( (idx - lag) %4 ) {
-
- case 0: /* we just did an insert */
- unprotect_entry1(cache_ptr, type, idx - lag,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- break;
-
- case 1:
- if ( (entries1[type])[idx-lag].is_dirty ) {
-
- unprotect_entry1(cache_ptr, type, idx - lag,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- } else {
-
- unprotect_entry1(cache_ptr, type, idx - lag,
- dirty_unprotects,
- H5C1__NO_FLAGS_SET);
- }
- break;
-
- case 2: /* we just did an insrt */
- unprotect_entry1(cache_ptr, type, idx - lag,
- NO_CHANGE, H5C1__DELETED_FLAG);
- break;
-
- case 3:
- if ( (entries1[type])[idx-lag].is_dirty ) {
-
- unprotect_entry1(cache_ptr, type, idx - lag,
- NO_CHANGE, H5C1__DELETED_FLAG);
- } else {
-
- unprotect_entry1(cache_ptr, type, idx - lag,
- dirty_destroys,
- H5C1__DELETED_FLAG);
- }
- break;
-
- default:
- HDassert(0); /* this can't happen... */
- break;
- }
- }
-
- } else {
-
- if ( ( pass1 ) && ( (idx - lag) >= 0 ) &&
- ( ( idx - lag) <= max_indices1[type] ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u, %d, %d) ", type, (idx - lag));
-
- unprotect_entry1(cache_ptr, type, idx - lag,
- dirty_unprotects, H5C1__NO_FLAGS_SET);
- }
- }
-
- if ( verbose )
- HDfprintf(stdout, "\n");
-
- idx++;
- }
- type++;
- }
-
- if ( ( pass1 ) && ( display_stats ) ) {
-
- H5C1_stats(cache_ptr, "test cache", display_detailed_stats);
- }
-
- return;
-
-} /* row_major_scan_forward1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: hl_row_major_scan_forward1()
- *
- * Purpose: Do a high locality sequence of inserts, protects, and
- * unprotects while scanning through the set of entries.
- * If pass1 is false on entry, do nothing.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 10/21/04
- *
- * Modifications:
- *
- * JRM -- 1/21/05
- * Added the max_index parameter to allow the caller to
- * throttle the size of the inner loop, and thereby the
- * execution time of the function.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-hl_row_major_scan_forward1(H5C1_t * cache_ptr,
- int32_t max_index,
- hbool_t verbose,
- hbool_t reset_stats,
- hbool_t display_stats,
- hbool_t display_detailed_stats,
- hbool_t do_inserts,
- hbool_t dirty_inserts)
-{
- const char * fcn_name = "hl_row_major_scan_forward1";
- int32_t type;
- int32_t idx;
- int32_t i;
- int32_t lag = 100;
- int32_t local_max_index;
-
- if ( verbose )
- HDfprintf(stdout, "%s(): entering.\n", fcn_name);
-
- HDassert( lag > 5 );
- HDassert( max_index >= 200 );
- HDassert( max_index <= MAX_ENTRIES );
-
- type = 0;
-
- if ( ( pass1 ) && ( reset_stats ) ) {
-
- H5C1_stats__reset(cache_ptr);
- }
-
- while ( ( pass1 ) && ( type < NUMBER_OF_ENTRY_TYPES ) )
- {
- idx = -lag;
-
- local_max_index = MIN(max_index, max_indices1[type]);
-
- while ( ( pass1 ) && ( idx <= (local_max_index + lag) ) )
- {
- if ( ( pass1 ) && ( do_inserts ) && ( (idx + lag) >= 0 ) &&
- ( (idx + lag) <= max_indices1[type] ) &&
- ( ((idx + lag) % 2) == 0 ) &&
- ( ! entry_in_cache1(cache_ptr, type, (idx + lag)) ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(i, %d, %d) ", type, (idx + lag));
-
- insert_entry1(cache_ptr, type, (idx + lag), dirty_inserts,
- H5C1__NO_FLAGS_SET);
- }
-
- i = idx;
-
- while ( ( pass1 ) && ( i >= idx - lag ) && ( i >= 0 ) )
- {
- if ( ( pass1 ) && ( i >= 0 ) && ( i <= local_max_index ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p, %d, %d) ", type, i);
-
- protect_entry1(cache_ptr, type, i);
-
- if ( verbose )
- HDfprintf(stdout, "(u, %d, %d) ", type, i);
-
- unprotect_entry1(cache_ptr, type, i, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
- }
- i--;
- }
-
- if ( verbose )
- HDfprintf(stdout, "\n");
-
- idx++;
- }
- type++;
- }
-
- if ( ( pass1 ) && ( display_stats ) ) {
-
- H5C1_stats(cache_ptr, "test cache", display_detailed_stats);
- }
-
- return;
-
-} /* hl_row_major_scan_forward1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: row_major_scan_backward1()
- *
- * Purpose: Do a sequence of inserts, protects, unprotects, renames,
- * destroys while scanning backwards through the set of
- * entries. If pass1 is false on entry, do nothing.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/12/04
- *
- * Modifications:
- *
- * JRM -- 4/4/07
- * Added code supporting multiple read only protects.
- * Note that this increased the minimum lag to 10.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-row_major_scan_backward1(H5C1_t * cache_ptr,
- int32_t lag,
- hbool_t verbose,
- hbool_t reset_stats,
- hbool_t display_stats,
- hbool_t display_detailed_stats,
- hbool_t do_inserts,
- hbool_t dirty_inserts,
- hbool_t do_renames,
- hbool_t rename_to_main_addr,
- hbool_t do_destroys,
- hbool_t do_mult_ro_protects,
- int dirty_destroys,
- int dirty_unprotects)
-{
- const char * fcn_name = "row_major_scan_backward1";
- int32_t type;
- int32_t idx;
-
- if ( verbose )
- HDfprintf(stdout, "%s(): Entering.\n", fcn_name);
-
- HDassert( lag >= 10 );
-
- type = NUMBER_OF_ENTRY_TYPES - 1;
-
- if ( ( pass1 ) && ( reset_stats ) ) {
-
- H5C1_stats__reset(cache_ptr);
- }
-
- while ( ( pass1 ) && ( type >= 0 ) )
- {
- idx = max_indices1[type] + lag;
-
- while ( ( pass1 ) && ( idx >= -lag ) )
- {
- if ( ( pass1 ) && ( do_inserts ) && ( (idx - lag) >= 0 ) &&
- ( (idx - lag) <= max_indices1[type] ) &&
- ( ((idx - lag) % 2) == 1 ) &&
- ( ! entry_in_cache1(cache_ptr, type, (idx - lag)) ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(i, %d, %d) ", type, (idx - lag));
-
- insert_entry1(cache_ptr, type, (idx - lag), dirty_inserts,
- H5C1__NO_FLAGS_SET);
- }
-
-
- if ( ( pass1 ) && ( (idx - lag + 1) >= 0 ) &&
- ( (idx - lag + 1) <= max_indices1[type] ) &&
- ( ( (idx - lag + 1) % 3 ) == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p, %d, %d) ", type, (idx - lag + 1));
-
- protect_entry1(cache_ptr, type, (idx - lag + 1));
- }
-
- if ( ( pass1 ) && ( (idx - lag + 2) >= 0 ) &&
- ( (idx - lag + 2) <= max_indices1[type] ) &&
- ( ( (idx - lag + 2) % 3 ) == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u, %d, %d) ", type, (idx - lag + 2));
-
- unprotect_entry1(cache_ptr, type, idx-lag+2, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
- }
-
-
- if ( ( pass1 ) && ( do_renames ) && ( (idx - lag + 2) >= 0 ) &&
- ( (idx - lag + 2) <= max_indices1[type] ) &&
- ( ( (idx - lag + 2) % 3 ) == 0 ) ) {
-
- rename_entry1(cache_ptr, type, (idx - lag + 2),
- rename_to_main_addr);
- }
-
-
- if ( ( pass1 ) && ( (idx - lag + 3) >= 0 ) &&
- ( (idx - lag + 3) <= max_indices1[type] ) &&
- ( ( (idx - lag + 3) % 5 ) == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p, %d, %d) ", type, (idx - lag + 3));
-
- protect_entry1(cache_ptr, type, (idx - lag + 3));
- }
-
- if ( ( pass1 ) && ( (idx - lag + 5) >= 0 ) &&
- ( (idx - lag + 5) <= max_indices1[type] ) &&
- ( ( (idx - lag + 5) % 5 ) == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u, %d, %d) ", type, (idx - lag + 5));
-
- unprotect_entry1(cache_ptr, type, idx-lag+5, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
- }
-
- if ( do_mult_ro_protects )
- {
- if ( ( pass1 ) && ( (idx - lag + 5) >= 0 ) &&
- ( (idx - lag + 5) < max_indices1[type] ) &&
- ( (idx - lag + 5) % 9 == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p-ro, %d, %d) ", type,
- (idx - lag + 5));
-
- protect_entry_ro1(cache_ptr, type, (idx - lag + 5));
- }
-
- if ( ( pass1 ) && ( (idx - lag + 6) >= 0 ) &&
- ( (idx - lag + 6) < max_indices1[type] ) &&
- ( (idx - lag + 6) % 11 == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p-ro, %d, %d) ", type,
- (idx - lag + 6));
-
- protect_entry_ro1(cache_ptr, type, (idx - lag + 6));
- }
-
- if ( ( pass1 ) && ( (idx - lag + 7) >= 0 ) &&
- ( (idx - lag + 7) < max_indices1[type] ) &&
- ( (idx - lag + 7) % 13 == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p-ro, %d, %d) ", type,
- (idx - lag + 7));
-
- protect_entry_ro1(cache_ptr, type, (idx - lag + 7));
- }
-
- if ( ( pass1 ) && ( (idx - lag + 7) >= 0 ) &&
- ( (idx - lag + 7) < max_indices1[type] ) &&
- ( (idx - lag + 7) % 9 == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u-ro, %d, %d) ", type,
- (idx - lag + 7));
-
- unprotect_entry1(cache_ptr, type, (idx - lag + 7),
- FALSE, H5C1__NO_FLAGS_SET);
- }
-
- if ( ( pass1 ) && ( (idx - lag + 8) >= 0 ) &&
- ( (idx - lag + 8) < max_indices1[type] ) &&
- ( (idx - lag + 8) % 11 == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u-ro, %d, %d) ", type,
- (idx - lag + 8));
-
- unprotect_entry1(cache_ptr, type, (idx - lag + 8),
- FALSE, H5C1__NO_FLAGS_SET);
- }
-
- if ( ( pass1 ) && ( (idx - lag + 9) >= 0 ) &&
- ( (idx - lag + 9) < max_indices1[type] ) &&
- ( (idx - lag + 9) % 13 == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u-ro, %d, %d) ", type,
- (idx - lag + 9));
-
- unprotect_entry1(cache_ptr, type, (idx - lag + 9),
- FALSE, H5C1__NO_FLAGS_SET);
- }
- } /* if ( do_mult_ro_protects ) */
-
- if ( ( pass1 ) && ( idx >= 0 ) && ( idx <= max_indices1[type] ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p, %d, %d) ", type, idx);
-
- protect_entry1(cache_ptr, type, idx);
- }
-
-
- if ( ( pass1 ) && ( (idx + lag - 2) >= 0 ) &&
- ( (idx + lag - 2) <= max_indices1[type] ) &&
- ( ( (idx + lag - 2) % 7 ) == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u, %d, %d) ", type, (idx + lag - 2));
-
- unprotect_entry1(cache_ptr, type, idx+lag-2, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
- }
-
- if ( ( pass1 ) && ( (idx + lag - 1) >= 0 ) &&
- ( (idx + lag - 1) <= max_indices1[type] ) &&
- ( ( (idx + lag - 1) % 7 ) == 0 ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p, %d, %d) ", type, (idx + lag - 1));
-
- protect_entry1(cache_ptr, type, (idx + lag - 1));
- }
-
-
- if ( do_destroys ) {
-
- if ( ( pass1 ) && ( (idx + lag) >= 0 ) &&
- ( ( idx + lag) <= max_indices1[type] ) ) {
-
- switch ( (idx + lag) %4 ) {
-
- case 0:
- if ( (entries1[type])[idx+lag].is_dirty ) {
-
- unprotect_entry1(cache_ptr, type, idx + lag,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- } else {
-
- unprotect_entry1(cache_ptr, type, idx + lag,
- dirty_unprotects,
- H5C1__NO_FLAGS_SET);
- }
- break;
-
- case 1: /* we just did an insert */
- unprotect_entry1(cache_ptr, type, idx + lag,
- NO_CHANGE, H5C1__NO_FLAGS_SET);
- break;
-
- case 2:
- if ( (entries1[type])[idx + lag].is_dirty ) {
-
- unprotect_entry1(cache_ptr, type, idx + lag,
- NO_CHANGE, H5C1__DELETED_FLAG);
- } else {
-
- unprotect_entry1(cache_ptr, type, idx + lag,
- dirty_destroys,
- H5C1__DELETED_FLAG);
- }
- break;
-
- case 3: /* we just did an insrt */
- unprotect_entry1(cache_ptr, type, idx + lag,
- NO_CHANGE, H5C1__DELETED_FLAG);
- break;
-
- default:
- HDassert(0); /* this can't happen... */
- break;
- }
- }
- } else {
-
- if ( ( pass1 ) && ( (idx + lag) >= 0 ) &&
- ( ( idx + lag) <= max_indices1[type] ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u, %d, %d) ", type, (idx - lag));
-
- unprotect_entry1(cache_ptr, type, idx + lag,
- dirty_unprotects, H5C1__NO_FLAGS_SET);
- }
- }
-
- if ( verbose )
- HDfprintf(stdout, "\n");
-
- idx--;
- }
- type--;
- }
-
- if ( ( pass1 ) && ( display_stats ) ) {
-
- H5C1_stats(cache_ptr, "test cache", display_detailed_stats);
- }
-
- return;
-
-} /* row_major_scan_backward1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: hl_row_major_scan_backward1()
- *
- * Purpose: Do a high locality sequence of inserts, protects, and
- * unprotects while scanning through the set of entries.
- * If pass1 is false on entry, do nothing.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 10/21/04
- *
- * Modifications:
- *
- * JRM -- 1/21/05
- * Added the max_index parameter to allow the caller to
- * throttle the size of the inner loop, and thereby the
- * execution time of the function.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-hl_row_major_scan_backward1(H5C1_t * cache_ptr,
- int32_t max_index,
- hbool_t verbose,
- hbool_t reset_stats,
- hbool_t display_stats,
- hbool_t display_detailed_stats,
- hbool_t do_inserts,
- hbool_t dirty_inserts)
-{
- const char * fcn_name = "hl_row_major_scan_backward1";
- int32_t type;
- int32_t idx;
- int32_t i;
- int32_t lag = 100;
- int32_t local_max_index;
-
- if ( verbose )
- HDfprintf(stdout, "%s(): entering.\n", fcn_name);
-
- HDassert( lag > 5 );
- HDassert( max_index >= 200 );
- HDassert( max_index <= MAX_ENTRIES );
-
- type = NUMBER_OF_ENTRY_TYPES - 1;
-
- if ( ( pass1 ) && ( reset_stats ) ) {
-
- H5C1_stats__reset(cache_ptr);
- }
-
- while ( ( pass1 ) && ( type >= 0 ) )
- {
- idx = max_indices1[type] + lag;
-
- local_max_index = MIN(max_index, max_indices1[type]);
-
- while ( ( pass1 ) && ( idx >= -lag ) )
- {
- if ( ( pass1 ) && ( do_inserts ) && ( (idx + lag) >= 0 ) &&
- ( (idx + lag) <= local_max_index ) &&
- ( ((idx + lag) % 2) == 0 ) &&
- ( ! entry_in_cache1(cache_ptr, type, (idx + lag)) ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(i, %d, %d) ", type, (idx + lag));
-
- insert_entry1(cache_ptr, type, (idx + lag), dirty_inserts,
- H5C1__NO_FLAGS_SET);
- }
-
- i = idx;
-
- while ( ( pass1 ) && ( i >= idx - lag ) && ( i >= 0 ) )
- {
- if ( ( pass1 ) && ( i >= 0 ) && ( i <= local_max_index ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p, %d, %d) ", type, i);
-
- protect_entry1(cache_ptr, type, i);
-
- if ( verbose )
- HDfprintf(stdout, "(u, %d, %d) ", type, i);
-
- unprotect_entry1(cache_ptr, type, i, NO_CHANGE,
- H5C1__NO_FLAGS_SET);
- }
- i--;
- }
-
- if ( verbose )
- HDfprintf(stdout, "\n");
-
- idx--;
- }
- type--;
- }
-
- if ( ( pass1 ) && ( display_stats ) ) {
-
- H5C1_stats(cache_ptr, "test cache", display_detailed_stats);
- }
-
- return;
-
-} /* hl_row_major_scan_backward1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: col_major_scan_forward1()
- *
- * Purpose: Do a sequence of inserts, protects, and unprotects
- * while scanning through the set of entries. If
- * pass1 is false on entry, do nothing.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/23/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-void
-col_major_scan_forward1(H5C1_t * cache_ptr,
- int32_t lag,
- hbool_t verbose,
- hbool_t reset_stats,
- hbool_t display_stats,
- hbool_t display_detailed_stats,
- hbool_t do_inserts,
- hbool_t dirty_inserts,
- int dirty_unprotects)
-{
- const char * fcn_name = "col_major_scan_forward1()";
- int32_t type;
- int32_t idx;
-
- if ( verbose )
- HDfprintf(stdout, "%s: entering.\n", fcn_name);
-
- HDassert( lag > 5 );
-
- type = 0;
-
- if ( ( pass1 ) && ( reset_stats ) ) {
-
- H5C1_stats__reset(cache_ptr);
- }
-
- idx = -lag;
-
- while ( ( pass1 ) && ( (idx - lag) <= MAX_ENTRIES ) )
- {
- type = 0;
-
- while ( ( pass1 ) && ( type < NUMBER_OF_ENTRY_TYPES ) )
- {
- if ( ( pass1 ) && ( do_inserts ) && ( (idx + lag) >= 0 ) &&
- ( (idx + lag) <= max_indices1[type] ) &&
- ( ((idx + lag) % 3) == 0 ) &&
- ( ! entry_in_cache1(cache_ptr, type, (idx + lag)) ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(i, %d, %d) ", type, (idx + lag));
-
- insert_entry1(cache_ptr, type, (idx + lag), dirty_inserts,
- H5C1__NO_FLAGS_SET);
- }
-
- if ( ( pass1 ) && ( idx >= 0 ) && ( idx <= max_indices1[type] ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p, %d, %d) ", type, idx);
-
- protect_entry1(cache_ptr, type, idx);
- }
-
- if ( ( pass1 ) && ( (idx - lag) >= 0 ) &&
- ( (idx - lag) <= max_indices1[type] ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u, %d, %d) ", type, (idx - lag));
-
- unprotect_entry1(cache_ptr, type, idx - lag,
- dirty_unprotects, H5C1__NO_FLAGS_SET);
- }
-
- if ( verbose )
- HDfprintf(stdout, "\n");
-
- type++;
- }
-
- idx++;
- }
-
- if ( ( pass1 ) && ( display_stats ) ) {
-
- H5C1_stats(cache_ptr, "test cache", display_detailed_stats);
- }
-
- return;
-
-} /* col_major_scan_forward1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: hl_col_major_scan_forward1()
- *
- * Purpose: Do a high locality sequence of inserts, protects, and
- * unprotects while scanning through the set of entries. If
- * pass1 is false on entry, do nothing.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 19/25/04
- *
- * Modifications:
- *
- * JRM -- 1/21/05
- * Added the max_index parameter to allow the caller to
- * throttle the size of the inner loop, and thereby the
- * execution time of the function.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-hl_col_major_scan_forward1(H5C1_t * cache_ptr,
- int32_t max_index,
- hbool_t verbose,
- hbool_t reset_stats,
- hbool_t display_stats,
- hbool_t display_detailed_stats,
- hbool_t do_inserts,
- hbool_t dirty_inserts,
- int dirty_unprotects)
-{
- const char * fcn_name = "hl_col_major_scan_forward1()";
- int32_t type;
- int32_t idx;
- int32_t lag = 200;
- int32_t i;
- int32_t local_max_index;
-
- if ( verbose )
- HDfprintf(stdout, "%s: entering.\n", fcn_name);
-
- HDassert( lag > 5 );
- HDassert( max_index >= 500 );
- HDassert( max_index <= MAX_ENTRIES );
-
- type = 0;
-
- if ( ( pass1 ) && ( reset_stats ) ) {
-
- H5C1_stats__reset(cache_ptr);
- }
-
- idx = 0;
-
- local_max_index = MIN(max_index, MAX_ENTRIES);
-
- while ( ( pass1 ) && ( idx <= local_max_index ) )
- {
-
- i = idx;
-
- while ( ( pass1 ) && ( i >= 0 ) && ( i >= (idx - lag) ) ) {
-
- type = 0;
-
- while ( ( pass1 ) && ( type < NUMBER_OF_ENTRY_TYPES ) )
- {
- if ( ( pass1 ) && ( do_inserts ) && ( i == idx ) &&
- ( i <= local_max_index ) &&
- ( (i % 3) == 0 ) &&
- ( ! entry_in_cache1(cache_ptr, type, i) ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(i, %d, %d) ", type, i);
-
- insert_entry1(cache_ptr, type, i, dirty_inserts,
- H5C1__NO_FLAGS_SET);
- }
-
- if ( ( pass1 ) && ( i >= 0 ) && ( i <= local_max_index ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p, %d, %d) ", type, i);
-
- protect_entry1(cache_ptr, type, i);
- }
-
- if ( ( pass1 ) && ( i >= 0 ) &&
- ( i <= max_indices1[type] ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u, %d, %d) ", type, i);
-
- unprotect_entry1(cache_ptr, type, i,
- dirty_unprotects, H5C1__NO_FLAGS_SET);
- }
-
- if ( verbose )
- HDfprintf(stdout, "\n");
-
- type++;
- }
-
- i--;
- }
-
- idx++;
- }
-
- if ( ( pass1 ) && ( display_stats ) ) {
-
- H5C1_stats(cache_ptr, "test cache", display_detailed_stats);
- }
-
- return;
-
-} /* hl_col_major_scan_forward1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: col_major_scan_backward1()
- *
- * Purpose: Do a sequence of inserts, protects, and unprotects
- * while scanning backwards through the set of
- * entries. If pass1 is false on entry, do nothing.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 6/23/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-void
-col_major_scan_backward1(H5C1_t * cache_ptr,
- int32_t lag,
- hbool_t verbose,
- hbool_t reset_stats,
- hbool_t display_stats,
- hbool_t display_detailed_stats,
- hbool_t do_inserts,
- hbool_t dirty_inserts,
- int dirty_unprotects)
-{
- const char * fcn_name = "col_major_scan_backward1()";
- int mile_stone = 1;
- int32_t type;
- int32_t idx;
-
- if ( verbose )
- HDfprintf(stdout, "%s: entering.\n", fcn_name);
-
- HDassert( lag > 5 );
-
- if ( ( pass1 ) && ( reset_stats ) ) {
-
- H5C1_stats__reset(cache_ptr);
- }
-
- idx = MAX_ENTRIES + lag;
-
- if ( verbose ) /* 1 */
- HDfprintf(stdout, "%s: point %d.\n", fcn_name, mile_stone++);
-
-
- while ( ( pass1 ) && ( (idx + lag) >= 0 ) )
- {
- type = NUMBER_OF_ENTRY_TYPES - 1;
-
- while ( ( pass1 ) && ( type >= 0 ) )
- {
- if ( ( pass1 ) && ( do_inserts) && ( (idx - lag) >= 0 ) &&
- ( (idx - lag) <= max_indices1[type] ) &&
- ( ((idx - lag) % 3) == 0 ) &&
- ( ! entry_in_cache1(cache_ptr, type, (idx - lag)) ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(i, %d, %d) ", type, (idx - lag));
-
- insert_entry1(cache_ptr, type, (idx - lag), dirty_inserts,
- H5C1__NO_FLAGS_SET);
- }
-
- if ( ( pass1 ) && ( idx >= 0 ) && ( idx <= max_indices1[type] ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p, %d, %d) ", type, idx);
-
- protect_entry1(cache_ptr, type, idx);
- }
-
- if ( ( pass1 ) && ( (idx + lag) >= 0 ) &&
- ( (idx + lag) <= max_indices1[type] ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u, %d, %d) ", type, (idx + lag));
-
- unprotect_entry1(cache_ptr, type, idx + lag,
- dirty_unprotects, H5C1__NO_FLAGS_SET);
- }
-
- if ( verbose )
- HDfprintf(stdout, "\n");
-
- type--;
- }
-
- idx--;
- }
-
- if ( verbose ) /* 2 */
- HDfprintf(stdout, "%s: point %d.\n", fcn_name, mile_stone++);
-
- if ( ( pass1 ) && ( display_stats ) ) {
-
- H5C1_stats(cache_ptr, "test cache", display_detailed_stats);
- }
-
- if ( verbose )
- HDfprintf(stdout, "%s: exiting.\n", fcn_name);
-
- return;
-
-} /* col_major_scan_backward1() */
-
-
-/*-------------------------------------------------------------------------
- * Function: hl_col_major_scan_backward1()
- *
- * Purpose: Do a high locality sequence of inserts, protects, and
- * unprotects while scanning backwards through the set of
- * entries. If pass1 is false on entry, do nothing.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 10/25/04
- *
- * Modifications:
- *
- * JRM -- 1/21/05
- * Added the max_index parameter to allow the caller to
- * throttle the size of the inner loop, and thereby the
- * execution time of the function.
- *
- *-------------------------------------------------------------------------
- */
-
-void
-hl_col_major_scan_backward1(H5C1_t * cache_ptr,
- int32_t max_index,
- hbool_t verbose,
- hbool_t reset_stats,
- hbool_t display_stats,
- hbool_t display_detailed_stats,
- hbool_t do_inserts,
- hbool_t dirty_inserts,
- int dirty_unprotects)
-{
- const char * fcn_name = "hl_col_major_scan_backward1()";
- int32_t type;
- int32_t idx;
- int32_t lag = 50;
- int32_t i;
- int32_t local_max_index;
-
- if ( verbose )
- HDfprintf(stdout, "%s: entering.\n", fcn_name);
-
- HDassert( lag > 5 );
- HDassert( max_index >= 500 );
- HDassert( max_index <= MAX_ENTRIES );
-
- type = 0;
-
- local_max_index = MIN(max_index, MAX_ENTRIES);
-
- if ( ( pass1 ) && ( reset_stats ) ) {
-
- H5C1_stats__reset(cache_ptr);
- }
-
- idx = local_max_index;
-
- while ( ( pass1 ) && ( idx >= 0 ) )
- {
-
- i = idx;
-
- while ( ( pass1 ) && ( i <= local_max_index ) && ( i <= (idx + lag) ) ) {
-
- type = 0;
-
- while ( ( pass1 ) && ( type < NUMBER_OF_ENTRY_TYPES ) )
- {
- if ( ( pass1 ) && ( do_inserts ) && ( i == idx ) &&
- ( i <= local_max_index ) &&
- ( ! entry_in_cache1(cache_ptr, type, i) ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(i, %d, %d) ", type, i);
-
- insert_entry1(cache_ptr, type, i, dirty_inserts,
- H5C1__NO_FLAGS_SET);
- }
-
- if ( ( pass1 ) && ( i >= 0 ) && ( i <= local_max_index ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(p, %d, %d) ", type, i);
-
- protect_entry1(cache_ptr, type, i);
- }
-
- if ( ( pass1 ) && ( i >= 0 ) &&
- ( i <= local_max_index ) ) {
-
- if ( verbose )
- HDfprintf(stdout, "(u, %d, %d) ", type, i);
-
- unprotect_entry1(cache_ptr, type, i,
- dirty_unprotects, H5C1__NO_FLAGS_SET);
- }
-
- if ( verbose )
- HDfprintf(stdout, "\n");
-
- type++;
- }
-
- i++;
- }
-
- idx--;
- }
-
- if ( ( pass1 ) && ( display_stats ) ) {
-
- H5C1_stats(cache_ptr, "test cache", display_detailed_stats);
- }
-
- return;
-
-} /* hl_col_major_scan_backward1() */
-
diff --git a/test/cache1_common.h b/test/cache1_common.h
deleted file mode 100644
index ac9c680..0000000
--- a/test/cache1_common.h
+++ /dev/null
@@ -1,786 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* Programmer: John Mainzer
- * 10/27/05
- *
- * This file contains common #defines, type definitions, and
- * externs for tests of the cache implemented in H5C.c
- */
-#include "h5test.h"
-#include "H5Iprivate.h"
-#include "H5AC1private.h"
-
-#define H5C1_PACKAGE /*suppress error about including H5Cpkg */
-
-#include "H5C1pkg.h"
-
-#define H5F_PACKAGE /*suppress error about including H5Fpkg */
-
-#include "H5Fpkg.h"
-
-#define NO_CHANGE -1
-
-/* with apologies for the abuse of terminology... */
-
-#define PICO_ENTRY_TYPE 0
-#define NANO_ENTRY_TYPE 1
-#define MICRO_ENTRY_TYPE 2
-#define TINY_ENTRY_TYPE 3
-#define SMALL_ENTRY_TYPE 4
-#define MEDIUM_ENTRY_TYPE 5
-#define LARGE_ENTRY_TYPE 6
-#define HUGE_ENTRY_TYPE 7
-#define MONSTER_ENTRY_TYPE 8
-#define VARIABLE_ENTRY_TYPE 9
-
-#define NUMBER_OF_ENTRY_TYPES 10
-
-#define PICO_ENTRY_SIZE (size_t)1
-#define NANO_ENTRY_SIZE (size_t)4
-#define MICRO_ENTRY_SIZE (size_t)16
-#define TINY_ENTRY_SIZE (size_t)64
-#define SMALL_ENTRY_SIZE (size_t)256
-#define MEDIUM_ENTRY_SIZE (size_t)1024
-#define LARGE_ENTRY_SIZE (size_t)(4 * 1024)
-#define HUGE_ENTRY_SIZE (size_t)(16 * 1024)
-#define MONSTER_ENTRY_SIZE (size_t)(64 * 1024)
-#define VARIABLE_ENTRY_SIZE (size_t)(10 * 1024)
-
-#define NUM_PICO_ENTRIES (10 * 1024)
-#define NUM_NANO_ENTRIES (10 * 1024)
-#define NUM_MICRO_ENTRIES (10 * 1024)
-#define NUM_TINY_ENTRIES (10 * 1024)
-#define NUM_SMALL_ENTRIES (10 * 1024)
-#define NUM_MEDIUM_ENTRIES (10 * 1024)
-#define NUM_LARGE_ENTRIES (10 * 1024)
-#define NUM_HUGE_ENTRIES (10 * 1024)
-#define NUM_MONSTER_ENTRIES (10 * 1024)
-#define NUM_VARIABLE_ENTRIES (10 * 1024)
-
-#define MAX_ENTRIES (10 * 1024)
-
-#define PICO_BASE_ADDR (haddr_t)0
-#define NANO_BASE_ADDR (haddr_t)(PICO_BASE_ADDR + \
- (PICO_ENTRY_SIZE * NUM_PICO_ENTRIES))
-#define MICRO_BASE_ADDR (haddr_t)(NANO_BASE_ADDR + \
- (NANO_ENTRY_SIZE * NUM_NANO_ENTRIES))
-#define TINY_BASE_ADDR (haddr_t)(MICRO_BASE_ADDR + \
- (MICRO_ENTRY_SIZE * NUM_MICRO_ENTRIES))
-#define SMALL_BASE_ADDR (haddr_t)(TINY_BASE_ADDR + \
- (TINY_ENTRY_SIZE * NUM_TINY_ENTRIES))
-#define MEDIUM_BASE_ADDR (haddr_t)(SMALL_BASE_ADDR + \
- (SMALL_ENTRY_SIZE * NUM_SMALL_ENTRIES))
-#define LARGE_BASE_ADDR (haddr_t)(MEDIUM_BASE_ADDR + \
- (MEDIUM_ENTRY_SIZE * NUM_MEDIUM_ENTRIES))
-#define HUGE_BASE_ADDR (haddr_t)(LARGE_BASE_ADDR + \
- (LARGE_ENTRY_SIZE * NUM_LARGE_ENTRIES))
-#define MONSTER_BASE_ADDR (haddr_t)(HUGE_BASE_ADDR + \
- (HUGE_ENTRY_SIZE * NUM_HUGE_ENTRIES))
-#define VARIABLE_BASE_ADDR (haddr_t)(MONSTER_BASE_ADDR + \
- (MONSTER_ENTRY_SIZE * NUM_MONSTER_ENTRIES))
-
-#define PICO_ALT_BASE_ADDR (haddr_t)(VARIABLE_BASE_ADDR + \
- (VARIABLE_ENTRY_SIZE * NUM_VARIABLE_ENTRIES))
-#define NANO_ALT_BASE_ADDR (haddr_t)(PICO_ALT_BASE_ADDR + \
- (PICO_ENTRY_SIZE * NUM_PICO_ENTRIES))
-#define MICRO_ALT_BASE_ADDR (haddr_t)(NANO_ALT_BASE_ADDR + \
- (NANO_ENTRY_SIZE * NUM_NANO_ENTRIES))
-#define TINY_ALT_BASE_ADDR (haddr_t)(MICRO_ALT_BASE_ADDR + \
- (MICRO_ENTRY_SIZE * NUM_MICRO_ENTRIES))
-#define SMALL_ALT_BASE_ADDR (haddr_t)(TINY_ALT_BASE_ADDR + \
- (TINY_ENTRY_SIZE * NUM_TINY_ENTRIES))
-#define MEDIUM_ALT_BASE_ADDR (haddr_t)(SMALL_ALT_BASE_ADDR + \
- (SMALL_ENTRY_SIZE * NUM_SMALL_ENTRIES))
-#define LARGE_ALT_BASE_ADDR (haddr_t)(MEDIUM_ALT_BASE_ADDR + \
- (MEDIUM_ENTRY_SIZE * NUM_MEDIUM_ENTRIES))
-#define HUGE_ALT_BASE_ADDR (haddr_t)(LARGE_ALT_BASE_ADDR + \
- (LARGE_ENTRY_SIZE * NUM_LARGE_ENTRIES))
-#define MONSTER_ALT_BASE_ADDR (haddr_t)(HUGE_ALT_BASE_ADDR + \
- (HUGE_ENTRY_SIZE * NUM_HUGE_ENTRIES))
-#define VARIABLE_ALT_BASE_ADDR (haddr_t)(MONSTER_ALT_BASE_ADDR + \
- (MONSTER_ENTRY_SIZE * NUM_MONSTER_ENTRIES))
-
-#define MAX_PINS 8 /* Maximum number of entries that can be
- * directly pinned by a single entry.
- */
-
-#define FLUSH_OP__NO_OP 0
-#define FLUSH_OP__DIRTY 1
-#define FLUSH_OP__RESIZE 2
-#define FLUSH_OP__RENAME 3
-#define FLUSH_OP__MAX_OP 3
-
-#define MAX_FLUSH_OPS 10 /* Maximum number of flush operations
- * that can be associated with a
- * cache entry.
- */
-
-typedef struct flush_op
-{
- int op_code; /* integer op code indicating the
- * operation to be performed. At
- * present it must be one of:
- *
- * FLUSH_OP__NO_OP
- * FLUSH_OP__DIRTY
- * FLUSH_OP__RESIZE
- * FLUSH_OP__RENAME
- */
- int type; /* type code of the cache entry that
- * is the target of the operation.
- * This value is pass1ed into the
- * function implementing the flush
- * operation.
- */
- int idx; /* index of the cache entry that
- * is the target of the operation.
- * This value is pass1ed into the
- * function implementing the flush
- * operation.
- */
- hbool_t flag; /* boolean flag pass1ed into the
- * function implementing the flush
- * operation. The meaning of the
- * flag is dependant upon the flush
- * operation:
- *
- * FLUSH_OP__DIRTY: TRUE iff the
- * target is pinned, and is to
- * be dirtied via the
- * H5C1_mark_pinned_entry_dirty()
- * call.
- *
- * FLUSH_OP__RESIZE: TRUE iff the
- * target is pinned, and is to
- * be resized via the
- * H5C1_mark_pinned_entry_dirty()
- * call.
- *
- * FLUSH_OP__RENAME: TRUE iff the
- * target is to be renamed to
- * its main address.
- */
- size_t size; /* New target size in the
- * FLUSH_OP__RENAME operation.
- * Unused elsewhere.
- */
-} flush_op;
-
-typedef struct test_entry_t
-{
- H5C1_cache_entry_t header; /* entry data used by the cache
- * -- must be first
- */
- struct test_entry_t * self; /* pointer to this entry -- used for
- * sanity checking.
- */
- H5C1_t * cache_ptr; /* pointer to the cache in which
- * the entry resides, or NULL if the
- * entry is not in cache.
- */
- haddr_t addr; /* where the cache thinks this entry
- * is located
- */
- hbool_t at_main_addr; /* boolean flag indicating whether
- * the entry is supposed to be at
- * either its main or alternate
- * address.
- */
- haddr_t main_addr; /* initial location of the entry
- */
- haddr_t alt_addr; /* location to which the entry
- * can be relocated or "renamed"
- */
- size_t size; /* how big the cache thinks this
- * entry is
- */
- int32_t type; /* indicates which entry array this
- * entry is in
- */
- int32_t index; /* index in its entry array
- */
- int32_t reads; /* number of times this entry has
- * been loaded.
- */
- int32_t writes; /* number of times this entry has
- * been written
- */
- hbool_t is_dirty; /* entry has been modified since
- * last write
- */
- hbool_t is_protected; /* entry should currently be on
- * the cache's protected list.
- */
- hbool_t is_read_only; /* TRUE iff the entry should be
- * protected read only.
- */
- int ro_ref_count; /* Number of outstanding read only
- * protects on the entry.
- */
- hbool_t is_pinned; /* entry is currently pinned in
- * the cache.
- */
- int pinning_ref_count; /* Number of entries that
- * pin this entry in the cache.
- * When this count drops to zero,
- * this entry should be unpinned.
- */
- int num_pins; /* Number of entries that this
- * entry pins in the cache. This
- * value must be in the range
- * [0, MAX_PINS].
- */
- int pin_type[MAX_PINS]; /* array of the types1 of entries
- * pinned by this entry.
- */
- int pin_idx[MAX_PINS]; /* array of the indicies of
- * entries pinned by this entry.
- */
- int num_flush_ops; /* integer field containing the
- * number of flush operations to
- * be executed when the entry is
- * flushed. This value must lie in
- * the closed interval
- * [0, MAX_FLUSH_OPS].
- */
- struct flush_op flush_ops[MAX_FLUSH_OPS]; /* Array of instances
- * of struct flush_op detailing the
- * flush operations (if any) that
- * are to be executed when the entry
- * is flushed from the cache.
- *
- * num_flush_ops contains the number
- * of valid entries in this array.
- */
- hbool_t flush_op_self_resize_in_progress; /* Boolean flag
- * that is set to TRUE iff this
- * entry is being flushed, it has
- * been resized by a resize flush
- * op, and the flush function has
- * not yet returned, This field is
- * used to turn off overactive santity
- * checking code that would otherwise
- * cause a false test failure.
- */
- hbool_t loaded; /* entry has been loaded since the
- * last time it was reset.
- */
- hbool_t cleared; /* entry has been cleared since the
- * last time it was reset.
- */
- hbool_t flushed; /* entry has been flushed since the
- * last time it was reset.
- */
- hbool_t destroyed; /* entry has been destroyed since the
- * last time it was reset.
- */
-} test_entry_t;
-
-/* The following is a cut down copy of the hash table manipulation
- * macros from H5C.c, which have been further modified to avoid references
- * to the error reporting macros. Needless to say, these macros must be
- * updated as necessary.
- */
-
-#define H5C1__HASH_MASK ((size_t)(H5C1__HASH_TABLE_LEN - 1) << 3)
-#define H5C1__HASH_FCN(x) (int)(((x) & H5C1__HASH_MASK) >> 3)
-
-#define H5C1__PRE_HT_SEARCH_SC(cache_ptr, Addr) \
-if ( ( (cache_ptr) == NULL ) || \
- ( (cache_ptr)->magic != H5C1__H5C1_T_MAGIC ) || \
- ( ! H5F_addr_defined(Addr) ) || \
- ( H5C1__HASH_FCN(Addr) < 0 ) || \
- ( H5C1__HASH_FCN(Addr) >= H5C1__HASH_TABLE_LEN ) ) { \
- HDfprintf(stdout, "Pre HT search SC failed.\n"); \
-}
-
-#define H5C1__POST_SUC_HT_SEARCH_SC(cache_ptr, entry_ptr, Addr, k) \
-if ( ( (cache_ptr) == NULL ) || \
- ( (cache_ptr)->magic != H5C1__H5C1_T_MAGIC ) || \
- ( (cache_ptr)->index_len < 1 ) || \
- ( (entry_ptr) == NULL ) || \
- ( (cache_ptr)->index_size < (entry_ptr)->size ) || \
- ( H5F_addr_ne((entry_ptr)->addr, (Addr)) ) || \
- ( (entry_ptr)->size <= 0 ) || \
- ( ((cache_ptr)->index)[k] == NULL ) || \
- ( ( ((cache_ptr)->index)[k] != (entry_ptr) ) && \
- ( (entry_ptr)->ht_prev == NULL ) ) || \
- ( ( ((cache_ptr)->index)[k] == (entry_ptr) ) && \
- ( (entry_ptr)->ht_prev != NULL ) ) || \
- ( ( (entry_ptr)->ht_prev != NULL ) && \
- ( (entry_ptr)->ht_prev->ht_next != (entry_ptr) ) ) || \
- ( ( (entry_ptr)->ht_next != NULL ) && \
- ( (entry_ptr)->ht_next->ht_prev != (entry_ptr) ) ) ) { \
- HDfprintf(stdout, "Post successful HT search SC failed.\n"); \
-}
-
-
-#define H5C1__SEARCH_INDEX(cache_ptr, Addr, entry_ptr) \
-{ \
- int k; \
- int depth = 0; \
- H5C1__PRE_HT_SEARCH_SC(cache_ptr, Addr) \
- k = H5C1__HASH_FCN(Addr); \
- entry_ptr = ((cache_ptr)->index)[k]; \
- while ( ( entry_ptr ) && ( H5F_addr_ne(Addr, (entry_ptr)->addr) ) ) \
- { \
- (entry_ptr) = (entry_ptr)->ht_next; \
- (depth)++; \
- } \
- if ( entry_ptr ) \
- { \
- H5C1__POST_SUC_HT_SEARCH_SC(cache_ptr, entry_ptr, Addr, k) \
- if ( entry_ptr != ((cache_ptr)->index)[k] ) \
- { \
- if ( (entry_ptr)->ht_next ) \
- { \
- (entry_ptr)->ht_next->ht_prev = (entry_ptr)->ht_prev; \
- } \
- HDassert( (entry_ptr)->ht_prev != NULL ); \
- (entry_ptr)->ht_prev->ht_next = (entry_ptr)->ht_next; \
- ((cache_ptr)->index)[k]->ht_prev = (entry_ptr); \
- (entry_ptr)->ht_next = ((cache_ptr)->index)[k]; \
- (entry_ptr)->ht_prev = NULL; \
- ((cache_ptr)->index)[k] = (entry_ptr); \
- } \
- } \
-}
-
-
-/* misc type definitions */
-
-struct flush_cache_test_spec
-{
- int entry_num;
- int entry_type;
- int entry_index;
- hbool_t insert_flag;
- hbool_t dirty_flag;
- unsigned int flags;
- hbool_t expected_loaded;
- hbool_t expected_cleared;
- hbool_t expected_flushed;
- hbool_t expected_destroyed;
-};
-
-struct pe_flush_cache_test_spec
-{
- int entry_num;
- int entry_type;
- int entry_index;
- hbool_t insert_flag;
- hbool_t dirty_flag;
- unsigned int flags;
- int num_pins;
- int pin_type[MAX_PINS];
- int pin_idx[MAX_PINS];
- hbool_t expected_loaded;
- hbool_t expected_cleared;
- hbool_t expected_flushed;
- hbool_t expected_destroyed;
-};
-
-struct fo_flush_entry_check
-{
- int entry_num;
- int entry_type;
- int entry_index;
- size_t expected_size;
- hbool_t in_cache;
- hbool_t at_main_addr;
- hbool_t is_dirty;
- hbool_t is_protected;
- hbool_t is_pinned;
- hbool_t expected_loaded;
- hbool_t expected_cleared;
- hbool_t expected_flushed;
- hbool_t expected_destroyed;
-};
-
-struct fo_flush_cache_test_spec
-{
- int entry_num;
- int entry_type;
- int entry_index;
- hbool_t insert_flag;
- unsigned int flags;
- size_t new_size;
- int num_pins;
- int pin_type[MAX_PINS];
- int pin_idx[MAX_PINS];
- int num_flush_ops;
- struct flush_op flush_ops[MAX_FLUSH_OPS];
- hbool_t expected_loaded;
- hbool_t expected_cleared;
- hbool_t expected_flushed;
- hbool_t expected_destroyed;
-};
-
-struct rename_entry_test_spec
-{
- int entry_type;
- int entry_index;
- hbool_t is_dirty;
- hbool_t is_pinned;
-};
-
-struct expected_entry_status
-{
- int entry_type;
- int entry_index;
- size_t size;
- hbool_t in_cache;
- hbool_t at_main_addr;
- hbool_t is_dirty;
- hbool_t is_protected;
- hbool_t is_pinned;
- hbool_t loaded;
- hbool_t cleared;
- hbool_t flushed;
- hbool_t destroyed;
-};
-
-
-
-
-/* global variable externs: */
-
-extern const char *FILENAME[];
-
-extern hbool_t write_permitted1;
-extern hbool_t pass1; /* set to false on error */
-extern hbool_t skip_long_tests1;
-extern hbool_t run_full_test1;
-extern const char *failure_mssg1;
-
-extern test_entry_t pico_entries1[NUM_PICO_ENTRIES];
-extern test_entry_t nano_entries1[NUM_NANO_ENTRIES];
-extern test_entry_t micro_entries1[NUM_MICRO_ENTRIES];
-extern test_entry_t tiny_entries1[NUM_TINY_ENTRIES];
-extern test_entry_t small_entries1[NUM_SMALL_ENTRIES];
-extern test_entry_t medium_entries1[NUM_MEDIUM_ENTRIES];
-extern test_entry_t large_entries1[NUM_LARGE_ENTRIES];
-extern test_entry_t huge_entries1[NUM_HUGE_ENTRIES];
-extern test_entry_t monster_entries1[NUM_MONSTER_ENTRIES];
-
-extern test_entry_t * entries1[NUMBER_OF_ENTRY_TYPES];
-extern const int32_t max_indices1[NUMBER_OF_ENTRY_TYPES];
-extern const size_t entry_sizes1[NUMBER_OF_ENTRY_TYPES];
-extern const haddr_t base_addrs1[NUMBER_OF_ENTRY_TYPES];
-extern const haddr_t alt_base_addrs1[NUMBER_OF_ENTRY_TYPES];
-extern const char * entry_type_names1[NUMBER_OF_ENTRY_TYPES];
-
-
-/* call back function declarations: */
-
-herr_t check_write_permitted1(const H5F_t * f,
- hid_t dxpl_id,
- hbool_t * write_permitted1_ptr);
-
-herr_t pico_clear(H5F_t * f, void * thing, hbool_t dest);
-herr_t nano_clear(H5F_t * f, void * thing, hbool_t dest);
-herr_t micro_clear(H5F_t * f, void * thing, hbool_t dest);
-herr_t tiny_clear(H5F_t * f, void * thing, hbool_t dest);
-herr_t small_clear(H5F_t * f, void * thing, hbool_t dest);
-herr_t medium_clear(H5F_t * f, void * thing, hbool_t dest);
-herr_t large_clear(H5F_t * f, void * thing, hbool_t dest);
-herr_t huge_clear(H5F_t * f, void * thing, hbool_t dest);
-herr_t monster_clear(H5F_t * f, void * thing, hbool_t dest);
-herr_t variable_clear(H5F_t * f, void * thing, hbool_t dest);
-
-
-herr_t pico_dest(H5F_t * f, void * thing);
-herr_t nano_dest(H5F_t * f, void * thing);
-herr_t micro_dest(H5F_t * f, void * thing);
-herr_t tiny_dest(H5F_t * f, void * thing);
-herr_t small_dest(H5F_t * f, void * thing);
-herr_t medium_dest(H5F_t * f, void * thing);
-herr_t large_dest(H5F_t * f, void * thing);
-herr_t huge_dest(H5F_t * f, void * thing);
-herr_t monster_dest(H5F_t * f, void * thing);
-herr_t variable_dest(H5F_t * f, void * thing);
-
-
-herr_t pico_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
- haddr_t addr, void *thing, unsigned * flags_ptr);
-herr_t nano_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
- haddr_t addr, void *thing, unsigned * flags_ptr);
-herr_t micro_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
- haddr_t addr, void *thing, unsigned * flags_ptr);
-herr_t tiny_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
- haddr_t addr, void *thing, unsigned * flags_ptr);
-herr_t small_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
- haddr_t addr, void *thing, unsigned * flags_ptr);
-herr_t medium_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
- haddr_t addr, void *thing, unsigned * flags_ptr);
-herr_t large_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
- haddr_t addr, void *thing, unsigned * flags_ptr);
-herr_t huge_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
- haddr_t addr, void *thing, unsigned * flags_ptr);
-herr_t monster_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
- haddr_t addr, void *thing, unsigned * flags_ptr);
-herr_t variable_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
- haddr_t addr, void *thing, unsigned * flags_ptr);
-
-
-void * pico_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2);
-void * nano_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2);
-void * micro_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2);
-void * tiny_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2);
-void * small_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2);
-void * medium_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2);
-void * large_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2);
-void * huge_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2);
-void * monster_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2);
-void * variable_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
- const void *udata1, void *udata2);
-
-
-herr_t pico_size(H5F_t * f, void * thing, size_t * size_ptr);
-herr_t nano_size(H5F_t * f, void * thing, size_t * size_ptr);
-herr_t micro_size(H5F_t * f, void * thing, size_t * size_ptr);
-herr_t tiny_size(H5F_t * f, void * thing, size_t * size_ptr);
-herr_t small_size(H5F_t * f, void * thing, size_t * size_ptr);
-herr_t medium_size(H5F_t * f, void * thing, size_t * size_ptr);
-herr_t large_size(H5F_t * f, void * thing, size_t * size_ptr);
-herr_t huge_size(H5F_t * f, void * thing, size_t * size_ptr);
-herr_t monster_size(H5F_t * f, void * thing, size_t * size_ptr);
-herr_t variable_size(H5F_t * f, void * thing, size_t * size_ptr);
-
-/* callback table extern */
-
-extern const H5C1_class_t types1[NUMBER_OF_ENTRY_TYPES];
-
-
-/* function declarations: */
-
-void add_flush_op1(int target_type,
- int target_idx,
- int op_code,
- int type,
- int idx,
- hbool_t flag,
- size_t size);
-
-
-void addr_to_type_and_index1(haddr_t addr,
- int32_t * type_ptr,
- int32_t * index_ptr);
-
-#if 0 /* keep this for a while -- it may be useful */
-haddr_t type_and_index_to_addr1(int32_t type,
- int32_t idx);
-#endif
-
-void dirty_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx,
- hbool_t dirty_pin);
-
-void expunge_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx);
-
-void insert_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx,
- hbool_t dirty,
- unsigned int flags);
-
-void mark_pinned_entry_dirty1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx,
- hbool_t size_changed,
- size_t new_size);
-
-void mark_pinned_or_protected_entry_dirty1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx);
-
-void rename_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx,
- hbool_t main_addr);
-
-void protect_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx);
-
-void protect_entry_ro1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx);
-
-hbool_t entry_in_cache1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx);
-
-void create_pinned_entry_dependency1(H5C1_t * cache_ptr,
- int pinning_type,
- int pinning_idx,
- int pinned_type,
- int pinned_idx);
-
-void execute_flush_op1(H5C1_t * cache_ptr,
- struct test_entry_t * entry_ptr,
- struct flush_op * op_ptr,
- unsigned * flags_ptr);
-
-void reset_entries1(void);
-
-void resize_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx,
- size_t new_size,
- hbool_t resize_pin);
-
-void resize_pinned_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx,
- size_t new_size);
-
-H5C1_t * setup_cache1(size_t max_cache_size, size_t min_clean_size);
-
-void row_major_scan_forward1(H5C1_t * cache_ptr,
- int32_t lag,
- hbool_t verbose,
- hbool_t reset_stats,
- hbool_t display_stats,
- hbool_t display_detailed_stats,
- hbool_t do_inserts,
- hbool_t dirty_inserts,
- hbool_t do_renames,
- hbool_t rename_to_main_addr,
- hbool_t do_destroys,
- hbool_t do_mult_ro_protects,
- int dirty_destroys,
- int dirty_unprotects);
-
-void hl_row_major_scan_forward1(H5C1_t * cache_ptr,
- int32_t max_index,
- hbool_t verbose,
- hbool_t reset_stats,
- hbool_t display_stats,
- hbool_t display_detailed_stats,
- hbool_t do_inserts,
- hbool_t dirty_inserts);
-
-void row_major_scan_backward1(H5C1_t * cache_ptr,
- int32_t lag,
- hbool_t verbose,
- hbool_t reset_stats,
- hbool_t display_stats,
- hbool_t display_detailed_stats,
- hbool_t do_inserts,
- hbool_t dirty_inserts,
- hbool_t do_renames,
- hbool_t rename_to_main_addr,
- hbool_t do_destroys,
- hbool_t do_mult_ro_protects,
- int dirty_destroys,
- int dirty_unprotects);
-
-void hl_row_major_scan_backward1(H5C1_t * cache_ptr,
- int32_t max_index,
- hbool_t verbose,
- hbool_t reset_stats,
- hbool_t display_stats,
- hbool_t display_detailed_stats,
- hbool_t do_inserts,
- hbool_t dirty_inserts);
-
-void col_major_scan_forward1(H5C1_t * cache_ptr,
- int32_t lag,
- hbool_t verbose,
- hbool_t reset_stats,
- hbool_t display_stats,
- hbool_t display_detailed_stats,
- hbool_t do_inserts,
- hbool_t dirty_inserts,
- int dirty_unprotects);
-
-void hl_col_major_scan_forward1(H5C1_t * cache_ptr,
- int32_t max_index,
- hbool_t verbose,
- hbool_t reset_stats,
- hbool_t display_stats,
- hbool_t display_detailed_stats,
- hbool_t do_inserts,
- hbool_t dirty_inserts,
- int dirty_unprotects);
-
-void col_major_scan_backward1(H5C1_t * cache_ptr,
- int32_t lag,
- hbool_t verbose,
- hbool_t reset_stats,
- hbool_t display_stats,
- hbool_t display_detailed_stats,
- hbool_t do_inserts,
- hbool_t dirty_inserts,
- int dirty_unprotects);
-
-void hl_col_major_scan_backward1(H5C1_t * cache_ptr,
- int32_t max_index,
- hbool_t verbose,
- hbool_t reset_stats,
- hbool_t display_stats,
- hbool_t display_detailed_stats,
- hbool_t do_inserts,
- hbool_t dirty_inserts,
- int dirty_unprotects);
-
-void takedown_cache1(H5C1_t * cache_ptr,
- hbool_t dump_stats,
- hbool_t dump_detailed_stats);
-
-void flush_cache1(H5C1_t * cache_ptr,
- hbool_t destroy_entries,
- hbool_t dump_stats,
- hbool_t dump_detailed_stats);
-
-void unpin_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx);
-
-void unprotect_entry1(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx,
- int dirty,
- unsigned int flags);
-
-void unprotect_entry1_with_size_change(H5C1_t * cache_ptr,
- int32_t type,
- int32_t idx,
- unsigned int flags,
- size_t new_size);
-
-void verify_clean1(void);
-
-void verify_entry_status1(H5C1_t * cache_ptr,
- int tag,
- int num_entries,
- struct expected_entry_status expected[]);
-
-void verify_unprotected1(void);
-
diff --git a/test/cache_api.c b/test/cache_api.c
index 3a7a56d..3d5db5e 100644
--- a/test/cache_api.c
+++ b/test/cache_api.c
@@ -156,7 +156,7 @@ check_fapl_mdc_api_calls(void)
scratch.version = H5C__CURR_AUTO_SIZE_CTL_VER;
- result = H5Pget_mdc_config(fapl_id, (H5AC1_cache_config_t *)&scratch);
+ result = H5Pget_mdc_config(fapl_id, (H5AC_cache_config_t *)&scratch);
if ( result < 0 ) {
@@ -179,7 +179,7 @@ check_fapl_mdc_api_calls(void)
if ( pass ) {
- result = H5Pset_mdc_config(fapl_id, (H5AC1_cache_config_t *)&mod_config);
+ result = H5Pset_mdc_config(fapl_id, (H5AC_cache_config_t *)&mod_config);
if ( result < 0 ) {
@@ -194,7 +194,7 @@ check_fapl_mdc_api_calls(void)
scratch.version = H5C__CURR_AUTO_SIZE_CTL_VER;
- result = H5Pget_mdc_config(fapl_id, (H5AC1_cache_config_t *)&scratch);
+ result = H5Pget_mdc_config(fapl_id, (H5AC_cache_config_t *)&scratch);
if ( result < 0 ) {
@@ -322,7 +322,7 @@ check_fapl_mdc_api_calls(void)
scratch.version = H5C__CURR_AUTO_SIZE_CTL_VER;
- result = H5Pget_mdc_config(fapl_id, (H5AC1_cache_config_t *)&scratch);
+ result = H5Pget_mdc_config(fapl_id, (H5AC_cache_config_t *)&scratch);
if ( result < 0 ) {
@@ -386,7 +386,7 @@ check_fapl_mdc_api_calls(void)
if ( pass ) {
- result = H5Pset_mdc_config(fapl_id, (H5AC1_cache_config_t *)&mod_config);
+ result = H5Pset_mdc_config(fapl_id, (H5AC_cache_config_t *)&mod_config);
if ( result < 0 ) {
@@ -491,7 +491,7 @@ check_fapl_mdc_api_calls(void)
scratch.version = H5C__CURR_AUTO_SIZE_CTL_VER;
- result = H5Pget_mdc_config(test_fapl_id, (H5AC1_cache_config_t *)&scratch);
+ result = H5Pget_mdc_config(test_fapl_id, (H5AC_cache_config_t *)&scratch);
if ( result < 0 ) {
@@ -763,7 +763,7 @@ check_file_mdc_api_calls(void)
/* set alternate config 1 */
if ( pass ) {
- if ( H5Fset_mdc_config(file_id, (H5AC1_cache_config_t *)&mod_config_1) < 0 ) {
+ if ( H5Fset_mdc_config(file_id, (H5AC_cache_config_t *)&mod_config_1) < 0 ) {
pass = FALSE;
failure_mssg = "H5Fset_mdc_config() failed 1.\n";
@@ -776,7 +776,7 @@ check_file_mdc_api_calls(void)
/* set alternate config 2 */
if ( pass ) {
- if ( H5Fset_mdc_config(file_id, (H5AC1_cache_config_t *)&mod_config_2) < 0 ) {
+ if ( H5Fset_mdc_config(file_id, (H5AC_cache_config_t *)&mod_config_2) < 0 ) {
pass = FALSE;
failure_mssg = "H5Fset_mdc_config() failed 2.\n";
@@ -789,7 +789,7 @@ check_file_mdc_api_calls(void)
/* set alternate config 3 */
if ( pass ) {
- if ( H5Fset_mdc_config(file_id, (H5AC1_cache_config_t *)&mod_config_3) < 0 ) {
+ if ( H5Fset_mdc_config(file_id, (H5AC_cache_config_t *)&mod_config_3) < 0 ) {
pass = FALSE;
failure_mssg = "H5Fset_mdc_config() failed 3.\n";
@@ -802,7 +802,7 @@ check_file_mdc_api_calls(void)
/* set alternate config 4 */
if ( pass ) {
- if ( H5Fset_mdc_config(file_id, (H5AC1_cache_config_t *)&mod_config_4) < 0 ) {
+ if ( H5Fset_mdc_config(file_id, (H5AC_cache_config_t *)&mod_config_4) < 0 ) {
pass = FALSE;
failure_mssg = "H5Fset_mdc_config() failed 4.\n";
@@ -1103,7 +1103,7 @@ mdc_api_call_smoke_check(void)
/* set alternate config 1 */
if ( pass ) {
- if ( H5Fset_mdc_config(file_id, (H5AC1_cache_config_t *)&mod_config_1)
+ if ( H5Fset_mdc_config(file_id, (H5AC_cache_config_t *)&mod_config_1)
< 0 ) {
pass = FALSE;
@@ -1338,7 +1338,7 @@ mdc_api_call_smoke_check(void)
/* set alternate config 2 */
if ( pass ) {
- if ( H5Fset_mdc_config(file_id, (H5AC1_cache_config_t *)&mod_config_2)
+ if ( H5Fset_mdc_config(file_id, (H5AC_cache_config_t *)&mod_config_2)
< 0 ) {
pass = FALSE;
@@ -1490,7 +1490,7 @@ mdc_api_call_smoke_check(void)
/* set alternate config 3 */
if ( pass ) {
- if ( H5Fset_mdc_config(file_id, (H5AC1_cache_config_t *)&mod_config_3) < 0 ) {
+ if ( H5Fset_mdc_config(file_id, (H5AC_cache_config_t *)&mod_config_3) < 0 ) {
pass = FALSE;
failure_mssg = "H5Fset_mdc_config() failed 3.\n";
@@ -3094,7 +3094,7 @@ check_fapl_mdc_api_errs(void)
if ( pass ) {
H5E_BEGIN_TRY {
- result = H5Pget_mdc_config(-1, (H5AC1_cache_config_t *)&scratch);
+ result = H5Pget_mdc_config(-1, (H5AC_cache_config_t *)&scratch);
} H5E_END_TRY;
if ( result >= 0 ) {
@@ -3121,7 +3121,7 @@ check_fapl_mdc_api_errs(void)
scratch.version = H5C__CURR_AUTO_SIZE_CTL_VER;
if ( ( pass ) &&
- ( ( H5Pget_mdc_config(fapl_id, (H5AC1_cache_config_t *)&scratch) < 0) ||
+ ( ( H5Pget_mdc_config(fapl_id, (H5AC_cache_config_t *)&scratch) < 0) ||
( !CACHE_CONFIGS_EQUAL(default_config, scratch, TRUE, TRUE) ) ) ) {
pass = FALSE;
@@ -3147,7 +3147,7 @@ check_fapl_mdc_api_errs(void)
if ( pass ) {
H5E_BEGIN_TRY {
- result = H5Pget_mdc_config(fapl_id, (H5AC1_cache_config_t *)&scratch);
+ result = H5Pget_mdc_config(fapl_id, (H5AC_cache_config_t *)&scratch);
} H5E_END_TRY;
if ( result >= 0 ) {
@@ -3165,7 +3165,7 @@ check_fapl_mdc_api_errs(void)
if ( pass ) {
H5E_BEGIN_TRY {
- result = H5Pset_mdc_config(-1, (H5AC1_cache_config_t *)&default_config);
+ result = H5Pset_mdc_config(-1, (H5AC_cache_config_t *)&default_config);
} H5E_END_TRY;
if ( result >= 0 ) {
@@ -3192,7 +3192,7 @@ check_fapl_mdc_api_errs(void)
while ( ( pass ) && ( i < NUM_INVALID_CONFIGS ) )
{
H5E_BEGIN_TRY {
- result = H5Pset_mdc_config(fapl_id, (H5AC1_cache_config_t *)&(invalid_configs[i]));
+ result = H5Pset_mdc_config(fapl_id, (H5AC_cache_config_t *)&(invalid_configs[i]));
} H5E_END_TRY;
if ( result >= 0 ) {
@@ -3210,7 +3210,7 @@ check_fapl_mdc_api_errs(void)
*/
scratch.version = H5C__CURR_AUTO_SIZE_CTL_VER;
if ( ( pass ) &&
- ( ( H5Pget_mdc_config(fapl_id, (H5AC1_cache_config_t *)&scratch) < 0 ) ||
+ ( ( H5Pget_mdc_config(fapl_id, (H5AC_cache_config_t *)&scratch) < 0 ) ||
( !CACHE_CONFIGS_EQUAL(default_config, scratch, TRUE, TRUE) ) ) ) {
pass = FALSE;
@@ -3317,7 +3317,7 @@ check_file_mdc_api_errs(void)
}
H5E_BEGIN_TRY {
- result = H5Fget_mdc_config(-1, (H5AC1_cache_config_t *)&scratch);
+ result = H5Fget_mdc_config(-1, (H5AC_cache_config_t *)&scratch);
} H5E_END_TRY;
if ( result >= 0 ) {
@@ -3354,7 +3354,7 @@ check_file_mdc_api_errs(void)
}
H5E_BEGIN_TRY {
- result = H5Fget_mdc_config(file_id, (H5AC1_cache_config_t *)&scratch);
+ result = H5Fget_mdc_config(file_id, (H5AC_cache_config_t *)&scratch);
} H5E_END_TRY;
if ( result >= 0 ) {
@@ -3376,7 +3376,7 @@ check_file_mdc_api_errs(void)
}
H5E_BEGIN_TRY {
- result = H5Fset_mdc_config(-1, (H5AC1_cache_config_t *)&default_config);
+ result = H5Fset_mdc_config(-1, (H5AC_cache_config_t *)&default_config);
} H5E_END_TRY;
if ( result >= 0 ) {
@@ -3416,7 +3416,7 @@ check_file_mdc_api_errs(void)
H5E_BEGIN_TRY {
result =
- H5Fset_mdc_config(file_id, (H5AC1_cache_config_t *)&(invalid_configs[i]));
+ H5Fset_mdc_config(file_id, (H5AC_cache_config_t *)&(invalid_configs[i]));
} H5E_END_TRY;
if ( result >= 0 ) {
diff --git a/test/cache_common.c b/test/cache_common.c
index c4ae165..39fce27 100644
--- a/test/cache_common.c
+++ b/test/cache_common.c
@@ -1092,120 +1092,100 @@ free_icr(test_entry_t *entry_ptr)
} /* free_icr() */
herr_t
-pico_free_icr(haddr_t addr, size_t len, void * thing)
+pico_free_icr(void * thing)
{
test_entry_t * entry_ptr = (test_entry_t *)thing;
- HDassert( entry_ptr->addr == addr );
- HDassert( entry_ptr->size == len );
HDassert( entry_ptr->type == PICO_ENTRY_TYPE );
return(free_icr(entry_ptr));
}
herr_t
-nano_free_icr(haddr_t addr, size_t len, void * thing)
+nano_free_icr(void * thing)
{
test_entry_t * entry_ptr = (test_entry_t *)thing;
- HDassert( entry_ptr->addr == addr );
- HDassert( entry_ptr->size == len );
HDassert( entry_ptr->type == NANO_ENTRY_TYPE );
return(free_icr(entry_ptr));
}
herr_t
-micro_free_icr(haddr_t addr, size_t len, void * thing)
+micro_free_icr(void * thing)
{
test_entry_t * entry_ptr = (test_entry_t *)thing;
- HDassert( entry_ptr->addr == addr );
- HDassert( entry_ptr->size == len );
HDassert( entry_ptr->type == MICRO_ENTRY_TYPE );
return(free_icr(entry_ptr));
}
herr_t
-tiny_free_icr(haddr_t addr, size_t len, void * thing)
+tiny_free_icr(void * thing)
{
test_entry_t * entry_ptr = (test_entry_t *)thing;
- HDassert( entry_ptr->addr == addr );
- HDassert( entry_ptr->size == len );
HDassert( entry_ptr->type == TINY_ENTRY_TYPE );
return(free_icr(entry_ptr));
}
herr_t
-small_free_icr(haddr_t addr, size_t len, void * thing)
+small_free_icr(void * thing)
{
test_entry_t * entry_ptr = (test_entry_t *)thing;
- HDassert( entry_ptr->addr == addr );
- HDassert( entry_ptr->size == len );
HDassert( entry_ptr->type == SMALL_ENTRY_TYPE );
return(free_icr(entry_ptr));
}
herr_t
-medium_free_icr(haddr_t addr, size_t len, void * thing)
+medium_free_icr(void * thing)
{
test_entry_t * entry_ptr = (test_entry_t *)thing;
- HDassert( entry_ptr->addr == addr );
- HDassert( entry_ptr->size == len );
HDassert( entry_ptr->type == MEDIUM_ENTRY_TYPE );
return(free_icr(entry_ptr));
}
herr_t
-large_free_icr(haddr_t addr, size_t len, void * thing)
+large_free_icr(void * thing)
{
test_entry_t * entry_ptr = (test_entry_t *)thing;
- HDassert( entry_ptr->addr == addr );
- HDassert( entry_ptr->size == len );
HDassert( entry_ptr->type == LARGE_ENTRY_TYPE );
return(free_icr(entry_ptr));
}
herr_t
-huge_free_icr(haddr_t addr, size_t len, void * thing)
+huge_free_icr(void * thing)
{
test_entry_t * entry_ptr = (test_entry_t *)thing;
- HDassert( entry_ptr->addr == addr );
- HDassert( entry_ptr->size == len );
HDassert( entry_ptr->type == HUGE_ENTRY_TYPE );
return(free_icr(entry_ptr));
}
herr_t
-monster_free_icr(haddr_t addr, size_t len, void * thing)
+monster_free_icr(void * thing)
{
test_entry_t * entry_ptr = (test_entry_t *)thing;
- HDassert( entry_ptr->addr == addr );
- HDassert( entry_ptr->size == len );
HDassert( entry_ptr->type == MONSTER_ENTRY_TYPE );
return(free_icr(entry_ptr));
}
herr_t
-variable_free_icr(haddr_t addr, size_t len, void * thing)
+variable_free_icr(void * thing)
{
test_entry_t * entry_ptr = (test_entry_t *)thing;
- HDassert( entry_ptr->addr == addr );
- HDassert( entry_ptr->size == len );
HDassert( entry_ptr->type == VARIABLE_ENTRY_TYPE );
return(free_icr(entry_ptr));
@@ -5838,7 +5818,7 @@ validate_mdc_config(hid_t file_id,
scratch.version = H5AC__CURR_CACHE_CONFIG_VERSION;
- if ( H5Fget_mdc_config(file_id, (H5AC1_cache_config_t *)&scratch) < 0 ) {
+ if ( H5Fget_mdc_config(file_id, (H5AC_cache_config_t *)&scratch) < 0 ) {
pass = FALSE;
HDsnprintf(msg, (size_t)128,
diff --git a/test/cache_common.h b/test/cache_common.h
index 00aa1e3..6fe8ae4 100644
--- a/test/cache_common.h
+++ b/test/cache_common.h
@@ -718,16 +718,16 @@ herr_t variable_serialize(const H5F_t *f, hid_t dxpl_id, haddr_t addr,
haddr_t * new_addr_ptr, size_t * new_len_ptr,
void ** new_image_ptr_ptr);
-herr_t pico_free_icr(haddr_t addr, size_t len, void * thing);
-herr_t nano_free_icr(haddr_t addr, size_t len, void * thing);
-herr_t micro_free_icr(haddr_t addr, size_t len, void * thing);
-herr_t tiny_free_icr(haddr_t addr, size_t len, void * thing);
-herr_t small_free_icr(haddr_t addr, size_t len, void * thing);
-herr_t medium_free_icr(haddr_t addr, size_t len, void * thing);
-herr_t large_free_icr(haddr_t addr, size_t len, void * thing);
-herr_t huge_free_icr(haddr_t addr, size_t len, void * thing);
-herr_t monster_free_icr(haddr_t addr, size_t len, void * thing);
-herr_t variable_free_icr(haddr_t addr, size_t len, void * thing);
+herr_t pico_free_icr(void * thing);
+herr_t nano_free_icr(void * thing);
+herr_t micro_free_icr(void * thing);
+herr_t tiny_free_icr(void * thing);
+herr_t small_free_icr(void * thing);
+herr_t medium_free_icr(void * thing);
+herr_t large_free_icr(void * thing);
+herr_t huge_free_icr(void * thing);
+herr_t monster_free_icr(void * thing);
+herr_t variable_free_icr(void * thing);
/* callback table extern */
diff --git a/test/cache_jnl_file_marking.c b/test/cache_jnl_file_marking.c
index 646f71b..a5c7649 100644
--- a/test/cache_jnl_file_marking.c
+++ b/test/cache_jnl_file_marking.c
@@ -682,7 +682,7 @@ setup_cache_for_journaling(const char * hdf_file_name,
if ( pass ) {
- result = H5Pset_mdc_config(fapl_id, (H5AC1_cache_config_t *)&mdj_config);
+ result = H5Pset_mdc_config(fapl_id, (H5AC_cache_config_t *)&mdj_config);
if ( result < 0 ) {
diff --git a/test/cache_journal.c b/test/cache_journal.c
index 49340fa..a39515c 100644
--- a/test/cache_journal.c
+++ b/test/cache_journal.c
@@ -2465,7 +2465,7 @@ setup_cache_for_journaling(const char * hdf_file_name,
if ( pass ) {
- result = H5Pset_mdc_config(fapl_id, (H5AC1_cache_config_t *)&mdj_config);
+ result = H5Pset_mdc_config(fapl_id, (H5AC_cache_config_t *)&mdj_config);
if ( result < 0 ) {
diff --git a/testpar/Makefile.am b/testpar/Makefile.am
index 60c1685..a2759f1 100644
--- a/testpar/Makefile.am
+++ b/testpar/Makefile.am
@@ -25,7 +25,7 @@ INCLUDES=-I$(top_srcdir)/src -I$(top_srcdir)/test
# Test programs and scripts. These are our main targets.
#
-TEST_PROG_PARA=t_mpi t_posix_compliant testphdf5 t_cache1 t_cache \
+TEST_PROG_PARA=t_mpi t_posix_compliant testphdf5 t_cache \
t_pflush1 t_pflush2
TEST_SCRIPT_PARA=testph5.sh
diff --git a/testpar/Makefile.in b/testpar/Makefile.in
index f018401..e61c17e 100644
--- a/testpar/Makefile.in
+++ b/testpar/Makefile.in
@@ -65,16 +65,12 @@ CONFIG_HEADER = $(top_builddir)/src/H5config.h
CONFIG_CLEAN_FILES = testph5.sh
CONFIG_CLEAN_VPATH_FILES =
am__EXEEXT_1 = t_mpi$(EXEEXT) t_posix_compliant$(EXEEXT) \
- testphdf5$(EXEEXT) t_cache1$(EXEEXT) t_cache$(EXEEXT) \
- t_pflush1$(EXEEXT) t_pflush2$(EXEEXT)
+ testphdf5$(EXEEXT) t_cache$(EXEEXT) t_pflush1$(EXEEXT) \
+ t_pflush2$(EXEEXT)
t_cache_SOURCES = t_cache.c
t_cache_OBJECTS = t_cache.$(OBJEXT)
t_cache_LDADD = $(LDADD)
t_cache_DEPENDENCIES = $(LIBH5TEST) $(LIBHDF5)
-t_cache1_SOURCES = t_cache1.c
-t_cache1_OBJECTS = t_cache1.$(OBJEXT)
-t_cache1_LDADD = $(LDADD)
-t_cache1_DEPENDENCIES = $(LIBH5TEST) $(LIBHDF5)
t_mpi_SOURCES = t_mpi.c
t_mpi_OBJECTS = t_mpi.$(OBJEXT)
t_mpi_LDADD = $(LDADD)
@@ -111,9 +107,9 @@ CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
-SOURCES = t_cache.c t_cache1.c t_mpi.c t_pflush1.c t_pflush2.c \
+SOURCES = t_cache.c t_mpi.c t_pflush1.c t_pflush2.c \
t_posix_compliant.c $(testphdf5_SOURCES)
-DIST_SOURCES = t_cache.c t_cache1.c t_mpi.c t_pflush1.c t_pflush2.c \
+DIST_SOURCES = t_cache.c t_mpi.c t_pflush1.c t_pflush2.c \
t_posix_compliant.c $(testphdf5_SOURCES)
ETAGS = etags
CTAGS = ctags
@@ -382,7 +378,7 @@ INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/test
# Test programs and scripts. These are our main targets.
#
-TEST_PROG_PARA = t_mpi t_posix_compliant testphdf5 t_cache1 t_cache \
+TEST_PROG_PARA = t_mpi t_posix_compliant testphdf5 t_cache \
t_pflush1 t_pflush2
TEST_SCRIPT_PARA = testph5.sh
@@ -458,9 +454,6 @@ clean-checkPROGRAMS:
t_cache$(EXEEXT): $(t_cache_OBJECTS) $(t_cache_DEPENDENCIES)
@rm -f t_cache$(EXEEXT)
$(LINK) $(t_cache_OBJECTS) $(t_cache_LDADD) $(LIBS)
-t_cache1$(EXEEXT): $(t_cache1_OBJECTS) $(t_cache1_DEPENDENCIES)
- @rm -f t_cache1$(EXEEXT)
- $(LINK) $(t_cache1_OBJECTS) $(t_cache1_LDADD) $(LIBS)
t_mpi$(EXEEXT): $(t_mpi_OBJECTS) $(t_mpi_DEPENDENCIES)
@rm -f t_mpi$(EXEEXT)
$(LINK) $(t_mpi_OBJECTS) $(t_mpi_LDADD) $(LIBS)
@@ -484,7 +477,6 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_cache.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_cache1.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_chunk_alloc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_coll_chunk.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_dset.Po@am__quote@
diff --git a/testpar/t_cache.c b/testpar/t_cache.c
index aa2f282..95b7cdb3 100644
--- a/testpar/t_cache.c
+++ b/testpar/t_cache.c
@@ -76,8 +76,6 @@ MPI_Comm file_mpi_comm = MPI_COMM_NULL;
* to check the validity of the statistics maintained by H5C.c
*/
-long datum_clears = 0;
-long datum_pinned_clears = 0;
long datum_destroys = 0;
long datum_flushes = 0;
long datum_pinned_flushes = 0;
@@ -317,10 +315,6 @@ hbool_t serve_write_request(struct mssg_t * mssg_ptr);
/* call back functions & related data structures */
-static herr_t datum_clear_dirty_bits(haddr_t addr,
- size_t len,
- void * thing);
-
static void * datum_deserialize(haddr_t addr,
size_t len,
const void * image_ptr,
@@ -341,9 +335,7 @@ static herr_t datum_serialize(const H5F_t *f,
size_t * new_len_ptr,
void ** new_image_ptr_ptr);
-static herr_t datum_free_icr(haddr_t addr,
- size_t len,
- void * thing);
+static herr_t datum_free_icr(void * thing);
#define DATUM_ENTRY_TYPE H5AC_TEST_ID
@@ -359,7 +351,6 @@ const H5C_class_t types[NUMBER_OF_ENTRY_TYPES] =
(H5C_image_len_func_t)datum_image_len,
(H5C_serialize_func_t)datum_serialize,
(H5C_free_icr_func_t)datum_free_icr,
- (H5C_clear_dirty_bits_func_t)datum_clear_dirty_bits
}
};
@@ -445,9 +436,8 @@ void
print_stats(void)
{
HDfprintf(stdout,
- "%d: datum clears / pinned clears / destroys = %ld / %ld / %ld\n",
- world_mpi_rank, datum_clears, datum_pinned_clears,
- datum_destroys );
+ "%d: destroys = %ld\n",
+ world_mpi_rank, datum_destroys );
HDfprintf(stdout,
"%d: datum flushes / pinned flushes / loads = %ld / %ld / %ld\n",
world_mpi_rank, datum_flushes, datum_pinned_flushes,
@@ -480,8 +470,6 @@ print_stats(void)
void
reset_stats(void)
{
- datum_clears = 0;
- datum_pinned_clears = 0;
datum_destroys = 0;
datum_flushes = 0;
datum_pinned_flushes = 0;
@@ -1678,68 +1666,6 @@ serve_write_request(struct mssg_t * mssg_ptr)
/**************************** Call back functions ****************************/
/*****************************************************************************/
-/*-------------------------------------------------------------------------
- * Function: datum_clear_dirty_bits
- *
- * Purpose: Clear the dirty bits of the target entry.
- *
- * Return: SUCCEED
- *
- * Programmer: John Mainzer
- * 10/30/07
- *
- * Modifications:
- *
- * None
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-datum_clear_dirty_bits(UNUSED haddr_t addr,
- UNUSED size_t len,
- void * thing)
-{
- int idx;
- struct datum * entry_ptr;
-
- HDassert( thing );
-
- entry_ptr = (struct datum *)thing;
-
- idx = addr_to_datum_index(entry_ptr->base_addr);
-
- if ( callbacks_verbose ) {
-
- HDfprintf(stdout,
- "%d: clear_dirty_bits() idx = %d, addr = %ld, len = %d.\n",
- world_mpi_rank, idx, (long)addr, (int)len);
- fflush(stdout);
- }
-
- HDassert( idx >= 0 );
- HDassert( idx < NUM_DATA_ENTRIES );
- HDassert( idx < virt_num_data_entries );
- HDassert( &(data[idx]) == entry_ptr );
-
- HDassert( entry_ptr->header.addr == entry_ptr->base_addr );
- HDassert( ( entry_ptr->header.size == entry_ptr->len ) ||
- ( entry_ptr->header.size == entry_ptr->local_len ) );
-
- entry_ptr->dirty = FALSE;
-
- datum_clears++;
-
- if ( entry_ptr->header.is_pinned ) {
-
- datum_pinned_clears++;
- HDassert( entry_ptr->global_pinned || entry_ptr->local_pinned );
- }
-
- return(SUCCEED);
-
-} /* datum_clear_dirty_bits() */
-
/*-------------------------------------------------------------------------
* Function: datum_deserialize
@@ -2151,9 +2077,7 @@ datum_serialize(const H5F_t UNUSED *f,
*/
herr_t
-datum_free_icr(UNUSED haddr_t addr,
- UNUSED size_t len,
- void * thing)
+datum_free_icr(void * thing)
{
int idx;
struct datum * entry_ptr;
@@ -2172,9 +2096,8 @@ datum_free_icr(UNUSED haddr_t addr,
if ( callbacks_verbose ) {
HDfprintf(stdout,
- "%d: free_icr() idx = %d, addr = %ld, len = %d, dirty = %d.\n",
- world_mpi_rank, idx, (long)addr, (int)len,
- (int)(entry_ptr->dirty));
+ "%d: free_icr() idx = %d, dirty = %d.\n",
+ world_mpi_rank, idx, (int)(entry_ptr->dirty));
fflush(stdout);
}
diff --git a/testpar/t_cache1.c b/testpar/t_cache1.c
deleted file mode 100644
index a218a7d..0000000
--- a/testpar/t_cache1.c
+++ /dev/null
@@ -1,5819 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the files COPYING and Copyright.html. COPYING can be found at the root *
- * of the source code distribution tree; Copyright.html can be found at the *
- * root level of an installed copy of the electronic HDF5 document set and *
- * is linked from the top-level documents page. It can also be found at *
- * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
- * access to either file, you may request a copy from help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*
- * Parallel metadata cache tests.
- *
- */
-
-#include "h5test.h"
-#include "testpar.h"
-#include "H5Iprivate.h"
-#include "H5AC1private.h"
-
-#define H5C1_PACKAGE /*suppress error about including H5Cpkg */
-
-#include "H5C1pkg.h"
-
-#define H5AC1_PACKAGE /*suppress error about including H5Cpkg */
-
-#include "H5AC1pkg.h"
-
-#define H5F_PACKAGE /*suppress error about including H5Fpkg */
-
-#include "H5Fpkg.h"
-
-
-int nerrors = 0;
-int failures = 0;
-hbool_t verbose = TRUE; /* used to control error messages */
-#if 0
-/* So far we haven't needed this, but that may change.
- * Keep it around for now
- */
-hid_t noblock_dxpl_id=(-1);
-#endif
-
-#define NFILENAME 2
-#define PARATESTFILE filenames[0]
-const char *FILENAME[NFILENAME]={"CacheTestDummy", NULL};
-char filenames[NFILENAME][PATH_MAX];
-hid_t fapl; /* file access property list */
-
-
-int world_mpi_size = -1;
-int world_mpi_rank = -1;
-int world_server_mpi_rank = -1;
-MPI_Comm world_mpi_comm = MPI_COMM_NULL;
-int file_mpi_size = -1;
-int file_mpi_rank = -1;
-MPI_Comm file_mpi_comm = MPI_COMM_NULL;
-
-
-/* the following globals are used to maintain rudementary statistics
- * to check the validity of the statistics maintained by H5C.c
- */
-
-long datum_clears = 0;
-long datum_pinned_clears = 0;
-long datum_destroys = 0;
-long datum_flushes = 0;
-long datum_pinned_flushes = 0;
-long datum_loads = 0;
-long global_pins = 0;
-long global_dirty_pins = 0;
-long local_pins = 0;
-
-
-/*****************************************************************************
- * struct datum
- *
- * Instances of struct datum are used to store information on entries
- * that may be loaded into the cache. The individual fields are
- * discussed below:
- *
- * header: Instance of H5C1_cache_entry_t used by the for its data.
- * This field is only used on the file processes, not on the
- * server process.
- *
- * This field MUST be the first entry in this structure.
- *
- * base_addr: Base address of the entry.
- *
- * len: Length of the entry.
- *
- * local_len: Length of the entry according to the cache. This
- * value must be positive, and may not be larger than len.
- *
- * The field exists to allow us change the sizes of entries
- * in the cache without upsetting the server. This value
- * is only used locally, and is never sent to the server.
- *
- * ver: Version number of the entry. This number is initialize
- * to zero, and incremented each time the entry is modified.
- *
- * dirty: Boolean flag indicating whether the entry is dirty.
- *
- * For current purposes, an entry is clean until it is
- * modified, and dirty until written to the server (cache
- * on process 0) or until it is marked clean (all other
- * caches).
- *
- * valid: Boolean flag indicating whether the entry contains
- * valid data. Attempts to read an entry whose valid
- * flag is not set should trigger an error.
- *
- * locked: Boolean flag that is set to true iff the entry is in
- * the cache and locked.
- *
- * global_pinned: Boolean flag that is set to true iff the entry has
- * been pinned collectively in all caches. Since writes must
- * be collective across all processes, only entries pinned
- * in this fashion may be marked dirty.
- *
- * local_pinned: Boolean flag that is set to true iff the entry
- * has been pinned in the local cache, but probably not all
- * caches. Such pins will typically not be consistant across
- * processes, and thus cannot be marked as dirty unless they
- * happen to overlap some collective operation.
- *
- * index: Index of this instance of datum in the data_index[] array
- * discussed below.
- *
- *****************************************************************************/
-
-struct datum
-{
- H5C1_cache_entry_t header;
- haddr_t base_addr;
- size_t len;
- size_t local_len;
- int ver;
- hbool_t dirty;
- hbool_t valid;
- hbool_t locked;
- hbool_t global_pinned;
- hbool_t local_pinned;
- int index;
-};
-
-/*****************************************************************************
- * data array
- *
- * The data array is an array of instances of datum of size
- * NUM_DATA_ENTRIES that is used to track the particulars of all
- * the entries that may be loaded into the cache.
- *
- * It exists on all processes, although the master copy is maintained
- * by the server process. If the cache is performing correctly, all
- * versions should be effectively identical. By that I mean that
- * the data received from the server should always match that in
- * the local version of the data array.
- *
- *****************************************************************************/
-
-#define NUM_DATA_ENTRIES 100000
-
-struct datum data[NUM_DATA_ENTRIES];
-
-
-/* Many tests use the size of data array as the size of test loops.
- * On some machines, this results in unacceptably long test runs.
- *
- * To deal with this issue, I have introduced the virt_num_data_entries
- * global, which can be set to a lower value to throtle the length of
- * tests.
- *
- * Note that this value must always be divisible by 40, and must be an
- * even divisor of NUM_DATA_ENTRIES. So far, all tests have been with
- * powers of 10 that meet these criteria.
- *
- * Further, this value must be consistant across all processes.
- */
-
-#define STD_VIRT_NUM_DATA_ENTRIES NUM_DATA_ENTRIES
-#define EXPRESS_VIRT_NUM_DATA_ENTRIES (NUM_DATA_ENTRIES / 10)
-/* Use a smaller test size to avoid creating huge MPE logfiles. */
-#define MPE_VIRT_NUM_DATA_ENTIES (NUM_DATA_ENTRIES / 100)
-
-int virt_num_data_entries = NUM_DATA_ENTRIES;
-
-
-/*****************************************************************************
- * data_index array
- *
- * The data_index array is an array of integer used to maintain a list
- * of instances of datum in the data array in increasing base_addr order.
- *
- * This array is necessary, as rename operations can swap the values
- * of the base_addr fields of two instances of datum. Without this
- * array, we would no longer be able to use a binary search on a sorted
- * list to find the indexes of instances of datum given the values of
- * their base_addr fields.
- *
- *****************************************************************************/
-
-int data_index[NUM_DATA_ENTRIES];
-
-
-/*****************************************************************************
- * struct mssg
- *
- * The mssg structure is used as a generic container for messages to
- * and from the server. Not all fields are used in all cases.
- *
- * req: Integer field containing the type of the message.
- *
- * src: World communicator MPI rank of the sending process.
- *
- * dest: World communicator MPI rank of the destination process.
- *
- * mssg_num: Serial number assigned to the message by the sender.
- *
- * base_addr: Base address of a datum. Not used in all mssgs.
- *
- * len: Length of a datum (in bytes). Not used in all mssgs.
- *
- * ver: Version number of a datum. Not used in all mssgs.
- *
- * magic: Magic number for error detection. Must be set to
- * MSSG_MAGIC.
- *
- *****************************************************************************/
-
-#define DO_WRITE_REQ_ACK FALSE
-#define DO_SYNC_AFTER_WRITE TRUE
-
-#define WRITE_REQ_CODE 0
-#define WRITE_REQ_ACK_CODE 1
-#define READ_REQ_CODE 2
-#define READ_REQ_REPLY_CODE 3
-#define SYNC_REQ_CODE 4
-#define SYNC_ACK_CODE 5
-#define DONE_REQ_CODE 6
-#define MAX_REQ_CODE 6
-
-#define MSSG_MAGIC 0x1248
-
-struct mssg_t
-{
- int req;
- int src;
- int dest;
- long int mssg_num;
- haddr_t base_addr;
- int len;
- int ver;
- unsigned magic;
-};
-
-MPI_Datatype mpi_mssg_t; /* for MPI derived type created from mssg */
-
-
-/*****************************************************************************/
-/************************** function declarations ****************************/
-/*****************************************************************************/
-
-/* stats functions */
-
-void print_stats(void);
-void reset_stats(void);
-
-/* MPI setup functions */
-
-hbool_t set_up_file_communicator(void);
-
-
-/* data array manipulation functions */
-
-int addr_to_datum_index(haddr_t base_addr);
-void init_data(void);
-
-
-/* test coodination related functions */
-
-int do_express_test(void);
-void do_sync(void);
-int get_max_nerrors(void);
-
-
-/* mssg xfer related functions */
-
-hbool_t recv_mssg(struct mssg_t *mssg_ptr, int mssg_tag_offset);
-hbool_t send_mssg(struct mssg_t *mssg_ptr, hbool_t add_req_to_tag);
-hbool_t setup_derived_types(void);
-hbool_t takedown_derived_types(void);
-
-
-/* server functions */
-
-hbool_t server_main(void);
-hbool_t serve_read_request(struct mssg_t * mssg_ptr);
-hbool_t serve_sync_request(struct mssg_t * mssg_ptr);
-hbool_t serve_write_request(struct mssg_t * mssg_ptr);
-
-
-/* call back functions & related data structures */
-
-herr_t clear_datum(H5F_t * f, void * thing, hbool_t dest);
-herr_t destroy_datum(H5F_t UNUSED * f, void * thing);
-herr_t flush_datum(H5F_t *f, hid_t UNUSED dxpl_id, hbool_t dest, haddr_t addr,
- void *thing);
-void * load_datum(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, haddr_t addr,
- const void UNUSED *udata1, void UNUSED *udata2);
-herr_t size_datum(H5F_t UNUSED * f, void * thing, size_t * size_ptr);
-
-#define DATUM_ENTRY_TYPE H5AC1_TEST_ID
-
-#define NUMBER_OF_ENTRY_TYPES 1
-
-const H5C1_class_t types[NUMBER_OF_ENTRY_TYPES] =
-{
- {
- DATUM_ENTRY_TYPE,
- (H5C1_load_func_t)load_datum,
- (H5C1_flush_func_t)flush_datum,
- (H5C1_dest_func_t)destroy_datum,
- (H5C1_clear_func_t)clear_datum,
- (H5C1_size_func_t)size_datum
- }
-};
-
-
-/* test utility functions */
-
-void expunge_entry(H5C1_t * cache_ptr, H5F_t * file_ptr, int32_t idx);
-void insert_entry(H5C1_t * cache_ptr, H5F_t * file_ptr,
- int32_t idx, unsigned int flags);
-void local_pin_and_unpin_random_entries(H5C1_t * cache_ptr, H5F_t * file_ptr,
- int min_idx, int max_idx,
- int min_count, int max_count);
-void local_pin_random_entry(H5C1_t * cache_ptr, H5F_t * file_ptr,
- int min_idx, int max_idx);
-void local_unpin_all_entries(H5C1_t * cache_ptr, H5F_t * file_ptr,
- hbool_t via_unprotect);
-int local_unpin_next_pinned_entry(H5C1_t * cache_ptr, H5F_t * file_ptr,
- int start_idx, hbool_t via_unprotect);
-void lock_and_unlock_random_entries(H5C1_t * cache_ptr, H5F_t * file_ptr,
- int min_idx, int max_idx,
- int min_count, int max_count);
-void lock_and_unlock_random_entry(H5C1_t * cache_ptr, H5F_t * file_ptr,
- int min_idx, int max_idx);
-void lock_entry(H5C1_t * cache_ptr, H5F_t * file_ptr, int32_t idx);
-void mark_pinned_entry_dirty(H5C1_t * cache_ptr, H5F_t * file_ptr,
- int32_t idx, hbool_t size_changed, size_t new_size);
-void mark_pinned_or_protected_entry_dirty(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- int32_t idx);
-void pin_entry(H5C1_t * cache_ptr, H5F_t * file_ptr, int32_t idx,
- hbool_t global, hbool_t dirty);
-void pin_protected_entry(H5C1_t * cache_ptr, H5F_t * file_ptr,
- int32_t idx, hbool_t global);
-void rename_entry(H5C1_t * cache_ptr, H5F_t * file_ptr,
- int32_t old_idx, int32_t new_idx);
-void resize_entry(H5C1_t * cache_ptr, H5F_t * file_ptr,
- int32_t idx, size_t new_size);
-hbool_t setup_cache_for_test(hid_t * fid_ptr, H5F_t ** file_ptr_ptr,
- H5C1_t ** cache_ptr_ptr);
-void setup_rand(void);
-hbool_t take_down_cache(hid_t fid);
-void unlock_entry(H5C1_t * cache_ptr, H5F_t * file_ptr,
- int32_t type, unsigned int flags);
-void unpin_entry(H5C1_t * cache_ptr, H5F_t * file_ptr, int32_t idx,
- hbool_t global, hbool_t dirty, hbool_t via_unprotect);
-
-
-/* test functions */
-
-hbool_t server_smoke_check(void);
-hbool_t smoke_check_1(void);
-hbool_t smoke_check_2(void);
-hbool_t smoke_check_3(void);
-hbool_t smoke_check_4(void);
-hbool_t smoke_check_5(void);
-hbool_t trace_file_check(void);
-
-
-/*****************************************************************************/
-/****************************** stats functions ******************************/
-/*****************************************************************************/
-
-/*****************************************************************************
- *
- * Function: print_stats()
- *
- * Purpose: Print the rudementary stats maintained by t_cache.
- *
- * This is a debugging function, which will not normally
- * be run as part of t_cache.
- *
- * Return: void
- *
- * Programmer: JRM -- 4/17/06
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-
-void
-print_stats(void)
-{
- HDfprintf(stdout,
- "%d: datum clears / pinned clears / destroys = %ld / %ld / %ld\n",
- world_mpi_rank, datum_clears, datum_pinned_clears,
- datum_destroys );
- HDfprintf(stdout,
- "%d: datum flushes / pinned flushes / loads = %ld / %ld / %ld\n",
- world_mpi_rank, datum_flushes, datum_pinned_flushes,
- datum_loads );
- HDfprintf(stdout,
- "%d: pins: global / global dirty / local = %ld / %ld / %ld\n",
- world_mpi_rank, global_pins, global_dirty_pins, local_pins);
- HDfflush(stdout);
-
- return;
-
-} /* print_stats() */
-
-/*****************************************************************************
- *
- * Function: reset_stats()
- *
- * Purpose: Reset the rudementary stats maintained by t_cache.
- *
- * Return: void
- *
- * Programmer: JRM -- 4/17/06
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-
-void
-reset_stats(void)
-{
- datum_clears = 0;
- datum_pinned_clears = 0;
- datum_destroys = 0;
- datum_flushes = 0;
- datum_pinned_flushes = 0;
- datum_loads = 0;
- global_pins = 0;
- global_dirty_pins = 0;
- local_pins = 0;
-
- return;
-
-} /* reset_stats() */
-
-
-/*****************************************************************************/
-/**************************** MPI setup functions ****************************/
-/*****************************************************************************/
-
-/*****************************************************************************
- *
- * Function: set_up_file_communicator()
- *
- * Purpose: Create the MPI communicator used to open a HDF5 file with.
- * In passing, also initialize the file_mpi... globals.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 11/16/05
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-
-hbool_t
-set_up_file_communicator(void)
-{
- const char * fcn_name = "set_up_file_communicator()";
- hbool_t success = TRUE;
- int mpi_result;
- int num_excluded_ranks;
- int excluded_ranks[1];
- MPI_Group file_group;
- MPI_Group world_group;
-
- if ( success ) {
-
- mpi_result = MPI_Comm_group(world_mpi_comm, &world_group);
-
- if ( mpi_result != MPI_SUCCESS ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- fprintf(stdout,
- "%d:%s: MPI_Comm_group() failed with error %d.\n",
- world_mpi_rank, fcn_name, mpi_result);
- }
- }
- }
-
- if ( success ) {
-
- num_excluded_ranks = 1;
- excluded_ranks[0] = world_server_mpi_rank;
- mpi_result = MPI_Group_excl(world_group, num_excluded_ranks,
- excluded_ranks, &file_group);
-
- if ( mpi_result != MPI_SUCCESS ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- fprintf(stdout,
- "%d:%s: MPI_Group_excl() failed with error %d.\n",
- world_mpi_rank, fcn_name, mpi_result);
- }
- }
- }
-
- if ( success ) {
-
- mpi_result = MPI_Comm_create(world_mpi_comm, file_group,
- &file_mpi_comm);
-
- if ( mpi_result != MPI_SUCCESS ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- fprintf(stdout,
- "%d:%s: MPI_Comm_create() failed with error %d.\n",
- world_mpi_rank, fcn_name, mpi_result);
- }
-
- } else {
-
- if ( world_mpi_rank != world_server_mpi_rank ) {
-
- if ( file_mpi_comm == MPI_COMM_NULL ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- fprintf(stdout,
- "%d:%s: file_mpi_comm == MPI_COMM_NULL.\n",
- world_mpi_rank, fcn_name);
- }
- }
- } else {
-
- file_mpi_size = world_mpi_size - 1; /* needed by the server */
-
- if ( file_mpi_comm != MPI_COMM_NULL ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- fprintf(stdout,
- "%d:%s: file_mpi_comm != MPI_COMM_NULL.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
- }
- }
-
- if ( ( success ) && ( world_mpi_rank != world_server_mpi_rank ) ) {
-
- mpi_result = MPI_Comm_size(file_mpi_comm, &file_mpi_size);
-
- if ( mpi_result != MPI_SUCCESS ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- fprintf(stdout,
- "%d:%s: MPI_Comm_size() failed with error %d.\n",
- world_mpi_rank, fcn_name, mpi_result);
- }
- }
- }
-
- if ( ( success ) && ( world_mpi_rank != world_server_mpi_rank ) ) {
-
- mpi_result = MPI_Comm_rank(file_mpi_comm, &file_mpi_rank);
-
- if ( mpi_result != MPI_SUCCESS ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- fprintf(stdout,
- "%d:%s: MPI_Comm_rank() failed with error %d.\n",
- world_mpi_rank, fcn_name, mpi_result);
- }
- }
- }
-
- return(success);
-
-} /* set_up_file_communicator() */
-
-
-/*****************************************************************************/
-/******************** data array manipulation functions **********************/
-/*****************************************************************************/
-
-/*****************************************************************************
- *
- * Function: addr_to_datum_index()
- *
- * Purpose: Given the base address of a datum, find and return its index
- * in the data array.
- *
- * Return: Success: index of target datum.
- *
- * Failure: -1.
- *
- * Programmer: JRM -- 12/20/05
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-
-int
-addr_to_datum_index(haddr_t base_addr)
-{
- /* const char * fcn_name = "addr_to_datum_index()"; */
- int top = NUM_DATA_ENTRIES - 1;
- int bottom = 0;
- int middle = (NUM_DATA_ENTRIES - 1) / 2;
- int ret_value = -1;
-
- while ( top >= bottom )
- {
- if ( base_addr < data[data_index[middle]].base_addr ) {
-
- top = middle - 1;
- middle = (top + bottom) / 2;
-
- } else if ( base_addr > data[data_index[middle]].base_addr ) {
-
- bottom = middle + 1;
- middle = (top + bottom) / 2;
-
- } else /* ( base_addr == data[data_index[middle]].base_addr ) */ {
-
- ret_value = data_index[middle];
- bottom = top + 1; /* to force exit from while loop */
-
- }
- }
-
- return(ret_value);
-
-} /* addr_to_datum_index() */
-
-
-/*****************************************************************************
- *
- * Function: init_data()
- *
- * Purpose: Initialize the data array, from which cache entries are
- * loaded.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 12/20/05
- *
- * Modifications:
- *
- * JRM -- 7/11/06
- * Added support for the local_len field.
- *
- *****************************************************************************/
-
-void
-init_data(void)
-{
- /* const char * fcn_name = "init_data()"; */
- /* The set of address offsets is chosen so as to avoid allowing the
- * base addresses to fall in a pattern of that will annoy the hash
- * table, and to give a good range of entry sizes.
- *
- * At present, I am using the first 20 entries of the Fibonacci
- * sequence multiplied by 2. We will see how it works.
- */
- const int num_addr_offsets = 20;
- const haddr_t addr_offsets[20] = { 2, 2, 4, 6, 10,
- 16, 26, 42, 68, 110,
- 178, 288, 466, 754, 1220,
- 1974, 3194, 5168, 8362, 13539};
- int i;
- int j = 0;
- haddr_t addr = 0;
-
- /* this must hold so renames don't change entry size. */
- HDassert( (NUM_DATA_ENTRIES / 2) % 20 == 0 );
- HDassert( (virt_num_data_entries / 2) % 20 == 0 );
-
- for ( i = 0; i < NUM_DATA_ENTRIES; i++ )
- {
- data[i].base_addr = addr;
- data[i].len = (size_t)(addr_offsets[j]);
- data[i].local_len = (size_t)(addr_offsets[j]);
- data[i].ver = 0;
- data[i].dirty = FALSE;
- data[i].valid = FALSE;
- data[i].locked = FALSE;
- data[i].global_pinned = FALSE;
- data[i].local_pinned = FALSE;
- data[i].index = i;
-
- data_index[i] = i;
-
- addr += addr_offsets[j];
- HDassert( addr > data[i].base_addr );
-
- j = (j + 1) % num_addr_offsets;
- }
-
- return;
-
-} /* init_data() */
-
-
-/*****************************************************************************/
-/******************** test coodination related functions *********************/
-/*****************************************************************************/
-
-/*****************************************************************************
- *
- * Function: do_express_test()
- *
- * Purpose: Do an MPI_Allreduce to obtain the maximum value returned
- * by GetTestExpress() across all processes. Return this
- * value.
- *
- * Envirmoment variables can be different across different
- * processes. This function ensures that all processes agree
- * on whether to do an express test.
- *
- * Return: Success: Maximum of the values returned by
- * GetTestExpress() across all processes.
- *
- * Failure: -1
- *
- * Programmer: JRM -- 4/25/06
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-
-int
-do_express_test(void)
-{
- const char * fcn_name = "do_express_test()";
- int express_test;
- int max_express_test;
- int result;
-
- express_test = GetTestExpress();
-
- result = MPI_Allreduce((void *)&express_test,
- (void *)&max_express_test,
- 1,
- MPI_INT,
- MPI_MAX,
- world_mpi_comm);
-
- if ( result != MPI_SUCCESS ) {
-
- nerrors++;
- max_express_test = -1;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: MPI_Allreduce() failed.\n",
- world_mpi_rank, fcn_name );
- }
- }
-
- return(max_express_test);
-
-} /* do_express_test() */
-
-
-/*****************************************************************************
- *
- * Function: do_sync()
- *
- * Purpose: Ensure that all messages sent by this process have been
- * processed before proceeding.
- *
- * Do this by exchanging sync req / sync ack messages with
- * the server.
- *
- * Do nothing if nerrors is greater than zero.
- *
- * Return: void
- *
- * Programmer: JRM -- 5/10/06
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-
-void
-do_sync(void)
-{
- const char * fcn_name = "do_sync()";
-
- struct mssg_t mssg;
-
- if ( nerrors <= 0 ) {
-
- /* compose the message */
- mssg.req = SYNC_REQ_CODE;
- mssg.src = world_mpi_rank;
- mssg.dest = world_server_mpi_rank;
- mssg.mssg_num = -1; /* set by send function */
- mssg.base_addr = 0;
- mssg.len = 0;
- mssg.ver = 0;
- mssg.magic = MSSG_MAGIC;
-
- if ( ! send_mssg(&mssg, FALSE) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: send_mssg() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- if ( nerrors <= 0 ) {
-
- if ( ! recv_mssg(&mssg, SYNC_ACK_CODE) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: recv_mssg() failed.\n",
- world_mpi_rank, fcn_name);
- }
- } else if ( ( mssg.req != SYNC_ACK_CODE ) ||
- ( mssg.src != world_server_mpi_rank ) ||
- ( mssg.dest != world_mpi_rank ) ||
- ( mssg.magic != MSSG_MAGIC ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: Bad data in sync ack.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- return;
-
-} /* do_sync() */
-
-
-/*****************************************************************************
- *
- * Function: get_max_nerrors()
- *
- * Purpose: Do an MPI_Allreduce to obtain the maximum value of nerrors
- * across all processes. Return this value.
- *
- * Return: Success: Maximum of the nerrors global variables across
- * all processes.
- *
- * Failure: -1
- *
- * Programmer: JRM -- 1/3/06
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-
-int
-get_max_nerrors(void)
-{
- const char * fcn_name = "get_max_nerrors()";
- int max_nerrors;
- int result;
-
- result = MPI_Allreduce((void *)&nerrors,
- (void *)&max_nerrors,
- 1,
- MPI_INT,
- MPI_MAX,
- world_mpi_comm);
-
- if ( result != MPI_SUCCESS ) {
-
- nerrors++;
- max_nerrors = -1;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: MPI_Allreduce() failed.\n",
- world_mpi_rank, fcn_name );
- }
- }
-
- return(max_nerrors);
-
-} /* get_max_nerrors() */
-
-
-/*****************************************************************************/
-/************************ mssg xfer related functions ************************/
-/*****************************************************************************/
-
-/*****************************************************************************
- *
- * Function: recv_mssg()
- *
- * Purpose: Receive a message from any process in the provided instance
- * of struct mssg.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 12/22/05
- *
- * Modifications:
- *
- * JRM -- 5/10/06
- * Added mssg_tag_offset parameter and supporting code.
- *
- *****************************************************************************/
-
-#define CACHE_TEST_TAG 99 /* different from any used by the library */
-
-hbool_t
-recv_mssg(struct mssg_t *mssg_ptr,
- int mssg_tag_offset)
-{
- const char * fcn_name = "recv_mssg()";
- hbool_t success = TRUE;
- int mssg_tag = CACHE_TEST_TAG;
- int result;
- MPI_Status status;
-
- if ( ( mssg_ptr == NULL ) ||
- ( mssg_tag_offset < 0 ) ||
- ( mssg_tag_offset> MAX_REQ_CODE ) ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: bad param(s) on entry.\n",
- world_mpi_rank, fcn_name);
- }
- } else {
-
- mssg_tag += mssg_tag_offset;
- }
-
- if ( success ) {
-
- result = MPI_Recv((void *)mssg_ptr, 1, mpi_mssg_t, MPI_ANY_SOURCE,
- mssg_tag, world_mpi_comm, &status);
-
- if ( result != MPI_SUCCESS ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: MPI_Recv() failed.\n",
- world_mpi_rank, fcn_name );
- }
- } else if ( mssg_ptr->magic != MSSG_MAGIC ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: invalid magic.\n", world_mpi_rank,
- fcn_name);
- }
- } else if ( mssg_ptr->src != status.MPI_SOURCE ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout,
- "%d:%s: mssg_ptr->src != status.MPI_SOURCE.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- return(success);
-
-} /* recv_mssg() */
-
-
-/*****************************************************************************
- *
- * Function: send_mssg()
- *
- * Purpose: Send the provided instance of mssg to the indicated target.
- *
- * Note that all source and destination ranks are in the
- * global communicator.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 12/22/05
- *
- * Modifications:
- *
- * JRM -- 5/10/06
- * Added the add_req_to_tag parameter and supporting code.
- *
- *****************************************************************************/
-
-hbool_t
-send_mssg(struct mssg_t *mssg_ptr,
- hbool_t add_req_to_tag)
-{
- const char * fcn_name = "send_mssg()";
- hbool_t success = TRUE;
- int mssg_tag = CACHE_TEST_TAG;
- int result;
- static long mssg_num = 0;
-
- if ( ( mssg_ptr == NULL ) ||
- ( mssg_ptr->src != world_mpi_rank ) ||
- ( mssg_ptr->dest < 0 ) ||
- ( mssg_ptr->dest == mssg_ptr->src ) ||
- ( mssg_ptr->dest >= world_mpi_size ) ||
- ( mssg_ptr->req < 0 ) ||
- ( mssg_ptr->req > MAX_REQ_CODE ) ||
- ( mssg_ptr->magic != MSSG_MAGIC ) ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: Invalid mssg on entry.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- if ( success ) {
-
- mssg_ptr->mssg_num = mssg_num++;
-
- if ( add_req_to_tag ) {
-
- mssg_tag += mssg_ptr->req;
- }
-
- result = MPI_Send((void *)mssg_ptr, 1, mpi_mssg_t,
- mssg_ptr->dest, mssg_tag, world_mpi_comm);
-
- if ( result != MPI_SUCCESS ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: MPI_Send() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- return(success);
-
-} /* send_mssg() */
-
-
-/*****************************************************************************
- *
- * Function: setup_derived_types()
- *
- * Purpose: Set up the derived types used by the test bed. At present,
- * only the mpi_mssg derived type is needed.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 12/22/05
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-
-hbool_t
-setup_derived_types(void)
-{
- const char * fcn_name = "setup_derived_types()";
- hbool_t success = TRUE;
- int i;
- int result;
- MPI_Datatype mpi_types[8] = {MPI_INT, MPI_INT, MPI_INT, MPI_LONG,
- HADDR_AS_MPI_TYPE, MPI_INT, MPI_INT,
- MPI_UNSIGNED};
- int block_len[8] = {1, 1, 1, 1, 1, 1, 1, 1};
- MPI_Aint displs[8];
- struct mssg_t sample; /* used to compute displacements */
-
- /* setup the displacements array */
- if ( ( MPI_SUCCESS != MPI_Address(&sample.req, &displs[0]) ) ||
- ( MPI_SUCCESS != MPI_Address(&sample.src, &displs[1]) ) ||
- ( MPI_SUCCESS != MPI_Address(&sample.dest, &displs[2]) ) ||
- ( MPI_SUCCESS != MPI_Address(&sample.mssg_num, &displs[3]) ) ||
- ( MPI_SUCCESS != MPI_Address(&sample.base_addr, &displs[4]) ) ||
- ( MPI_SUCCESS != MPI_Address(&sample.len, &displs[5]) ) ||
- ( MPI_SUCCESS != MPI_Address(&sample.ver, &displs[6]) ) ||
- ( MPI_SUCCESS != MPI_Address(&sample.magic, &displs[7]) ) ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: MPI_Address() call failed.\n",
- world_mpi_rank, fcn_name);
- }
-
- } else {
-
- /* Now calculate the actual displacements */
- for ( i = 7; i >= 0; --i)
- {
- displs[i] -= displs[0];
- }
- }
-
- if ( success ) {
-
- result = MPI_Type_struct(8, block_len, displs, mpi_types, &mpi_mssg_t);
-
- if ( result != MPI_SUCCESS ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: MPI_Type_struct() call failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- if ( success ) {
-
- result = MPI_Type_commit(&mpi_mssg_t);
-
- if ( result != MPI_SUCCESS) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: MPI_Type_commit() call failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- return(success);
-
-} /* setup_derived_types */
-
-
-/*****************************************************************************
- *
- * Function: takedown_derived_types()
- *
- * Purpose: take down the derived types used by the test bed. At present,
- * only the mpi_mssg derived type is needed.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 12/22/05
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-
-hbool_t
-takedown_derived_types(void)
-{
- const char * fcn_name = "takedown_derived_types()";
- hbool_t success = TRUE;
- int result;
-
- result = MPI_Type_free(&mpi_mssg_t);
-
- if ( result != MPI_SUCCESS ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: MPI_Type_free() call failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- return(success);
-
-} /* takedown_derived_types() */
-
-
-/*****************************************************************************/
-/***************************** server functions ******************************/
-/*****************************************************************************/
-
-/*****************************************************************************
- *
- * Function: server_main()
- *
- * Purpose: Main function for the server process. This process exists
- * to provide an independant view of the data array.
- *
- * The function handles request from the other processes in
- * the test until the count of done messages received equals
- * the number of client processes.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 12/22/05
- *
- * Modifications:
- *
- * JRM -- 5/10/06
- * Updated for sync message.
- *
- *****************************************************************************/
-
-hbool_t
-server_main(void)
-{
- const char * fcn_name = "server_main()";
- hbool_t done = FALSE;
- hbool_t success = TRUE;
- int done_count = 0;
- struct mssg_t mssg;
-
- if ( world_mpi_rank != world_server_mpi_rank ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: This isn't the server process?!?!?\n",
- world_mpi_rank, fcn_name);
- }
- }
-
-
- while ( ( success ) && ( ! done ) )
- {
- success = recv_mssg(&mssg, 0);
-
- if ( success ) {
-
- switch ( mssg.req )
- {
- case WRITE_REQ_CODE:
- success = serve_write_request(&mssg);
- break;
-
- case WRITE_REQ_ACK_CODE:
- success = FALSE;
- HDfprintf(stdout, "%s: Received write ack?!?.\n", fcn_name);
- break;
-
- case READ_REQ_CODE:
- success = serve_read_request(&mssg);
- break;
-
- case READ_REQ_REPLY_CODE:
- success = FALSE;
- HDfprintf(stdout, "%s: Received read req reply?!?.\n",
- fcn_name);
- break;
-
- case SYNC_REQ_CODE:
- success = serve_sync_request(&mssg);
- break;
-
- case SYNC_ACK_CODE:
- success = FALSE;
- HDfprintf(stdout, "%s: Received sync ack?!?.\n",
- fcn_name);
- break;
-
- case DONE_REQ_CODE:
- done_count++;
- /* HDfprintf(stdout, "%d:%s: done_count = %d.\n",
- world_mpi_rank, fcn_name, done_count); */
- if ( done_count >= file_mpi_size ) {
-
- done = TRUE;
- }
- break;
-
- default:
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: Unknown request code.\n",
- world_mpi_rank, fcn_name);
- }
- break;
- }
- }
- }
-
- return(success);
-
-} /* server_main() */
-
-
-/*****************************************************************************
- *
- * Function: serve_read_request()
- *
- * Purpose: Serve a read request.
- *
- * The function accepts a pointer to an instance of struct
- * mssg_t as input. If all sanity checks pass, it sends
- * a copy of the indicated datum from the data array to
- * the requesting process.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 12/22/05
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-
-hbool_t
-serve_read_request(struct mssg_t * mssg_ptr)
-{
- const char * fcn_name = "serve_read_request()";
- hbool_t success = TRUE;
- int target_index;
- haddr_t target_addr;
- struct mssg_t reply;
-
- if ( ( mssg_ptr == NULL ) ||
- ( mssg_ptr->req != READ_REQ_CODE ) ||
- ( mssg_ptr->magic != MSSG_MAGIC ) ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: Bad mssg on entry.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- if ( success ) {
-
- target_addr = mssg_ptr->base_addr;
- target_index = addr_to_datum_index(target_addr);
-
- if ( target_index < 0 ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: addr lookup failed for %a.\n",
- world_mpi_rank, fcn_name, target_addr);
- }
- } else if ( data[target_index].len != mssg_ptr->len ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout,
- "%d:%s: data[i].len = %Zu != mssg->len = %d.\n",
- world_mpi_rank, fcn_name,
- data[target_index].len, mssg_ptr->len);
- }
- } else if ( ! (data[target_index].valid) ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout,
- "%d:%s: proc %d read invalid entry. idx/base_addr = %d/%a.\n",
- world_mpi_rank, fcn_name,
- mssg_ptr->src,
- target_index,
- data[target_index].base_addr);
- }
- } else {
-
- /* compose the reply message */
- reply.req = READ_REQ_REPLY_CODE;
- reply.src = world_mpi_rank;
- reply.dest = mssg_ptr->src;
- reply.mssg_num = -1; /* set by send function */
- reply.base_addr = data[target_index].base_addr;
- reply.len = data[target_index].len;
- reply.ver = data[target_index].ver;
- reply.magic = MSSG_MAGIC;
- }
- }
-
- if ( success ) {
-
- success = send_mssg(&reply, TRUE);
- }
-
- return(success);
-
-} /* serve_read_request() */
-
-
-/*****************************************************************************
- *
- * Function: serve_sync_request()
- *
- * Purpose: Serve a sync request.
- *
- * The function accepts a pointer to an instance of struct
- * mssg_t as input. If all sanity checks pass, it sends a
- * sync ack to the requesting process.
- *
- * This service exist to allow the sending process to ensure
- * that all previous messages have been processed before
- * proceeding.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 5/10/06
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-
-hbool_t
-serve_sync_request(struct mssg_t * mssg_ptr)
-{
- const char * fcn_name = "serve_sync_request()";
- hbool_t success = TRUE;
- struct mssg_t reply;
-
- if ( ( mssg_ptr == NULL ) ||
- ( mssg_ptr->req != SYNC_REQ_CODE ) ||
- ( mssg_ptr->magic != MSSG_MAGIC ) ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: Bad mssg on entry.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- if ( success ) {
-
- /* compose the reply message */
- reply.req = SYNC_ACK_CODE;
- reply.src = world_mpi_rank;
- reply.dest = mssg_ptr->src;
- reply.mssg_num = -1; /* set by send function */
- reply.base_addr = 0;
- reply.len = 0;
- reply.ver = 0;
- reply.magic = MSSG_MAGIC;
- }
-
- if ( success ) {
-
- success = send_mssg(&reply, TRUE);
- }
-
- return(success);
-
-} /* serve_sync_request() */
-
-
-/*****************************************************************************
- *
- * Function: serve_write_request()
- *
- * Purpose: Serve a write request.
- *
- * The function accepts a pointer to an instance of struct
- * mssg_t as input. If all sanity checks pass, it updates
- * the version number of the target data array entry as
- * specified in the message.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 12/21/05
- *
- * Modifications:
- *
- * JRM -- 5/9/06
- * Added code supporting a write ack message. This is a
- * speculative fix to a bug observed on Cobalt. If it
- * doesn't work, it will help narrow down the possibilities.
- *
- *****************************************************************************/
-
-hbool_t
-serve_write_request(struct mssg_t * mssg_ptr)
-{
- const char * fcn_name = "serve_write_request()";
- hbool_t success = TRUE;
- int target_index;
- int new_ver_num;
- haddr_t target_addr;
-#if DO_WRITE_REQ_ACK
- struct mssg_t reply;
-#endif /* DO_WRITE_REQ_ACK */
-
- if ( ( mssg_ptr == NULL ) ||
- ( mssg_ptr->req != WRITE_REQ_CODE ) ||
- ( mssg_ptr->magic != MSSG_MAGIC ) ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: Bad mssg on entry.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- if ( success ) {
-
- target_addr = mssg_ptr->base_addr;
- target_index = addr_to_datum_index(target_addr);
-
- if ( target_index < 0 ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: addr lookup failed for %a.\n",
- world_mpi_rank, fcn_name, target_addr);
- }
- } else if ( data[target_index].len != mssg_ptr->len ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout,
- "%d:%s: data[i].len = %Zu != mssg->len = %d.\n",
- world_mpi_rank, fcn_name,
- data[target_index].len, mssg_ptr->len);
- }
- }
- }
-
- if ( success ) {
-
- new_ver_num = mssg_ptr->ver;
-
- if ( new_ver_num <= data[target_index].ver ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: new ver = %d <= old ver = %d.\n",
- world_mpi_rank, fcn_name,
- new_ver_num, data[target_index].ver);
- }
- }
- }
-
- if ( success ) {
-
- /* process the write */
- data[target_index].ver = new_ver_num;
- data[target_index].valid = TRUE;
-
-#if DO_WRITE_REQ_ACK
-
- /* compose the reply message */
- reply.req = WRITE_REQ_ACK_CODE;
- reply.src = world_mpi_rank;
- reply.dest = mssg_ptr->src;
- reply.mssg_num = -1; /* set by send function */
- reply.base_addr = data[target_index].base_addr;
- reply.len = data[target_index].len;
- reply.ver = data[target_index].ver;
- reply.magic = MSSG_MAGIC;
-
- /* and send it */
- success = send_mssg(&reply, TRUE);
-
-#endif /* DO_WRITE_REQ_ACK */
-
- }
-
- return(success);
-
-} /* serve_write_request() */
-
-
-/*****************************************************************************/
-/**************************** Call back functions ****************************/
-/*****************************************************************************/
-
-/*-------------------------------------------------------------------------
- * Function: clear_datum
- *
- * Purpose: Mark the datum as clean and destroy it if requested.
- * Do not write it to the server, or increment the version.
- *
- * Return: SUCCEED
- *
- * Programmer: John Mainzer
- * 12/29/05
- *
- * Modifications:
- *
- * JRM -- 7/11/06
- * Modified code to support the local_len field of datum.
- * This field allow us to track the cache's value for the
- * length of the entry, while retaining the original
- * value for communications with the server.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-clear_datum(H5F_t * f,
- void * thing,
- hbool_t dest)
-{
- int idx;
- struct datum * entry_ptr;
-
- HDassert( thing );
-
- entry_ptr = (struct datum *)thing;
-
- idx = addr_to_datum_index(entry_ptr->base_addr);
-
- HDassert( idx >= 0 );
- HDassert( idx < NUM_DATA_ENTRIES );
- HDassert( idx < virt_num_data_entries );
- HDassert( &(data[idx]) == entry_ptr );
-
- HDassert( entry_ptr->header.addr == entry_ptr->base_addr );
- HDassert( ( entry_ptr->header.size == entry_ptr->len ) ||
- ( entry_ptr->header.size == entry_ptr->local_len ) );
-
- entry_ptr->header.is_dirty = FALSE;
- entry_ptr->dirty = FALSE;
-
- if ( dest ) {
-
- destroy_datum(f, thing);
-
- }
-
- datum_clears++;
-
- if ( entry_ptr->header.is_pinned ) {
-
- datum_pinned_clears++;
- HDassert( entry_ptr->global_pinned || entry_ptr->local_pinned );
- }
-
- return(SUCCEED);
-
-} /* clear_datum() */
-
-/*-------------------------------------------------------------------------
- * Function: destroy_datum()
- *
- * Purpose: Destroy the entry. At present, this means do nothing other
- * than verify that the entry is clean. In particular, do not
- * write it to the server process.
- *
- * Return: SUCCEED
- *
- * Programmer: John Mainzer
- * 12/29/05
- *
- * Modifications:
- *
- * JRM -- 7/11/06
- * Modified code to support the local_len field of datum.
- * This field allow us to track the cache's value for the
- * length of the entry, while retaining the original
- * value for communications with the server.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-destroy_datum(H5F_t UNUSED * f,
- void * thing)
-{
- int idx;
- struct datum * entry_ptr;
-
- HDassert( thing );
-
- entry_ptr = (struct datum *)thing;
-
- idx = addr_to_datum_index(entry_ptr->base_addr);
-
- HDassert( idx >= 0 );
- HDassert( idx < NUM_DATA_ENTRIES );
- HDassert( idx < virt_num_data_entries );
- HDassert( &(data[idx]) == entry_ptr );
-
- HDassert( entry_ptr->header.addr == entry_ptr->base_addr );
- HDassert( ( entry_ptr->header.size == entry_ptr->len ) ||
- ( entry_ptr->header.size == entry_ptr->local_len ) );
-
- HDassert( !(entry_ptr->dirty) );
- HDassert( !(entry_ptr->header.is_dirty) );
- HDassert( !(entry_ptr->global_pinned) );
- HDassert( !(entry_ptr->local_pinned) );
- HDassert( !(entry_ptr->header.is_pinned) );
-
- datum_destroys++;
-
- return(SUCCEED);
-
-} /* destroy_datum() */
-
-/*-------------------------------------------------------------------------
- * Function: flush_datum
- *
- * Purpose: Flush the entry to the server process and mark it as clean.
- * Then destroy the entry if requested.
- *
- * Return: SUCCEED if successful, and FAIL otherwise.
- *
- * Programmer: John Mainzer
- * 12/29/05
- *
- * Modifications:
- *
- * JRM -- 5/9/06
- * Added code to receive the write request ack messages
- * from the server. This is part of a speculative fix to
- * a bug spotted on Cobalt. If it doesn't fix the problem,
- * it will narrow down the possibilities.
- *
- * JRM -- 7/11/06
- * Modified code to support the local_len field of datum.
- * This field allow us to track the cache's value for the
- * length of the entry, while retaining the original
- * value for communications with the server.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-flush_datum(H5F_t *f,
- hid_t UNUSED dxpl_id,
- hbool_t dest,
- haddr_t UNUSED addr,
- void *thing)
-{
- const char * fcn_name = "flush_datum()";
- herr_t ret_value = SUCCEED;
- int idx;
- struct datum * entry_ptr;
- struct mssg_t mssg;
-
- HDassert( thing );
-
- entry_ptr = (struct datum *)thing;
-
- idx = addr_to_datum_index(entry_ptr->base_addr);
-
- HDassert( idx >= 0 );
- HDassert( idx < NUM_DATA_ENTRIES );
- HDassert( idx < virt_num_data_entries );
- HDassert( &(data[idx]) == entry_ptr );
-
- HDassert( entry_ptr->header.addr == entry_ptr->base_addr );
- HDassert( ( entry_ptr->header.size == entry_ptr->len ) ||
- ( entry_ptr->header.size == entry_ptr->local_len ) );
-
- HDassert( entry_ptr->header.is_dirty == entry_ptr->dirty );
-
- if ( ( file_mpi_rank != 0 ) && ( entry_ptr->dirty ) ) {
-
- ret_value = FAIL;
- HDfprintf(stdout,
- "%d:%s: Flushed dirty entry from non-zero file process.",
- world_mpi_rank, fcn_name);
- }
-
- if ( ret_value == SUCCEED ) {
-
- if ( entry_ptr->header.is_dirty ) {
-
- /* compose the message */
- mssg.req = WRITE_REQ_CODE;
- mssg.src = world_mpi_rank;
- mssg.dest = world_server_mpi_rank;
- mssg.mssg_num = -1; /* set by send function */
- mssg.base_addr = entry_ptr->base_addr;
- mssg.len = entry_ptr->len;
- mssg.ver = entry_ptr->ver;
- mssg.magic = MSSG_MAGIC;
-
- if ( ! send_mssg(&mssg, FALSE) ) {
-
- nerrors++;
- ret_value = FAIL;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: send_mssg() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- else
- {
- entry_ptr->header.is_dirty = FALSE;
- entry_ptr->dirty = FALSE;
- }
- }
- }
-
-#if DO_WRITE_REQ_ACK
-
- if ( ( ret_value == SUCCEED ) && ( entry_ptr->header.is_dirty ) ) {
-
- if ( ! recv_mssg(&mssg, WRITE_REQ_ACK_CODE) ) {
-
- nerrors++;
- ret_value = FAIL;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: recv_mssg() failed.\n",
- world_mpi_rank, fcn_name);
- }
- } else if ( ( mssg.req != WRITE_REQ_ACK_CODE ) ||
- ( mssg.src != world_server_mpi_rank ) ||
- ( mssg.dest != world_mpi_rank ) ||
- ( mssg.base_addr != entry_ptr->base_addr ) ||
- ( mssg.len != entry_ptr->len ) ||
- ( mssg.ver != entry_ptr->ver ) ||
- ( mssg.magic != MSSG_MAGIC ) ) {
-
- nerrors++;
- ret_value = FAIL;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: Bad data in write req ack.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
-#endif /* DO_WRITE_REQ_ACK */
-
- if ( ret_value == SUCCEED ) {
-
- if ( dest ) {
-
- ret_value = destroy_datum(f, thing);
- }
- }
-
- datum_flushes++;
-
- if ( entry_ptr->header.is_pinned ) {
-
- datum_pinned_flushes++;
- HDassert( entry_ptr->global_pinned || entry_ptr->local_pinned );
- }
-
- return(ret_value);
-
-} /* flush_datum() */
-
-/*-------------------------------------------------------------------------
- * Function: load_datum
- *
- * Purpose: Read the requested entry from the server and mark it as
- * clean.
- *
- * Return: SUCCEED if successful, FAIL otherwise.
- *
- * Programmer: John Mainzer
- * 12/29/05
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-
-void *
-load_datum(H5F_t UNUSED *f,
- hid_t UNUSED dxpl_id,
- haddr_t addr,
- const void UNUSED *udata1,
- void UNUSED *udata2)
-{
- const char * fcn_name = "load_datum()";
- hbool_t success = TRUE;
- int idx;
- struct datum * entry_ptr = NULL;
- struct mssg_t mssg;
-
- idx = addr_to_datum_index(addr);
-
- HDassert( idx >= 0 );
- HDassert( idx < NUM_DATA_ENTRIES );
- HDassert( idx < virt_num_data_entries );
-
- entry_ptr = &(data[idx]);
-
- HDassert( addr == entry_ptr->base_addr );
- HDassert( ! entry_ptr->global_pinned );
- HDassert( ! entry_ptr->local_pinned );
-
- /* compose the read message */
- mssg.req = READ_REQ_CODE;
- mssg.src = world_mpi_rank;
- mssg.dest = world_server_mpi_rank;
- mssg.mssg_num = -1; /* set by send function */
- mssg.base_addr = entry_ptr->base_addr;
- mssg.len = entry_ptr->len;
- mssg.ver = 0; /* bogus -- should be corrected by server */
- mssg.magic = MSSG_MAGIC;
-
- if ( ! send_mssg(&mssg, FALSE) ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: send_mssg() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- if ( success ) {
-
- if ( ! recv_mssg(&mssg, READ_REQ_REPLY_CODE) ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: recv_mssg() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- if ( success ) {
-
- if ( ( mssg.req != READ_REQ_REPLY_CODE ) ||
- ( mssg.src != world_server_mpi_rank ) ||
- ( mssg.dest != world_mpi_rank ) ||
- ( mssg.base_addr != entry_ptr->base_addr ) ||
- ( mssg.len != entry_ptr->len ) ||
- ( mssg.ver < entry_ptr->ver ) ||
- ( mssg.magic != MSSG_MAGIC ) ) {
-
- nerrors++;
- success = FALSE;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: Bad data in read req reply.\n",
- world_mpi_rank, fcn_name);
- }
-#if 0 /* This has been useful debugging code -- keep it for now. */
- if ( mssg.req != READ_REQ_REPLY_CODE ) {
-
- HDfprintf(stdout, "%d:%s: mssg.req != READ_REQ_REPLY_CODE.\n",
- world_mpi_rank, fcn_name);
- HDfprintf(stdout, "%d:%s: mssg.req = %d.\n",
- world_mpi_rank, fcn_name, (int)(mssg.req));
- }
-
- if ( mssg.src != world_server_mpi_rank ) {
-
- HDfprintf(stdout, "%d:%s: mssg.src != world_server_mpi_rank.\n",
- world_mpi_rank, fcn_name);
- }
-
- if ( mssg.dest != world_mpi_rank ) {
-
- HDfprintf(stdout, "%d:%s: mssg.dest != world_mpi_rank.\n",
- world_mpi_rank, fcn_name);
- }
-
- if ( mssg.base_addr != entry_ptr->base_addr ) {
-
- HDfprintf(stdout,
- "%d:%s: mssg.base_addr != entry_ptr->base_addr.\n",
- world_mpi_rank, fcn_name);
- HDfprintf(stdout, "%d:%s: mssg.base_addr = %a.\n",
- world_mpi_rank, fcn_name, mssg.base_addr);
- HDfprintf(stdout, "%d:%s: entry_ptr->base_addr = %a.\n",
- world_mpi_rank, fcn_name, entry_ptr->base_addr);
- }
-
- if ( mssg.len != entry_ptr->len ) {
-
- HDfprintf(stdout, "%d:%s: mssg.len != entry_ptr->len.\n",
- world_mpi_rank, fcn_name);
- HDfprintf(stdout, "%d:%s: mssg.len = %a.\n",
- world_mpi_rank, fcn_name, mssg.len);
- }
-
- if ( mssg.ver < entry_ptr->ver ) {
-
- HDfprintf(stdout, "%d:%s: mssg.ver < entry_ptr->ver.\n",
- world_mpi_rank, fcn_name);
- }
-
- if ( mssg.magic != MSSG_MAGIC ) {
-
- HDfprintf(stdout, "%d:%s: mssg.magic != MSSG_MAGIC.\n",
- world_mpi_rank, fcn_name);
- }
-#endif /* JRM */
- } else {
-
- entry_ptr->ver = mssg.ver;
- entry_ptr->header.is_dirty = FALSE;
- entry_ptr->dirty = FALSE;
- }
- }
-
- if ( ! success ) {
-
- entry_ptr = NULL;
-
- }
-
- datum_loads++;
-
- return(entry_ptr);
-
-} /* load_datum() */
-
-/*-------------------------------------------------------------------------
- * Function: size_datum
- *
- * Purpose: Get the size of the specified entry. Just look at the
- * local copy, as size can't change.
- *
- * Return: SUCCEED
- *
- * Programmer: John Mainzer
- * 6/10/04
- *
- * Modifications:
- *
- * JRM -- 7/11/06
- * Modified function to return the local_len field instead
- * of the len field. These two fields usually contain the
- * same value, but if the size of an entry is changed, we
- * store the altered size in local_len without changing
- * len. Note that local_len must be positive, and may
- * not exceed len.
- *
- *-------------------------------------------------------------------------
- */
-
-herr_t
-size_datum(H5F_t UNUSED * f,
- void * thing,
- size_t * size_ptr)
-{
- int idx;
- struct datum * entry_ptr;
-
- HDassert( thing );
- HDassert( size_ptr );
-
- entry_ptr = (struct datum *)thing;
-
- idx = addr_to_datum_index(entry_ptr->base_addr);
-
- HDassert( idx >= 0 );
- HDassert( idx < NUM_DATA_ENTRIES );
- HDassert( idx < virt_num_data_entries );
- HDassert( &(data[idx]) == entry_ptr );
- HDassert( entry_ptr->local_len > 0 );
- HDassert( entry_ptr->local_len <= entry_ptr->len );
-
- HDassert( entry_ptr->header.addr == entry_ptr->base_addr );
-
- *size_ptr = entry_ptr->local_len;
-
- return(SUCCEED);
-
-} /* size_datum() */
-
-
-/*****************************************************************************/
-/************************** test utility functions ***************************/
-/*****************************************************************************/
-
-/*****************************************************************************
- * Function: expunge_entry()
- *
- * Purpose: Expunge the entry indicated by the type and index, mark it
- * as clean, and don't increment its version number.
- *
- * Do nothing if nerrors is non-zero on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 07/11/06
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-
-void
-expunge_entry(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- int32_t idx)
-{
- const char * fcn_name = "expunge_entry()";
- hbool_t in_cache;
- herr_t result;
- struct datum * entry_ptr;
-
- HDassert( cache_ptr );
- HDassert( file_ptr );
- HDassert( ( 0 <= idx ) && ( idx < NUM_DATA_ENTRIES ) );
- HDassert( idx < virt_num_data_entries );
-
- entry_ptr = &(data[idx]);
-
- HDassert( !(entry_ptr->locked) );
- HDassert( !(entry_ptr->global_pinned) );
- HDassert( !(entry_ptr->local_pinned) );
-
- entry_ptr->dirty = TRUE;
-
- if ( nerrors == 0 ) {
-
- result = H5AC1_expunge_entry(file_ptr, -1, &(types[0]),
- entry_ptr->header.addr);
-
- if ( result < 0 ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: Error in H5AC1_expunge_entry().\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- HDassert( ((entry_ptr->header).type)->id == DATUM_ENTRY_TYPE );
- HDassert( ! ((entry_ptr->header).is_dirty) );
-
- result = H5C1_get_entry_status(cache_ptr, entry_ptr->base_addr,
- NULL, &in_cache, NULL, NULL, NULL);
-
- if ( result < 0 ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: Error in H5C1_get_entry_status().\n",
- world_mpi_rank, fcn_name);
- }
- } else if ( in_cache ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: Expunged entry still in cache?!?\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- return;
-
-} /* expunge_entry() */
-
-
-/*****************************************************************************
- * Function: insert_entry()
- *
- * Purpose: Insert the entry indicated by the type and index, mark it
- * as dirty, and increment its version number.
- *
- * Do nothing if nerrors is non-zero on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 01/04/06
- *
- * Modifications:
- *
- * JRM -- 8/11/06
- * Updated code to reflect the fact that entries can now be
- * inserted pinned. Note that since all inserts are dirty,
- * any pins must be global pins.
- *
- *****************************************************************************/
-
-void
-insert_entry(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- int32_t idx,
- unsigned int flags)
-{
- const char * fcn_name = "insert_entry()";
- hbool_t insert_pinned;
- herr_t result;
- struct datum * entry_ptr;
-
- HDassert( cache_ptr );
- HDassert( file_ptr );
- HDassert( ( 0 <= idx ) && ( idx < NUM_DATA_ENTRIES ) );
- HDassert( idx < virt_num_data_entries );
-
- entry_ptr = &(data[idx]);
-
- HDassert( !(entry_ptr->locked) );
-
- insert_pinned = ((flags & H5C1__PIN_ENTRY_FLAG) != 0 );
-
- if ( nerrors == 0 ) {
-
- (entry_ptr->ver)++;
- entry_ptr->dirty = TRUE;
-
- result = H5AC1_set(file_ptr, -1, &(types[0]), entry_ptr->base_addr,
- (void *)(&(entry_ptr->header)), flags);
-
- if ( ( result < 0 ) ||
- ( entry_ptr->header.type != &(types[0]) ) ||
- ( entry_ptr->len != entry_ptr->header.size ) ||
- ( entry_ptr->base_addr != entry_ptr->header.addr ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: Error in H5AC1_set().\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- if ( ! (entry_ptr->header.is_dirty) ) {
-
- /* it is possible that we just exceeded the dirty bytes
- * threshold, triggering a write of the newly inserted
- * entry. Test for this, and only flag an error if this
- * is not the case.
- */
-
- struct H5AC1_aux_t * aux_ptr;
-
- aux_ptr = ((H5AC1_aux_t *)(cache_ptr->aux_ptr));
-
- if ( ! ( ( aux_ptr != NULL ) &&
- ( aux_ptr->magic == H5AC1__H5AC1_AUX_T_MAGIC ) &&
- ( aux_ptr->dirty_bytes == 0 ) ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: data[%d].header.is_dirty = %d.\n",
- world_mpi_rank, fcn_name, idx,
- (int)(data[idx].header.is_dirty));
- }
- }
- }
-
- if ( insert_pinned ) {
-
- HDassert( entry_ptr->header.is_pinned );
- entry_ptr->global_pinned = TRUE;
- global_pins++;
-
- } else {
-
- HDassert( ! ( entry_ptr->header.is_pinned ) );
- entry_ptr->global_pinned = FALSE;
-
- }
-
- /* HDassert( entry_ptr->header.is_dirty ); */
- HDassert( ((entry_ptr->header).type)->id == DATUM_ENTRY_TYPE );
- }
-
- return;
-
-} /* insert_entry() */
-
-
-/*****************************************************************************
- * Function: local_pin_and_unpin_random_entries()
- *
- * Purpose: Pin a random number of randomly selected entries in cache, and
- * then unpin a random number of entries.
- *
- * Do nothing if nerrors is non-zero on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/12/06
- *
- * Modifications:
- *
- *****************************************************************************/
-
-void
-local_pin_and_unpin_random_entries(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- int min_idx,
- int max_idx,
- int min_count,
- int max_count)
-{
- /* const char * fcn_name = "local_pin_and_unpin_random_entries()"; */
-
- if ( nerrors == 0 ) {
-
- hbool_t via_unprotect;
- int count;
- int i;
- int idx;
-
- HDassert( cache_ptr );
- HDassert( file_ptr );
- HDassert( 0 <= min_idx );
- HDassert( min_idx < max_idx );
- HDassert( max_idx < NUM_DATA_ENTRIES );
- HDassert( max_idx < virt_num_data_entries );
- HDassert( 0 <= min_count );
- HDassert( min_count < max_count );
-
- count = (HDrand() % (max_count - min_count)) + min_count;
-
- HDassert( min_count <= count );
- HDassert( count <= max_count );
-
- for ( i = 0; i < count; i++ )
- {
- local_pin_random_entry(cache_ptr, file_ptr, min_idx, max_idx);
- }
-
- count = (HDrand() % (max_count - min_count)) + min_count;
-
- HDassert( min_count <= count );
- HDassert( count <= max_count );
-
- i = 0;
- idx = 0;
-
- while ( ( i < count ) && ( idx >= 0 ) )
- {
- via_unprotect = ( (((unsigned)i) & 0x0001) == 0 );
- idx = local_unpin_next_pinned_entry(cache_ptr, file_ptr,
- idx, via_unprotect);
- i++;
- }
- }
-
- return;
-
-} /* local_pin_and_unpin_random_entries() */
-
-
-/*****************************************************************************
- * Function: local_pin_random_entry()
- *
- * Purpose: Pin a randomly selected entry in cache, and mark the entry
- * as being locally pinned. Since this entry will not in
- * general be pinned in any other cache, we can't mark it
- * dirty.
- *
- * Do nothing if nerrors is non-zero on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/12/06
- *
- * Modifications:
- *
- *****************************************************************************/
-
-void
-local_pin_random_entry(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- int min_idx,
- int max_idx)
-{
- /* const char * fcn_name = "local_pin_random_entry()"; */
- int idx;
-
- if ( nerrors == 0 ) {
-
- HDassert( cache_ptr );
- HDassert( file_ptr );
- HDassert( 0 <= min_idx );
- HDassert( min_idx < max_idx );
- HDassert( max_idx < NUM_DATA_ENTRIES );
- HDassert( max_idx < virt_num_data_entries );
-
- do
- {
- idx = (HDrand() % (max_idx - min_idx)) + min_idx;
- HDassert( min_idx <= idx );
- HDassert( idx <= max_idx );
- }
- while ( data[idx].global_pinned || data[idx].local_pinned );
-
- pin_entry(cache_ptr, file_ptr, idx, FALSE, FALSE);
- }
-
- return;
-
-} /* local_pin_random_entry() */
-
-
-/*****************************************************************************
- * Function: local_unpin_all_entries()
- *
- * Purpose: Unpin all local pinned entries.
- *
- * Do nothing if nerrors is non-zero on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/12/06
- *
- * Modifications:
- *
- *****************************************************************************/
-
-void
-local_unpin_all_entries(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- hbool_t via_unprotect)
-{
- /* const char * fcn_name = "local_unpin_all_entries()"; */
-
- if ( nerrors == 0 ) {
-
- int idx;
-
- HDassert( cache_ptr );
- HDassert( file_ptr );
-
- idx = 0;
-
- while ( idx >= 0 )
- {
- idx = local_unpin_next_pinned_entry(cache_ptr, file_ptr,
- idx, via_unprotect);
- }
- }
-
- return;
-
-} /* local_unpin_all_entries() */
-
-
-/*****************************************************************************
- * Function: local_unpin_next_pinned_entry()
- *
- * Purpose: Find the next locally pinned entry after the specified
- * starting point, and unpin it.
- *
- * Do nothing if nerrors is non-zero on entry.
- *
- * Return: Index of the unpinned entry if there is one, or -1 if
- * nerrors is non-zero on entry, or if there is no locally
- * pinned entry.
- *
- * Programmer: John Mainzer
- * 4/12/06
- *
- * Modifications:
- *
- *****************************************************************************/
-
-int
-local_unpin_next_pinned_entry(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- int start_idx,
- hbool_t via_unprotect)
-{
- /* const char * fcn_name = "local_unpin_next_pinned_entry()"; */
- int i = 0;
- int idx = -1;
-
- if ( nerrors == 0 ) {
-
- HDassert( cache_ptr );
- HDassert( file_ptr );
- HDassert( 0 <= start_idx );
- HDassert( start_idx < NUM_DATA_ENTRIES );
- HDassert( start_idx < virt_num_data_entries );
-
- idx = start_idx;
-
- while ( ( i < virt_num_data_entries ) &&
- ( ! ( data[idx].local_pinned ) ) )
- {
- i++;
- idx++;
- if ( idx >= virt_num_data_entries ) {
- idx = 0;
- }
- }
-
- if ( data[idx].local_pinned ) {
-
- unpin_entry(cache_ptr, file_ptr, idx, FALSE, FALSE, via_unprotect);
-
- } else {
-
- idx = -1;
- }
- }
-
- return(idx);
-
-} /* local_unpin_next_pinned_entry() */
-
-
-/*****************************************************************************
- * Function: lock_and_unlock_random_entries()
- *
- * Purpose: Obtain a random number in the closed interval [min_count,
- * max_count]. Then protect and unprotect that number of
- * random entries.
- *
- * Do nothing if nerrors is non-zero on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 1/12/06
- *
- * Modifications:
- *
- *****************************************************************************/
-
-void
-lock_and_unlock_random_entries(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- int min_idx,
- int max_idx,
- int min_count,
- int max_count)
-{
- /* const char * fcn_name = "lock_and_unlock_random_entries()"; */
- int count;
- int i;
-
- if ( nerrors == 0 ) {
-
- HDassert( cache_ptr );
- HDassert( file_ptr );
- HDassert( 0 <= min_count );
- HDassert( min_count < max_count );
-
- count = (HDrand() % (max_count - min_count)) + min_count;
-
- HDassert( min_count <= count );
- HDassert( count <= max_count );
-
- for ( i = 0; i < count; i++ )
- {
- lock_and_unlock_random_entry(cache_ptr, file_ptr, min_idx, max_idx);
- }
- }
-
- return;
-
-} /* lock_and_unlock_random_entries() */
-
-
-/*****************************************************************************
- * Function: lock_and_unlock_random_entry()
- *
- * Purpose: Protect and then unprotect a random entry with index in
- * the data[] array in the close interval [min_idx, max_idx].
- *
- * Do nothing if nerrors is non-zero on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 1/4/06
- *
- * Modifications:
- *
- *****************************************************************************/
-
-void
-lock_and_unlock_random_entry(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- int min_idx,
- int max_idx)
-{
- /* const char * fcn_name = "lock_and_unlock_random_entry()"; */
- int idx;
-
- if ( nerrors == 0 ) {
-
- HDassert( cache_ptr );
- HDassert( file_ptr );
- HDassert( 0 <= min_idx );
- HDassert( min_idx < max_idx );
- HDassert( max_idx < NUM_DATA_ENTRIES );
- HDassert( max_idx < virt_num_data_entries );
-
- idx = (HDrand() % (max_idx - min_idx)) + min_idx;
-
- HDassert( min_idx <= idx );
- HDassert( idx <= max_idx );
-
- lock_entry(cache_ptr, file_ptr, idx);
- unlock_entry(cache_ptr, file_ptr, idx, H5AC1__NO_FLAGS_SET);
- }
-
- return;
-
-} /* lock_and_unlock_random_entry() */
-
-
-/*****************************************************************************
- * Function: lock_entry()
- *
- * Purpose: Protect the entry indicated by the index.
- *
- * Do nothing if nerrors is non-zero on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 1/4/06
- *
- * Modifications:
- *
- * JRM -- 7/11/06
- * Modified asserts to handle the new local_len field in
- * datum.
- *
- *****************************************************************************/
-
-void
-lock_entry(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- int32_t idx)
-{
- const char * fcn_name = "lock_entry()";
- struct datum * entry_ptr;
- H5C1_cache_entry_t * cache_entry_ptr;
-
- if ( nerrors == 0 ) {
-
- HDassert( cache_ptr );
- HDassert( ( 0 <= idx ) && ( idx < NUM_DATA_ENTRIES ) );
- HDassert( idx < virt_num_data_entries );
-
- entry_ptr = &(data[idx]);
-
- HDassert( ! (entry_ptr->locked) );
-
- cache_entry_ptr = H5AC1_protect(file_ptr, -1, &(types[0]),
- entry_ptr->base_addr,
- NULL, NULL, H5AC1_WRITE);
-
- if ( ( cache_entry_ptr != (void *)(&(entry_ptr->header)) ) ||
- ( entry_ptr->header.type != &(types[0]) ) ||
- ( ( entry_ptr->len != entry_ptr->header.size ) &&
- ( entry_ptr->local_len != entry_ptr->header.size ) ) ||
- ( entry_ptr->base_addr != entry_ptr->header.addr ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: error in H5AC1_protect().\n",
- world_mpi_rank, fcn_name);
- }
- } else {
-
- entry_ptr->locked = TRUE;
-
- }
-
- HDassert( ((entry_ptr->header).type)->id == DATUM_ENTRY_TYPE );
- }
-
- return;
-
-} /* lock_entry() */
-
-
-/*****************************************************************************
- * Function: mark_pinned_entry_dirty()
- *
- * Purpose: Mark dirty the entry indicated by the index,
- *
- * Do nothing if nerrors is non-zero on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/14/06
- *
- * Modifications:
- *
- *****************************************************************************/
-
-void
-mark_pinned_entry_dirty(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- int32_t idx,
- hbool_t size_changed,
- size_t new_size)
-{
- const char * fcn_name = "mark_pinned_entry_dirty()";
- herr_t result;
- struct datum * entry_ptr;
-
- if ( nerrors == 0 ) {
-
- HDassert( file_ptr );
- HDassert( cache_ptr );
- HDassert( ( 0 <= idx ) && ( idx < NUM_DATA_ENTRIES ) );
- HDassert( idx < virt_num_data_entries );
-
- entry_ptr = &(data[idx]);
-
- HDassert ( entry_ptr->global_pinned );
- HDassert ( ! (entry_ptr->local_pinned) );
-
- (entry_ptr->ver)++;
- entry_ptr->dirty = TRUE;
-
- result = H5AC1_mark_pinned_entry_dirty(file_ptr,
- (void *)entry_ptr,
- size_changed,
- new_size);
-
- if ( result < 0 ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout,
- "%d:%s: error in H5AC1_mark_pinned_entry_dirty().\n",
- world_mpi_rank, fcn_name);
- }
- }
- else
- {
- global_dirty_pins++;
- }
- }
-
- return;
-
-} /* mark_pinned_entry_dirty() */
-
-
-/*****************************************************************************
- * Function: mark_pinned_or_protected_entry_dirty()
- *
- * Purpose: Use the H5AC1_mark_pinned_or_protected_entry_dirty() call to
- * mark dirty the entry indicated by the index,
- *
- * Do nothing if nerrors is non-zero on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 5/18/06
- *
- * Modifications:
- *
- *****************************************************************************/
-
-void
-mark_pinned_or_protected_entry_dirty(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- int32_t idx)
-{
- const char * fcn_name = "mark_pinned_or_protected_entry_dirty()";
- herr_t result;
- struct datum * entry_ptr;
-
- if ( nerrors == 0 ) {
-
- HDassert( file_ptr );
- HDassert( cache_ptr );
- HDassert( ( 0 <= idx ) && ( idx < NUM_DATA_ENTRIES ) );
- HDassert( idx < virt_num_data_entries );
-
- entry_ptr = &(data[idx]);
-
- HDassert ( entry_ptr->locked || entry_ptr->global_pinned );
-
- (entry_ptr->ver)++;
- entry_ptr->dirty = TRUE;
-
- result = H5AC1_mark_pinned_or_protected_entry_dirty(file_ptr,
- (void *)entry_ptr);
-
- if ( result < 0 ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: error in %s.\n",
- world_mpi_rank, fcn_name,
- "H5AC1_mark_pinned_or_protected_entry_dirty()");
- }
- }
- else if ( ! ( entry_ptr->locked ) )
- {
- global_dirty_pins++;
- }
- }
-
- return;
-
-} /* mark_pinned_or_protected_entry_dirty() */
-
-
-/*****************************************************************************
- * Function: pin_entry()
- *
- * Purpose: Pin the entry indicated by the index.
- *
- * Do nothing if nerrors is non-zero on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/11/06
- *
- * Modifications:
- *
- *****************************************************************************/
-
-void
-pin_entry(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- int32_t idx,
- hbool_t global,
- hbool_t dirty)
-{
- /* const char * fcn_name = "pin_entry()"; */
- unsigned int flags = H5AC1__PIN_ENTRY_FLAG;
- struct datum * entry_ptr;
-
- if ( nerrors == 0 ) {
-
- HDassert( cache_ptr );
- HDassert( file_ptr );
- HDassert( ( 0 <= idx ) && ( idx < NUM_DATA_ENTRIES ) );
- HDassert( idx < virt_num_data_entries );
-
- entry_ptr = &(data[idx]);
-
- HDassert ( ! (entry_ptr->global_pinned) );
- HDassert ( ! (entry_ptr->local_pinned) );
- HDassert ( ! ( dirty && ( ! global ) ) );
-
- lock_entry(cache_ptr, file_ptr, idx);
-
- if ( dirty ) {
-
- flags |= H5AC1__DIRTIED_FLAG;
- }
-
- unlock_entry(cache_ptr, file_ptr, idx, flags);
-
- HDassert( (entry_ptr->header).is_pinned );
- HDassert( ( ! dirty ) || ( (entry_ptr->header).is_dirty ) );
-
- if ( global ) {
-
- entry_ptr->global_pinned = TRUE;
-
- global_pins++;
-
- } else {
-
- entry_ptr->local_pinned = TRUE;
-
- local_pins++;
-
- }
- }
-
- return;
-
-} /* pin_entry() */
-
-
-/*****************************************************************************
- * Function: pin_protected_entry()
- *
- * Purpose: Insert the entry indicated by the type and index, mark it
- * as dirty, and increment its version number.
- *
- * Do nothing if nerrors is non-zero on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 01/04/06
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-
-void
-pin_protected_entry(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- int32_t idx,
- hbool_t global)
-{
- const char * fcn_name = "pin_protected_entry()";
- herr_t result;
- struct datum * entry_ptr;
-
- HDassert( cache_ptr );
- HDassert( file_ptr );
- HDassert( ( 0 <= idx ) && ( idx < NUM_DATA_ENTRIES ) );
- HDassert( idx < virt_num_data_entries );
-
- entry_ptr = &(data[idx]);
-
- HDassert( entry_ptr->locked );
-
- if ( nerrors == 0 ) {
-
- result = H5AC1_pin_protected_entry(file_ptr, (void *)entry_ptr);
-
- if ( ( result < 0 ) ||
- ( entry_ptr->header.type != &(types[0]) ) ||
- ( ( entry_ptr->len != entry_ptr->header.size ) &&
- ( entry_ptr->local_len != entry_ptr->header.size ) )||
- ( entry_ptr->base_addr != entry_ptr->header.addr ) ||
- ( ! ( (entry_ptr->header).is_pinned ) ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout,
- "%d:%s: Error in H5AC1_pin_protected entry().\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- if ( global ) {
-
- entry_ptr->global_pinned = TRUE;
-
- global_pins++;
-
- } else {
-
- entry_ptr->local_pinned = TRUE;
-
- local_pins++;
-
- }
-
- HDassert( ((entry_ptr->header).type)->id == DATUM_ENTRY_TYPE );
- }
-
- return;
-
-} /* pin_protected_entry() */
-
-
-/*****************************************************************************
- * Function: rename_entry()
- *
- * Purpose: Rename the entry indicated old_idx to the entry indicated
- * by new_idex. Touch up the data array so that flush will
- * not choke.
- *
- * Do nothing if nerrors isn't zero, or if old_idx equals
- * new_idx.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 1/10/06
- *
- * Modifications:
- *
- * 7/11/06 -- JRM
- * Added support for the phony_len field in datum.
- *
- *****************************************************************************/
-
-void
-rename_entry(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- int32_t old_idx,
- int32_t new_idx)
-{
- const char * fcn_name = "rename_entry()";
- herr_t result;
- int tmp;
- size_t tmp_len;
- haddr_t old_addr = HADDR_UNDEF;
- haddr_t new_addr = HADDR_UNDEF;
- struct datum * old_entry_ptr;
- struct datum * new_entry_ptr;
-
- if ( ( nerrors == 0 ) && ( old_idx != new_idx ) ) {
-
- HDassert( cache_ptr );
- HDassert( file_ptr );
- HDassert( ( 0 <= old_idx ) && ( old_idx < NUM_DATA_ENTRIES ) );
- HDassert( old_idx < virt_num_data_entries );
- HDassert( ( 0 <= new_idx ) && ( new_idx < NUM_DATA_ENTRIES ) );
- HDassert( new_idx < virt_num_data_entries );
-
- old_entry_ptr = &(data[old_idx]);
- new_entry_ptr = &(data[new_idx]);
-
- HDassert( ((old_entry_ptr->header).type)->id == DATUM_ENTRY_TYPE );
- HDassert( !(old_entry_ptr->header.is_protected) );
- HDassert( !(old_entry_ptr->locked) );
- HDassert( old_entry_ptr->len == new_entry_ptr->len );
-
- old_addr = old_entry_ptr->base_addr;
- new_addr = new_entry_ptr->base_addr;
-
- result = H5AC1_rename(file_ptr, &(types[0]), old_addr, new_addr);
-
- if ( ( result < 0 ) || ( old_entry_ptr->header.addr != new_addr ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: H5AC1_rename() failed.\n",
- world_mpi_rank, fcn_name);
- }
-
- } else {
-
- HDassert( ((old_entry_ptr->header).type)->id == DATUM_ENTRY_TYPE );
- HDassert( old_entry_ptr->header.is_dirty );
- old_entry_ptr->dirty = TRUE;
-
- /* touch up versions, base_addrs, and data_index */
-
- if ( old_entry_ptr->ver < new_entry_ptr->ver ) {
-
- old_entry_ptr->ver = new_entry_ptr->ver;
-
- } else {
-
- (old_entry_ptr->ver)++;
-
- }
-
- old_entry_ptr->base_addr = new_addr;
- new_entry_ptr->base_addr = old_addr;
-
- data_index[old_entry_ptr->index] = new_idx;
- data_index[new_entry_ptr->index] = old_idx;
-
- tmp = old_entry_ptr->index;
- old_entry_ptr->index = new_entry_ptr->index;
- new_entry_ptr->index = tmp;
-
- if ( old_entry_ptr->local_len != new_entry_ptr->local_len ) {
-
- tmp_len = old_entry_ptr->local_len;
- old_entry_ptr->local_len = new_entry_ptr->local_len;
- new_entry_ptr->local_len = tmp_len;
- }
- }
- }
-
- return;
-
-} /* rename_entry() */
-
-
-/*****************************************************************************
- * Function: resize_entry()
- *
- * Purpose: Resize the pinned entry indicated by idx to the new_size.
- * Note that new_size must be greater than 0, and must be
- * less than or equal to the original size of the entry.
- *
- * Do nothing if nerrors isn't zero.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 7/11/06
- *
- * Modifications:
- *
- * None
- *
- *****************************************************************************/
-
-void
-resize_entry(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- int32_t idx,
- size_t new_size)
-{
- const char * fcn_name = "resize_entry()";
- herr_t result;
- struct datum * entry_ptr;
-
- if ( nerrors == 0 ) {
-
- HDassert( cache_ptr );
- HDassert( file_ptr );
- HDassert( ( 0 <= idx ) && ( idx < NUM_DATA_ENTRIES ) );
- HDassert( idx < virt_num_data_entries );
-
- entry_ptr = &(data[idx]);
-
- HDassert( ((entry_ptr->header).type)->id == DATUM_ENTRY_TYPE );
- HDassert( !(entry_ptr->header.is_protected) );
- HDassert( !(entry_ptr->locked) );
- HDassert( ( entry_ptr->global_pinned ) &&
- ( ! entry_ptr->local_pinned ) );
- HDassert( ( entry_ptr->header.size == entry_ptr->len ) ||
- ( entry_ptr->header.size == entry_ptr->local_len ) );
- HDassert( new_size > 0 );
- HDassert( new_size <= entry_ptr->len );
-
- result = H5AC1_resize_pinned_entry(file_ptr, (void *)entry_ptr,
- new_size);
-
- if ( result < 0 ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: H5AC1_rename() failed.\n",
- world_mpi_rank, fcn_name);
- }
-
- } else {
-
- HDassert( ((entry_ptr->header).type)->id == DATUM_ENTRY_TYPE );
- HDassert( entry_ptr->header.is_dirty );
- HDassert( entry_ptr->header.size == new_size );
-
- entry_ptr->dirty = TRUE;
- entry_ptr->local_len = new_size;
-
- /* touch up version. */
-
- (entry_ptr->ver)++;
- }
- }
-
- return;
-
-} /* resize_entry() */
-
-
-/*****************************************************************************
- *
- * Function: setup_cache_for_test()
- *
- * Purpose: Setup the parallel cache for a test, and return the file id
- * and a pointer to the cache's internal data structures.
- *
- * To do this, we must create a file, flush it (so that we
- * don't have to worry about entries in the metadata cache),
- * look up the address of the metadata cache, and then instruct
- * the cache to omit sanity checks on dxpl IDs.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 1/4/06
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-
-hbool_t
-setup_cache_for_test(hid_t * fid_ptr,
- H5F_t ** file_ptr_ptr,
- H5C1_t ** cache_ptr_ptr)
-{
- const char * fcn_name = "setup_cache_for_test()";
- hbool_t success = FALSE; /* will set to TRUE if appropriate. */
- hbool_t enable_rpt_fcn = FALSE;
- hid_t fid = -1;
- H5AC1_cache_config_t config;
- H5F_t * file_ptr = NULL;
- H5C1_t * cache_ptr = NULL;
-
- HDassert ( fid_ptr != NULL );
- HDassert ( file_ptr_ptr != NULL );
- HDassert ( cache_ptr_ptr != NULL );
-
- fid = H5Fcreate(filenames[0], H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
-
- if ( fid < 0 ) {
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: H5Fcreate() failed.\n",
- world_mpi_rank, fcn_name);
- }
- } else if ( H5Fflush(fid, H5F_SCOPE_GLOBAL) < 0 ) {
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: H5Fflush() failed.\n",
- world_mpi_rank, fcn_name);
- }
- } else {
- file_ptr = H5I_object_verify(fid, H5I_FILE);
- }
-
- if ( file_ptr == NULL ) {
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: Can't get file_ptr.\n",
- world_mpi_rank, fcn_name);
- }
- } else {
- cache_ptr = file_ptr->shared->cache1;
- }
-
- if ( cache_ptr == NULL ) {
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: Can't get cache_ptr.\n",
- world_mpi_rank, fcn_name);
- }
- } else if ( cache_ptr->magic != H5C1__H5C1_T_MAGIC ) {
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: Bad cache_ptr magic.\n",
- world_mpi_rank, fcn_name);
- }
- } else {
- *fid_ptr = fid;
- *file_ptr_ptr = file_ptr;
- *cache_ptr_ptr = cache_ptr;
- H5C1_set_skip_flags(cache_ptr, TRUE, TRUE);
- H5C1_stats__reset(cache_ptr);
- success = TRUE;
- }
-
- if ( ( success ) && ( enable_rpt_fcn ) ) {
-
- config.version = H5AC1__CURR_CACHE_CONFIG_VERSION;
-
- if ( H5AC1_get_cache_auto_resize_config(cache_ptr, &config)
- != SUCCEED ) {
-
- HDfprintf(stdout,
- "%d:%s: H5AC1_get_cache_auto_resize_config() failed.\n",
- world_mpi_rank, fcn_name);
-
- } else {
-
- config.rpt_fcn_enabled = TRUE;
-
- if ( H5AC1_set_cache_auto_resize_config(cache_ptr, &config)
- != SUCCEED ) {
-
- HDfprintf(stdout,
- "%d:%s: H5AC1_set_cache_auto_resize_config() failed.\n",
- world_mpi_rank, fcn_name);
- } else {
-
- HDfprintf(stdout, "%d:%s: rpt_fcn enabled.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
-#if DO_SYNC_AFTER_WRITE
-
- if ( success ) {
-
- if ( H5AC1_set_write_done_callback(cache_ptr, do_sync) != SUCCEED ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout,
- "%d:%s: H5C1_set_write_done_callback failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
-#endif /* DO_SYNC_AFTER_WRITE */
-
- return(success);
-
-} /* setup_cache_for_test() */
-
-
-/*****************************************************************************
- *
- * Function: setup_noblock_dxpl_id()
- *
- * Purpose: Setup the noblock_dxpl_id global. Increment nerrors if
- * errors are detected. Do nothing if nerrors is non-zero
- * on entry.
- *
- * Return: void.
- *
- * Programmer: JRM -- 1/5/06
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-/* So far we haven't needed this, but that may change.
- * Keep it around for now
- */
-#if 0
-void
-setup_noblock_dxpl_id(void)
-{
- const char * fcn_name = "setup_noblock_dxpl_id()";
- H5P_genclass_t *xfer_pclass; /* Dataset transfer property list
- * class object
- */
- H5P_genplist_t *xfer_plist; /* Dataset transfer property list object */
- unsigned block_before_meta_write; /* "block before meta write"
- * property value
- */
- unsigned library_internal = 1; /* "library internal" property value */
- H5FD_mpio_xfer_t xfer_mode; /* I/O transfer mode property value */
-
- /* Sanity check */
- HDassert(H5P_CLS_DATASET_XFER_g!=(-1));
-
- /* Get the dataset transfer property list class object */
- if ( ( nerrors == 0 ) &&
- ( NULL == (xfer_pclass = H5I_object(H5P_CLS_DATASET_XFER_g)) ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: can't get property list class.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- /* Get an ID for the non-blocking, collective H5AC dxpl */
- if ( ( nerrors == 0 ) &&
- ( (noblock_dxpl_id = H5P_create_id(xfer_pclass)) < 0 ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: can't register property list.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- /* Get the property list object */
- if ( ( nerrors == 0 ) &&
- ( NULL == (xfer_plist = H5I_object(H5AC1_noblock_dxpl_id)) ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: can't get new property list object.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- /* Insert 'block before metadata write' property */
- block_before_meta_write=0;
- if ( ( nerrors == 0 ) &&
- ( H5P_insert(xfer_plist, H5AC1_BLOCK_BEFORE_META_WRITE_NAME,
- H5AC1_BLOCK_BEFORE_META_WRITE_SIZE,
- &block_before_meta_write,
- NULL, NULL, NULL, NULL, NULL, NULL) < 0 ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout,
- "%d:%s: can't insert metadata cache dxpl property 1.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- /* Insert 'library internal' property */
- if ( ( nerrors == 0 ) &&
- ( H5P_insert(xfer_plist, H5AC1_LIBRARY_INTERNAL_NAME,
- H5AC1_LIBRARY_INTERNAL_SIZE, &library_internal,
- NULL, NULL, NULL, NULL, NULL, NULL ) < 0 ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout,
- "%d:%s: can't insert metadata cache dxpl property 2.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- /* Set the transfer mode */
- xfer_mode = H5FD_MPIO_COLLECTIVE;
- if ( ( nerrors == 0 ) &&
- ( H5P_set(xfer_plist, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0 ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: unable to set value.\n", world_mpi_rank,
- fcn_name);
- }
- }
-
- return(success);
-
-} /* setup_noblock_dxpl_id() */
-#endif
-
-
-/*****************************************************************************
- *
- * Function: setup_rand()
- *
- * Purpose: Use gettimeofday() to obtain a seed for rand(), print the
- * seed to stdout, and then pass it to srand().
- *
- * Increment nerrors if any errors are detected.
- *
- * Return: void.
- *
- * Programmer: JRM -- 1/12/06
- *
- * Modifications:
- *
- * JRM -- 5/9/06
- * Modified function to facilitate setting predefined seeds.
- *
- *****************************************************************************/
-
-void
-setup_rand(void)
-{
- const char * fcn_name = "setup_rand()";
- hbool_t use_predefined_seeds = FALSE;
- int num_predefined_seeds = 3;
- unsigned predefined_seeds[3] = {18669, 89925, 12577};
- unsigned seed;
- struct timeval tv;
- struct timezone tz;
-
- if ( ( use_predefined_seeds ) &&
- ( world_mpi_size == num_predefined_seeds ) ) {
-
- HDassert( world_mpi_rank >= 0 );
- HDassert( world_mpi_rank < world_mpi_size );
-
- seed = predefined_seeds[world_mpi_rank];
- HDfprintf(stdout, "%d:%s: predefined_seed = %d.\n",
- world_mpi_rank, fcn_name, seed);
- fflush(stdout);
- HDsrand(seed);
-
- } else {
-
- if ( HDgettimeofday(&tv, &tz) != 0 ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: gettimeofday() failed.\n",
- world_mpi_rank, fcn_name);
- }
- } else {
- seed = (unsigned)tv.tv_usec;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: seed = %d.\n",
- world_mpi_rank, fcn_name, seed);
- fflush(stdout);
- }
- HDsrand(seed);
- }
- }
-
- return;
-
-} /* setup_rand() */
-
-
-/*****************************************************************************
- *
- * Function: take_down_cache()
- *
- * Purpose: Take down the parallel cache after a test.
- *
- * To do this, we must close the file, and delete if if
- * possible.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 1/4/06
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-
-hbool_t
-take_down_cache(hid_t fid)
-{
- const char * fcn_name = "take_down_cache()";
- hbool_t success = FALSE; /* will set to TRUE if appropriate. */
-
- /* close the file and delete it */
- if ( H5Fclose(fid) < 0 ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: H5Fclose() failed.\n",
- world_mpi_rank, fcn_name);
- }
-
- } else if ( world_mpi_rank == world_server_mpi_rank ) {
-
- if ( HDremove(filenames[0]) < 0 ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: HDremove() failed.\n",
- world_mpi_rank, fcn_name);
- }
- } else {
-
- success = TRUE;
- }
- } else {
-
- success = TRUE;
- }
-
- return(success);
-
-} /* take_down_cache() */
-
-
-/*****************************************************************************
- * Function: unlock_entry()
- *
- * Purpose: Unprotect the entry indicated by the index.
- *
- * Do nothing if nerrors is non-zero on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 1/4/06
- *
- * Modifications:
- *
- * 7/11/06
- * Updated for the new local_len field in datum.
- *
- *****************************************************************************/
-
-void
-unlock_entry(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- int32_t idx,
- unsigned int flags)
-{
- const char * fcn_name = "unlock_entry()";
- herr_t dirtied;
- herr_t result;
- struct datum * entry_ptr;
-
- if ( nerrors == 0 ) {
-
- HDassert( cache_ptr );
- HDassert( file_ptr );
- HDassert( ( 0 <= idx ) && ( idx < NUM_DATA_ENTRIES ) );
- HDassert( idx < virt_num_data_entries );
-
- entry_ptr = &(data[idx]);
-
- HDassert( entry_ptr->locked );
-
- dirtied = ((flags & H5AC1__DIRTIED_FLAG) == H5AC1__DIRTIED_FLAG );
-
- if ( dirtied ) {
-
- (entry_ptr->ver)++;
- entry_ptr->dirty = TRUE;
- }
-
- result = H5AC1_unprotect(file_ptr, -1, &(types[0]),
- entry_ptr->base_addr,
- (void *)(&(entry_ptr->header)), flags);
-
- if ( ( result < 0 ) ||
- ( entry_ptr->header.type != &(types[0]) ) ||
- ( ( entry_ptr->len != entry_ptr->header.size ) &&
- ( entry_ptr->local_len != entry_ptr->header.size ) ) ||
- ( entry_ptr->base_addr != entry_ptr->header.addr ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: error in H5C1_unprotect().\n",
- world_mpi_rank, fcn_name);
- }
- } else {
-
- entry_ptr->locked = FALSE;
-
- }
-
- HDassert( ((entry_ptr->header).type)->id == DATUM_ENTRY_TYPE );
-
- if ( ( flags & H5AC1__DIRTIED_FLAG ) != 0
- && ( (flags & H5C1__DELETED_FLAG) == 0 ) ) {
-
- HDassert( entry_ptr->header.is_dirty );
- HDassert( entry_ptr->dirty );
- }
- }
-
- return;
-
-} /* unlock_entry() */
-
-
-/*****************************************************************************
- * Function: unpin_entry()
- *
- * Purpose: Unpin the entry indicated by the index.
- *
- * Do nothing if nerrors is non-zero on entry.
- *
- * Return: void
- *
- * Programmer: John Mainzer
- * 4/12/06
- *
- * Modifications:
- *
- * JRM -- 8/15/06
- * Added assertion that entry is pinned on entry.
- *
- *****************************************************************************/
-
-void
-unpin_entry(H5C1_t * cache_ptr,
- H5F_t * file_ptr,
- int32_t idx,
- hbool_t global,
- hbool_t dirty,
- hbool_t via_unprotect)
-{
- const char * fcn_name = "unpin_entry()";
- herr_t result;
- unsigned int flags = H5AC1__UNPIN_ENTRY_FLAG;
- struct datum * entry_ptr;
-
- if ( nerrors == 0 ) {
-
- HDassert( cache_ptr );
- HDassert( file_ptr );
- HDassert( ( 0 <= idx ) && ( idx < NUM_DATA_ENTRIES ) );
- HDassert( idx < virt_num_data_entries );
-
- entry_ptr = &(data[idx]);
-
- HDassert( (entry_ptr->header).is_pinned );
- HDassert ( ! ( entry_ptr->global_pinned && entry_ptr->local_pinned) );
- HDassert ( ( global && entry_ptr->global_pinned ) ||
- ( ! global && entry_ptr->local_pinned ) );
- HDassert ( ! ( dirty && ( ! global ) ) );
-
- if ( via_unprotect ) {
-
- lock_entry(cache_ptr, file_ptr, idx);
-
- if ( dirty ) {
-
- flags |= H5AC1__DIRTIED_FLAG;
- }
-
- unlock_entry(cache_ptr, file_ptr, idx, flags);
-
- } else {
-
- if ( dirty ) {
-
- mark_pinned_entry_dirty(cache_ptr, file_ptr, idx, FALSE,
- (size_t)0);
-
- }
-
- result = H5AC1_unpin_entry(file_ptr, (void *)entry_ptr);
-
- if ( result < 0 ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: error in H5AC1_unpin_entry().\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- HDassert( ! ((entry_ptr->header).is_pinned) );
-
- if ( global ) {
-
- entry_ptr->global_pinned = FALSE;
-
- } else {
-
- entry_ptr->local_pinned = FALSE;
-
- }
- }
-
- return;
-
-} /* unpin_entry() */
-
-
-/*****************************************************************************/
-/****************************** test functions *******************************/
-/*****************************************************************************/
-
-/*****************************************************************************
- *
- * Function: server_smoke_check()
- *
- * Purpose: Quick smoke check for the server process.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 12/21/05
- *
- * Modifications:
- *
- * JRM -- 5/9/06
- * Added code supporting the write request ack message. This
- * message was added to eliminate one possible cause of a
- * bug spotted on cobalt. If this doesn't fix the problem,
- * it will narrow things down a bit.
- *
- * JRM -- 5/10/06
- * Added call to do_sync(). This is part of an attempt to
- * optimize out the slowdown caused by the addition of the
- * write request ack message.
- *
- *****************************************************************************/
-
-hbool_t
-server_smoke_check(void)
-{
- const char * fcn_name = "server_smoke_check()";
- hbool_t success = TRUE;
- int max_nerrors;
- struct mssg_t mssg;
-
- if ( world_mpi_rank == 0 ) {
-
- TESTING("server smoke check");
- }
-
- nerrors = 0;
- init_data();
- reset_stats();
-
- if ( world_mpi_rank == world_server_mpi_rank ) {
-
- if ( ! server_main() ) {
-
- /* some error occured in the server -- report failure */
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: server_main() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
- else /* run the clients */
- {
- /* compose the write message */
- mssg.req = WRITE_REQ_CODE;
- mssg.src = world_mpi_rank;
- mssg.dest = world_server_mpi_rank;
- mssg.mssg_num = -1; /* set by send function */
- mssg.base_addr = data[world_mpi_rank].base_addr;
- mssg.len = data[world_mpi_rank].len;
- mssg.ver = ++(data[world_mpi_rank].ver);
- mssg.magic = MSSG_MAGIC;
-
- if ( ! ( success = send_mssg(&mssg, FALSE) ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: send_mssg() failed on write.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
-#if DO_WRITE_REQ_ACK
-
- /* try to receive the write ack from the server */
- if ( success ) {
-
- success = recv_mssg(&mssg, WRITE_REQ_ACK_CODE);
-
- if ( ! success ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: recv_mssg() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- /* verify that we received the expected ack message */
- if ( success ) {
-
- if ( ( mssg.req != WRITE_REQ_ACK_CODE ) ||
- ( mssg.src != world_server_mpi_rank ) ||
- ( mssg.dest != world_mpi_rank ) ||
- ( mssg.base_addr != data[world_mpi_rank].base_addr ) ||
- ( mssg.len != data[world_mpi_rank].len ) ||
- ( mssg.ver != data[world_mpi_rank].ver ) ||
- ( mssg.magic != MSSG_MAGIC ) ) {
-
- success = FALSE;
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: Bad data in write req ack.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
-#endif /* DO_WRITE_REQ_ACK */
-
- do_sync();
-
- /* compose the read message */
- mssg.req = READ_REQ_CODE;
- mssg.src = world_mpi_rank;
- mssg.dest = world_server_mpi_rank;
- mssg.mssg_num = -1; /* set by send function */
- mssg.base_addr = data[world_mpi_rank].base_addr;
- mssg.len = data[world_mpi_rank].len;
- mssg.ver = 0; /* bogus -- should be corrected by server */
- mssg.magic = MSSG_MAGIC;
-
- if ( success ) {
-
- success = send_mssg(&mssg, FALSE);
-
- if ( ! success ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: send_mssg() failed on write.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- /* try to receive the reply from the server */
- if ( success ) {
-
- success = recv_mssg(&mssg, READ_REQ_REPLY_CODE);
-
- if ( ! success ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: recv_mssg() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- /* verify that we got the expected result */
- if ( success ) {
-
- if ( ( mssg.req != READ_REQ_REPLY_CODE ) ||
- ( mssg.src != world_server_mpi_rank ) ||
- ( mssg.dest != world_mpi_rank ) ||
- ( mssg.base_addr != data[world_mpi_rank].base_addr ) ||
- ( mssg.len != data[world_mpi_rank].len ) ||
- ( mssg.ver != data[world_mpi_rank].ver ) ||
- ( mssg.magic != MSSG_MAGIC ) ) {
-
- success = FALSE;
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: Bad data in read req reply.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- /* compose the done message */
- mssg.req = DONE_REQ_CODE;
- mssg.src = world_mpi_rank;
- mssg.dest = world_server_mpi_rank;
- mssg.mssg_num = -1; /* set by send function */
- mssg.base_addr = 0; /* not used */
- mssg.len = 0; /* not used */
- mssg.ver = 0; /* not used */
- mssg.magic = MSSG_MAGIC;
-
- if ( success ) {
-
- success = send_mssg(&mssg, FALSE);
-
- if ( ! success ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: send_mssg() failed on done.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
- }
-
- max_nerrors = get_max_nerrors();
-
- if ( world_mpi_rank == 0 ) {
-
- if ( max_nerrors == 0 ) {
-
- PASSED();
-
- } else {
-
- failures++;
- H5_FAILED();
- }
- }
-
- success = ( ( success ) && ( max_nerrors == 0 ) );
-
- return(success);
-
-} /* server_smoke_check() */
-
-/*****************************************************************************
- *
- * Function: smoke_check_1()
- *
- * Purpose: First smoke check for the parallel cache.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 1/4/06
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-
-hbool_t
-smoke_check_1(void)
-{
- const char * fcn_name = "smoke_check_1()";
- hbool_t success = TRUE;
- int i;
- int max_nerrors;
- hid_t fid = -1;
- H5F_t * file_ptr = NULL;
- H5C1_t * cache_ptr = NULL;
- struct mssg_t mssg;
-
- if ( world_mpi_rank == 0 ) {
-
- TESTING("smoke check #1");
- }
-
- nerrors = 0;
- init_data();
- reset_stats();
-
- if ( world_mpi_rank == world_server_mpi_rank ) {
-
- if ( ! server_main() ) {
-
- /* some error occured in the server -- report failure */
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: server_main() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
- else /* run the clients */
- {
- if ( ! setup_cache_for_test(&fid, &file_ptr, &cache_ptr) ) {
-
- nerrors++;
- fid = -1;
- cache_ptr = NULL;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: setup_cache_for_test() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- for ( i = 0; i < (virt_num_data_entries / 2); i++ )
- {
- insert_entry(cache_ptr, file_ptr, i, H5AC1__NO_FLAGS_SET);
- }
-
- for ( i = (virt_num_data_entries / 2) - 1; i >= 0; i-- )
- {
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__NO_FLAGS_SET);
- }
-
- /* rename the first half of the entries... */
- for ( i = 0; i < (virt_num_data_entries / 2); i++ )
- {
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__NO_FLAGS_SET);
- rename_entry(cache_ptr, file_ptr, i,
- (i + (virt_num_data_entries / 2)));
- }
-
- /* ...and then rename them back. */
- for ( i = (virt_num_data_entries / 2) - 1; i >= 0; i-- )
- {
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__NO_FLAGS_SET);
- rename_entry(cache_ptr, file_ptr, i,
- (i + (virt_num_data_entries / 2)));
- }
-
- if ( fid >= 0 ) {
-
- if ( ! take_down_cache(fid) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: take_down_cache() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- /* verify that all instance of datum are back where the started
- * and are clean.
- */
-
- for ( i = 0; i < NUM_DATA_ENTRIES; i++ )
- {
- HDassert( data_index[i] == i );
- HDassert( ! (data[i].dirty) );
- }
-
- /* compose the done message */
- mssg.req = DONE_REQ_CODE;
- mssg.src = world_mpi_rank;
- mssg.dest = world_server_mpi_rank;
- mssg.mssg_num = -1; /* set by send function */
- mssg.base_addr = 0; /* not used */
- mssg.len = 0; /* not used */
- mssg.ver = 0; /* not used */
- mssg.magic = MSSG_MAGIC;
-
- if ( success ) {
-
- success = send_mssg(&mssg, FALSE);
-
- if ( ! success ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: send_mssg() failed on done.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
- }
-
- max_nerrors = get_max_nerrors();
-
- if ( world_mpi_rank == 0 ) {
-
- if ( max_nerrors == 0 ) {
-
- PASSED();
-
- } else {
-
- failures++;
- H5_FAILED();
- }
- }
-
- success = ( ( success ) && ( max_nerrors == 0 ) );
-
- return(success);
-
-} /* smoke_check_1() */
-
-
-/*****************************************************************************
- *
- * Function: smoke_check_2()
- *
- * Purpose: Second smoke check for the parallel cache.
- *
- * Introduce random reads, but keep all processes with roughly
- * the same work load.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 1/12/06
- *
- * Modifications:
- *
- * JRM -- 4/13/06
- * Added pinned entry tests.
- *
- * JRM -- 4/28/06
- * Modified test to rename pinned entries.
- *
- *****************************************************************************/
-
-hbool_t
-smoke_check_2(void)
-{
- const char * fcn_name = "smoke_check_2()";
- hbool_t success = TRUE;
- int i;
- int max_nerrors;
- hid_t fid = -1;
- H5F_t * file_ptr = NULL;
- H5C1_t * cache_ptr = NULL;
- struct mssg_t mssg;
-
- if ( world_mpi_rank == 0 ) {
-
- TESTING("smoke check #2");
- }
-
- nerrors = 0;
- init_data();
- reset_stats();
-
- if ( world_mpi_rank == world_server_mpi_rank ) {
-
- if ( ! server_main() ) {
-
- /* some error occured in the server -- report failure */
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: server_main() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
- else /* run the clients */
- {
- if ( ! setup_cache_for_test(&fid, &file_ptr, &cache_ptr) ) {
-
- nerrors++;
- fid = -1;
- cache_ptr = NULL;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: setup_cache_for_test() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- for ( i = 0; i < (virt_num_data_entries / 2); i++ )
- {
- insert_entry(cache_ptr, file_ptr, i, H5AC1__NO_FLAGS_SET);
-
- if ( i > 100 ) {
-
- lock_and_unlock_random_entries(cache_ptr, file_ptr,
- (i - 100), i, 0, 10);
- }
- }
-
- for ( i = 0; i < (virt_num_data_entries / 2); i+=61 )
- {
- /* Make sure we don't step on any locally pinned entries */
- if ( data[i].local_pinned ) {
- unpin_entry(cache_ptr, file_ptr, i, FALSE, FALSE, FALSE);
- }
-
- pin_entry(cache_ptr, file_ptr, i, TRUE, FALSE);
- }
-
- for ( i = (virt_num_data_entries / 2) - 1; i >= 0; i-=2 )
- {
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__NO_FLAGS_SET);
- lock_and_unlock_random_entries(cache_ptr, file_ptr, 0,
- (virt_num_data_entries / 20),
- 0, 100);
- local_pin_and_unpin_random_entries(cache_ptr, file_ptr, 0,
- (virt_num_data_entries / 4),
- 0, 3);
- }
-
- for ( i = 0; i < (virt_num_data_entries / 2); i+=2 )
- {
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__DIRTIED_FLAG);
- lock_and_unlock_random_entries(cache_ptr, file_ptr, 0,
- (virt_num_data_entries / 10),
- 0, 100);
- }
-
- /* we can't rename pinned entries, so release any local pins now. */
- local_unpin_all_entries(cache_ptr, file_ptr, FALSE);
-
- /* rename the first half of the entries... */
- for ( i = 0; i < (virt_num_data_entries / 2); i++ )
- {
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__NO_FLAGS_SET);
- rename_entry(cache_ptr, file_ptr, i,
- (i + (virt_num_data_entries / 2)));
- lock_and_unlock_random_entries(cache_ptr, file_ptr, 0,
- ((virt_num_data_entries / 50) - 1),
- 0, 100);
- }
-
- /* ...and then rename them back. */
- for ( i = (virt_num_data_entries / 2) - 1; i >= 0; i-- )
- {
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__DIRTIED_FLAG);
- rename_entry(cache_ptr, file_ptr, i,
- (i + (virt_num_data_entries / 2)));
- lock_and_unlock_random_entries(cache_ptr, file_ptr, 0,
- (virt_num_data_entries / 100),
- 0, 100);
- }
-
- for ( i = 0; i < (virt_num_data_entries / 2); i+=61 )
- {
- hbool_t via_unprotect = ( (((unsigned)i) & 0x01) == 0 );
- hbool_t dirty = ( (((unsigned)i) & 0x02) == 0 );
-
- unpin_entry(cache_ptr, file_ptr, i, TRUE, dirty, via_unprotect);
- }
-
- if ( fid >= 0 ) {
-
- if ( ! take_down_cache(fid) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: take_down_cache() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- /* verify that all instance of datum are back where the started
- * and are clean.
- */
-
- for ( i = 0; i < NUM_DATA_ENTRIES; i++ )
- {
- HDassert( data_index[i] == i );
- HDassert( ! (data[i].dirty) );
- }
-
- /* compose the done message */
- mssg.req = DONE_REQ_CODE;
- mssg.src = world_mpi_rank;
- mssg.dest = world_server_mpi_rank;
- mssg.mssg_num = -1; /* set by send function */
- mssg.base_addr = 0; /* not used */
- mssg.len = 0; /* not used */
- mssg.ver = 0; /* not used */
- mssg.magic = MSSG_MAGIC;
-
- if ( success ) {
-
- success = send_mssg(&mssg, FALSE);
-
- if ( ! success ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: send_mssg() failed on done.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
- }
-
- max_nerrors = get_max_nerrors();
-
- if ( world_mpi_rank == 0 ) {
-
- if ( max_nerrors == 0 ) {
-
- PASSED();
-
- } else {
-
- failures++;
- H5_FAILED();
- }
- }
-
- success = ( ( success ) && ( max_nerrors == 0 ) );
-
- return(success);
-
-} /* smoke_check_2() */
-
-
-/*****************************************************************************
- *
- * Function: smoke_check_3()
- *
- * Purpose: Third smoke check for the parallel cache.
- *
- * Use random reads to vary the loads on the diffferent
- * processors. Also force different cache size adjustments.
- *
- * In this test, load process 0 heavily, and the other
- * processes lightly.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 1/13/06
- *
- * Modifications:
- *
- * Added code intended to ensure correct operation with large
- * numbers of processors.
- * JRM - 1/31/06
- *
- * Added pinned entry tests. JRM - 4/14/06
- *
- *****************************************************************************/
-
-hbool_t
-smoke_check_3(void)
-{
- const char * fcn_name = "smoke_check_3()";
- hbool_t success = TRUE;
- int i;
- int max_nerrors;
- int min_count;
- int max_count;
- int min_idx;
- int max_idx;
- hid_t fid = -1;
- H5F_t * file_ptr = NULL;
- H5C1_t * cache_ptr = NULL;
- struct mssg_t mssg;
-
- if ( world_mpi_rank == 0 ) {
-
- TESTING("smoke check #3");
- }
-
- nerrors = 0;
- init_data();
- reset_stats();
-
- if ( world_mpi_rank == world_server_mpi_rank ) {
-
- if ( ! server_main() ) {
-
- /* some error occured in the server -- report failure */
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: server_main() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
- else /* run the clients */
- {
- if ( ! setup_cache_for_test(&fid, &file_ptr, &cache_ptr) ) {
-
- nerrors++;
- fid = -1;
- cache_ptr = NULL;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: setup_cache_for_test() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- min_count = 100 / ((file_mpi_rank + 1) * (file_mpi_rank + 1));
- max_count = min_count + 50;
-
- for ( i = 0; i < (virt_num_data_entries / 4); i++ )
- {
- insert_entry(cache_ptr, file_ptr, i, H5AC1__NO_FLAGS_SET);
-
- if ( i > 100 ) {
-
- lock_and_unlock_random_entries(cache_ptr, file_ptr,
- (i - 100), i,
- min_count, max_count);
- }
- }
-
-
- min_count = 100 / ((file_mpi_rank + 2) * (file_mpi_rank + 2));
- max_count = min_count + 50;
-
- for ( i = (virt_num_data_entries / 4);
- i < (virt_num_data_entries / 2);
- i++ )
- {
-
- insert_entry(cache_ptr, file_ptr, i, H5AC1__NO_FLAGS_SET);
-
- if ( i % 59 == 0 ) {
-
- hbool_t dirty = ( (i % 2) == 0);
-
- if ( data[i].local_pinned ) {
- unpin_entry(cache_ptr, file_ptr, i, FALSE, FALSE, FALSE);
- }
-
- pin_entry(cache_ptr, file_ptr, i, TRUE, dirty);
-
- HDassert( !dirty || data[i].header.is_dirty );
- HDassert( data[i].header.is_pinned );
- HDassert( data[i].global_pinned );
- HDassert( ! data[i].local_pinned );
- }
-
- if ( i > 100 ) {
-
- lock_and_unlock_random_entries(cache_ptr, file_ptr,
- (i - 100), i,
- min_count, max_count);
- }
-
- local_pin_and_unpin_random_entries(cache_ptr, file_ptr,
- 0, virt_num_data_entries / 4,
- 0, (file_mpi_rank + 2));
-
- }
-
-
- /* flush the file to be sure that we have no problems flushing
- * pinned entries
- */
- if ( H5Fflush(fid, H5F_SCOPE_GLOBAL) < 0 ) {
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: H5Fflush() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
-
- min_idx = 0;
- max_idx = ((virt_num_data_entries / 10) /
- ((file_mpi_rank + 1) * (file_mpi_rank + 1))) - 1;
- if ( max_idx <= min_idx ) {
-
- max_idx = min_idx + 10;
- }
-
- for ( i = (virt_num_data_entries / 2) - 1; i >= 0; i-- )
- {
- if ( ( i >= (virt_num_data_entries / 4) ) && ( i % 59 == 0 ) ) {
-
- hbool_t via_unprotect = ( (((unsigned)i) & 0x02) == 0 );
- hbool_t dirty = ( (((unsigned)i) & 0x04) == 0 );
-
- HDassert( data[i].global_pinned );
- HDassert( ! data[i].local_pinned );
-
- unpin_entry(cache_ptr, file_ptr, i, TRUE, dirty,
- via_unprotect);
- }
- if ( i % 2 == 0 ) {
-
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__NO_FLAGS_SET);
- local_pin_and_unpin_random_entries(cache_ptr, file_ptr, 0,
- virt_num_data_entries / 2,
- 0, 2);
- lock_and_unlock_random_entries(cache_ptr, file_ptr,
- min_idx, max_idx, 0, 100);
- }
- }
-
- min_idx = 0;
- max_idx = ((virt_num_data_entries / 10) /
- ((file_mpi_rank + 3) * (file_mpi_rank + 3))) - 1;
- if ( max_idx <= min_idx ) {
-
- max_idx = min_idx + 10;
- }
-
- for ( i = 0; i < (virt_num_data_entries / 2); i+=2 )
- {
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__DIRTIED_FLAG);
- lock_and_unlock_random_entries(cache_ptr, file_ptr,
- min_idx, max_idx, 0, 100);
- }
-
- /* we can't rename pinned entries, so release any local pins now. */
- local_unpin_all_entries(cache_ptr, file_ptr, FALSE);
-
- min_count = 10 / (file_mpi_rank + 1);
- max_count = min_count + 100;
-
- /* rename the first half of the entries... */
- for ( i = 0; i < (virt_num_data_entries / 2); i++ )
- {
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__NO_FLAGS_SET);
- rename_entry(cache_ptr, file_ptr, i,
- (i + (virt_num_data_entries / 2)));
- lock_and_unlock_random_entries(cache_ptr, file_ptr, 0,
- (virt_num_data_entries / 20),
- min_count, max_count);
- }
-
- /* ...and then rename them back. */
- for ( i = (virt_num_data_entries / 2) - 1; i >= 0; i-- )
- {
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__DIRTIED_FLAG);
- rename_entry(cache_ptr, file_ptr, i,
- (i + (virt_num_data_entries / 2)));
- lock_and_unlock_random_entries(cache_ptr, file_ptr, 0,
- (virt_num_data_entries / 40),
- min_count, max_count);
- }
-
- /* finally, do some dirty lock/unlocks while we give the cache
- * a chance t reduce its size.
- */
- min_count = 200 / ((file_mpi_rank + 1) * (file_mpi_rank + 1));
- max_count = min_count + 100;
-
- for ( i = 0; i < (virt_num_data_entries / 2); i+=2 )
- {
- local_pin_and_unpin_random_entries(cache_ptr, file_ptr, 0,
- (virt_num_data_entries / 2),
- 0, 5);
-
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__DIRTIED_FLAG);
-
- if ( i > 100 ) {
-
- lock_and_unlock_random_entries(cache_ptr, file_ptr,
- (i - 100), i,
- min_count, max_count);
- }
- }
-
- /* release any local pins before we take down the cache. */
- local_unpin_all_entries(cache_ptr, file_ptr, FALSE);
-
- if ( fid >= 0 ) {
-
- if ( ! take_down_cache(fid) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: take_down_cache() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- /* verify that all instances of datum are back where the started
- * and are clean.
- */
-
- for ( i = 0; i < NUM_DATA_ENTRIES; i++ )
- {
- HDassert( data_index[i] == i );
- HDassert( ! (data[i].dirty) );
- }
-
- /* compose the done message */
- mssg.req = DONE_REQ_CODE;
- mssg.src = world_mpi_rank;
- mssg.dest = world_server_mpi_rank;
- mssg.mssg_num = -1; /* set by send function */
- mssg.base_addr = 0; /* not used */
- mssg.len = 0; /* not used */
- mssg.ver = 0; /* not used */
- mssg.magic = MSSG_MAGIC;
-
- if ( success ) {
-
-
- success = send_mssg(&mssg, FALSE);
-
- if ( ! success ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: send_mssg() failed on done.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
- }
-
- max_nerrors = get_max_nerrors();
-
- if ( world_mpi_rank == 0 ) {
-
- if ( max_nerrors == 0 ) {
-
- PASSED();
-
- } else {
-
- failures++;
- H5_FAILED();
- }
- }
-
- success = ( ( success ) && ( max_nerrors == 0 ) );
-
- return(success);
-
-} /* smoke_check_3() */
-
-
-/*****************************************************************************
- *
- * Function: smoke_check_4()
- *
- * Purpose: Fourth smoke check for the parallel cache.
- *
- * Use random reads to vary the loads on the diffferent
- * processors. Also force different cache size adjustments.
- *
- * In this test, load process 0 lightly, and the other
- * processes heavily.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 1/13/06
- *
- * Modifications:
- *
- * Added code intended to insure correct operation with large
- * numbers of processors.
- * JRM - 1/31/06
- *
- * Added code testing pinned insertion of entries.
- *
- * JRM - 8/15/06
- *
- *****************************************************************************/
-
-hbool_t
-smoke_check_4(void)
-{
- const char * fcn_name = "smoke_check_4()";
- hbool_t success = TRUE;
- int i;
- int max_nerrors;
- int min_count;
- int max_count;
- int min_idx;
- int max_idx;
- hid_t fid = -1;
- H5F_t * file_ptr = NULL;
- H5C1_t * cache_ptr = NULL;
- struct mssg_t mssg;
-
- if ( world_mpi_rank == 0 ) {
-
- TESTING("smoke check #4");
- }
-
- nerrors = 0;
- init_data();
- reset_stats();
-
- if ( world_mpi_rank == world_server_mpi_rank ) {
-
- if ( ! server_main() ) {
-
- /* some error occured in the server -- report failure */
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: server_main() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
- else /* run the clients */
- {
- if ( ! setup_cache_for_test(&fid, &file_ptr, &cache_ptr) ) {
-
- nerrors++;
- fid = -1;
- cache_ptr = NULL;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: setup_cache_for_test() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
-
- min_count = 100 * (file_mpi_rank % 4);
- max_count = min_count + 50;
-
- for ( i = 0; i < (virt_num_data_entries / 4); i++ )
- {
- insert_entry(cache_ptr, file_ptr, i, H5AC1__NO_FLAGS_SET);
-
- if ( i > 100 ) {
-
- lock_and_unlock_random_entries(cache_ptr, file_ptr,
- (i - 100), i,
- min_count, max_count);
- }
- }
-
- min_count = 10 * (file_mpi_rank % 4);
- max_count = min_count + 100;
-
- for ( i = (virt_num_data_entries / 4);
- i < (virt_num_data_entries / 2);
- i++ )
- {
- if ( i % 2 == 0 ) {
-
- insert_entry(cache_ptr, file_ptr, i, H5AC1__NO_FLAGS_SET);
-
- } else {
-
- /* Insert some entries pinned, and then unpin them
- * immediately. We have tested pinned entries elsewhere,
- * so it should be sufficient to verify that the
- * entries are in fact pinned (which unpin_entry() should do).
- */
- insert_entry(cache_ptr, file_ptr, i, H5C1__PIN_ENTRY_FLAG);
- unpin_entry(cache_ptr, file_ptr, i, TRUE, FALSE, FALSE);
- }
-
- if ( i % 59 == 0 ) {
-
- hbool_t dirty = ( (i % 2) == 0);
-
- if ( data[i].local_pinned ) {
- unpin_entry(cache_ptr, file_ptr, i, FALSE, FALSE, FALSE);
- }
-
- pin_entry(cache_ptr, file_ptr, i, TRUE, dirty);
-
- HDassert( !dirty || data[i].header.is_dirty );
- HDassert( data[i].header.is_pinned );
- HDassert( data[i].global_pinned );
- HDassert( ! data[i].local_pinned );
- }
-
- if ( i > 100 ) {
-
- lock_and_unlock_random_entries(cache_ptr, file_ptr,
- (i - 100), i,
- min_count, max_count);
- }
-
- local_pin_and_unpin_random_entries(cache_ptr, file_ptr, 0,
- (virt_num_data_entries / 4),
- 0, (file_mpi_rank + 2));
- }
-
-
- /* flush the file to be sure that we have no problems flushing
- * pinned entries
- */
- if ( H5Fflush(fid, H5F_SCOPE_GLOBAL) < 0 ) {
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: H5Fflush() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
-
- min_idx = 0;
- max_idx = (((virt_num_data_entries / 10) / 4) *
- ((file_mpi_rank % 4) + 1)) - 1;
-
- for ( i = (virt_num_data_entries / 2) - 1; i >= 0; i-- )
- {
- if ( ( i >= (virt_num_data_entries / 4) ) && ( i % 59 == 0 ) ) {
-
- hbool_t via_unprotect = ( (((unsigned)i) & 0x02) == 0 );
- hbool_t dirty = ( (((unsigned)i) & 0x04) == 0 );
-
- HDassert( data[i].global_pinned );
- HDassert( ! data[i].local_pinned );
-
- unpin_entry(cache_ptr, file_ptr, i, TRUE, dirty, via_unprotect);
- }
-
- if ( i % 2 == 0 ) {
-
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__NO_FLAGS_SET);
- lock_and_unlock_random_entries(cache_ptr, file_ptr,
- min_idx, max_idx, 0, 100);
- }
- }
-
- min_idx = 0;
- max_idx = (((virt_num_data_entries / 10) / 8) *
- ((file_mpi_rank % 4) + 1)) - 1;
-
- for ( i = 0; i < (virt_num_data_entries / 2); i+=2 )
- {
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__DIRTIED_FLAG);
- lock_and_unlock_random_entries(cache_ptr, file_ptr,
- min_idx, max_idx, 0, 100);
- }
-
- /* we can't rename pinned entries, so release any local pins now. */
- local_unpin_all_entries(cache_ptr, file_ptr, FALSE);
-
- min_count = 10 * (file_mpi_rank % 4);
- max_count = min_count + 100;
-
- /* rename the first half of the entries... */
- for ( i = 0; i < (virt_num_data_entries / 2); i++ )
- {
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__NO_FLAGS_SET);
- rename_entry(cache_ptr, file_ptr, i,
- (i + (virt_num_data_entries / 2)));
- lock_and_unlock_random_entries(cache_ptr, file_ptr, 0,
- (virt_num_data_entries / 20),
- min_count, max_count);
- }
-
- /* ...and then rename them back. */
- for ( i = (virt_num_data_entries / 2) - 1; i >= 0; i-- )
- {
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__DIRTIED_FLAG);
- rename_entry(cache_ptr, file_ptr, i,
- (i + (virt_num_data_entries / 2)));
- lock_and_unlock_random_entries(cache_ptr, file_ptr, 0,
- (virt_num_data_entries / 40),
- min_count, max_count);
- }
-
- /* finally, do some dirty lock/unlocks while we give the cache
- * a chance t reduce its size.
- */
- min_count = 100 * (file_mpi_rank % 4);
- max_count = min_count + 100;
-
- for ( i = 0; i < (virt_num_data_entries / 2); i+=2 )
- {
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__DIRTIED_FLAG);
-
- if ( i > 100 ) {
-
- lock_and_unlock_random_entries(cache_ptr, file_ptr,
- (i - 100), i,
- min_count, max_count);
- }
- }
-
- if ( fid >= 0 ) {
-
- if ( ! take_down_cache(fid) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: take_down_cache() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- /* verify that all instance of datum are back where the started
- * and are clean.
- */
-
- for ( i = 0; i < NUM_DATA_ENTRIES; i++ )
- {
- HDassert( data_index[i] == i );
- HDassert( ! (data[i].dirty) );
- }
-
- /* compose the done message */
- mssg.req = DONE_REQ_CODE;
- mssg.src = world_mpi_rank;
- mssg.dest = world_server_mpi_rank;
- mssg.mssg_num = -1; /* set by send function */
- mssg.base_addr = 0; /* not used */
- mssg.len = 0; /* not used */
- mssg.ver = 0; /* not used */
- mssg.magic = MSSG_MAGIC;
-
- if ( success ) {
-
-
- success = send_mssg(&mssg, FALSE);
-
- if ( ! success ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: send_mssg() failed on done.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
- }
-
- max_nerrors = get_max_nerrors();
-
- if ( world_mpi_rank == 0 ) {
-
- if ( max_nerrors == 0 ) {
-
- PASSED();
-
- } else {
-
- failures++;
- H5_FAILED();
- }
- }
-
- success = ( ( success ) && ( max_nerrors == 0 ) );
-
- return(success);
-
-} /* smoke_check_4() */
-
-
-/*****************************************************************************
- *
- * Function: smoke_check_5()
- *
- * Purpose: Similar to smoke check 1, but modified to verify that
- * H5AC1_mark_pinned_or_protected_entry_dirty() works in
- * the parallel case.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 5/18/06
- *
- * Modifications:
- *
- * JRM -- 7/12/06
- * Added test code for H5AC1_expunge_entry() and
- * H5AC1_resize_pinned_entry().
- *
- *****************************************************************************/
-
-hbool_t
-smoke_check_5(void)
-{
- const char * fcn_name = "smoke_check_5()";
- hbool_t success = TRUE;
- int i;
- int max_nerrors;
- hid_t fid = -1;
- H5F_t * file_ptr = NULL;
- H5C1_t * cache_ptr = NULL;
- struct mssg_t mssg;
-
- if ( world_mpi_rank == 0 ) {
-
- TESTING("smoke check #5");
- }
-
- nerrors = 0;
- init_data();
- reset_stats();
-
- if ( world_mpi_rank == world_server_mpi_rank ) {
-
- if ( ! server_main() ) {
-
- /* some error occured in the server -- report failure */
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: server_main() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
- else /* run the clients */
- {
- if ( ! setup_cache_for_test(&fid, &file_ptr, &cache_ptr) ) {
-
- nerrors++;
- fid = -1;
- cache_ptr = NULL;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: setup_cache_for_test() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- for ( i = 0; i < (virt_num_data_entries / 2); i++ )
- {
- insert_entry(cache_ptr, file_ptr, i, H5AC1__NO_FLAGS_SET);
- }
-
- /* flush the file so we can lock known clean entries. */
- if ( H5Fflush(fid, H5F_SCOPE_GLOBAL) < 0 ) {
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: H5Fflush() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- for ( i = 0; i < (virt_num_data_entries / 4); i++ )
- {
- lock_entry(cache_ptr, file_ptr, i);
-
- if ( i % 2 == 0 )
- {
- mark_pinned_or_protected_entry_dirty(cache_ptr, file_ptr, i);
- }
-
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__NO_FLAGS_SET);
-
- if ( i % 2 == 1 )
- {
- if ( i % 4 == 1 ) {
-
- lock_entry(cache_ptr, file_ptr, i);
- unlock_entry(cache_ptr, file_ptr, i, H5AC1__DIRTIED_FLAG);
- }
-
- expunge_entry(cache_ptr, file_ptr, i);
- }
- }
-
- for ( i = (virt_num_data_entries / 2) - 1;
- i >= (virt_num_data_entries / 4);
- i-- )
- {
- pin_entry(cache_ptr, file_ptr, i, TRUE, FALSE);
-
- if ( i % 2 == 0 )
- {
- if ( i % 8 <= 4 ) {
-
- resize_entry(cache_ptr, file_ptr, i, data[i].len / 2);
- }
-
- if ( i % 4 == 0 )
- {
- mark_pinned_or_protected_entry_dirty(cache_ptr,
- file_ptr, i);
- }
- else
- {
- mark_pinned_entry_dirty(cache_ptr, file_ptr, i,
- FALSE, (size_t)0);
- }
-
- if ( i % 8 <= 4 ) {
-
- resize_entry(cache_ptr, file_ptr, i, data[i].len);
- }
- }
-
- unpin_entry(cache_ptr, file_ptr, i, TRUE, FALSE, FALSE);
- }
-
- if ( fid >= 0 ) {
-
- if ( ! take_down_cache(fid) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: take_down_cache() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- /* verify that all instance of datum are back where the started
- * and are clean.
- */
-
- for ( i = 0; i < NUM_DATA_ENTRIES; i++ )
- {
- HDassert( data_index[i] == i );
- HDassert( ! (data[i].dirty) );
- }
-
- /* compose the done message */
- mssg.req = DONE_REQ_CODE;
- mssg.src = world_mpi_rank;
- mssg.dest = world_server_mpi_rank;
- mssg.mssg_num = -1; /* set by send function */
- mssg.base_addr = 0; /* not used */
- mssg.len = 0; /* not used */
- mssg.ver = 0; /* not used */
- mssg.magic = MSSG_MAGIC;
-
- if ( success ) {
-
- success = send_mssg(&mssg, FALSE);
-
- if ( ! success ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: send_mssg() failed on done.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
- }
-
- max_nerrors = get_max_nerrors();
-
- if ( world_mpi_rank == 0 ) {
-
- if ( max_nerrors == 0 ) {
-
- PASSED();
-
- } else {
-
- failures++;
- H5_FAILED();
- }
- }
-
- success = ( ( success ) && ( max_nerrors == 0 ) );
-
- return(success);
-
-} /* smoke_check_5() */
-
-
-/*****************************************************************************
- *
- * Function: trace_file_check()
- *
- * Purpose: A basic test of the trace file capability. In essence,
- * we invoke all operations that generate trace file output,
- * and then verify that the expected output was generated.
- *
- * Note that the trace file is currently implemented at the
- * H5AC level, so all calls have to go through H5AC. Thus it
- * is more convenient to test trace file capabilities in the
- * parallel cache test which works at the H5AC level, instead
- * of in the serial test code which does everything at the
- * H5C level.
- *
- * The function must test trace file output in the following
- * functions:
- *
- * - H5AC1_flush()
- * - H5AC1_set()
- * - H5AC1_mark_pinned_entry_dirty()
- * - H5AC1_mark_pinned_or_protected_entry_dirty()
- * H5AC1_rename()
- * - H5AC1_pin_protected_entry()
- * - H5AC1_protect()
- * - H5AC1_unpin_entry()
- * - H5AC1_unprotect()
- * - H5AC1_set_cache_auto_resize_config()
- * - H5AC1_expunge_entry()
- * - H5AC1_resize_pinned_entry()
- *
- * This test is skipped if H5_METADATA_TRACE_FILE is undefined.
- *
- * Return: Success: TRUE
- *
- * Failure: FALSE
- *
- * Programmer: JRM -- 6/13/06
- *
- * Modifications:
- *
- * JRM -- 7/11/06
- * Updated fro H5AC1_expunge_entry() and
- * H5AC1_resize_pinned_entry().
- *
- *****************************************************************************/
-
-hbool_t
-trace_file_check(void)
-{
- hbool_t success = TRUE;
-
-#ifdef H5_METADATA_TRACE_FILE
-
- const char * fcn_name = "trace_file_check()";
- const char * expected_output[] =
- {
- "### HDF5 metadata cache trace file version 1 ###\n",
- "H5AC1_set_cache_auto_resize_config 1 0 1 0 \"t_cache1_trace.txt\" 1 0 1048576 0.500000 16777216 1048576 50000 1 0.900000 2.000000 1 1.000000 0.250000 1 4194304 3 0.999000 0.900000 1 1048576 3 1 0.100000 262144 0\n",
- "H5AC1_set 0x0 15 0x0 2 0\n",
- "H5AC1_set 0x2 15 0x0 2 0\n",
- "H5AC1_set 0x4 15 0x0 4 0\n",
- "H5AC1_set 0x8 15 0x0 6 0\n",
- "H5AC1_protect 0 15 H5AC1_WRITE 2 1\n",
- "H5AC1_mark_pinned_or_protected_entry_dirty 0 0\n",
- "H5AC1_unprotect 0 15 0 0 0\n",
- "H5AC1_protect 2 15 H5AC1_WRITE 2 1\n",
- "H5AC1_pin_protected_entry 2 0\n",
- "H5AC1_unprotect 2 15 0 0 0\n",
- "H5AC1_unpin_entry 2 0\n",
- "H5AC1_expunge_entry 2 15 0\n",
- "H5AC1_protect 4 15 H5AC1_WRITE 4 1\n",
- "H5AC1_pin_protected_entry 4 0\n",
- "H5AC1_unprotect 4 15 0 0 0\n",
- "H5AC1_mark_pinned_entry_dirty 0x4 0 0 0\n",
- "H5AC1_resize_pinned_entry 0x4 2 0\n",
- "H5AC1_resize_pinned_entry 0x4 4 0\n",
- "H5AC1_unpin_entry 4 0\n",
- "H5AC1_rename 0 8a65 15 0\n",
- "H5AC1_rename 8a65 0 15 0\n",
- "H5AC1_flush 0x0 0\n",
- NULL
- };
- char buffer[256];
- char trace_file_name[64];
- hbool_t done = FALSE;
- int i;
- int max_nerrors;
- int expected_line_len;
- int actual_line_len;
- hid_t fid = -1;
- H5F_t * file_ptr = NULL;
- H5C1_t * cache_ptr = NULL;
- FILE * trace_file_ptr = NULL;
- H5AC1_cache_config_t config;
- struct mssg_t mssg;
-
-#endif /* H5_METADATA_TRACE_FILE */
-
- if ( world_mpi_rank == 0 ) {
-
- TESTING("trace file collection");
- }
-
-#ifdef H5_METADATA_TRACE_FILE
-
- nerrors = 0;
- init_data();
- reset_stats();
-
- if ( world_mpi_rank == world_server_mpi_rank ) {
-
- if ( ! server_main() ) {
-
- /* some error occured in the server -- report failure */
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: server_main() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
- else /* run the clients */
- {
-
- if ( ! setup_cache_for_test(&fid, &file_ptr, &cache_ptr) ) {
-
- nerrors++;
- fid = -1;
- cache_ptr = NULL;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: setup_cache_for_test() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- if ( nerrors == 0 ) {
-
- config.version = H5AC1__CURR_CACHE_CONFIG_VERSION;
-
- if ( H5AC1_get_cache_auto_resize_config(cache_ptr, &config)
- != SUCCEED ) {
-
- nerrors++;
- HDfprintf(stdout,
- "%d:%s: H5AC1_get_cache_auto_resize_config() failed.\n",
- world_mpi_rank, fcn_name);
-
- } else {
-
- config.open_trace_file = TRUE;
- strcpy(config.trace_file_name, "t_cache1_trace.txt");
-
- if ( H5AC1_set_cache_auto_resize_config(cache_ptr, &config)
- != SUCCEED ) {
-
- nerrors++;
- HDfprintf(stdout,
- "%d:%s: H5AC1_set_cache_auto_resize_config() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- insert_entry(cache_ptr, file_ptr, 0, H5AC1__NO_FLAGS_SET);
- insert_entry(cache_ptr, file_ptr, 1, H5AC1__NO_FLAGS_SET);
- insert_entry(cache_ptr, file_ptr, 2, H5AC1__NO_FLAGS_SET);
- insert_entry(cache_ptr, file_ptr, 3, H5AC1__NO_FLAGS_SET);
-
- lock_entry(cache_ptr, file_ptr, 0);
- mark_pinned_or_protected_entry_dirty(cache_ptr, file_ptr, 0);
- unlock_entry(cache_ptr, file_ptr, 0, H5AC1__NO_FLAGS_SET);
-
- lock_entry(cache_ptr, file_ptr, 1);
- pin_protected_entry(cache_ptr, file_ptr, 1, TRUE);
- unlock_entry(cache_ptr, file_ptr, 1, H5AC1__NO_FLAGS_SET);
- unpin_entry(cache_ptr, file_ptr, 1, TRUE, FALSE, FALSE);
-
- expunge_entry(cache_ptr,file_ptr, 1);
-
- lock_entry(cache_ptr, file_ptr, 2);
- pin_protected_entry(cache_ptr, file_ptr, 2, TRUE);
- unlock_entry(cache_ptr, file_ptr, 2, H5AC1__NO_FLAGS_SET);
- mark_pinned_entry_dirty(cache_ptr, file_ptr, 2, FALSE, 0);
- resize_entry(cache_ptr, file_ptr, 2, data[2].len / 2);
- resize_entry(cache_ptr, file_ptr, 2, data[2].len);
- unpin_entry(cache_ptr, file_ptr, 2, TRUE, FALSE, FALSE);
-
- rename_entry(cache_ptr, file_ptr, 0, 20);
- rename_entry(cache_ptr, file_ptr, 0, 20);
-
- if ( H5Fflush(fid, H5F_SCOPE_GLOBAL) < 0 ) {
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: H5Fflush() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- if ( nerrors == 0 ) {
-
- config.version = H5AC1__CURR_CACHE_CONFIG_VERSION;
-
- if ( H5AC1_get_cache_auto_resize_config(cache_ptr, &config)
- != SUCCEED ) {
-
- nerrors++;
- HDfprintf(stdout,
- "%d:%s: H5AC1_get_cache_auto_resize_config() failed.\n",
- world_mpi_rank, fcn_name);
-
- } else {
-
- config.open_trace_file = FALSE;
- config.close_trace_file = TRUE;
- config.trace_file_name[0] = '\0';
-
- if ( H5AC1_set_cache_auto_resize_config(cache_ptr, &config)
- != SUCCEED ) {
-
- nerrors++;
- HDfprintf(stdout,
- "%d:%s: H5AC1_set_cache_auto_resize_config() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- if ( fid >= 0 ) {
-
- if ( ! take_down_cache(fid) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: take_down_cache() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- /* verify that all instance of datum are back where the started
- * and are clean.
- */
-
- for ( i = 0; i < NUM_DATA_ENTRIES; i++ )
- {
- HDassert( data_index[i] == i );
- HDassert( ! (data[i].dirty) );
- }
-
- /* compose the done message */
- mssg.req = DONE_REQ_CODE;
- mssg.src = world_mpi_rank;
- mssg.dest = world_server_mpi_rank;
- mssg.mssg_num = -1; /* set by send function */
- mssg.base_addr = 0; /* not used */
- mssg.len = 0; /* not used */
- mssg.ver = 0; /* not used */
- mssg.magic = MSSG_MAGIC;
-
- if ( success ) {
-
- success = send_mssg(&mssg, FALSE);
-
- if ( ! success ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: send_mssg() failed on done.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- if ( nerrors == 0 ) {
-
- sprintf(trace_file_name, "t_cache1_trace.txt.%d",
- (int)file_mpi_rank);
-
- if ( (trace_file_ptr = HDfopen(trace_file_name, "r")) == NULL ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: HDfopen failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- i = 0;
- while ( ( nerrors == 0 ) && ( ! done ) )
- {
- if ( expected_output[i] == NULL ) {
-
- expected_line_len = 0;
-
- } else {
-
- expected_line_len = HDstrlen(expected_output[i]);
- }
-
- if ( HDfgets(buffer, 255, trace_file_ptr) != NULL ) {
-
- actual_line_len = strlen(buffer);
-
- } else {
-
- actual_line_len = 0;
- }
-
- if ( ( actual_line_len == 0 ) && ( expected_line_len == 0 ) ) {
-
- done = TRUE;
-
- } else if ( ( actual_line_len != expected_line_len ) ||
- ( HDstrcmp(buffer, expected_output[i]) != 0 ) ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout,
- "%d:%s: Unexpected data in trace file line %d.\n",
- world_mpi_rank, fcn_name, i);
- HDfprintf(stdout, "%d:%s: expected = \"%s\" %d\n",
- world_mpi_rank, fcn_name, expected_output[i],
- expected_line_len);
- HDfprintf(stdout, "%d:%s: actual = \"%s\" %d\n",
- world_mpi_rank, fcn_name, buffer,
- actual_line_len);
- }
- } else {
- i++;
- }
- }
-
- if ( trace_file_ptr != NULL ) {
-
- HDfclose(trace_file_ptr);
- trace_file_ptr = NULL;
-#if 1
- HDremove(trace_file_name);
-#endif
- }
- }
-
- max_nerrors = get_max_nerrors();
-
- if ( world_mpi_rank == 0 ) {
-
- if ( max_nerrors == 0 ) {
-
- PASSED();
-
- } else {
-
- failures++;
- H5_FAILED();
- }
- }
-
- success = ( ( success ) && ( max_nerrors == 0 ) );
-
-#else /* H5_METADATA_TRACE_FILE */
-
- if ( world_mpi_rank == 0 ) {
-
- SKIPPED();
-
- HDfprintf(stdout, " trace file support disabled.\n");
- }
-
-#endif /* H5_METADATA_TRACE_FILE */
-
- return(success);
-
-} /* trace_file_check() */
-
-
-/*****************************************************************************
- *
- * Function: main()
- *
- * Purpose: Main function for the parallel cache test.
- *
- * Return: Success: 0
- *
- * Failure: 1
- *
- * Programmer: JRM -- 12/23/05
- *
- * Modifications:
- *
- * None.
- *
- *****************************************************************************/
-
-int
-main(int argc, char **argv)
-{
- const char * fcn_name = "main()";
- int express_test;
- unsigned u;
- int mpi_size;
- int mpi_rank;
- int max_nerrors;
-
- MPI_Init(&argc, &argv);
- MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
- MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
-
- world_mpi_size = mpi_size;
- world_mpi_rank = mpi_rank;
- world_server_mpi_rank = mpi_size - 1;
- world_mpi_comm = MPI_COMM_WORLD;
-
- H5open();
-
- express_test = do_express_test();
-#if 0 /* JRM */
- express_test = 0;
-#endif /* JRM */
- if ( express_test ) {
-
- virt_num_data_entries = EXPRESS_VIRT_NUM_DATA_ENTRIES;
-
- } else {
-
- virt_num_data_entries = STD_VIRT_NUM_DATA_ENTRIES;
- }
-
-#ifdef H5_HAVE_MPE
- if ( MAINPROCESS ) { printf(" Tests compiled for MPE.\n"); }
- virt_num_data_entries = MPE_VIRT_NUM_DATA_ENTIES;
-#endif /* H5_HAVE_MPE */
-
-
- if (MAINPROCESS){
- printf("===================================\n");
- printf("Parallel metadata cache tests\n");
- printf(" mpi_size = %d\n", mpi_size);
- printf(" express_test = %d\n", express_test);
- printf("===================================\n");
- }
-
- if ( mpi_size < 3 ) {
-
- if ( MAINPROCESS ) {
-
- printf(" Need at least 3 processes. Exiting.\n");
- }
- goto finish;
- }
-
- set_up_file_communicator();
-
- setup_derived_types();
-
- /* h5_fixname() will hang some processes don't participate.
- *
- * Thus we set up the fapl global with the world communicator,
- * make our calls to h5_fixname(), discard the fapl, and then
- * create it again with the file communicator.
- */
-
- /* setup file access property list with the world communicator */
- if ( FAIL == (fapl = H5Pcreate(H5P_FILE_ACCESS)) ) {
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: H5Pcreate() failed 1.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- if ( H5Pset_fapl_mpio(fapl, world_mpi_comm, MPI_INFO_NULL) < 0 ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: H5Pset_fapl_mpio() failed 1.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- /* fix the file names */
- for ( u = 0; u < sizeof(FILENAME) / sizeof(FILENAME[0]) - 1; ++u )
- {
- if ( h5_fixname(FILENAME[u], fapl, filenames[u],
- sizeof(filenames[u])) == NULL ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: h5_fixname() failed.\n",
- world_mpi_rank, fcn_name);
- }
- break;
- }
- }
-
- /* close the fapl before we set it up again */
- if ( H5Pclose(fapl) < 0 ) {
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: H5Pclose() failed.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- /* now create the fapl again, excluding the server process. */
- if ( world_mpi_rank != world_server_mpi_rank ) {
-
- /* setup file access property list */
- if ( FAIL == (fapl = H5Pcreate(H5P_FILE_ACCESS)) ) {
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: H5Pcreate() failed 2.\n",
- world_mpi_rank, fcn_name);
- }
- }
-
- if ( H5Pset_fapl_mpio(fapl, file_mpi_comm, MPI_INFO_NULL) < 0 ) {
-
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: H5Pset_fapl_mpio() failed 2.\n",
- world_mpi_rank, fcn_name);
- }
- }
- }
-
- setup_rand();
-
- max_nerrors = get_max_nerrors();
-
- if ( max_nerrors != 0 ) {
-
- /* errors in setup -- no point in continuing */
-
- if ( world_mpi_rank == 0 ) {
-
- HDfprintf(stdout, "Errors in test initialization. Exiting.\n");
- }
- goto finish;
- }
-
- /* run the tests */
-#if 1
- server_smoke_check();
-#endif
-#if 1
- smoke_check_1();
-#endif
-#if 1
- smoke_check_2();
-#endif
-#if 1
- smoke_check_3();
-#endif
-#if 1
- smoke_check_4();
-#endif
-#if 1
- smoke_check_5();
-#endif
-#if 1
- trace_file_check();
-#endif
-
-finish:
- /* make sure all processes are finished before final report, cleanup
- * and exit.
- */
- MPI_Barrier(MPI_COMM_WORLD);
- if (MAINPROCESS){ /* only process 0 reports */
- printf("===================================\n");
- if (failures){
- printf("***metadata cache tests detected %d failures***\n",
- failures);
- }
- else{
- printf("metadata cache tests finished with no failures\n");
- }
- printf("===================================\n");
- }
-
- /* close HDF5 library */
- H5close();
-
- /* MPI_Finalize must be called AFTER H5close which may use MPI calls */
- MPI_Finalize();
-
- /* cannot just return (failures) because exit code is limited to 1byte */
- return(failures != 0);
-}
-
diff --git a/tools/h5recover/h5recover.c b/tools/h5recover/h5recover.c
index b2770be..882a41c 100644
--- a/tools/h5recover/h5recover.c
+++ b/tools/h5recover/h5recover.c
@@ -4799,7 +4799,7 @@ mark_hdf5_file_recovered(char * hdf5_file_path_ptr)
config.version = H5C__CURR_AUTO_SIZE_CTL_VER;
- /* get H5AC1_cache_config_t configuration from fapl */
+ /* get H5AC_cache_config_t configuration from fapl */
if ( H5Pget_jnl_config(fapl, &config) == -1) {
proceed = FALSE;
@@ -4813,7 +4813,7 @@ mark_hdf5_file_recovered(char * hdf5_file_path_ptr)
/* set journal recovered field to TRUE in mdc_config */
config.journal_recovered = TRUE;
- /* set H5AC1_cache_config_t configuration with file recovered */
+ /* set H5AC_cache_config_t configuration with file recovered */
if ( H5Pset_jnl_config(fapl, &config) == -1 ) {
proceed = FALSE;
@@ -7672,7 +7672,7 @@ main(int argc,
config.version = 1; /* should be H5C__CURR_AUTO_SIZE_CTL_VER */
- /* get H5AC1_cache_config_t configuration from fapl */
+ /* get H5AC_cache_config_t configuration from fapl */
if ( H5Pget_jnl_config(fapl, &config) == -1) {
error_msg(progname, "Could not get mdc config from FAPL.\n");
@@ -7683,7 +7683,7 @@ main(int argc,
/* make sure journal recovered field is set to TRUE in mdc_config */
config.journal_recovered = TRUE;
- /* set H5AC1_cache_config_t configuration with file recovered */
+ /* set H5AC_cache_config_t configuration with file recovered */
if ( H5Pset_jnl_config(fapl, &config) == -1) {
error_msg(progname, "Could not set mdc config on FAPL.\n");