1. 01 Apr, 2017 1 commit
  2. 27 Feb, 2017 1 commit
  3. 25 Feb, 2017 1 commit
  4. 24 Feb, 2017 1 commit
    • Daniel Vrátil's avatar
      Fix crash when Connection is closed while ItemRetriever is running · 1593c17d
      Daniel Vrátil authored
      ItemRetriever::exec() runs a nested QEventLoop. If the parent
      Connection is terminated while the event loop is running, the
      delayed AkThread::quit() invocation is executed and the thread
      is destroyed, while technically there is still execution going
      on. To workaround that issue we don't destroy the thread in
      Connection::quit() if we detect a nested QEventLoop but instead
      we just notify the event loop to quit and destroy the thread
      later when execution returns back to ItemRetriever::slotNewData().
      
      This fixes a crash in QPSQLQuery, which was dereferencing a
      QPSQLDriver after the driver has been deleted as the thread was
      destroyed and avoids more of random crashes due to the Connection
      being virtually deleted from its own nested event loop.
      
      BUG: 374734
      FIXED-IN: 5.4.3
      1593c17d
  5. 05 Feb, 2017 1 commit
    • Daniel Vrátil's avatar
      Log DB connections, transactions and queries in StorageDebugger · 287ad0c6
      Daniel Vrátil authored
      We can now see which connections are holding transactions opened
      in parallel and which queries are being executed in each transaction
      to make debugging transaction deadlocks and timeouts easier.
      
      This information is exported on DBus via the
      org.freedesktop.Akonadi.StorageDebugger interface.
      287ad0c6
  6. 23 Jan, 2017 1 commit
  7. 13 Jan, 2017 1 commit
  8. 08 Jan, 2017 1 commit
  9. 06 Jan, 2017 1 commit
  10. 04 Jan, 2017 1 commit
  11. 02 Jan, 2017 1 commit
  12. 01 Jan, 2017 1 commit
  13. 28 Dec, 2016 1 commit
  14. 21 Dec, 2016 1 commit
  15. 17 Dec, 2016 1 commit
  16. 13 Oct, 2016 1 commit
  17. 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
  18. 08 Sep, 2016 3 commits
  19. 15 Aug, 2016 1 commit
    • Daniel Vrátil's avatar
      Implement notification subscription management via Protocol · f257797f
      Daniel Vrátil authored
      NotificationManager now lives in separete thread. It creates
      NotificationSubscriber object for each new connection on NotificationServer.
      Each connection does not have its own thread as in case of Connection,
      because the communication there is minimal and we don't mind if the
      NotificationManager thread gets blocked for a short moment.
      
      Each Subscriber keeps state of the subscription. When a notification is
      delivered to NotificationManager, it will pass them to all subscribers
      which will then decide whether they accept the notification and eventually
      send it to subscribed client.
      
      Currently this breaks notification and subscriber debugging because we
      completely removed the DBus introspection. The plan is to introduce a
      subscription change notification (a type of Protocol::ChangeNotification)
      that clients like AkonadiConsole could subscribe to to get information about
      new or removed subscribers and their subscription state.
      f257797f
  20. 23 Apr, 2016 1 commit
  21. 17 Dec, 2015 1 commit
    • P. Christeas's avatar
      Release idle connections to the database · 289c775d
      P. Christeas authored
      For Postgres, each DB client connection corresponds to a process
      being spawn and kept alive. May even mean some SHM allocated for
      it, on pre-9.3 versions of postgres.
      On a system (desktop) with many akonadi resources, we may end up
      occupying most/all available Postgres backends just keeping idle
      agents.
      This patch tries to address that, by releasing the DB connection
      for those idle agents. This comes to the expense of some wake-up
      latency (connect, setup db and prepare queries again). It is not
      limited to QPSQL DBs yet, as to explore its effects on the other
      storage engines.
      
      Note that I had to change the `DataStore::database()` API from a
      const to a regular method, because it would wake-up a connection.
      
      With the help of Daniel Vrátil <dvratil@redhat.com> , who showed
      me the way.
      
      REVIEW: 121120
      289c775d
  22. 14 Oct, 2015 1 commit
  23. 16 Sep, 2015 1 commit
  24. 05 Sep, 2015 1 commit
  25. 21 Aug, 2015 1 commit
    • Daniel Vrátil's avatar
      Refactor external payload parts handling and implement levelled cache · cb24efd0
      Daniel Vrátil authored
      External payload files are now stored in levelled folder hierarchy. Currently we
      implement one level of indirection using modulo 100 of Part.id(). Using modulo
      100 ensures even distribution of files into the subdirectories. The migration is
      implemented in StorageJanitor, so it can be triggered manually by running
      akonadictl fsck.
      
      Handling of access to external files has been refactored to ExternalPartStorage
      class. This class implements access to the legacy flat-cache hierarchy as well
      as simple transactional system. The transactional system allows us to rollback
      or commit changes in the external files: file created in the transaction are
      deleted when the transaction is rolled back, and file deletion is delayed until
      the transaction is committed. This allows us to control the files from outside
      PartStreamer and tie it to committing of database transaction, which is more
      likely to fail than the EPS transaction. This should prevent us from losing
      cached parts when error occurs during update.
      
      BUG: 338402
      FIXED-IN: 15.12.0
      cb24efd0
  26. 16 Aug, 2015 1 commit
  27. 15 Aug, 2015 1 commit
  28. 21 Jul, 2015 1 commit
  29. 29 Jun, 2015 1 commit
  30. 26 Jun, 2015 1 commit
  31. 23 Jun, 2015 1 commit
  32. 18 Jun, 2015 1 commit
  33. 04 Jun, 2015 1 commit
  34. 29 May, 2015 1 commit
  35. 22 May, 2015 1 commit
  36. 04 May, 2015 1 commit
  37. 19 Mar, 2015 1 commit
  38. 27 Aug, 2014 1 commit