[tahoe-lafs-trac-stream] [tahoe-lafs] #1744: The documentation of the "slot_testv_and_readv_and_writev" method in interfaces.py requires clarification.

tahoe-lafs trac at tahoe-lafs.org
Sat May 19 08:10:06 UTC 2012


#1744: The documentation of the "slot_testv_and_readv_and_writev" method in
interfaces.py requires clarification.
----------------------------+---------------------------
 Reporter:  zancas          |          Owner:  marlowe
     Type:  defect          |         Status:  new
 Priority:  normal          |      Milestone:  undecided
Component:  documentation   |        Version:  1.9.1
 Keywords:  usability docs  |  Launchpad Bug:
----------------------------+---------------------------
 There are several ambiguities, or errors, in the old version [ or my
 understanding thereof ;-) ].

 First: It wasn't clear that the read operation occurs regardless of the
 outcome of the test operation.

 Second: It ambiguously states that the write vectors are applied to "those
 shares" (in fact [iiuc] the write vector shares may be an overlapping, or
 even disjoint, from the existing shares).

 It _is_ correct that the shares which may be written will only be written
 in the case that a call to:
 {{{
 SOMESHARE.check_testv(testv)
 }}}
 returns "True" for all shares in the test_and_write_vectors, but the
 SOMESHARE will be !EmptyShare if the share to be written is not already on
 the server.

 Here's how I changed it in a local git repo:


 {{{
 # Please enter the commit message for your changes. Lines starting
 # with '#' will be ignored, and an empty message aborts the commit.
 # On branch master
 # Changes to be committed:
 #   (use "git reset HEAD <file>..." to unstage)
 #
 #       modified:   interfaces.py
 #
 # Changes not staged for commit:
 #   (use "git add <file>..." to update what will be committed)
 #   (use "git checkout -- <file>..." to discard changes in working
 directory)
 #
 #       modified:   mutable/layout.py
 #
 diff --git a/src/allmydata/interfaces.py b/src/allmydata/interfaces.py
 index a73ce86..b15863b 100644
 --- a/src/allmydata/interfaces.py
 +++ b/src/allmydata/interfaces.py
 @@ -159,10 +159,13 @@ class RIStorageServer(RemoteInterface):
 tw_vectors=TestAndWriteVectorsForShares,
                                          r_vector=ReadVector,
                                          ):
 -        """General-purpose test-and-set operation for mutable slots.
 Perform
 -        a bunch of comparisons against the existing shares. If they all
 pass,
 -        then apply a bunch of write vectors to those shares. Then use the
 -        read vectors to extract data from all the shares and return the
 data.
 +        """
 +        General-purpose atomic test-read-and-set operation for mutable
 slots.
 +        (1) Perform comparisons tests against the extant shares.
 +        (2) Use the read vectors to extract "old data" from all extant
 shares.
 +        (3) If all tests in (1) passed: then write tw_vectors shares.
 +        (4) Return whether the tests passed and the "old data", which
 does not
 +        include any modifications made by the writes.

          This method is, um, large. The goal is to allow clients to update
 all
          the shares associated with a mutable file in a single round trip.
 @@ -232,9 +235,11 @@ class RIStorageServer(RemoteInterface):
          than the size of the data after applying all write vectors.

          The read vector is used to extract data from all known shares,
 -        *before* any writes have been applied. The same vector is used
 for
 -        all shares. This captures the state that was tested by the test
 -        vector.
 +        *before* any writes have been applied. The same read vector is
 used
 +        for all shares. This captures the state that was tested by the
 test
 +        vector, for extant shares. Of course, the extracted data contains
 no
 +        information about shares written to new shares that did not
 previously
 +        exist.

          This method returns two values: a boolean and a dict. The boolean
 is
          True if the write vectors were applied, False if not. The dict is
 }}}

-- 
Ticket URL: <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1744>
tahoe-lafs <https://tahoe-lafs.org>
secure decentralized storage


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