curator-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "David Kesler (JIRA)" <>
Subject [jira] [Commented] (CURATOR-89) ChildReaper only checks for children once
Date Fri, 21 Feb 2014 03:35:19 GMT


David Kesler commented on CURATOR-89:

I can provide a patch that replaces the ClosableScheduledExecutorService with a standard one
in ChildReaper, but I'm not sure if that's going to have any negative repercussions on closing
the reaper itself.  If you want the ClosableScheduledExecutorService itself fixed I can look
into it, but I'm not sure what the fix is there.  I just confirmed it was the problem by routing
around it.  

> ChildReaper only checks for children once
> -----------------------------------------
>                 Key: CURATOR-89
>                 URL:
>             Project: Apache Curator
>          Issue Type: Bug
>            Reporter: David Kesler
>            Assignee: Jordan Zimmerman
> I've created a child reaper for a particular path underneath which have a bunch of lock
paths that I want cleaned up periodically.  The problem is that I'm seeing ChildReaper.doWork
only get called once.  Thus newly added children nodes never get picked up by the child reaper
and passed to the actual reaper.
> The problem appears to be the fact that an InternalFutureTask is being submitted to the
ScheduledExecutorService through the ClosableScheduledExecutorService that ChildReaper uses.
 Putting a breakpoint on java's and FutureTask.runAndReset, it looks like what
happens is that when the InternalFutureTask gets submitted to the ScheduledExecutorService,
another task gets created.  THAT task wraps the InternalFutureTask that the ClosableScheduledExecutorService
submitted to the real executor and correctly gets executed repeatedly via its runAndReset
method.  However when the outermost task executes it calls .run on the wrapped InternalFutureTask.
 The first time the InternalFutureTask itself is executed, the state of it's Sync field gets
set to RAN (2).  Then every future invocation of run on the InternaFutureTask is ignored because
the task has already run.
> The Reaper itself doesn't seem to have a problem because it's manually rescheduling the
task after every invocation rather than using scheduleWithFixedInterval.
> I don't know if it makes a difference, but I'm using the default scheduled executor for
ChildReaper.  I'm using java 6 and tried both curator 2.1.0 and 2.4.0

This message was sent by Atlassian JIRA

View raw message