1. 15 Oct, 2020 1 commit
  2. 07 Aug, 2020 1 commit
  3. 02 Jul, 2020 1 commit
  4. 02 Jan, 2020 1 commit
  5. 31 May, 2019 1 commit
    • Daniel Vrátil's avatar
      Automatic recovery from Multiple Merge Candidates error · 8f230d7d
      Daniel Vrátil authored
      Summary:
      Introduce a recovery codepath when Multiple Merge Candidates error
      occurs during Item merging. Since clients generally do not use
      merging, this really only happens during ItemSync. In such case we
      quitely delete all the conflicting items from the database and reschedule
      the collection sync. The next sync should then succeed and bring the
      collection into a consistent state.
      
      Note that this does not fix the Multiple Merge Candidates bug - it can
      still happen (and we still don't know how), but Akonadi should now be
      able to recover from it automatically without user intervention, thus
      making this issue less of a PITA.
      
      CCBUG: 338658
      
      Test Plan: Successfuly auto-recovered a broken collection on my setup.
      
      Reviewers: #kde_pim, dfaure
      
      Reviewed By: dfaure
      
      Subscribers: vkrause, dfaure, ngraham, asturmlechner, kde-pim
      
      Tags: #kde_pim
      
      Differential Revision: https://phabricator.kde.org/D21455
      8f230d7d
  6. 06 Nov, 2018 1 commit
  7. 06 Aug, 2018 1 commit
    • Daniel Vrátil's avatar
      Server: create new Collection in a single step · 686a198b
      Daniel Vrátil authored
      We can create a new Collection and append its mimetypes and attributes into
      the DB in a single step, so that the entire Collection is present in the
      Add change notification.
      This fixes a bug when new Collections wouldn't appear sometimes because they
      did not have any mimetype set in the notification and thus did not pass an
      ETM (or some other) mimetype filters.
      686a198b
  8. 14 Jul, 2018 2 commits
    • Daniel Vrátil's avatar
      Create (fake-able) DataStoreFactory · c6e334c4
      Daniel Vrátil authored
      Instead of "racing" whether a new thread in unit-tests calls
      FakeDataStore::self() or DataStore::self() first, we create a
      factory class that can be replaced by a fake factory during test
      initialization, avoiding any race conditions.
      c6e334c4
    • Daniel Vrátil's avatar
      Fix various clang-tidy warnings · ca6bb3c7
      Daniel Vrátil authored
      Removed Q_REQUIRED_RESULT from some functions where the return value
      optionally indicates success or its use is not mandated to be used.
      ca6bb3c7
  9. 11 Feb, 2018 1 commit
  10. 04 Jun, 2017 1 commit
  11. 29 May, 2017 1 commit
  12. 25 Feb, 2017 1 commit
  13. 14 Sep, 2016 1 commit
    • Daniel Vrátil's avatar
      Reduce collection statistics queries · c7944585
      Daniel Vrátil authored
      For certain cases we can now update the cached statistics in
      CollectionStatistics incrementally instead of invalidating the
      cache and querying DB to calculate it again. The calculation is
      rather expensive (one of the most expensive queries we have) and
      the time we spent recalculating the stats quickly adds up to secons.
      
      Currently we only support incremental stats update for flags change
      within a single collection and for appending new items which,
      especially in the second case, should notably reduce the amount of
      the super-heavy statistics queries.
      
      In any other case we currently fall-back to invalidating the cache
      and calculating the stats on demand.
      c7944585
  14. 08 Sep, 2016 1 commit
  15. 12 Jul, 2016 1 commit
  16. 26 Jun, 2015 1 commit
  17. 18 Jun, 2015 1 commit
  18. 31 May, 2015 1 commit
  19. 27 Aug, 2014 1 commit
  20. 10 Aug, 2014 3 commits
    • Daniel Vrátil's avatar
      MERGE: Only emit change notification if something has really changed · 94be488b
      Daniel Vrátil authored
      The MERGE request does not have to contain all data (like GID, for instance),
      so instead of overwriting existing GID with an empty GID, we ignore this
      "change". The same applies for flags: I noticed that when syncing a folder,
      KMail was eating about 50% CPU, because ETM generated dataChanged() for every
      item in the synced folder. It was because the Server assumed that non-incremental
      flags change must always generate a change, which is not true of course.
      94be488b
    • Christian Mollekopf's avatar
      Option to avoid db population in fakedatastore. · 418f84f4
      Christian Mollekopf authored
      This allows tests to avoid the population by the xml data so they can
      populate the store themselves.
      418f84f4
    • Daniel Vrátil's avatar
      Introduce some Fake classes to allow unit-testing of internal parts · b61af18f
      Daniel Vrátil authored
      Namely we have FakeDataStore, which records all calls and calls the actual
      implementation, FakeConnection, which allows injecting specific handlers and
      specifying commands to process as a QByteArray (so no need to use socket) and
      finally FakeAkonadiServer, which when started sets up the entire environment
      in /tmp, intializes and populates database and cleans up everything again when
      destroyed.
      b61af18f
  21. 31 Jul, 2014 1 commit
  22. 24 Jun, 2014 1 commit
    • Daniel Vrátil's avatar
      MERGE: Only emit change notification if something has really changed · f00d8e57
      Daniel Vrátil authored
      The MERGE request does not have to contain all data (like GID, for instance),
      so instead of overwriting existing GID with an empty GID, we ignore this
      "change". The same applies for flags: I noticed that when syncing a folder,
      KMail was eating about 50% CPU, because ETM generated dataChanged() for every
      item in the synced folder. It was because the Server assumed that non-incremental
      flags change must always generate a change, which is not true of course.
      f00d8e57
  23. 18 Jun, 2014 1 commit
  24. 12 May, 2014 1 commit
    • Daniel Vrátil's avatar
      Introduce some Fake classes to allow unit-testing of internal parts · 2fb1ad3b
      Daniel Vrátil authored
      Namely we have FakeDataStore, which records all calls and calls the actual
      implementation, FakeConnection, which allows injecting specific handlers and
      specifying commands to process as a QByteArray (so no need to use socket) and
      finally FakeAkonadiServer, which when started sets up the entire environment
      in /tmp, intializes and populates database and cleans up everything again when
      destroyed.
      2fb1ad3b