PrivateStorageio / ZKAPAuthorizer

a Tahoe-LAFS storage-system plugin which authorizes storage operations based on privacy-respecting tokens
10 stars 8 forks source link

Linking a file into a directory sometimes fails with MorePassesRequired when it apparently should not #163

Open exarkun opened 4 years ago

exarkun commented 4 years ago

I can reliably provoke:

e03d6eaa-d22d-459b-aa13-981ad88143ee
└── zkapauthorizer:storage-client:call-with-passes/1 ⇒ started 2020-06-23 19:06:33Z ⧖ 0.233s
    ├── count: 0
    ├── zkapauthorizer:get-passes/2 2020-06-23 19:06:33Z
    │   ├── count: 0
    │   └── message: slot_testv_and_readv_and_writev Ymw/Uo/c5QRp6/cJxxKphg==
    ├── zkapauthorizer:reset-passes/3 2020-06-23 19:06:34Z
    │   └── count: 0
    └── zkapauthorizer:storage-client:call-with-passes/4 ⇒ failed 2020-06-23 19:06:34Z
        ├── exception: foolscap.tokens.RemoteException
        └── reason: <RemoteException around '[CopiedFailure instance: Traceback from remote host -- Traceback (most recent call last):⏎
              File "/nix/store/k321pdc9g0qa2xvj0h2jpr0w7hjsfqj2-python-2.7.17-env/lib/python2.7/site-packages/foolscap/eventual.py", line 26, in _turn⏎
                cb(*args, **kwargs)⏎
              File "/nix/store/k321pdc9g0qa2xvj0h2jpr0w7hjsfqj2-python-2.7.17-env/lib/python2.7/site-packages/foolscap/broker.py", line 579, in doNextCall⏎
                d.addCallback(lambda res: self._doCall(delivery))⏎
              File "/nix/store/k321pdc9g0qa2xvj0h2jpr0w7hjsfqj2-python-2.7.17-env/lib/python2.7/site-packages/twisted/internet/defer.py", line 322, in addCallback⏎
                callbackKeywords=kw)⏎
              File "/nix/store/k321pdc9g0qa2xvj0h2jpr0w7hjsfqj2-python-2.7.17-env/lib/python2.7/site-packages/twisted/internet/defer.py", lin⏎
            ⏎
            -- TRACEBACK ELIDED --⏎
            ⏎
            runCallbacks()⏎
            --- <exception caught here> ---⏎
              File "/nix/store/k321pdc9g0qa2xvj0h2jpr0w7hjsfqj2-python-2.7.17-env/lib/python2.7/site-packages/twisted/internet/defer.py", line 654, in _runCallbacks⏎
                current.result = callback(current.result, *args, **kw)⏎
              File "/nix/store/k321pdc9g0qa2xvj0h2jpr0w7hjsfqj2-python-2.7.17-env/lib/python2.7/site-packages/foolscap/broker.py", line 579, in <lambda>⏎
                d.addCallback(lambda res: self._doCall(delivery))⏎
              File "/nix/store/k321pdc9g0qa2xvj0h2jpr0w7hjsfqj2-python-2.7.17-env/lib/python2.7/site-packages/foolscap/broker.py", line 614, in _doCall⏎
                return obj.doRemoteCall(delivery.methodname, args, kwargs)⏎
              File "/nix/store/k321pdc9g0qa2xvj0h2jpr0w7hjsfqj2-python-2.7.17-env/lib/python2.7/site-packages/foolscap/referenceable.py", line 59, in doRemoteCall⏎
                res = meth(*args, **kwargs)⏎
              File "/nix/store/k321pdc9g0qa2xvj0h2jpr0w7hjsfqj2-python-2.7.17-env/lib/python2.7/site-packages/_zkapauthorizer/_storage_server.py", line 340, in remote_slot_testv_and_readv_and_writev⏎
                raise MorePassesRequired(len(valid_passes), required_new_passes)⏎
            _zkapauthorizer._storage_server.MorePassesRequired: MorePassedRequired(valid_count=0, required_count=1)⏎
            ]'>

but I'm not sure what the cause is. Additional Eliot logging about how the pass counts are computed would probably help.

exarkun commented 3 years ago

Hmmmm I wish I had not let this drop for 8 months.

I believe that the additional logging revealed that this failure is a result of #165 - which has since been fixed.