No changes to the global repository are made.
??? CommitComplete occurs when changes have been successfully propagated to the
repository.
Here is a trace of a sample session for two clients.
Synchronize("alice")
Edit("alice", "file1", Op("Add"))
Commit("alice")
CommitComplete("alice", 1)
Synchronize("bob")
Systems with Complex State 171
Edit("bob", "file1", Op("Change"))
Edit("alice", "file1", Op("Change"))
Commit("alice")
CommitComplete("alice", 2)
Commit("bob")
MustResolve("bob", Set
("file1"))
Resolve("bob", "file1")
Commit("bob")
CommitComplete("bob", 3)
This trace shows a scenario where client alice adds a file named file1 to the
repository and commits her change. Client bob synchronizes against the repository
and begins to edit file1. Alice, in the meantime, edits file1 and commits her
changes.
When client bob commits, the system tells him that there is a conflict to resolve.
He resolves the conflict with the Resolve action and commits again. The system
responds with CommitComplete, indicating that the change has been incorporated
into the repository. The repository increments its global revision number and reports
it in the CommitComplete action.
10.4.2 State and derived state
We introduce just enough state to accurately determine which traces of the system
are possible and which are not. For ease of understanding, we can separate state into
the state of the repository and the state of the users of the repository.
Pages:
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241