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.
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
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.