Uploaded image for project: 'JBoss Enterprise Application Platform'
  1. JBoss Enterprise Application Platform
  2. JBEAP-22392

[GSS](7.3.z) JBEAP-22175 - WFLY-7115 - KeyAffinityService blocks Infinispan's topology change thread - Fix clustering issues during merge

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • 7.3.10.CR1, 7.3.10.GA
    • 7.3.9.GA
    • Clustering
    • None

    Description

      Infinispan's default KeyAffinityService implementation has a number of problems:

      1. Its topology change listener is blocking. This can cause deadlocks in recent Infinispan releases, which requires listeners to be non-blocking.
      2. Its getKeyForAddress(...) method throws an ISE if the target address does not own any segments. This can be the case if state transfer fails, or if a node is configured with zero capacity. We don't currently handle this IAE. Ideally, this condition should generate a random key.
      3. It uses a single worker thread to generate keys for interested members. Consequently, it must offer keys with a timeout, lest it starve generation of keys for other members. This causes results in overly high CPU utilization when all queues are full.
      4. getKeyForAddress(...) blocks during topology changes, which ultimately blocks request threads while Infinispan repopulates its key queues.
      5. It flushes it key queues unnecessarily during intermediate state transfer phases.

      In order to fix some of these issues, we will copy Infinispan's implementation into EAP 7.3.x, and patch as needed.
      7.4.x and upstream will use a completely new implementation optimized for our use case.

      Attachments

        Issue Links

          Activity

            People

              rhn-support-bmaxwell Brad Maxwell
              rhn-support-bmaxwell Brad Maxwell
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: