[tahoe-lafs-trac-stream] [tahoe-lafs] #393: mutable: implement MDMF

tahoe-lafs trac at tahoe-lafs.org
Sun Feb 27 15:33:47 PST 2011


#393: mutable: implement MDMF
------------------------------+---------------------------------------------
     Reporter:  warner        |       Owner:  kevan                                                                                                                 
         Type:  enhancement   |      Status:  assigned                                                                                                              
     Priority:  major         |   Milestone:  1.9.0                                                                                                                 
    Component:  code-mutable  |     Version:  1.0.0                                                                                                                 
   Resolution:                |    Keywords:  newcaps performance random-access privacy gsoc mdmf mutable backward-compatibility forward-compatibility review-needed
Launchpad Bug:                |  
------------------------------+---------------------------------------------

Comment (by warner):

 I noticed another curiosity, in the !ServermapUpdater(update_range=) code
 (which fetches the segments that live on the two ends of the span being
 modified, which are only partially changed and thus need to copy the old
 contents). There are lots of situations which cause {{{start_segment}}}
 and {{{end_segment}}} to be the same, such as modifying a small range in
 the middle of a segment. In those cases, it looks like
 {{{Servermapupdater._got_results}}} will request the same data twice, and
 the cache in {{{MDMFSlotReadProxy}}} doesn't help unless the second
 request arrives after the first has been resolved. So I think we're
 fetching twice as much data as we need to.

 Also, if the span we're replacing exactly aligns with the start or end of
 a segment (which is very common if we're modifying the start or end of the
 file), then we don't need to fetch the old segment at all. I think (but
 haven't confirmed) that the current code always fetches two segments, even
 in the aligned case.

 If so, then after we land this stuff, let's do a cleanup pass. I think the
 {{{update_range=}}} code could changed from thinking about start/end
 segments to just getting a set of segnums, of length 0 (if the span aligns
 on both ends), length 1 (if only one end is aligned, or if the span falls
 within a single segment) or length 2 (if the two ends of the span fall in
 different segments). Then the {{{fetch_update_data}}} code can make
 exactly as many {{{get_block_and_salt}}} calls as necessary, instead of
 always making 2.

-- 
Ticket URL: <http://tahoe-lafs.org/trac/tahoe-lafs/ticket/393#comment:80>
tahoe-lafs <http://tahoe-lafs.org>
secure decentralized storage


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