Uploaded image for project: 'Ignite'
  1. Ignite
  2. IGNITE-3513

Cleanup worker is placed in the Thread's waiting queue using Thread.sleep method

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.6
    • Fix Version/s: 1.7
    • Component/s: None
    • Labels:
      None

      Description

      There is a bug in current implementation of GridCacheTtlManager#CleanupWorker.

      Refer to the implementation's code snippet and the details below.

      EntryWrapper first = pendingEntries.firstx();
      
       if (first != null) {
         long waitTime = first.expireTime - U.currentTimeMillis();
      
         if (waitTime > 0)
            U.sleep(waitTime);
       }
      

      1. Put first item with TTL = 1 hour. CleanupWorker will go to sleep for 1 hour.

      2. Put second item with TTL = 1 minute. Since
      CleanupWorker's thread sleeps now, second item will not be expired at the time.

      NOTE: This scenario is easily to reproducible if first and second items are put into cache asynchronously. If try to put them in same thread one-by-one expiration may work fine.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                sboikov Semen Boikov
                Reporter:
                dmagda Denis Magda
              • Votes:
                0 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: