On Mon, Feb 6, 2012 at 2:03 PM, Greg Stein <gstein_at_gmail.com> wrote:
> On Mon, Feb 6, 2012 at 14:32, Hyrum K Wright <hyrum.wright_at_wandisco.com> wrote:
>> On Mon, Feb 6, 2012 at 1:28 PM, Greg Stein <gstein_at_gmail.com> wrote:
>>> On Mon, Feb 6, 2012 at 12:48, <hwright_at_apache.org> wrote:
>>>> Author: hwright
>>>> Date: Mon Feb 6 17:48:36 2012
>>>> New Revision: 1241097
>>>>
>>>> URL: http://svn.apache.org/viewvc?rev=1241097&view=rev
>>>> Log:
>>>> Ev2 shims: Truthfully report our base checksum as being that of the empty
>>>> stream.
>>>>
>>>> Note: This breaks several assumptions in various delta-editor receivers about
>>>> the validity of this checksum. These have been patched to ignore the checksum
>>>> if it is that of the empty stream. This will not affect correctness, as the
>>>> final checksum, as supplied by close_file() is still used to detect corruption,
>>>> and it hasn't changed.
>>>
>>> How does this even work? Sure, the checksum isn't checked, but the
>>> delta-editor receiver is going to choose the wrong base contents to
>>> apply the delta against.
>>
>> Huh? The delta-editor receiver isn't using this to choose any base
>> contents, it's simply using it as some kind of intermediate
>> verification step.
>>
>> Before this change, we just passed a NULL checksum, which was *always*
>> ignored, and everything Just Worked. With this change, we started
>> being honest, and various pieces of the system didn't appreciate that
>> honesty.
>
> If the shim sends a delta against the empty-stream, then how can the
> Ev1 receiver properly apply that? Won't the receiver use some selected
> base contents? ie. NOT the empty stream?
>
> I'm thinking of the delta application to a base. How can that possibly
> work, if the shim creates a delta against the empty stream?
The shim uses svn_txdelta_send_stream() to send the contents stream to
the receiver's apply_textdelta() handler. svn_txdelta_send_stream()
doesn't use a source stream: "This is effectively a 'copy' operation,
resulting in delta windows that make the target equivalent to the
stream."
I haven't looked at the implementation of svn_txdelta_send_stream(),
but my guess is that it just feeds delta-window-size chunks of data to
the window handler from the source, for which it obviously doesn't
need a base.
-Hyrum
--
uberSVN: Apache Subversion Made Easy
http://www.uberSVN.com/
Received on 2012-02-06 21:19:25 CET