~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to doc/developers/initial-push-pull.txt

  • Committer: Martin Pool
  • Date: 2005-06-28 03:02:31 UTC
  • Revision ID: mbp@sourcefrog.net-20050628030231-d311e4ebcd467ef4
Merge John's import-speedup branch:

                                                                                         
  777 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 22:20:32 -0500
      revision-id: john@arbash-meinel.com-20050627032031-e82a50db3863b18e
      bzr selftest was not using the correct bzr

  776 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 22:20:22 -0500
      revision-id: john@arbash-meinel.com-20050627032021-c9f21fde989ddaee
      Add was using an old mutter

  775 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 22:02:33 -0500
      revision-id: john@arbash-meinel.com-20050627030233-9165cfe98fc63298
      Cleaned up to be less different

  774 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 21:54:53 -0500
      revision-id: john@arbash-meinel.com-20050627025452-4260d0e744edef43
      Allow BZR_PLUGIN_PATH='' to negate plugin loading.

  773 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 21:49:34 -0500
      revision-id: john@arbash-meinel.com-20050627024933-b7158f67b7b9eae5
      Finished the previous cleanup (allowing load_plugins to be called twice)

  772 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 21:45:08 -0500
      revision-id: john@arbash-meinel.com-20050627024508-723b1df510d196fc
      Work on making the tests pass. versioning.py is calling run_cmd directly, but plugins have been loaded.

  771 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 21:32:29 -0500
      revision-id: john@arbash-meinel.com-20050627023228-79972744d7c53e15
      Got it down a little bit more by removing import of tree and inventory.

  770 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 21:26:05 -0500
      revision-id: john@arbash-meinel.com-20050627022604-350b9773ef622f95
      Reducing the number of import from bzrlib/__init__.py and bzrlib/branch.py

  769 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 20:32:25 -0500
      revision-id: john@arbash-meinel.com-20050627013225-32dd044f10d23948
      Updated revision.py and xml.py to include SubElement.

  768 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 20:03:56 -0500
      revision-id: john@arbash-meinel.com-20050627010356-ee66919e1c377faf
      Minor typo

  767 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 20:03:13 -0500
      revision-id: john@arbash-meinel.com-20050627010312-40d024007eb85051
      Caching the import

  766 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 19:51:47 -0500
      revision-id: john@arbash-meinel.com-20050627005147-5281c99e48ed1834
      Created wrapper functions for lazy import of ElementTree

  765 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 19:46:37 -0500
      revision-id: john@arbash-meinel.com-20050627004636-bf432902004a94c5
      Removed all of the test imports of cElementTree

  764 John Arbash Meinel <john@arbash-meinel.com>       Sun 2005-06-26 19:43:59 -0500
      revision-id: john@arbash-meinel.com-20050627004358-d137fbe9570dd71b
      Trying to make bzr startup faster.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
Initial push / pull
2
 
===================
3
 
 
4
 
Optimal case
5
 
------------
6
 
(a motivating example of ultimate performance)
7
 
Assume there is a file with exactly the right data in compressed form.  This
8
 
may be a tarred branch, a bundle, or a blob format.  Performance in this case
9
 
scales with the size of the file.
10
 
 
11
 
Disk case
12
 
---------
13
 
Assume current repo format.  Attempt to achieve parity with ``cp -r``.  Read
14
 
each file only 1 time.
15
 
 
16
 
- read knit graph for revisions
17
 
- write filtered copy of revision knit O(d+a)
18
 
- write filtered copy of knit index O(d)
19
 
- Open knit index for inventory
20
 
- Write a filtered copy of inventory knit and simultaneously not all referenced
21
 
  file-ids O(b+d)
22
 
- Write filtered copy of inventory knit index O(d)
23
 
- For each referenced file-id:
24
 
 
25
 
  - Open knit index for each file knit O(e)
26
 
  - If acceptable threshold of irrelevant data hard-link O(f)
27
 
  - Otherwise write filtered copy of text knit and simultaneously write
28
 
    the fulltext to tree transform O(h)
29
 
 
30
 
- Write format markers O(1)
31
 
 
32
 
:a: size of aggregate revision metadata
33
 
:b: size of inventory changes for all revisions
34
 
:c: size of text changes for all files and all revisions (e * g)
35
 
:d: number of relevant revisions
36
 
:e: number of relevant versioned files
37
 
:f: size of the particular versioned file knit index
38
 
:g: size of the filtered versioned file knit
39
 
:h: size of the versioned file fulltext
40
 
:i: size of the largest file fulltext
41
 
 
42
 
Smart Network Case
43
 
------------------
44
 
 
45
 
Phase 1
46
 
~~~~~~~
47
 
Push: ask if there is a repository, and if not, what formats are okay
48
 
Pull: Nothing
49
 
 
50
 
Phase 2
51
 
~~~~~~~
52
 
Push: send initial push command, streaming data in acceptable format, following
53
 
disk case strategy
54
 
Pull: receive initial pull command, specifying format
55
 
 
56
 
Pull client complexity: O(a), memory cost O(1)
57
 
Push client complexity: procesing and memory cost same as disk case
58
 
 
59
 
Dumb Network Case
60
 
-----------------
61
 
Pull: same as disk case, but request all file knit indices at once and request
62
 
al file knits at once.
63
 
Push: same as disk case, but write all files at once.
64
 
 
65
 
Wants
66
 
-----
67
 
- Read partial graph
68
 
- Read multiple segments of multiple files on http and sftp
69
 
- Write multiple files over SFTP