commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Kalén (JIRA) <j...@apache.org>
Subject [jira] Commented: (SANDBOX-231) Failing Tests
Date Thu, 24 Jul 2008 16:51:31 GMT

    [ https://issues.apache.org/jira/browse/SANDBOX-231?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12616530#action_12616530
] 

Martin Kalén commented on SANDBOX-231:
--------------------------------------

Thank you for your feedback.

The synchronization target used for the currentTimeMillis field indeed looks like a bug in
the original code. Changing this to ThreadClockImpl.class in the getUUIDTime does however
not change the fact that Thread.start() can no longer be performed on a thread where the run()
method has already completed (same IllegalStateExceptions, see the technote and recent JavaDoc
for more information).

I agree with Sebb that the workerSuspended needs to be made volatile and will attach a new
patch without this flaw.

However, I do not (yet?) see why the pattern from the technote using wait+notify as a substitution
for suspend+resume (or like the original code: complete/end+re-start) is wrong. wait() and
notify() both work on the Object's monitor and are, as far as I understand, intended for cross-thread
communication on instances rather than explicit threads.

The way I read the technote Thread.interrupt() is recommended as a substitute for Thread.stop
on a thread that waits for long periods ("e.g., for input"). I also read the original code
as more of suspend/resume than explicit stop/start. The start() call seemed to me as just
a substitute for re-run/resume, therefore I tried to follow the recommended patter for suspend/resume.

All feedback and/or corrections are welcome.

> Failing Tests
> -------------
>
>                 Key: SANDBOX-231
>                 URL: https://issues.apache.org/jira/browse/SANDBOX-231
>             Project: Commons Sandbox
>          Issue Type: Bug
>          Components: Id
>            Reporter: Donal Murtagh
>            Priority: Critical
>         Attachments: ThreadClockImpl_jdk6.patch
>
>
> I downloaded the HEAD of SVN, ran the tests and I get three failures (appended to end
of message). Is there a more stable version that I can download/build?
> org.apache.commons.id.uuid.state.NodeTest
> testNodebyteArray(org.apache.commons.id.uuid.state.NodeTest)
> java.lang.IllegalThreadStateException
> 	at java.lang.Thread.start(Thread.java:571)
> 	at org.apache.commons.id.uuid.clock.ThreadClockImpl.getUUIDTime(ThreadClockImpl.java:174)
> 	at org.apache.commons.id.uuid.state.Node.getUUIDTime(Node.java:116)
> 	at org.apache.commons.id.uuid.state.NodeTest.testNodebyteArray(NodeTest.java:63)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:585)
> 	at junit.framework.TestCase.runTest(TestCase.java:154)
> 	at junit.framework.TestCase.runBare(TestCase.java:127)
> 	at junit.framework.TestResult$1.protect(TestResult.java:106)
> 	at junit.framework.TestResult.runProtected(TestResult.java:124)
> 	at junit.framework.TestResult.run(TestResult.java:109)
> 	at junit.framework.TestCase.run(TestCase.java:118)
> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
> 	at junit.framework.TestSuite.run(TestSuite.java:203)
> 	at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
> 	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
> testGetUUIDTime(org.apache.commons.id.uuid.state.NodeTest)
> java.lang.IllegalThreadStateException
> 	at java.lang.Thread.start(Thread.java:571)
> 	at org.apache.commons.id.uuid.clock.ThreadClockImpl.getUUIDTime(ThreadClockImpl.java:174)
> 	at org.apache.commons.id.uuid.state.Node.getUUIDTime(Node.java:116)
> 	at org.apache.commons.id.uuid.state.NodeTest.testGetUUIDTime(NodeTest.java:104)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:585)
> 	at junit.framework.TestCase.runTest(TestCase.java:154)
> 	at junit.framework.TestCase.runBare(TestCase.java:127)
> 	at junit.framework.TestResult$1.protect(TestResult.java:106)
> 	at junit.framework.TestResult.runProtected(TestResult.java:124)
> 	at junit.framework.TestResult.run(TestResult.java:109)
> 	at junit.framework.TestCase.run(TestCase.java:118)
> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
> 	at junit.framework.TestSuite.run(TestSuite.java:203)
> 	at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
> 	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
> testGetLastTimestamp(org.apache.commons.id.uuid.state.NodeTest)
> java.lang.IllegalThreadStateException
> 	at java.lang.Thread.start(Thread.java:571)
> 	at org.apache.commons.id.uuid.clock.ThreadClockImpl.getUUIDTime(ThreadClockImpl.java:174)
> 	at org.apache.commons.id.uuid.state.Node.getUUIDTime(Node.java:116)
> 	at org.apache.commons.id.uuid.state.NodeTest.testGetLastTimestamp(NodeTest.java:129)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:585)
> 	at junit.framework.TestCase.runTest(TestCase.java:154)
> 	at junit.framework.TestCase.runBare(TestCase.java:127)
> 	at junit.framework.TestResult$1.protect(TestResult.java:106)
> 	at junit.framework.TestResult.runProtected(TestResult.java:124)
> 	at junit.framework.TestResult.run(TestResult.java:109)
> 	at junit.framework.TestCase.run(TestCase.java:118)
> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
> 	at junit.framework.TestSuite.run(TestSuite.java:203)
> 	at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
> 	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message