Skip to content
Snippets Groups Projects
  1. Sep 01, 2020
  2. Aug 24, 2020
  3. Aug 11, 2020
  4. Aug 10, 2020
  5. Jul 13, 2020
  6. Jul 10, 2020
  7. Jul 08, 2020
  8. Jul 03, 2020
  9. May 28, 2020
  10. May 27, 2020
    • Christoph Wurst's avatar
      Fix sync'ing with many known UIDs · b5dafce5
      Christoph Wurst authored
      
      When looking for changed and vanished UIDs we typically have to send the
      list of the known UIDs to the IMAP server to know what went missing
      meanwhile. With the number of UIDs sent, the size of the IMAP command
      grows. At some point the server will just refuse the command due to its
      size.
      To circumvent this scenario, this patch splits the sync process into
      new, changed and vanished. New is cheap in terms of data sent, so it
      stays untouched. Changed and vanished will now split the known UIDs list
      into chunks and retrieve partial sync results that way.
      
      Signed-off-by: default avatarChristoph Wurst <christoph@winzerhof-wurst.at>
      b5dafce5
  11. May 19, 2020
  12. Apr 28, 2020
    • Christoph Wurst's avatar
      Fix endless initial sync due to empty partial page · 6bdb866c
      Christoph Wurst authored
      
      The initial message cache sync estimates the UID range of the next
      message page so it can fetch messages efficiently. There was an
      uncovered edge case where the next page might not return any message,
      simple because there is a larger gap between the existing UIDs.
      Therefore the sync process was aborted as incomplete over and over as it
      could not make any progress and the number of known messages never
      reached the total number of messages on IMAP. This patch changes the
      logic so it retries the next page if the current one is empty. To break
      a possibly infinite recursion there is a check about reaching the
      highest UID reported by the server.
      
      Signed-off-by: default avatarChristoph Wurst <christoph@winzerhof-wurst.at>
      6bdb866c
  13. Apr 24, 2020
  14. Apr 16, 2020
  15. Apr 14, 2020
  16. Apr 07, 2020
    • Christoph Wurst's avatar
      Lower the memory footprint of the initial message cache sync · 72a5703e
      Christoph Wurst authored
      
      The initial message sync has to fetch potentially large amounts of data
      and insert that into the database. To work around limitations with sync
      requests triggered by web requests the process had already been made
      interruptable and resumable. This means we never insert all the data
      right away. Yet, the IMAP code fetched all UIDs before we capped it to a
      maximum number of results per sync attempt. Depending on the mailbox
      size this operation could require and allocate a lot of memory. On some
      setup with lower memory limits, the process was aborted by the web
      server due to a php memory exhaustion.
      
      This patch modifies the IMAP code to optimize the memory usage by
      limiting the amount of data that is fetched with each initial sync
      attempt. The algorithm works as follows.
      
      IMAP allows us to search in a range with a lower an upper bound UID.
      While we know the highest known UID from the current cache values, we
      can't derive the range for the next page from that as UIDs are not
      continuous but might have holes due to deleted messages. If we assume
      that messages of a mailbox are roughly distributed equally across the
      assigned UIDs we can guess the max UID for the next range.
      So we ask the server for min and max UIDs. The min or our known highest
      UID is always the lower bound. Then we can calculate the distribution
      rate from the min, max and number of messages and build the upper bound.
      On everage this will fetch about the expected number of messages. It
      could be more, but it could also be less. It shouldn't matter in most
      cases.
      
      Signed-off-by: default avatarChristoph Wurst <christoph@winzerhof-wurst.at>
      72a5703e
  17. Mar 26, 2020
  18. Mar 24, 2020
  19. Mar 23, 2020
  20. Mar 20, 2020
  21. Feb 26, 2020
  22. Feb 10, 2020
  23. Feb 06, 2020
  24. Jan 31, 2020
  25. Jan 08, 2020
  26. Oct 08, 2019
  27. Oct 07, 2019
  28. Oct 01, 2019
  29. Sep 27, 2019
  30. Sep 26, 2019
  31. Sep 06, 2019
  32. Sep 05, 2019
Loading