@@ -0,0 +1,138 @@
1 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Fossil and the CAP Theorem
2 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [The CAP theorem][cap] is a fundamental mathematical proof about
4 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ distributed systems. A software system can no more get around it than a
5 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ physical system can get past *c*, the [speed of light][sol] constant.
6 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
7 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fossil is a distributed system, so it can be useful to think about it in
8 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ terms of the CAP theorem. We won’t discuss the theorem itself or how you
9 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ reason using its results here. For that, we recommend [this article][tut].
10 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
11 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [cap]: https://en.wikipedia.org/wiki/CAP_theorem
12 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [sol]: https://en.wikipedia.org/wiki/Speed_of_light
13 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [tut]: https://www.ibm.com-theorem
14 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
15 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ <a id="ap"></a>
17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## Fossil Is an AP-Mode System
18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ As with all common [DVCSes][dvcs], Fossil is an AP-mode system, meaning
20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ that your local clone isn’t necessarily consistent with all other clones
21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (C), but the system is always available for use (A) and
22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ partition-tolerant (P). This is what allows you to turn off Fossil’s
23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ autosync mode, go off-network, and continue working with Fossil, even
24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ though only a single node (your local repo clone) is accessible at the
25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ time.
26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ You may consider that going back online restores “C”, because upon sync,
28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ you’re now consistent with the repo you cloned from. But, if another
29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ user has gone offline in the meantime, and they’ve made commits to their
30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ disconnected repo, *you* aren’t consistent with *them.*istency across the network.
31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ There’s no getting around the CAP theorem!
33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [dvcs]: https:_control
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ <a id="ca"></a>
38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## CA-Mode Fossil
39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ What would it mean to redesign Fossil to be CA-mode?
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ It means we get a system that is always consistent (C) and available (A)
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ as long as there are no partitions (P).
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ That’s basically [CVS] and [Subversion][svn]: youas long as your connection to the central repo server functions.
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ It’s rather trivial to talk about single-point-of-failure systems ems like
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ CVS or Subversion as
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ CA-mode. Another common example used this way is a classical RDBMS, but
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aren’t we here to talk about distributed systems? What’s a good example
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ of a *distributed* CA-mode system?
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ A better example is [Kafka], which in its default configuration assumes
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ it being run on a corporate LAN in a single datan its application of CArking with Fossil, even
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ though only a single node (your local repo clone) is accessible at the
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ time.
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ You may consider that going back online restP Theorem
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [The CAP theorem][cap] is a fundamental mathematical proof about
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ distributed systems. A software system can no more get around it than a
62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ physical system can get past *c*, the [speed of light][sol] constant.
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fossil is a distributed system, so it can be useful to think about it in
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ terms of the CAP theorem. We won’t discuss the theorem itself or how you
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ reason using its results here. For that, we recommend [this article][tut].
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [cap]: https://en.wikipedia.org/wiki/CAP_theorem
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [sol]: https://en.wikipedia.org/wiki/Speed_of_light
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [tut]: https://www.ibm.com/cloud/learn/cap-theorem
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ <a id="ap"></a>
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## Fossil Is an AP-Mode System
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ As with all common [DVCSes][dvcs], Fossil is an AP-mode system, meaning
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ that your local clone isn’t necessarily consistent with all other clones
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (C), but the system is always available for use (A) and
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ partition-tolerant (P). This is what allows you to turn off Fossil’s
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ autosync mode, go off-network, and continue working with Fossil, even
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ though only a single node (your local repo clone) is accessible at the
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ time.
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ You may consider that going back online restores “C”, because upon sync,
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ you’re now consistent with the repo you cloned from. But, if another
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ user has gone offline in t## CProl
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ <a id="ca"></mple used this way is a classical RDBMS, but
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aren’t we here to talk about distributed systems? What’s a good example
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ of a *distributed* CA-mode system?
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ A better example is [Kafka], which in its default configuration assumes
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ it being run on a corporate LAN in a single datan its application of CArking with Fossil, even
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ though only a single node (your local repo clone) is accessible at the
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ time.
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ You may consider that going back online restP Theorem
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [The CAP theorem][cap] is a fundamental mathematical proof about
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ distributed systems. A software system can no more get around it than a
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ physical system can get past *c*, the [speed of light][sol] constant.
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fossil is a distributed system, so it can be useful to think about it in
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ terms of the CAP theorem. We won’t discuss the theorem itself or how you
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ reason using its results here. For that, we recommend [this article][tut].
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [cap]: https://en.wikipedia.org/wiki/CAP_theorem
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [sol]: https://en.wikipedia.org/wiki/Speed_of_light
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [tut]: https://www.ibm.com/cloud/learn/cap-theorem
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ <a id="ap"></a>
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## Fossil Is an AP-Mode System
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ As with all common [DVCSes][dvcs], Fossil is an AP-mode system, meaning
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ that your local clone isn’t necessarily consistent with all other clones
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (C), but the system is always available for use (A) and
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ partition-tolerant (P). This is what allows you to turn off Fossil’s
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ autosync mode, go off-network, and continue working with Fossil, even
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ though only a single node (your local repo clone) is accessible at the
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ time.
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ You may consider that going back online restores “C”, because upon sync,
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ you’re now consistent with the repo you cloned from. But, if another
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ user has gone offline in the meantime, and they’ve made commits to their
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ disconnected repo, *you* aren’t consistent with *them.* Besides which,
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if another user commits to the central repo, that doesn’t push the
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ change down to you automatically: even if all users of a Fossil system
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ are online at the same instant, and they’re all using autosync, Fossil
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ doesn’t guarantee consistency across the network.
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ There’s no getting around the CAP theorem!
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [dvcs]: https://en.# Fossil and the when there aren’t enough active servers or warm
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ spares to promote to active status.
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ CP is your classical [BFT