[ 
https://issues.apache.org/jira/browse/CASSANDRA-18320?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17699819#comment-17699819
 ] 

David Capwell commented on CASSANDRA-18320:
-------------------------------------------

so far simulator looks stable with my patch, which is just

{code}
diff --git a/src/java/org/apache/cassandra/service/snapshot/SnapshotLoader.java 
b/src/java/org/apache/cassandra/service/snapshot/SnapshotLoader.java
index 532ea79f1b..37d286d721 100644
--- a/src/java/org/apache/cassandra/service/snapshot/SnapshotLoader.java
+++ b/src/java/org/apache/cassandra/service/snapshot/SnapshotLoader.java
@@ -23,7 +23,6 @@ import java.nio.file.FileVisitResult;
 import java.nio.file.Files;
 import java.nio.file.NoSuchFileException;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.nio.file.SimpleFileVisitor;
 import java.nio.file.attribute.BasicFileAttributes;
 import java.util.Arrays;
@@ -66,7 +65,7 @@ public class SnapshotLoader

     public SnapshotLoader(String[] dataDirectories)
     {
-        
this(Arrays.stream(dataDirectories).map(Paths::get).collect(Collectors.toList()));
+        
this(Arrays.stream(dataDirectories).map(File::new).map(File::toPath).collect(Collectors.toList()));
     }

     public SnapshotLoader(Collection<Path> dataDirs)
{code}

This looks like Paths.get is unsafe as its defined as

{code}
public static Path get(String first, String... more) {
        return FileSystems.getDefault().getPath(first, more);
    }
{code}

Since we don't override the default file system (its app ClassLoader and final) 
all usage will produce a Path that has a different FileSystem than File does; 
this implies that mixing Path and File may not be safe in the context of 
Simulator...

Ill talk to [~benedict] about this when he gets back

> simulationTest is flaky 
> ------------------------
>
>                 Key: CASSANDRA-18320
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-18320
>             Project: Cassandra
>          Issue Type: Bug
>          Components: CI
>            Reporter: Ekaterina Dimitrova
>            Assignee: David Capwell
>            Priority: Normal
>             Fix For: 4.1.x, 5.x
>
>
> {code}
> java.io.UncheckedIOException
>       at 
> org.apache.cassandra.io.util.PathUtils.propagateUnchecked(PathUtils.java:831)
>       at 
> org.apache.cassandra.io.util.PathUtils.propagateUnchecked(PathUtils.java:816)
>       at org.apache.cassandra.io.util.PathUtils.delete(PathUtils.java:257)
>       at 
> org.apache.cassandra.io.util.PathUtils.deleteRecursive(PathUtils.java:381)
>       at 
> java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
>       at java.util.ArrayList.forEach(ArrayList.java:1259)
>       at java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:395)
>       at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:483)
>       at 
> java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
>       at 
> java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
>       at 
> java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
>       at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
>       at 
> java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:485)
>       at org.apache.cassandra.io.util.PathUtils.forEach(PathUtils.java:155)
>       at 
> org.apache.cassandra.io.util.PathUtils.deleteRecursive(PathUtils.java:378)
>       at 
> java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
>       at java.util.ArrayList.forEach(ArrayList.java:1259)
>       at java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:395)
>       at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:483)
>       at 
> java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
>       at 
> java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
>       at 
> java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
>       at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
>       at 
> java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:485)
>       at org.apache.cassandra.io.util.PathUtils.forEach(PathUtils.java:155)
>       at 
> org.apache.cassandra.io.util.PathUtils.deleteRecursive(PathUtils.java:378)
>       at 
> org.apache.cassandra.distributed.impl.AbstractCluster.close(AbstractCluster.java:1047)
>       at 
> org.apache.cassandra.simulator.ClusterSimulation.close(ClusterSimulation.java:816)
>       at 
> org.apache.cassandra.simulator.SimulationRunner$Run.run(SimulationRunner.java:370)
>       at 
> org.apache.cassandra.simulator.SimulationRunner$BasicCommand.run(SimulationRunner.java:345)
>       at 
> org.apache.cassandra.simulator.paxos.PaxosSimulationRunner.main(PaxosSimulationRunner.java:148)
>       at 
> org.apache.cassandra.simulator.test.ShortPaxosSimulationTest.simulationTest(ShortPaxosSimulationTest.java:33)
> Caused by: java.nio.file.DirectoryNotEmptyException: 
> /cassandra/node1/commitlog
>       at 
> com.google.common.jimfs.FileSystemView.checkEmpty(FileSystemView.java:535)
>       at 
> com.google.common.jimfs.FileSystemView.checkDeletable(FileSystemView.java:517)
>       at 
> com.google.common.jimfs.FileSystemView.delete(FileSystemView.java:479)
>       at 
> com.google.common.jimfs.FileSystemView.deleteFile(FileSystemView.java:465)
>       at 
> com.google.common.jimfs.JimfsFileSystemProvider.delete(JimfsFileSystemProvider.java:261)
>       at java.nio.file.Files.delete(Files.java:1126)
>       at org.apache.cassandra.io.util.PathUtils.delete(PathUtils.java:252)
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to