[tahoe-lafs-trac-stream] [tahoe-lafs] #1634: TypeError due to "size" being None in pyfilesystem+dokan

tahoe-lafs trac at tahoe-lafs.org
Wed Dec 19 22:46:00 UTC 2012


#1634: TypeError due to "size" being None in pyfilesystem+dokan
------------------------+--------------------------------------
     Reporter:  zooko   |      Owner:  somebody
         Type:  defect  |     Status:  new
     Priority:  major   |  Milestone:  undecided
    Component:  code    |    Version:  1.9.0
   Resolution:          |   Keywords:  pyfilesystem dokan error
Launchpad Bug:          |
------------------------+--------------------------------------
Changes (by ClashTheBunny):

 * cc: clashthebunny@… (added)


Old description:

> I saw this bug report to pyfilesystem:
>
> http://code.google.com/p/pyfilesystem/issues/detail?id=96
>
> {{{
> tahoe-lafs 1.9.0 + pyfilesystem 0.4 (and svn r723) + dokan 0.6.0
> OS Windows 7 x64 Russian + Python 2.7.2 x86
>
> Traceback (most recent call last):
>   File "_ctypes/callbacks.c", line 313, in 'calling callback function'
>   File "C:\Program Files (x86)\Python27\lib\site-
> packages\fs\expose\dokan\__init__.py", line 256, in wrapper
>     return func(self,*args)
>   File "C:\Program Files (x86)\Python27\lib\site-
> packages\fs\expose\dokan\__init__.py", line 173, in wrapper
>     res = func(*args,**kwds)
>   File "C:\Program Files (x86)\Python27\lib\site-packages\fs\errors.py",
> line 191, in wrapper
>     return func(*args,**kwds)
>   File "C:\Program Files (x86)\Python27\lib\site-
> packages\fs\expose\dokan\__init__.py", line 604, in FindFilesWithPattern
>     data = self._info2finddataw(fpath,finfo,None)
>   File "C:\Program Files (x86)\Python27\lib\site-
> packages\fs\expose\dokan\__init__.py", line 794, in _info2finddataw
>     data.nFileSizeHigh = info.get("size",0) >> 32
> TypeError: unsupported operand type(s) for >>: 'NoneType' and 'int'
> }}}
> As far as I know, pyfilesystem doesn't have a strong test suite, so it
> will require more effort from someone to figure out where exactly the
> problem lies in pyfilesystem, Tahoe-LAFS, dokan, or the interfaces
> between them...

New description:

 I saw this bug report to pyfilesystem:

 http://code.google.com/p/pyfilesystem/issues/detail?id=96

 {{{
 tahoe-lafs 1.9.0 + pyfilesystem 0.4 (and svn r723) + dokan 0.6.0
 OS Windows 7 x64 Russian + Python 2.7.2 x86

 Traceback (most recent call last):
   File "_ctypes/callbacks.c", line 313, in 'calling callback function'
   File "C:\Program Files (x86)\Python27\lib\site-
 packages\fs\expose\dokan\__init__.py", line 256, in wrapper
     return func(self,*args)
   File "C:\Program Files (x86)\Python27\lib\site-
 packages\fs\expose\dokan\__init__.py", line 173, in wrapper
     res = func(*args,**kwds)
   File "C:\Program Files (x86)\Python27\lib\site-packages\fs\errors.py",
 line 191, in wrapper
     return func(*args,**kwds)
   File "C:\Program Files (x86)\Python27\lib\site-
 packages\fs\expose\dokan\__init__.py", line 604, in FindFilesWithPattern
     data = self._info2finddataw(fpath,finfo,None)
   File "C:\Program Files (x86)\Python27\lib\site-
 packages\fs\expose\dokan\__init__.py", line 794, in _info2finddataw
     data.nFileSizeHigh = info.get("size",0) >> 32
 TypeError: unsupported operand type(s) for >>: 'NoneType' and 'int'
 }}}
 As far as I know, pyfilesystem doesn't have a strong test suite, so it
 will require more effort from someone to figure out where exactly the
 problem lies in pyfilesystem, Tahoe-LAFS, dokan, or the interfaces between
 them...

--

Comment:

 I'm thinking this is related to my same issue.  I have a Tahoe-LAFS
 mounted through PyFS on Linux and I was using the same one earlier on
 Windows with docan.  I saw similar things on docan, but didn't write them
 down.  I mount the directory and do an 'ls'.  This is the error I'm seeing
 on Linux:
 {{{
 Traceback (most recent call last):
   File "/usr/local/lib/python2.7/dist-
 packages/fs/expose/fuse/fuse_ctypes.py", line 294, in _wrapper_
     return func(*args, **kwargs) or 0
   File "/usr/local/lib/python2.7/dist-
 packages/fs/expose/fuse/fuse_ctypes.py", line 425, in readdir
     set_st_attrs(st, attrs)
   File "/usr/local/lib/python2.7/dist-
 packages/fs/expose/fuse/fuse_ctypes.py", line 239, in set_st_attrs
     setattr(st, key, val)
 TypeError: an integer is required
 }}}

 This is due to me having some MDMF files in the directory.  When I unlink
 them from the directory, I get immediate results from my 'ls'.  I think
 the problem is that MDMF files don't have a "size" always.  In the JSON
 for the DIR:CAP, I have the file size listed as:

  "size": null

 When I run a "check/renew/verify every bit" on the MDMF, it spits out the
 size for a while and then the 'ls' works for a time.

 The change to fix this should either be in TahoeLAFS to output something
 like 0 for a null sized file, or at least an integer, like "-1", or PyFS
 should be updated to check "size" for null and replace it with 0 or a
 "-1".

-- 
Ticket URL: <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1634#comment:2>
tahoe-lafs <https://tahoe-lafs.org>
secure decentralized storage


More information about the tahoe-lafs-trac-stream mailing list