You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@river.apache.org by "Jukka Zitting (JIRA)" <ji...@apache.org> on 2009/01/27 16:58:59 UTC
[jira] Updated: (RIVER-258) JoinManager - race when terminate is
called after attribute mutator methods (ex. setAttributes)
[ https://issues.apache.org/jira/browse/RIVER-258?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jukka Zitting updated RIVER-258:
--------------------------------
Fix Version/s: (was: AR2)
> JoinManager - race when terminate is called after attribute mutator methods (ex. setAttributes)
> -----------------------------------------------------------------------------------------------
>
> Key: RIVER-258
> URL: https://issues.apache.org/jira/browse/RIVER-258
> Project: River
> Issue Type: Bug
> Components: net_jini_lookup
> Affects Versions: jtsk_2.0
> Reporter: Jim Hurley
> Assignee: Brian Murphy
> Priority: Minor
>
> Bugtraq ID [4953710|http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4953710]
> Calling the setAttributes and terminate methods in quick succession on a
> JoinManager can result in UnknownLeaseExceptions thrown by lookup services. The
> high-level sequence of events appears to be:
> Thread 1 Thread 2
> -------- --------
> JM.setAttributes
> add SetAttributesTask to task list
> queue ProxyRegTask in taskMgr
> run ProxyRegTask
> run SetAttributesTask
> JM.terminate
> terminate pending tasks
> cancel service leases
> call srvcReg.setAttributes
> Although this does not cause any serious problems (since we're terminating the
> service registration, we don't care about the failure of delayed setAttributes
> calls), an exception trace is printed since the exception is logged at
> Level.INFO.
> Comments
> ----------------------
> The original synopsis of this bug when it was filed in November of 2003 was,
> "JoinMgr.setAttributes followed by terminate results in UnknownLeaseException".
> As indicated in the description, an UnknownLeaseException was observed
> when invoking terminate immediately after setAttributes when running the
> following version of JoinManager:
> JoinManager.java@@/main/mpw_reggie_capacity/1
> That version of JoinManager is pre-Porter (ie. pre-2.1), and a number of
> bugs have been addressed since that version that may have affected this
> bug.
> That said, upon investigating this bug, a race was indeed observed
> between setAttributes and terminate, but it did not manifest itself in
> only an UnknownLeaseException. Additionally, it was not just a race between
> setAttributes and terminate; that is, the race occurs between any of the
> attribute mutator methods (addAttributes, setAttributes, modifyAttributes)
> and terminate (this is why the synopsis was changed to be more inclusive).
> With the injection of time delays in the appropriate places in JoinManager,
> one can cause the occurrence of not only UnknownLeaseException, but also
> the following exception combination:
> java.rmi.UnmarshalException: exception unmarshalling response;
> nested exception is: java.io.IOException: request I/O interrupted
> ....... together with .........
> WARNING: Task.run exception
> java.lang.IllegalStateException: trying to add task to stopped WakeupManager
> at com.sun.jini.thread.WakeupManager.schedule(WakeupManager.java:433)
> at com.sun.jini.thread.WakeupManager.schedule(WakeupManager.java:418)
> at com.sun.jini.thread.RetryTask.run(RetryTask.java:146)
> at com.sun.jini.thread.TaskManager$TaskThread.run(TaskManager.java:331)
> An UnknownLeaseException occurs when the timing is such that the service lease
> is cancelled between the time the SetAttributesTask begins running and the
> remote call to srvcRegistration.setAttributes() is made. To cause the sort of
> timing that would result in an UnknownLeaseException (without the fix to
> this bug), one can do the following:
> 1. Place a 5 second delay in JoinManager.setAttributes, just prior to the call
> to srvcRegistration.setAttributes(attSet);
> 2. Place a 3 second delay in JoinManager.terminate, just prior to the call to
> terminateTaskMgr
> 3. Use the instrumented JoinManager to register a service with a lookup service
> and then call setAttributes() (or addAttributes() or modifyAttributes())
> immediately followed by terminate().
> The delay before terminateTaskMgr() allows time for the SetAttributesTask to be
> queued before the task manager is terminated. And the difference in the values
> of the delays (the delay before setAttributes must be larger than the delay
> before terminateTaskMgr) allows the leases to be cancelled before the remote
> call (srvcRegistration.setAttributes) is made; which then results in an
> UnknownLeaseException from the lookup service.
> See test:
> /vob/qa/src/com/sun/jini/test/impl/joinmanager/RaceAttrsVsTerminateULE.java
> With respect to the other race scenario, an IllegalStateException occurs when
> the timing is such that the termination of the TaskManager causes the
> interruption of the thread that contains the call to
> srvcRegistration.setAttributes(). This causes an UnmarshalException
> in the ProxyReg.tryOnce() method, which causes a call to the method
> ProxyReg.stopTrying(). The method stopTrying() then attempts to queue a
> retry of the SetAttributesTask with the WakeupManager, which causes an
> IllegalStateException because the termination of the TaskManager has caused
> the WakeupManager to be terminated as well. To cause the sort of
> timing that would result in an IllegalStateException (without the fix to
> this bug), one can do the following:
> 1. Place a 5 second delay in JoinManager.setAttributes, just prior to the call
> to srvcRegistration.setAttributes(attSet);
> 2. Use the instrumented JoinManager to register a service with a lookup service
> and then call setAttributes() (or addAttributes() or modifyAttributes()),
> delay 5 seconds (probably best to delay the same amount of time as in
> the JoinManager), then call terminate().
> See test:
> /vob/qa/src/com/sun/jini/test/impl/joinmanager/RaceAttrsVsTerminateISE.java
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.