VOL-REST: memory-side hyperslab unsupported?


While using VOL-REST API, I have the impression that memory-side hyperslab is currently not supported. Is this true? When I use this memory hyperslab it writes the first part of the memory buffer instead of the specified points of the hyperslab.

Best regards,

The other day, I did take a closer look at the rest_vol_dataset.c implementation and it turns out that the memory-side hyperslab is not supported. However, if this not correct than I clearly does not understand how the write function works. In this case could you help me to get a better understand of this function.

Currently, working on extending the existing RV_dataset_write() function to support hyperslabs. I got the single block hyperslab working and it should not be so difficult to extend to multi-block implementation. I do wonder does HSDS support a multi-block hyperslab. If not, I probably should implement a check for this. Furthermore, in my implementation I assume that the filters are applied on the server-side (HSDS) and not on the client-side.

Once I got both write and read working I will upstream it to you. Probably it will take a few iterations to get everything right.

Update: I found a better way of doing it. Just make use of the function H5Dgather(). The function RV_dataset_read() already makes use of H5Dscatter().

Your understanding of RV_dataset_write() seems correct - it doesn’t account for any memory selections besides point selections and H5S_ALL, and the VOL tests only cover hyperslabs in filespace selections. Your assumption about the filters being applied by HSDS also seems correct.

Looking over HSDS’s hyperslab selection code, it doesn’t seem to support multi-block selections, but I’d need @jreadey to confirm.

Thanks again for contributing - I’ll be sure to review your PR once it’s ready.

HSDS doesn’t currently support multi-block selections. This might be something we can do on the REST VOL side though.