curator-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "David Kesler (JIRA)" <>
Subject [jira] [Created] (CURATOR-89) ChildReaper only checks for children once
Date Thu, 20 Feb 2014 19:33:22 GMT
David Kesler created CURATOR-89:

             Summary: ChildReaper only checks for children once
                 Key: CURATOR-89
             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.

This message was sent by Atlassian JIRA

View raw message