[tahoe-lafs-trac-stream] [tahoe-lafs] #393: mutable: implement MDMF
tahoe-lafs
trac at tahoe-lafs.org
Sun Feb 27 17:53:49 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 kevan):
Replying to [comment:80 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.
I think you're right on that; I don't remember designing for either of
those scenarios (I was apparently firmly in the two-segment mindset when I
wrote that), and a quick glance at the code doesn't reveal that they're
given special consideration.
> 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.
Sounds good.
--
Ticket URL: <http://tahoe-lafs.org/trac/tahoe-lafs/ticket/393#comment:82>
tahoe-lafs <http://tahoe-lafs.org>
secure decentralized storage
More information about the tahoe-lafs-trac-stream
mailing list