summaryrefslogtreecommitdiffstats
path: root/src/H5FDvfd_swmr.c
diff options
context:
space:
mode:
authorDavid Young <dyoung@hdfgroup.org>2020-07-14 20:10:30 (GMT)
committerDavid Young <dyoung@hdfgroup.org>2020-07-14 20:10:30 (GMT)
commit814b428b2a60fedc09e7c9c38915cccc24c917f5 (patch)
tree87d53f1f06c2d11bb03759311df67fc6b2b8d1db /src/H5FDvfd_swmr.c
parent2056e23fc954b91a81a01cb977eae47caef3875c (diff)
downloadhdf5-814b428b2a60fedc09e7c9c38915cccc24c917f5.zip
hdf5-814b428b2a60fedc09e7c9c38915cccc24c917f5.tar.gz
hdf5-814b428b2a60fedc09e7c9c38915cccc24c917f5.tar.bz2
When H5FD_vfd_swmr_read() reads a page from the shadow file whose checksum
fails, re-load the shadow-file header and log the last-read and current tick number.
Diffstat (limited to 'src/H5FDvfd_swmr.c')
-rw-r--r--src/H5FDvfd_swmr.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/H5FDvfd_swmr.c b/src/H5FDvfd_swmr.c
index 974ec56..fe977a3 100644
--- a/src/H5FDvfd_swmr.c
+++ b/src/H5FDvfd_swmr.c
@@ -822,6 +822,8 @@ H5FD_vfd_swmr_read(H5FD_t *_file, H5FD_mem_t type,
hlog_fast(swmr_read_exception,
"%s: skipping checksum, buffer size != entry size", __func__);
} else if (H5_checksum_metadata(buf, entry->length, 0) != entry->chksum) {
+ H5FD_vfd_swmr_md_header tmp_header;
+
hlog_fast(swmr_read_err, "%s: bad checksum", __func__);
hlog_fast(swmr_read_err, "addr %" PRIuHADDR " page %" PRIuHADDR
" len %zu type %d ...", addr, addr / fs_page_size, init_size, type);
@@ -830,6 +832,14 @@ H5FD_vfd_swmr_read(H5FD_t *_file, H5FD_mem_t type,
(int64_t)(entry - index), entry->hdf5_page_offset,
entry->md_file_page_offset, entry->length, entry->chksum);
+ if (H5FD__vfd_swmr_header_deserialize(file, &tmp_header) != TRUE) {
+ HGOTO_ERROR(H5E_VFL, H5E_CANTLOAD, FAIL,
+ "checksum error in shadow file entry; could not load header");
+ }
+
+ hlog_fast(swmr_read_err, "... header tick last read %" PRIu64
+ " latest %" PRIu64, file->md_header.tick_num, tmp_header.tick_num);
+
HGOTO_ERROR(H5E_VFL, H5E_CANTLOAD, FAIL,
"checksum error in shadow file entry");
}