[ 
https://issues.apache.org/jira/browse/THRIFT-487?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

James E. King, III closed THRIFT-487.
-------------------------------------

> ThreadManagerTests::blockTest errors
> ------------------------------------
>
>                 Key: THRIFT-487
>                 URL: https://issues.apache.org/jira/browse/THRIFT-487
>             Project: Thrift
>          Issue Type: Bug
>          Components: Test Suite
>    Affects Versions: 0.1
>         Environment: Mac OS X 10.5.6, Xcode
>            Reporter: Rush Manbert
>            Assignee: James E. King, III
>             Fix For: 0.10.0
>
>         Attachments: Tests.cpp.patch, ThreadManagerTests.h.patch
>
>
> The ThreadManagerTests::blockTest()  method and its associated 
> ThreadManagerTests::BlockTask class have errors and race conditions that 
> cause frequent failures in the test. Some failure modes return to the caller, 
> but others just hang the test forever. The main problem is that the test 
> function relies on indirect indications that its tasks have reached certain 
> known conditions. The indications that it sees are actually caused by the 
> ThreadManager's Workers, and this results in a number of race conditions 
> between the test function and the BlockTasks.
> There are 2 patch files attached. One patches the ThreadManagerTests.h file 
> to fix the test. The other patches Tests.cpp so that it will run the 
> blockTest in a loop. In my experience, an unpatched version of  
> ThreadManagerTests.h generally fails within 100 iterations. After being 
> patched, the test will still fail unless a separate patch is applied to the 
> ThreadManager.cpp file. That patch is part of another issue that I haven't 
> entered yet (because it needs to refer to this one). When I know its number I 
> will add a comment. Anyway, if the patch is applied to ThreadManagerTests.h, 
> but not to ThreadManager.cpp, then the test will still fail, generally with 
> an assert, but sometimes with a Bus Error.
> Test Procedure:
> 1) Apply the Tests.cpp patch. This makes the thread-manager portion of the 
> test run ONLY the blockTest in an effectively infinite loop.
> 2) Run a make in lib/cpp in order to rebuild concurrency-test
> 3) Run concurrency test with the command line argument "thread-manager". This 
> will start the blockTest loop. It should fail in a fairly short time. 
> Repeated runs may fail different ways, including infinite hangs.
> 4) Apply the patch to ThreadManagerTests.h.
> 5) Run make in lib/cpp to rebuild concurrency-test
> 6) Run concurrency_test as before. It should probably run for a longer period 
> of time. I have seen it run for an hour or more after beng patched. 
> Eventually it should fail either with an assert in Monitor.cpp while trying 
> to destroy a pthread_mutex_t, or it will get a Bus Error because it tried to 
> execute invalid memory. I have also seen it hang forever.
> In order to resolve the remaining issues, a patch needs to be applied to 
> ThreadManager.cpp. I will add a comment about that as soon as the issue is 
> filed and the patch is available.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to