Diffusion Sink 46313049ac01

Separate UIDs and Revisions in main databases

Authored by rnicole on Aug 22 2018, 12:16 PM.

Description

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

Details

Committed
cmollekopfAug 22 2018, 12:28 PM
Differential Revision
D14974: Separate UIDs and Revisions in main databases
Parents
R9:af91a18748b9: Caldav test cleanup
Branches
Unknown
Tags
Unknown