[
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]