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

Dima Spivak updated ACCUMULO-4469:
----------------------------------
    Description: 
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 use the {{TableOperations.list()}} method and iterate through the 
{{SortedSet<String>}} it provides?

  was:
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 


> 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 use the {{TableOperations.list()}} method 
> and iterate through the {{SortedSet<String>}} it provides?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to