Skip to content

Commit ed501ff

Browse files
committed
Also create key.seq and key.cnt for zero-size groups
Also fix fill mode setting
1 parent 5d395ab commit ed501ff

File tree

2 files changed

+26
-13
lines changed

2 files changed

+26
-13
lines changed

file_partition.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,6 @@ int Concatenator::write_partition_key_datasets()
2626
herr_t err;
2727
hsize_t ii, jj, kk, start[2]={0,0}, count[2]={1,1};
2828
hsize_t *seq_offs, *seq_lens, *cnt_offs, *cnt_lens, *extents;
29-
#if defined PROFILE && PROFILE
30-
double ts;
31-
#endif
3229

3330
/* some groups may not contain key-base datasets */
3431
cnt_lens = new hsize_t[num_groups_have_key * 5];
@@ -160,6 +157,9 @@ int Concatenator::write_partition_key_datasets()
160157
* consecutive elements sharing the same key.
161158
*/
162159
if (set_extent) {
160+
#if defined PROFILE && PROFILE
161+
double ts;
162+
#endif
163163
SET_TIMER(ts)
164164
count[0] = extents[kk];
165165
err = H5Dset_extent(cnt_dset->out_dset_id, count);
@@ -186,6 +186,9 @@ int Concatenator::write_partition_key_datasets()
186186
* Below, we use a separate loop to call H5Dset_extent() altogether
187187
* after all calls to H5Dwrite() are complete.
188188
*/
189+
#if defined PROFILE && PROFILE
190+
double ts;
191+
#endif
189192
SET_TIMER(ts)
190193
kk = 0;
191194
for (ii=0; ii<num_groups; ii++) {

ph5_concat.cpp

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -296,11 +296,14 @@ int Concatenator::create_partition_keys(GrpInfo &grp)
296296
seq.is_key_seq = true;
297297
seq.is_key_cnt = false;
298298
seq.name = part_key_base + ".key.seq";
299-
#ifndef DELAY_KEY_DSET_CREATION
300-
/* delay creation until writing it in write_partition_key_datasets() */
301-
herr_t err = create_dataset(grp.id, seq, true);
302-
if (err < 0) RETURN_ERROR("create_dataset", "key.seq")
299+
#ifdef DELAY_KEY_DSET_CREATION
300+
if (seq.global_dims[0] == 0)
303301
#endif
302+
{
303+
/* delay creation until writing it in write_partition_key_datasets() */
304+
herr_t err = create_dataset(grp.id, seq, false);
305+
if (err < 0) RETURN_ERROR("create_dataset", "key.seq")
306+
}
304307
grp.seq_dset = &seq;
305308
total_num_datasets++;
306309

@@ -310,11 +313,14 @@ int Concatenator::create_partition_keys(GrpInfo &grp)
310313
cnt.is_key_cnt = true;
311314
cnt.is_key_seq = false;
312315
cnt.name = part_key_base + ".key.cnt";
313-
#ifndef DELAY_KEY_DSET_CREATION
314-
/* delay creation until writing it in write_partition_key_datasets() */
315-
err = create_dataset(grp.id, cnt, true);
316-
if (err < 0) RETURN_ERROR("create_dataset", "key.cnt")
316+
#ifdef DELAY_KEY_DSET_CREATION
317+
if (cnt.global_dims[0] == 0)
317318
#endif
319+
{
320+
/* delay creation until writing it in write_partition_key_datasets() */
321+
herr_t err = create_dataset(grp.id, cnt, !set_extent);
322+
if (err < 0) RETURN_ERROR("create_dataset", "key.cnt")
323+
}
318324
grp.cnt_dset = &cnt;
319325
total_num_datasets++;
320326

@@ -950,8 +956,12 @@ int Concatenator::create_dataset(hid_t group_id,
950956
if (err < 0) HANDLE_ERROR("H5Pset_deflate")
951957
}
952958

953-
/* HDF5 default fill value is 0 */
954-
if (!toFill) {
959+
if (toFill) {
960+
/* HDF5 default fill value is 0, skip call H5Pset_fill_value() */
961+
err = H5Pset_fill_time(dcpl_id, H5D_FILL_TIME_ALLOC);
962+
if (err < 0) HANDLE_ERROR("H5Pset_fill_time")
963+
}
964+
else {
955965
/* Never fill in the chunk in advance. */
956966
err = H5Pset_fill_time(dcpl_id, H5D_FILL_TIME_NEVER);
957967
if (err < 0) HANDLE_ERROR("H5Pset_fill_time")

0 commit comments

Comments
 (0)