On Wed, Dec 14, 2011 at 8:03 AM, Quincey Koziol <[email protected]> wrote:
> Hi Darren,
>
> On Dec 12, 2011, at 11:29 AM, Darren Dale wrote:
>
>> (Apologies if this gets posted twice)
>>
>> Someone reported a bug at the h5py issue tracker:
>>
>> ---
>> import h5py
>>
>> # test setup
>> fid = h5py.File('test.hdf5', 'w')
>>
>> g = fid.create_group('old_loc')
>> g2 = g.create_group('group')
>> d = g.create_dataset('dataset', data=0)
>>
>> print "before move:"
>> print g2.name
>> print d.name
>>
>> # now rename toplevel group
>> g.parent.id.move('old_loc', 'new_loc')
>>
>> print "after move:"
>> # old parent remains in dataset name, group is ok
>> print g2.name
>> print d.name
>>
>> # parent is accessed by name 'g' which does not exist any more
>> d.parent
>>
>> fid.close()
>> ---
>>
>> That script produces the following output:
>>
>> ---
>> before move:
>> /old_loc/group
>> /old_loc/dataset
>> after move:
>> /new_loc/group
>> /old_loc/dataset
>> Traceback (most recent call last):
>> File "move_error.py", line 24, in <module>
>>   d.parent
>> File 
>> "/Users/darren/Library/Python/2.7/lib/python/site-packages/h5py/_hl/base.py",
>> line 144, in parent
>>   return self.file[posixpath.dirname(self.name)]
>> File 
>> "/Users/darren/Library/Python/2.7/lib/python/site-packages/h5py/_hl/group.py",
>> line 128, in __getitem__
>>   oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
>> File "h5o.pyx", line 176, in h5py.h5o.open (h5py/h5o.c:2814)
>> KeyError: "unable to open object (Symbol table: Can't open object)"
>> ---
>>
>> g.name and d.name simply return the result of h5i.get_name.
>>
>> d.parent just splits d.name at the last "/" and returns the the first
>> part of the split.
>>
>> g.parent.id.move calls H5Gmove2. I've read the warnings about
>> corrupting data using H5Gmove at
>> http://www.hdfgroup.org/HDF5/doc1.6/Groups.html#H5GUnlinkToCorrupt ,
>> but the situation described there does not appear to be relevant to
>> the problem we are seeing. Is h5py not performing the move properly,
>> or could this be a bug in HDF5?
>
>        I think that the move is probably working correctly, but maybe h5py's 
> name tracking isn't.  I would say that g2's name after the move should be 
> "/new_loc/group", not "/old_loc/group".

I think there is a misunderstanding. g2's name after the move *is*
"/new_loc/group". I probably should have been more explicit: the
example illustrates that the problem is isolated to Datasets, Groups
are not effected.

H5py does not do any explicit name tracking. It delegates that task
completely to hdf5: for both Datasets and Groups, h5py simply calls
H5Iget_name. It seems to me that open dataset ids are not getting
their information updated, but open group ids are. Now that I think
about it, aren't there other issues with copying open datasets in
<hdf5-1.8.9? Perhaps the issues extend to moving open datasets as
well.

Darren

_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org

Reply via email to