ignite-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Semen Boikov (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (IGNITE-3513) Cleanup worker is placed in the Thread's waiting queue using Thread.sleep method
Date Fri, 29 Jul 2016 08:22:20 GMT

    [ https://issues.apache.org/jira/browse/IGNITE-3513?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15398941#comment-15398941
] 

Semen Boikov commented on IGNITE-3513:
--------------------------------------

Eduard,

I did review, have few comments:
- in GridCacheTtlManagerNotificationTest you use internal event API, can this be changed to
use public API?
- could you please also add multithreaded test verifying fix, something similar to your GridCacheTtlManagerNotificationTest:
20 threads concurently do put, 10 threads use small expire time, 10 threads use large expire
time, when all puts are done expire event for small expire time should be received on time
- did you compare performance with/without your fix?

Thanks!

> Cleanup worker is placed in the Thread's waiting queue using Thread.sleep method
> --------------------------------------------------------------------------------
>
>                 Key: IGNITE-3513
>                 URL: https://issues.apache.org/jira/browse/IGNITE-3513
>             Project: Ignite
>          Issue Type: Bug
>    Affects Versions: 1.6
>            Reporter: Denis Magda
>            Assignee: Semen Boikov
>             Fix For: 1.7
>
>
> There is a bug in current implementation of {{GridCacheTtlManager#CleanupWorker}}.
> Refer to the implementation's code snippet and the details below.
> {code}
> EntryWrapper first = pendingEntries.firstx();
>  if (first != null) {
>    long waitTime = first.expireTime - U.currentTimeMillis();
>    if (waitTime > 0)
>       U.sleep(waitTime);
>  }
> {code}
> 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.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message