Diff
Not logged in

Differences From:

File ideas.txt part of check-in [251545cd43] - Added text notes on ideas for dealing with tickets and wiki. by drh on 2007-09-02 20:33:16. [view]

To:

File ideas.txt part of check-in [ba486fec5a] - Add the unclustered table and the M lines to manifests. Process clusters in manifest_parse and manifest_crossref. The xfer process still does not yet use clusters though so it is still compatible. But that is about to change. by drh on 2007-09-03 01:28:57. [view]

@@ -1,4 +1,104 @@
+Possible ticket file format:
+
+   "Ticket"
+   title: TEXT
+   ticketid: TEXT
+   exists-in: BASELINE   -- 0 or more
+   fixed-in: BASELINE    -- 0 or more
+   tag: TAG              -- 0 or more
+   created: DATETIME
+   attachment: FILENAME DESCRIPTION
+   parent: UUID*
+   derived-from: TICKET-FILENAME
+   description: MULTILINE-TEXT
+   remarks: MULTILINE-TEXT
+
+   * Things handles with tags:
+     created-by
+     assigned-to
+     priority
+     severity
+     target-release
+     status
+     resolution
+     type
+     subsystem
+
+Wiki header format:
+   "WikiPage"
+   parent: UUID*
+   title: TEXT
+   pagename: TEXT
+   mode: (readonly|appendonly|readwrite)
+   attachment: UUID name description
+
+   * Header ends with a blank line.  wiki content follows.
+
+Cluster format:
+
+   "Cluster"
+   (UUID\n)+
+
+   * 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
+     ------
+     * 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