Dima Spivak created ACCUMULO-4469:
-------------------------------------
Summary: ConcurrentModificationException while running
MultiTable.xml node in Random Walk
Key: ACCUMULO-4469
URL: https://issues.apache.org/jira/browse/ACCUMULO-4469
Project: Accumulo
Issue Type: Bug
Components: test
Affects Versions: 1.7.2
Reporter: Dima Spivak
After the resolution of ACCUMULO-4467, I got back to playing with Random Walk
and had a failure caused by a {{ConcurrentModificationException}}:
{code}
23 01:03:04,316 [randomwalk.Framework] ERROR: Error during random walk
java.lang.Exception: Error running node MultiTable.xml
at org.apache.accumulo.test.randomwalk.Module.visit(Module.java:346)
at org.apache.accumulo.test.randomwalk.Framework.run(Framework.java:59)
at
org.apache.accumulo.test.randomwalk.Framework.main(Framework.java:119)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.accumulo.start.Main$2.run(Main.java:157)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
at java.util.ArrayList$Itr.next(ArrayList.java:831)
at
org.apache.accumulo.test.randomwalk.multitable.MultiTableFixture.tearDown(MultiTableFixture.java:64)
at org.apache.accumulo.test.randomwalk.Module.visit(Module.java:365)
at org.apache.accumulo.test.randomwalk.Module$1.call(Module.java:283)
at org.apache.accumulo.test.randomwalk.Module$1.call(Module.java:278)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at
org.apache.accumulo.fate.util.LoggingRunnable.run(LoggingRunnable.java:35)
... 1 more
{code}
[This section of
code|https://github.com/apache/accumulo/blob/master/test/src/main/java/org/apache/accumulo/test/randomwalk/multitable/MultiTableFixture.java#L61-L71]
seems to be at fault. In particular, it looks like we're getting the table
list, but then instead of doing a deep copy to a new {{ArrayList<String>}} from
which we choose tables to delete, we're looping through and deleting tables
while referring to the changing list, which has the effect of modifying it and
making Java unhappy. Am I missing something more complex or can I fix this one
myself by just doing the aforementioned deep copy of the table list? Or is a
better way to go to use the {{TableOperations.list()}} method and iterate
through the {{SortedSet<String>}} it provides? Looks like this pattern is used
in a few other
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)