Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-67019

Asynchronous cache replication in Jira Data Center

    XMLWordPrintable

Details

    • We collect Jira feedback from various sources, and we evaluate what we've collected when planning our product roadmap. To understand how this piece of feedback will be reviewed, see our Implementation of New Features Policy.

    Description

      Problem Definition

      Caches in Jira Data Center are synchronous and have no guaranteed delivery. Synchronous replication may cause problems with scalability, as each change in cache needs to be replicated to other nodes. It means each change is blocking other actions for the caller until completed. Second important thing is that replication event is not guaranteed to be delivered. If something goes wrong, there is an exception when replicating - the operation will not be redone and cluster may be inconsistent, until cache will be refreshed. 

      Suggested Solution

      Caches in Data Center should be replicated asynchronously (async) using persistent layer as a separation of HTTP thread and RMI replication mechanism.

      • HTTP thread will be responsible only for persisting replication events to queues and replication itself should happen asynchronously to that thread.
      • The order of replication events coming from one HTTP request should be preserved.
      • Replication event is removed from queue only when there is confirmation of successful replication to other node.
      • If replication can not be done, replication event will remain in queue, waiting for possibility to replicate

      Attachments

        Issue Links

          Activity

            People

              mswinarski Maciej Swinarski (Inactive)
              morzechowski Michal Orzechowski (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              12 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: