diff options
author | Rémi Nicole <nicole@kolabsystems.com> | 2018-08-22 14:16:59 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-08-22 14:28:51 +0200 |
commit | 46313049ac01a3007ef60bdc937442945355a38d (patch) | |
tree | 56ce0cd679367a60ba3a706ac4d207bc9cc82230 /tests/dbwriter.cpp | |
parent | af91a18748b91f4a4fc0d83247561371d376bec5 (diff) | |
download | sink-46313049ac01a3007ef60bdc937442945355a38d.tar.gz sink-46313049ac01a3007ef60bdc937442945355a38d.zip |
Separate UIDs and Revisions in main databases
Summary:
- Change revision type from `qint64` to `size_t` for LMDB in a couple of places (LMDB supports `unsigned int` or `size_t` which are `long unsigned int` on my machine)
- Better support for database flags (duplicate, integer keys, integer values for now but is extensible)
- Main databases' keys are now revisions
- Some databases switched to integer keys databases:
- Main databases
- the revision to uid mapping database
- the revision to entity type mapping database
- Refactor the entity type's `typeDatabases` method (if in the future we need to change the main databases' flags again)
- New uid to revision mapping database (`uidsToRevisions`):
- Stores all revisions (not uid to latest revision) because we need it for cleaning old revisions
- Flags are: duplicates + integer values (so findLatest finds the latest revision for the given uid)
~~Problems to fix before merging:~~
All Fixed!
- ~~Sometimes Sink can't read what has just been written to the database (maybe because of transactions race conditions)~~
- ~~Most of the times, this results in Sink not able to find the uid for a given revision by reading the `revisions` database~~
- ~~`pipelinetest`'s `testModifyWithConflict` fails because the local changes are overridden~~
~~The first problem prevents me from running benchmarks~~
Reviewers: cmollekopf
Tags: #sink
Differential Revision: https://phabricator.kde.org/D14974
Diffstat (limited to 'tests/dbwriter.cpp')
-rw-r--r-- | tests/dbwriter.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/tests/dbwriter.cpp b/tests/dbwriter.cpp index 3045eac..a25faec 100644 --- a/tests/dbwriter.cpp +++ b/tests/dbwriter.cpp | |||
@@ -29,14 +29,14 @@ int main(int argc, char *argv[]) | |||
29 | qWarning() << "No valid transaction"; | 29 | qWarning() << "No valid transaction"; |
30 | return -1; | 30 | return -1; |
31 | } | 31 | } |
32 | transaction.openDatabase("a", nullptr, false).write(QByteArray::number(i), "a"); | 32 | transaction.openDatabase("a", nullptr, 0).write(QByteArray::number(i), "a"); |
33 | transaction.openDatabase("b", nullptr, false).write(QByteArray::number(i), "b"); | 33 | transaction.openDatabase("b", nullptr, 0).write(QByteArray::number(i), "b"); |
34 | transaction.openDatabase("c", nullptr, false).write(QByteArray::number(i), "c"); | 34 | transaction.openDatabase("c", nullptr, 0).write(QByteArray::number(i), "c"); |
35 | transaction.openDatabase("p", nullptr, false).write(QByteArray::number(i), "c"); | 35 | transaction.openDatabase("p", nullptr, 0).write(QByteArray::number(i), "c"); |
36 | transaction.openDatabase("q", nullptr, false).write(QByteArray::number(i), "c"); | 36 | transaction.openDatabase("q", nullptr, 0).write(QByteArray::number(i), "c"); |
37 | if (i > (count/2)) { | 37 | if (i > (count/2)) { |
38 | for (int d = 0; d < 40; d++) { | 38 | for (int d = 0; d < 40; d++) { |
39 | transaction.openDatabase("db" + QByteArray::number(d), nullptr, false).write(QByteArray::number(i), "a"); | 39 | transaction.openDatabase("db" + QByteArray::number(d), nullptr, 0).write(QByteArray::number(i), "a"); |
40 | } | 40 | } |
41 | } | 41 | } |
42 | if ((i % 1000) == 0) { | 42 | if ((i % 1000) == 0) { |