From c9cec5b17bde94d7e3fd40c71a32d16a936769fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Mur=C3=A9?= Date: Tue, 22 Mar 2022 21:28:10 +0100 Subject: [PATCH] update doc --- doc/merge1.png | Bin 0 -> 56989 bytes doc/merge2.png | Bin 0 -> 65479 bytes doc/model.md | 164 ++++++++++++++++++++++++------------------- doc/operations.png | Bin 0 -> 12842 bytes entity/dag/entity.go | 2 +- query/parser_test.go | 4 ++ 6 files changed, 95 insertions(+), 75 deletions(-) create mode 100644 doc/merge1.png create mode 100644 doc/merge2.png create mode 100644 doc/operations.png diff --git a/doc/merge1.png b/doc/merge1.png new file mode 100644 index 0000000000000000000000000000000000000000..7ba2417311838f552fd80d08a4baba662ad0d1f4 GIT binary patch literal 56989 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ΜV*_>So1L8oF6uWd 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 literal 0 HcmV?d00001 diff --git a/doc/model.md b/doc/model.md index c4252e6c..da76761c 100644 --- a/doc/model.md +++ b/doc/model.md @@ -1,111 +1,127 @@ -# Data model +Entities data model +=================== If you are not familiar with [git internals](https://git-scm.com/book/en/v1/Git-Internals), you might first want to read about them, as the `git-bug` data model is built on top of them. -The biggest problem when creating a distributed bug tracker is that there is no central authoritative server (doh!). This implies some constraints. +## Entities (bugs, ...) are a series of edit operations -## Anybody can create and edit bugs at the same time as you +As entities are stored and edited in multiple process at the same time, it's not possible to store the current state like it would be done in a normal application. If two process change the same entity and later try to merge the states, we wouldn't know which change takes precedence or how to merge those states. -To deal with this problem, you need a way to merge these changes in a meaningful way. +To deal with this problem, you need a way to merge these changes in a meaningful way. Instead of storing the final bug data directly, we store a series of edit `Operation`s. This is a common idea, notably with [Operation-based CRDTs](https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type#Operation-based_CRDTs). -Instead of storing the final bug data directly, we store a series of edit `Operation`s. +![ordered operations](operations.png) -Note: In git-bug internally it is a golang struct, but in the git repo it is stored as JSON, as seen later. +To get the final state of an entity, we apply these `Operation`s in the correct order on an empty state to compute ("compile") our view. -These `Operation`s are aggregated in an `OperationPack`, a simple array. An `OperationPack` represents an edit session of a bug. We store this pack in git as a git `Blob`; that consists of a string containing a JSON array of operations. One such pack -- here with two operations -- might look like this: +## Entities are stored in git objects + +An `Operation` is a piece of data including: +- a type identifier +- an author (a reference to another entity) +- a timestamp (there is also 1 or 2 Lamport time that we will describe later) +- all the data required by that operation type (a message, a status ...) +- a random nonce to ensure we have enough entropy, as the operation identifier is a hash of that data (more on that later) + +These `Operation`s are aggregated in an `OperationPack`, a simple array. An `OperationPack` represents an edit session of a bug. As the operation's author is the same for all the `OperationPack` we only store it once. + +We store this pack in git as a git `Blob`; that consists of a string containing a JSON array of operations. One such pack -- here with two operations -- might look like this: ```json -[ - { - "type": "SET_TITLE", - "author": { - "id": "5034cd36acf1a2dadb52b2db17f620cc050eb65c" - }, - "timestamp": 1533640589, - "title": "This title is better" +{ + "author": { + "id": "04bf6c1a69bb8e9679644874c85f82e337b40d92df9d8d4176f1c5e5c6627058" }, - { - "type": "ADD_COMMENT", - "author": { - "id": "5034cd36acf1a2dadb52b2db17f620cc050eb65c" + "ops": [ + { + "type": 3, + "timestamp": 1647377254, + "nonce": "SRQwUWTJCXAmQBIS+1ctKgOcbF0=", + "message": "Adding a comment", + "files": null }, - "timestamp": 1533640612, - "message": "A new comment" - } -] + { + "type": 4, + "timestamp": 1647377257, + "nonce": "la/HaRPMvD77/cJSJOUzKWuJdY8=", + "status": 1 + } + ] +} ``` -To reference our `OperationPack`, we create a git `Tree`; it references our `OperationPack` `Blob` under `"\ops"`. If any edit operation includes a media (for instance in a message), we can store that media as a `Blob` and reference it here under `"/media"`. +To reference our `OperationPack`, we create a git `Tree`; it references our `OperationPack` `Blob` under `"/ops"`. If any edit operation includes a media (for instance in a message), we can store that media as a `Blob` and reference it here under `"/media"`. To complete the picture, we create a git `Commit` that references our `Tree`. Each time we add more `Operation`s to our bug, we add a new `Commit` with the same data-structure to form a chain of `Commit`s. This chain of `Commit`s is made available as a git `Reference` under `refs/bugs/`. We can later use this reference to push our data to a git remote. As git will push any data needed as well, everything will be pushed to the remote, including the media. -For convenience and performance, each `Tree` references the very first `OperationPack` of the bug under `"/root"`. That way we can easily access the very first `Operation`, the `CREATE` operation. This operation contains important data for the bug, like the author. - Here is the complete picture: -``` - refs/bugs/ - | - | - | - +-----------+ +-----------+ "ops" +-----------+ - | Commit |----------> Tree |---------+------------| Blob | (OperationPack) - +-----------+ +-----------+ | +-----------+ - | | - | | - | | "root" +-----------+ - +-----------+ +-----------+ +------------| Blob | (OperationPack) - | Commit |----------> Tree |-- ... | +-----------+ - +-----------+ +-----------+ | - | | - | | "media" +-----------+ +-----------+ - | +------------| Tree |---+--->| Blob | bug.jpg - +-----------+ +-----------+ +-----------+ | +-----------+ - | Commit |----------> Tree |-- ... | - +-----------+ +-----------+ | +-----------+ - +--->| Blob | demo.mp4 - +-----------+ -``` +![git graph of a simple bug](bug-graph-1.png) -Now that we have this, we can easily merge our bugs without conflict. When pulling bug updates from a remote, we will simply add our new operations (that is, new `Commit`s), if any, at the end of the chain. In git terms, it's just a `rebase`. +## Time is unreliable -## You can't have a simple consecutive index for your bugs +It would be very tempting to use the `Operation`'s timestamp to give us the order to compile the final state. However, you can't rely on the time provided by other people (their clock might be off) for anything other than just display. This is a fundamental limitation of distributed system, and even more so when actors might want to game the system. -The same way git can't have a simple counter as identifier for its commits as SVN does, we can't have consecutive identifiers for bugs. - -`git-bug` uses as identifier the hash of the first commit in the chain of commits of the bug. As this hash is ultimately computed with the content of the `CREATE` operation that includes title, message and a timestamp, it will be unique and prevent collision. - -The same way as git does, this hash is displayed truncated to a 7 characters string to a human user. Note that when specifying a bug id in a command, you can enter as few character as you want, as long as there is no ambiguity. If multiple bugs match your prefix, `git-bug` will complain and display the potential matches. - -## You can't rely on the time provided by other people (their clock might by off) for anything other than just display - -When in the context of a single bug, events are already ordered without the need of a timestamp. An `OperationPack` is an ordered array of operations. A chain of commits orders `OperationPack`s amongst each other. - -Now, to be able to order bugs by creation or last edition time, `git-bug` uses a [Lamport logical clock](https://en.wikipedia.org/wiki/Lamport_timestamps). A Lamport clock is a simple counter of events. When a new bug is created, its creation time will be the highest time value we are aware of plus one. This declares a causality in the event and allows to order bugs. - -When bugs are pushed/pulled to a git remote, it might happen that bugs get the same logical time. This means that they were created or edited concurrently. In this case, `git-bug` will use the timestamp as a second layer of sorting. While the timestamp might be incorrect due to a badly set clock, the drift in sorting is bounded by the first sorting using the logical clock. That means that if users synchronize their bugs regularly, the timestamp will rarely be used, and should still provide a kinda accurate sorting when needed. - -These clocks are stored in the chain of commits of each bug, as entries in each main git `Tree`. The first commit will have both a creation time and edit time clock, while a later commit will only have an edit time clock. A naive way could be to serialize the clock in a git `Blob` and reference it in the `Tree` as `"create-clock"` for example. The problem is that it would generate a lot of blobs that would need to be exchanged later for what is basically just a number. - -Instead, the clock value is serialized directly in the `Tree` entry name (for example: `"create-clock-4"`). As a Tree entry needs to reference something, we reference the git `Blob` with an empty content. As all of these entries will reference the same `Blob`, no network transfer is needed as long as you already have any bug in your repository. +Instead, we are going to use [Lamport logical clock](https://en.wikipedia.org/wiki/Lamport_timestamps). A Lamport clock is a simple counter of events. This logical clock gives us a partial ordering: +- if L1 < L2, L1 happened before L2 +- if L1 > L2, L1 happened after L2 +- if L1 == L2, we can't tell which happened first: it's a concurrent edition -Example of Tree of the first commit of a bug: +Each time we are appending something to the data (create an Entity, add an `Operation`) a logical time will be attached, with the highest time value we are aware of plus one. This declares a causality in the event and allows ordering entities and operations. + +The first commit of an Entity will have both a creation time and edit time clock, while a later commit will only have an edit time clock. These clocks value are serialized directly in the `Tree` entry name (for example: `"create-clock-4"`). As a Tree entry needs to reference something, we reference the git `Blob` with an empty content. As all of these entries will reference the same `Blob`, no network transfer is needed as long as you already have any entity in your repository. + +Example of Tree of the first commit of an entity: ``` 100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 create-clock-14 100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 edit-clock-137 100644 blob a020a85baa788e12699a4d83dd735578f0d78c75 ops -100644 blob a020a85baa788e12699a4d83dd735578f0d78c75 root ``` Note that both `"ops"` and `"root"` entry reference the same OperationPack as it's the first commit in the chain. - -Example of Tree of a later commit of a bug: +Example of Tree of a later commit of an entity: ``` 100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 edit-clock-154 100644 blob 68383346c1a9503f28eec888efd300e9fc179ca0 ops -100644 blob a020a85baa788e12699a4d83dd735578f0d78c75 root ``` -Note that the `"root"` entry still references the same root `OperationPack`. Also, all the clocks reference the same empty `Blob`. + +## Entities and Operation's ID + +`Operation`s can be referenced in the data model or by users with an identifier. This identifier is computed from the `Operation`'s data itself, with a hash of that data: `id = hash(json(op))` + +For entities, `git-bug` uses as identifier the hash of the first `Operation` of the entity, as serialized on disk. + +The same way as git does, this hash is displayed truncated to a 7 characters string to a human user. Note that when specifying a bug id in a command, you can enter as few characters as you want, as long as there is no ambiguity. If multiple entities match your prefix, `git-bug` will complain and display the potential matches. + +## Entities support conflict resolution + +Now that we have all that, we can finally merge our entities without conflict and collaborate with other users. Let's start by getting rid of two simple scenario: +- if we simply pull updates, we move forward our local reference. We get an update of our graph that we read as usual. +- if we push fast-forward updates, we move forward the remote reference and other users can update their reference as well. + +The tricky part happens when we have concurrent edition. If we pull updates while we have local changes (non-straightforward in git term), git-bug create the equivalent of a merge commit to merge both branches into a DAG. This DAG has a single root containing the first operation, but can have branches that get merged back into a single head pointed by the reference. + +As we don't have a purely linear series of commits/`Operations`s, we need a deterministic ordering to always apply operations in the same order. + +git-bug apply the following algorithm: +1. load and read all the commits and the associated `OperationPack`s +2. make sure that the Lamport clocks respect the DAG structure: a parent commit/`OperationPack` (that is, towards the head) cannot have a clock that is higher or equal than its direct child. If such a problem happen, the commit is refused/discarded. +3. individual `Operation`s are assembled together and ordered given the following priorities: + 1. the edition's lamport clock if not concurrent + 2. the lexicographic order of the `OperationPack`'s identifier + +Step 2 is providing and enforcing a constraint over the `Operation`'s logical clocks. What that means is that we inherit the implicit ordering given by the DAG. Later, logical clocks refine that ordering. This, coupled with signed commit has the nice property of limiting how this data model can be abused. + +Here is an example of such an ordering. We can see that: +- Lamport clocks respect the DAG structure +- the final `Operation` order is [A,B,C,D,E,F], according to those clocks + +![merge scenario 1](merge1.png) + +When we have a concurrent edition, we apply a secondary ordering based on the `OperationPack`'s identifier: + +![merge scenario 2](merge2.png) + +This secondary ordering doesn't carry much meaning, but it's unbiased and hard to abuse. \ No newline at end of file diff --git a/doc/operations.png b/doc/operations.png new file mode 100644 index 0000000000000000000000000000000000000000..79b6c8e7d248c835443c6b663a0cd34b3248da5b GIT binary patch literal 12842 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 literal 0 HcmV?d00001 diff --git a/entity/dag/entity.go b/entity/dag/entity.go index 0760cdec..f3229b7e 100644 --- a/entity/dag/entity.go +++ b/entity/dag/entity.go @@ -205,7 +205,7 @@ func read(def Definition, repo repository.ClockedRepo, resolver identity.Resolve if oppSlice[i].EditTime != oppSlice[j].EditTime { return oppSlice[i].EditTime < oppSlice[j].EditTime } - // We have equal EditTime, which means we have concurrent edition over different machines and we + // We have equal EditTime, which means we have concurrent edition over different machines, and we // can't tell which one came first. So, what now? We still need a total ordering and the most stable possible. // As a secondary ordering, we can order based on a hash of the serialized Operations in the // operationPack. It doesn't carry much meaning but it's unbiased and hard to abuse. diff --git a/query/parser_test.go b/query/parser_test.go index cef01ffd..f71a7b42 100644 --- a/query/parser_test.go +++ b/query/parser_test.go @@ -62,6 +62,10 @@ func TestParse(t *testing.T) { }}, {"sort:unknown", nil}, + {"label:\"foo:bar\"", &Query{ + Filters: Filters{Label: []string{"foo:bar"}}, + }}, + // KVV {`metadata:key:"https://www.example.com/"`, &Query{ Filters: Filters{Metadata: []StringPair{{"key", "https://www.example.com/"}}},