[
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)