1. 19 Jun, 2020 1 commit
  2. 10 Apr, 2020 1 commit
  3. 17 Dec, 2016 1 commit
  4. 13 Oct, 2016 1 commit
  5. 30 May, 2016 1 commit
    • Daniel Vrátil's avatar
      Introduce thread-safe Entity::retrieveByNameOrCreate() · 3b608051
      Daniel Vrátil authored
      During DB initialization when multiple resources try to synchronize
      and insert first item, the mimetypes, parttypes and other similar
      tables are empty and the entries need to be created. This presents
      a race condition when multiple threads try to create the new entry
      at the same time - one of them is succesfull, the others usually
      abort, which leads to the resource failing the synchronization.
      
      retrieveByNameOrCreate() will try to retrieve the item from cache
      or DB first. If it does not get any result it tries to acquire a
      lock. If the thread gets a lock it inserts the new entry into DB
      and cache. Otherwise the thread just waits for the lock (i.e. until
      the thread that acquired the lock inserts the new entity) and then
      retrieves the entity from the cache.
      
      This isn't really a common situation, which would happen during normal
      usage of Akonadi. We however see it quite often during unit-test
      initialization when all three Knut resources start pushing their
      data into Akonadi at the same time and trigger this race condition.
      3b608051
  6. 18 Jun, 2015 1 commit
  7. 29 May, 2015 1 commit
  8. 19 Mar, 2015 1 commit
  9. 27 Aug, 2014 1 commit
  10. 31 Jul, 2014 1 commit
  11. 24 Apr, 2014 2 commits
    • Christian Mollekopf's avatar
      Implement MERGE command handler · 2baae8c4
      Christian Mollekopf authored
      MERGE command allows merging new item into an existing one based on
      GID and/or RID match. If no such item exists a new one is created.
      If it exists, the new item is merged into the existing one, overwriting
      conflicting flags, and parts.
      
      Merging is restricted to parent collection and mime type, to minimize
      potential RID/GID conflicts, since they are not guaranteed to be unique.
      
      Syntax of MERGE command is equivalent to syntax of X-AKAPPEND command,
      except for the command ("MERGE") is followed by parenthesized list of
      attributes to merge by (currently supported values are "REMOTEID" and
      "GID").
      
      Implementation-wise, Merge handler is a subclass of AkAppend handler,
      which allows reusing all the existing code for insertion of a new item
      (in case no candidate for merging is found) and only implements merging.
      
      Conflicts:
      	CMakeLists.txt
      2baae8c4
    • Daniel Vrátil's avatar
      Implement MERGE command handler · f212406e
      Daniel Vrátil authored
      MERGE command allows merging new item into an existing one based on
      GID and/or RID match. If no such item exists a new one is created.
      If it exists, the new item is merged into the existing one, overwriting
      conflicting flags, and parts.
      
      Merging is restricted to parent collection and mime type, to minimize
      potential RID/GID conflicts, since they are not guaranteed to be unique.
      
      Syntax of MERGE command is equivalent to syntax of X-AKAPPEND command,
      except for the command ("MERGE") is followed by parenthesized list of
      attributes to merge by (currently supported values are "REMOTEID" and
      "GID").
      
      Implementation-wise, Merge handler is a subclass of AkAppend handler,
      which allows reusing all the existing code for insertion of a new item
      (in case no candidate for merging is found) and only implements merging.
      f212406e
  12. 17 Feb, 2014 1 commit
    • Daniel Vrátil's avatar
      Wrap all classes in /server to Akonadi::Server namespace · c90b946d
      Daniel Vrátil authored
      Since we now support loading of plugins, having only Akonadi namespace
      might not be enough, as plugins can easily clash (like Akonadi::TagAttribute
      from Akonadi and from kdepimlibs). It will also make it easier to differentiate
      classes once both server and client libs are in the same repo in KF5.
      c90b946d
  13. 02 Aug, 2013 3 commits