Comment 43 for bug 390563

Revision history for this message
Aaron Bentley (abentley) wrote : Re: [Bug 390563] Re: absent factory exception from smart server when streaming 2a stacked branches

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

John A Meinel wrote:
> Aaron Bentley wrote:
>> Why do we need the parent inventories?
>
> Stacking requirements. The specific issues are:
>
> 1) When accessing a stacked branch via bzr+ssh the *server process* does
> not have access to the backing repository.

It would be nice to support server-side bundle application, but it is
not a requirement. Bundles are deltas, and the client usually needs to
read from the repository in order to install them. If that requires
that fallbacks be available, I think that's a reasonable extension of
the current behaviour.

> 1) If you insert an line-delta for the XML inventory into the stacked
> branch, then it only references newly introduced texts, and does not
> reference all possible texts.

All possible in what context? We certainly don't want to reference
every text in the repository.

> Thus even though we don't have the parent
> inventory later when doing "streaming fetch" we don't try to send more
> data then we have available because it just wasn't referenced.

If you are suggesting that installing an inventory requires installing
all the texts it references, that would require doing it on the client
side, because storing all that in the bundle is pointless waste.

> 2) However, if you are at the end of a delta chain, etc, and you insert
> a "fulltext" for the XML inventory, suddenly when doing streaming fetch
> from that stacked branch, it will see all these text keys that it thinks
> it needs to transmit, for which it cannot find in the local repository.
> [and boom].

I think it doesn't make a lot of sense for a stacked repository to have
a copy of every text referenced in any of its inventories, so I don't
really get this.

> My point was that the streaming code might not look at the
> Branch.last_revision() and instead look at "is revision in
> Repository.all_revision_ids". And if you have a local shared repository,
> it *will* have the revisions you are trying to bundle.

Okay, I will make sure that the new bundle format uses
Branch.last_revision to determine what to send.

Aaron
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkpfoGMACgkQ0F+nu1YWqI3sngCffvynD0u6FDE0fBTpLAFhr2DP
9k4AnRKP4mgQLKOuaD3sKmP5b61+66/4
=Xs0R
-----END PGP SIGNATURE-----