Fossil

Check-in [b8cc22eb]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Merged dhr's todo and ideas update
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1:b8cc22ebdf58e37c0ec0fa6ca72bdd77f83d5840
User & Date: jnc 2007-09-24 23:56:25
Context
2007-09-24
23:58
Merged mjanssen's timeline updates check-in: 798a48ee user: jnc tags: trunk
23:56
Merged dhr's todo and ideas update check-in: b8cc22eb user: jnc tags: trunk
22:23
Fix the menu of fossil_chat.tcl for mac. check-in: aeb2ac78 user: drh tags: trunk
12:55
Minor updates to the todo.txt and ideas.txt files. check-in: 43b33702 user: drh tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to ideas.txt.

46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
   title: TEXT
   pagename: TEXT
   mode: (readonly|appendonly|readwrite)
   attachment: UUID name description

   * Header ends with a blank line.  wiki content follows.

Cluster format:

       M+ uuid
       Z manifest-cksum

   * Cluster generated in server mode only.
   * Embargo cluster that reference phantoms or other embargoed clusters.
   * Never send or ihave an embargoed cluster

New sync algorithm based on clusters:

   * Keep a table of unclustered artifacts.  Strive to keep this table
     less than 100 entries.
   * Client sends content of unclustered table as ihaves to server
   * Server builds a new cluster if size of cluster table >100.
   * Server sends unclustered table to client
   * Server sends gimme for all unknown ihave received from client
   * Client sends gimme for all unknown ihave received from server
   * Previous two steps repeat until no more gimmes

Details of new push algorithm:

   * Table "unsent" contains all files never pushed
   * TEMP table "wanted" contains files the server does not have
   Loop:
     * Client sends login and "push" record
     * Client sends file message for all files in unsent and removes
       those files from the table.
     * Client sends file message for all files in wanted.
     * Client sends ihave messages for each entry in unclustered
     ------
     * Server receives file message
     * Server creates phantoms for unknown ihaves
     * Server sends gimme messages for all phantoms
     ------
     * Client clears its unsent table
     * For each gimme message add an entry to wanted
     * Halt if the wanted table is empty

Details on new pull algorithm:

   Loop:
     * Client sends login and "pull" record
     * Client sends "prior" message with repository id and max record number
     * Client sends "gimme" for each phantom
     --------
     * Server creates new clusters to get unclustered size below 100
     * If there is "prior" message with repository id that matches this
       server, then send file messages for all record ids greater than
       prior
     * Server sends ihave messages for each entry in unclustered
     * Server sends maxrid message
     --------
     * Client receives file records
     * Client creates phantoms for unknown ihaves
     * If no phantoms exist, record maxrid for the server and halt

Need a dephantomize algorithm


Auxiliary tables needed for new sync algorithm:

   * unsent:  files that have never been sent to another repository
   * unclustered: non-phantom files not mentioned by a cluster

Random thoughts:

  *  Changes to manifest to support:
     +  Trees of wiki pages and tickets
     +  The ability to cap or close a branch
     +  See "Extended Manifests" below

  *  Add the concept of "clusters" to speed the transfer of "tips"
     on a sync.

  *  Auxiliary tables:
     +  tip
     +  phantom
     +  mlink
     +  plink
     +  branch
     +  tree

  * Plink.isprim changed to record:
     +  child is the principal descendent of parent. (1)
     +  child is a branch from parent (2)
     +  child uses parent as a merge (0)

  * tree records
     + type  (code, wiki, ticket)
     + name  (for wiki and ticket only)
     + treeid

  * branch records
     + treeid
     + origin_rid
     + origin_time
     + tip_rid
     + tip_time
     + color

  * website can toggle isprim between principal and branch.
     + How to preserve across rebuild.  A new record type?
     + How to share with other repositories
  * isprim guessed using userid of parent and child.  Change
    in id suggests a branch.  Same id suggests principal.
    For a tie, go with the earliest check-in as the principal'








<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<



<
<
<
<
<


<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<





<
<
<
<
<
<
<
<
<
<
<
<
<







46
47
48
49
50
51
52

























































53
54
55





56
57
















58
59
60
61
62













63
64
65
66
67
68
69
   title: TEXT
   pagename: TEXT
   mode: (readonly|appendonly|readwrite)
   attachment: UUID name description

   * Header ends with a blank line.  wiki content follows.


























































Need a dephantomize algorithm







Random thoughts:

















  * Plink.isprim changed to record:
     +  child is the principal descendent of parent. (1)
     +  child is a branch from parent (2)
     +  child uses parent as a merge (0)














  * website can toggle isprim between principal and branch.
     + How to preserve across rebuild.  A new record type?
     + How to share with other repositories
  * isprim guessed using userid of parent and child.  Change
    in id suggests a branch.  Same id suggests principal.
    For a tie, go with the earliest check-in as the principal'

Changes to todo.txt.

16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
..
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
    EDITED ... many ...
    
 *  Bug: If the server closes the socket unexpectedly, the
    fwrite() in http.c:103 throws a signal and kills the child
    process.  fwrite() is not suppose to do this.  Need to figure
    out what is going wrong.

 *  Bug: pull is ending prematurely.

 *  Bug: Make sure merge and other commands (check-out) do not try
    to use a phantom.

 *  Bug: When clone use incorrect http URL, local repo file is still created.

Things to work on:

................................................................................
    message exceeds the maximum POST size of the server) the client
    does not report this error back to the user as it should.

 *  The ipaddr field of the rcvfrom table is not being set.  This
    field should be the IP address from which information is received
    for the local repository.  So when somebody does a push of new
    files we record the ipaddr.  Or when we do a pull, we record
    the ipaddr.

 *  Additional information displayed for the "vinfo" page:

     +  All leaves of this version that are not included in the
        descendant list.  With date, user, comment, and hyperlink.
        Leaves in the descendant table should be marked as such.
        See the compute_leaves() function to see how to find all
        leaves.
     +  Add file diff links to the file change list.

 *  Timeline enhanced so that you can specify a range of dates.

 *  The /xfer handler (for push, pull, and clone) does not do
    delta compression.  This results in excess bandwidth usage.
    There are some pieces in xfer.c that are sketches of ideas on
    how to do delta compression, but nothing has been implemented.

 *  Enhancements to the diff and tkdiff commands in the cli.
    Allow the entire tree or a subtree to be diffed, not just a 
    single file.  Allow diffs against any two arbitrary versions,
    not just diffs against the current check-out.

 *  Ticketing interface (expand this bullet)








<
<







 







|










<
<
<
<
<
<
<







16
17
18
19
20
21
22


23
24
25
26
27
28
29
..
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57







58
59
60
61
62
63
64
    EDITED ... many ...
    
 *  Bug: If the server closes the socket unexpectedly, the
    fwrite() in http.c:103 throws a signal and kills the child
    process.  fwrite() is not suppose to do this.  Need to figure
    out what is going wrong.



 *  Bug: Make sure merge and other commands (check-out) do not try
    to use a phantom.

 *  Bug: When clone use incorrect http URL, local repo file is still created.

Things to work on:

................................................................................
    message exceeds the maximum POST size of the server) the client
    does not report this error back to the user as it should.

 *  The ipaddr field of the rcvfrom table is not being set.  This
    field should be the IP address from which information is received
    for the local repository.  So when somebody does a push of new
    files we record the ipaddr.  Or when we do a pull, we record
    the ipaddr.  (I think this has been fixed.  Need to test.)

 *  Additional information displayed for the "vinfo" page:

     +  All leaves of this version that are not included in the
        descendant list.  With date, user, comment, and hyperlink.
        Leaves in the descendant table should be marked as such.
        See the compute_leaves() function to see how to find all
        leaves.
     +  Add file diff links to the file change list.








 *  Enhancements to the diff and tkdiff commands in the cli.
    Allow the entire tree or a subtree to be diffed, not just a 
    single file.  Allow diffs against any two arbitrary versions,
    not just diffs against the current check-out.

 *  Ticketing interface (expand this bullet)