diff options
author | David Young <dyoung@hdfgroup.org> | 2020-07-14 20:10:30 (GMT) |
---|---|---|
committer | David Young <dyoung@hdfgroup.org> | 2020-07-14 20:10:30 (GMT) |
commit | 814b428b2a60fedc09e7c9c38915cccc24c917f5 (patch) | |
tree | 87d53f1f06c2d11bb03759311df67fc6b2b8d1db /src/H5FDvfd_swmr.c | |
parent | 2056e23fc954b91a81a01cb977eae47caef3875c (diff) | |
download | hdf5-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.c | 10 |
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"); } |