From 150f5a9a89301558c1b83cd8f99f83995496c9a4 Mon Sep 17 00:00:00 2001 From: Neil Fortner Date: Wed, 18 Apr 2018 15:39:41 -0500 Subject: Add 2 character prefix to oids to disambiguate chunks from objects or chunks with lower rank in files whose filename ends with something that looks like an oid. --- examples/Makefile.am | 4 ++-- src/H5VLrados.c | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/Makefile.am b/examples/Makefile.am index 18cafb6..323541f 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -57,9 +57,9 @@ INSTALL_FILES = h5_write.c h5_read.c h5_extend_write.c h5_chunk_read.c \ h5_reference.c h5_drivers.c h5_extlink.c h5_elink_unix2win.c \ h5_ref2reg.c h5_shared_mesg.c ph5example.c \ h5_vol_external_log_native.c \ - h5_vds.c h5_vds-exc.c \ + h5_vds.c h5_vds-exc.c \ h5_vds-exclim.c h5_vds-eiger.c h5_vds-simpleIO.c h5_vds-percival.c \ - h5_vds-percival-unlim.c h5_vds-percival-unlim-maxmin.c + h5_vds-percival-unlim.c h5_vds-percival-unlim-maxmin.c \ h5rados_file_create.c h5rados_file_open.c h5rados_group_create.c \ h5rados_group_open.c h5rados_dset_create.c \ h5rados_dset_open.c h5rados_dset_write.c h5rados_dset_read.c \ diff --git a/src/H5VLrados.c b/src/H5VLrados.c index 0ce9957..124ed0d 100644 --- a/src/H5VLrados.c +++ b/src/H5VLrados.c @@ -343,13 +343,13 @@ H5VL_rados_oid_create_string(const H5VL_rados_file_t *file, uint64_t bin_oid, FUNC_ENTER_NOAPI_NOINIT /* Allocate space for oid */ - if(NULL == (tmp_oid = (char *)H5MM_malloc(file->file_name_len + 16 + 1))) + if(NULL == (tmp_oid = (char *)H5MM_malloc(2 + file->file_name_len + 16 + 1))) HGOTO_ERROR(H5E_VOL, H5E_CANTALLOC, FAIL, "can't allocate RADOS object id") /* Encode file name and binary oid into string oid */ - if(HDsnprintf(tmp_oid, file->file_name_len + 16 + 1, "%s%016llX", + if(HDsnprintf(tmp_oid, file->file_name_len + 16 + 1, "ob%s%016llX", file->file_name, (long long unsigned)bin_oid) - != (int)file->file_name_len + 16) + != 2 + (int)file->file_name_len + 16) HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "can't encode string object id") /* Return oid string value */ @@ -378,15 +378,15 @@ H5VL_rados_oid_create_chunk(const H5VL_rados_file_t *file, uint64_t bin_oid, FUNC_ENTER_NOAPI_NOINIT /* Allocate space for oid */ - oid_len = file->file_name_len + 16 + ((size_t)rank * 16) + 1; + oid_len = 2 + file->file_name_len + 16 + ((size_t)rank * 16) + 1; if(NULL == (tmp_oid = (char *)H5MM_malloc(oid_len))) HGOTO_ERROR(H5E_VOL, H5E_CANTALLOC, FAIL, "can't allocate RADOS object id") /* Encode file name and binary oid into string oid */ - if(HDsnprintf(tmp_oid, oid_len, "%s%016llX", file->file_name, - (long long unsigned)bin_oid) != (int)file->file_name_len + 16) + if(HDsnprintf(tmp_oid, oid_len, "%02X%s%016llX", rank, file->file_name, + (long long unsigned)bin_oid) != 2 + (int)file->file_name_len + 16) HGOTO_ERROR(H5E_VOL, H5E_CANTINIT, FAIL, "can't encode string object id") - oid_off = file->file_name_len + 16; + oid_off = 2 + file->file_name_len + 16; /* Encode chunk location */ for(i = 0; i < rank; i++) { -- cgit v0.12