This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch cassandra-4.1
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/cassandra-4.1 by this push:
     new d5b1483703 Incompatible file system thrown while running Simulator
d5b1483703 is described below

commit d5b1483703b53c02fb0e616e58107afb814f9f81
Author: David Capwell <dcapw...@apache.org>
AuthorDate: Tue Mar 14 10:36:38 2023 -0700

    Incompatible file system thrown while running Simulator
    
    patch by David Capwell; reviewed by Brandon Williams, Caleb Rackliffe for 
CASSANDRA-18320
---
 checkstyle.xml                                     |  2 +-
 .../apache/cassandra/audit/AuditLogOptions.java    |  4 +--
 .../org/apache/cassandra/audit/BinAuditLogger.java |  4 +--
 .../cassandra/hadoop/cql3/CqlConfigHelper.java     |  6 ++--
 src/java/org/apache/cassandra/io/util/File.java    |  9 ++++--
 .../org/apache/cassandra/io/util/FileUtils.java    |  3 +-
 .../security/FileBasedSslContextFactory.java       |  5 ++-
 .../apache/cassandra/security/JKSKeyProvider.java  |  4 +--
 .../security/PEMBasedSslContextFactory.java        |  3 +-
 .../apache/cassandra/service/CassandraDaemon.java  |  5 ++-
 .../service/FileSystemOwnershipCheck.java          |  3 +-
 .../apache/cassandra/service/StartupChecks.java    |  7 ++--
 .../apache/cassandra/service/StorageService.java   |  3 +-
 .../cassandra/service/snapshot/SnapshotLoader.java |  3 +-
 .../cassandra/service/snapshot/TableSnapshot.java  |  3 +-
 .../org/apache/cassandra/tools/HashPassword.java   |  5 +--
 .../cassandra/tools/SSTableRepairedAtSetter.java   |  3 +-
 .../apache/cassandra/tools/StandaloneScrubber.java |  3 +-
 .../cassandra/simulator/SimulationException.java   | 37 ++++++++++++++++++++++
 .../cassandra/simulator/SimulationRunner.java      |  7 +++-
 20 files changed, 78 insertions(+), 41 deletions(-)

diff --git a/checkstyle.xml b/checkstyle.xml
index 06e0cddd90..053cc735ab 100644
--- a/checkstyle.xml
+++ b/checkstyle.xml
@@ -93,7 +93,7 @@
     </module>
     <module name="IllegalImport">
       <property name="illegalPkgs" value="junit.framework"/>
-      <property name="illegalClasses" 
value="java.io.File,java.io.FileInputStream,java.io.FileOutputStream,java.io.FileReader,java.io.FileWriter,java.io.RandomAccessFile,java.util.concurrent.Semaphore,java.util.concurrent.CountDownLatch,java.util.concurrent.Executors,java.util.concurrent.LinkedBlockingQueue,java.util.concurrent.SynchronousQueue,java.util.concurrent.ArrayBlockingQueue,com.google.common.util.concurrent.Futures,java.util.concurrent.CompletableFuture,io.netty.util.concurrent
 [...]
+      <property name="illegalClasses" 
value="java.io.File,java.io.FileInputStream,java.io.FileOutputStream,java.io.FileReader,java.io.FileWriter,java.io.RandomAccessFile,java.util.concurrent.Semaphore,java.util.concurrent.CountDownLatch,java.util.concurrent.Executors,java.util.concurrent.LinkedBlockingQueue,java.util.concurrent.SynchronousQueue,java.util.concurrent.ArrayBlockingQueue,com.google.common.util.concurrent.Futures,java.util.concurrent.CompletableFuture,io.netty.util.concurrent
 [...]
     </module>
     <module name="IllegalInstantiation">
       <property name="classes" 
value="java.io.File,java.lang.Thread,java.util.concurrent.FutureTask,java.util.concurrent.Semaphore,java.util.concurrent.CountDownLatch,java.util.concurrent.ScheduledThreadPoolExecutor,java.util.concurrent.ThreadPoolExecutor,java.util.concurrent.ForkJoinPool,java.lang.OutOfMemoryError"/>
diff --git a/src/java/org/apache/cassandra/audit/AuditLogOptions.java 
b/src/java/org/apache/cassandra/audit/AuditLogOptions.java
index 8ec066f5b5..e9e31c9040 100644
--- a/src/java/org/apache/cassandra/audit/AuditLogOptions.java
+++ b/src/java/org/apache/cassandra/audit/AuditLogOptions.java
@@ -18,7 +18,6 @@
 package org.apache.cassandra.audit;
 
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Map;
@@ -32,6 +31,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.cassandra.config.CassandraRelevantProperties;
 import org.apache.cassandra.config.ParameterizedClass;
 import org.apache.cassandra.exceptions.ConfigurationException;
+import org.apache.cassandra.io.util.File;
 import org.apache.cassandra.utils.binlog.BinLogOptions;
 
 public class AuditLogOptions extends BinLogOptions
@@ -52,7 +52,7 @@ public class AuditLogOptions extends BinLogOptions
     {
         String auditLogDir = 
CassandraRelevantProperties.LOG_DIR_AUDIT.getString();
         String logDir = CassandraRelevantProperties.LOG_DIR.getString() + 
"/audit";
-        Path path = auditLogDir == null ? Paths.get(logDir) : 
Paths.get(auditLogDir);
+        Path path = auditLogDir == null ? File.getPath(logDir) : 
File.getPath(auditLogDir);
         audit_logs_dir = path.normalize().toString();
     }
 
diff --git a/src/java/org/apache/cassandra/audit/BinAuditLogger.java 
b/src/java/org/apache/cassandra/audit/BinAuditLogger.java
index 7768868742..607d9fee0b 100644
--- a/src/java/org/apache/cassandra/audit/BinAuditLogger.java
+++ b/src/java/org/apache/cassandra/audit/BinAuditLogger.java
@@ -17,7 +17,6 @@
  */
 package org.apache.cassandra.audit;
 
-import java.nio.file.Paths;
 import java.util.Map;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -27,6 +26,7 @@ import org.slf4j.LoggerFactory;
 
 import net.openhft.chronicle.wire.WireOut;
 import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.io.util.File;
 import org.apache.cassandra.utils.ObjectSizes;
 import org.apache.cassandra.utils.binlog.BinLog;
 import org.apache.cassandra.utils.concurrent.WeightedQueue;
@@ -42,7 +42,7 @@ public class BinAuditLogger implements IAuditLogger
 
     public BinAuditLogger(AuditLogOptions auditLoggingOptions)
     {
-        this.binLog = new 
BinLog.Builder().path(Paths.get(auditLoggingOptions.audit_logs_dir))
+        this.binLog = new 
BinLog.Builder().path(File.getPath(auditLoggingOptions.audit_logs_dir))
                                           
.rollCycle(auditLoggingOptions.roll_cycle)
                                           .blocking(auditLoggingOptions.block)
                                           
.maxQueueWeight(auditLoggingOptions.max_queue_weight)
diff --git a/src/java/org/apache/cassandra/hadoop/cql3/CqlConfigHelper.java 
b/src/java/org/apache/cassandra/hadoop/cql3/CqlConfigHelper.java
index f9a6f3ae0f..998a754692 100644
--- a/src/java/org/apache/cassandra/hadoop/cql3/CqlConfigHelper.java
+++ b/src/java/org/apache/cassandra/hadoop/cql3/CqlConfigHelper.java
@@ -20,7 +20,6 @@ package org.apache.cassandra.hadoop.cql3;
 *
 */
 import java.nio.file.Files;
-import java.nio.file.Paths;
 import java.io.InputStream;
 import java.io.IOException;
 import java.security.KeyManagementException;
@@ -52,6 +51,7 @@ import com.datastax.driver.core.QueryOptions;
 import com.datastax.driver.core.SSLOptions;
 import com.datastax.driver.core.SocketOptions;
 import org.apache.cassandra.hadoop.ConfigHelper;
+import org.apache.cassandra.io.util.File;
 import org.apache.hadoop.conf.Configuration;
 
 
@@ -625,7 +625,7 @@ public class CqlConfigHelper
         TrustManagerFactory tmf = null;
         if (truststorePath.isPresent())
         {
-            try (InputStream tsf = 
Files.newInputStream(Paths.get(truststorePath.get())))
+            try (InputStream tsf = 
Files.newInputStream(File.getPath(truststorePath.get())))
             {
                 KeyStore ts = KeyStore.getInstance("JKS");
                 ts.load(tsf, truststorePassword.isPresent() ? 
truststorePassword.get().toCharArray() : null);
@@ -637,7 +637,7 @@ public class CqlConfigHelper
         KeyManagerFactory kmf = null;
         if (keystorePath.isPresent())
         {
-            try (InputStream ksf = 
Files.newInputStream(Paths.get(keystorePath.get())))
+            try (InputStream ksf = 
Files.newInputStream(File.getPath(keystorePath.get())))
             {
                 KeyStore ks = KeyStore.getInstance("JKS");
                 ks.load(ksf, keystorePassword.isPresent() ? 
keystorePassword.get().toCharArray() : null);
diff --git a/src/java/org/apache/cassandra/io/util/File.java 
b/src/java/org/apache/cassandra/io/util/File.java
index 71f8fc589e..1f48707910 100644
--- a/src/java/org/apache/cassandra/io/util/File.java
+++ b/src/java/org/apache/cassandra/io/util/File.java
@@ -47,7 +47,6 @@ import static org.apache.cassandra.utils.Throwables.maybeFail;
  *
  * TODO codebase probably should not use tryList, as unexpected exceptions are 
hidden;
  *      probably want to introduce e.g. listIfExists
- * TODO codebase probably should not use Paths.get() to ensure we can override 
the filesystem
  */
 public class File implements Comparable<File>
 {
@@ -118,7 +117,7 @@ public class File implements Comparable<File>
      */
     public File(URI path)
     {
-        this(Paths.get(path));
+        this(Paths.get(path)); //TODO unsafe if uri is file:// as it uses 
default file system and not File.filesystem
         if (!path.isAbsolute() || path.isOpaque()) throw new 
IllegalArgumentException();
     }
 
@@ -133,6 +132,12 @@ public class File implements Comparable<File>
         this.path = path;
     }
 
+
+    public static Path getPath(String first, String... more)
+    {
+        return filesystem.getPath(first, more);
+    }
+
     /**
      * Try to delete the file, returning true iff it was deleted by us. Does 
not ordinarily throw exceptions.
      */
diff --git a/src/java/org/apache/cassandra/io/util/FileUtils.java 
b/src/java/org/apache/cassandra/io/util/FileUtils.java
index 6f055f7c9c..01f1f18204 100644
--- a/src/java/org/apache/cassandra/io/util/FileUtils.java
+++ b/src/java/org/apache/cassandra/io/util/FileUtils.java
@@ -35,7 +35,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.StandardCopyOption;
 import java.nio.file.StandardOpenOption;
@@ -226,7 +225,7 @@ public final class FileUtils
     {
         try
         {
-            Files.copy(Paths.get(from), Paths.get(to));
+            Files.copy(File.getPath(from), File.getPath(to));
         }
         catch (IOException e)
         {
diff --git 
a/src/java/org/apache/cassandra/security/FileBasedSslContextFactory.java 
b/src/java/org/apache/cassandra/security/FileBasedSslContextFactory.java
index 3d47509fd3..aee9ba1ab6 100644
--- a/src/java/org/apache/cassandra/security/FileBasedSslContextFactory.java
+++ b/src/java/org/apache/cassandra/security/FileBasedSslContextFactory.java
@@ -20,7 +20,6 @@ package org.apache.cassandra.security;
 
 import java.io.InputStream;
 import java.nio.file.Files;
-import java.nio.file.Paths;
 import java.security.KeyStore;
 import java.security.KeyStoreException;
 import java.security.cert.X509Certificate;
@@ -130,7 +129,7 @@ abstract public class FileBasedSslContextFactory extends 
AbstractSslContextFacto
     protected KeyManagerFactory buildKeyManagerFactory() throws SSLException
     {
 
-        try (InputStream ksf = Files.newInputStream(Paths.get(keystore)))
+        try (InputStream ksf = Files.newInputStream(File.getPath(keystore)))
         {
             final String algorithm = this.algorithm == null ? 
KeyManagerFactory.getDefaultAlgorithm() : this.algorithm;
             KeyManagerFactory kmf = KeyManagerFactory.getInstance(algorithm);
@@ -159,7 +158,7 @@ abstract public class FileBasedSslContextFactory extends 
AbstractSslContextFacto
     @Override
     protected TrustManagerFactory buildTrustManagerFactory() throws 
SSLException
     {
-        try (InputStream tsf = Files.newInputStream(Paths.get(truststore)))
+        try (InputStream tsf = Files.newInputStream(File.getPath(truststore)))
         {
             final String algorithm = this.algorithm == null ? 
TrustManagerFactory.getDefaultAlgorithm() : this.algorithm;
             TrustManagerFactory tmf = 
TrustManagerFactory.getInstance(algorithm);
diff --git a/src/java/org/apache/cassandra/security/JKSKeyProvider.java 
b/src/java/org/apache/cassandra/security/JKSKeyProvider.java
index cea7b23435..2fddf5e55f 100644
--- a/src/java/org/apache/cassandra/security/JKSKeyProvider.java
+++ b/src/java/org/apache/cassandra/security/JKSKeyProvider.java
@@ -18,7 +18,6 @@
 package org.apache.cassandra.security;
 
 import java.nio.file.Files;
-import java.nio.file.Paths;
 import java.io.InputStream;
 import java.io.IOException;
 import java.security.Key;
@@ -28,6 +27,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.cassandra.config.TransparentDataEncryptionOptions;
+import org.apache.cassandra.io.util.File;
 
 /**
  * A {@code KeyProvider} that retrieves keys from a java keystore.
@@ -48,7 +48,7 @@ public class JKSKeyProvider implements KeyProvider
     {
         this.options = options;
         logger.info("initializing keystore from file {}", 
options.get(PROP_KEYSTORE));
-        try (InputStream inputStream = 
Files.newInputStream(Paths.get(options.get(PROP_KEYSTORE))))
+        try (InputStream inputStream = 
Files.newInputStream(File.getPath(options.get(PROP_KEYSTORE))))
         {
             store = KeyStore.getInstance(options.get(PROP_KEYSTORE_TYPE));
             store.load(inputStream, 
options.get(PROP_KEYSTORE_PW).toCharArray());
diff --git 
a/src/java/org/apache/cassandra/security/PEMBasedSslContextFactory.java 
b/src/java/org/apache/cassandra/security/PEMBasedSslContextFactory.java
index 8ecbec59ef..fd66a85296 100644
--- a/src/java/org/apache/cassandra/security/PEMBasedSslContextFactory.java
+++ b/src/java/org/apache/cassandra/security/PEMBasedSslContextFactory.java
@@ -20,7 +20,6 @@ package org.apache.cassandra.security;
 
 import java.io.IOException;
 import java.nio.file.Files;
-import java.nio.file.Paths;
 import java.security.GeneralSecurityException;
 import java.security.KeyStore;
 import java.security.PrivateKey;
@@ -279,7 +278,7 @@ public final class PEMBasedSslContextFactory extends 
FileBasedSslContextFactory
 
     private String readPEMFile(String file) throws IOException
     {
-        return new String(Files.readAllBytes(Paths.get(file)));
+        return new String(Files.readAllBytes(File.getPath(file)));
     }
 
     /**
diff --git a/src/java/org/apache/cassandra/service/CassandraDaemon.java 
b/src/java/org/apache/cassandra/service/CassandraDaemon.java
index 0029d2974b..f1bca6607e 100644
--- a/src/java/org/apache/cassandra/service/CassandraDaemon.java
+++ b/src/java/org/apache/cassandra/service/CassandraDaemon.java
@@ -25,7 +25,6 @@ import java.net.URL;
 import java.net.UnknownHostException;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
@@ -529,7 +528,7 @@ public class CassandraDaemon
         //     the system keyspace location configured by the user (upgrade to 
4.0)
         //  3) The system data are stored in the first data location and need 
to be moved to
         //     the system keyspace location configured by the user 
(system_data_file_directory has been configured)
-        Path target = 
Paths.get(DatabaseDescriptor.getLocalSystemKeyspacesDataFileLocations()[0]);
+        Path target = 
File.getPath(DatabaseDescriptor.getLocalSystemKeyspacesDataFileLocations()[0]);
 
         String[] nonLocalSystemKeyspacesFileLocations = 
DatabaseDescriptor.getNonLocalSystemKeyspacesDataFileLocations();
         String[] sources = 
DatabaseDescriptor.useSpecificLocationForLocalSystemData() ? 
nonLocalSystemKeyspacesFileLocations
@@ -539,7 +538,7 @@ public class CassandraDaemon
 
         for (String source : sources)
         {
-            Path dataFileLocation = Paths.get(source);
+            Path dataFileLocation = File.getPath(source);
 
             if (!Files.exists(dataFileLocation))
                 continue;
diff --git 
a/src/java/org/apache/cassandra/service/FileSystemOwnershipCheck.java 
b/src/java/org/apache/cassandra/service/FileSystemOwnershipCheck.java
index 04d87c917b..3d69c9e763 100644
--- a/src/java/org/apache/cassandra/service/FileSystemOwnershipCheck.java
+++ b/src/java/org/apache/cassandra/service/FileSystemOwnershipCheck.java
@@ -21,7 +21,6 @@ package org.apache.cassandra.service;
 import java.io.BufferedReader;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.*;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
@@ -139,7 +138,7 @@ public class FileSystemOwnershipCheck implements 
StartupCheck
         {
             logger.info("Checking for fs ownership details in file hierarchy 
for {}", dataDir);
             int foundFiles = 0;
-            Path dir = Paths.get(dataDir).normalize();
+            Path dir = File.getPath(dataDir).normalize();
             do
             {
                 File tokenFile = resolve(dir, tokenFilename);
diff --git a/src/java/org/apache/cassandra/service/StartupChecks.java 
b/src/java/org/apache/cassandra/service/StartupChecks.java
index 2ab5381697..0aacc02ece 100644
--- a/src/java/org/apache/cassandra/service/StartupChecks.java
+++ b/src/java/org/apache/cassandra/service/StartupChecks.java
@@ -26,7 +26,6 @@ import java.nio.file.FileVisitResult;
 import java.nio.file.FileVisitor;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.nio.file.SimpleFileVisitor;
 import java.nio.file.attribute.BasicFileAttributes;
 import java.util.ArrayList;
@@ -386,7 +385,7 @@ public class StartupChecks
             {
                 try
                 {
-                    Path p = Paths.get(dataDirectory);
+                    Path p = File.getPath(dataDirectory);
                     FileStore fs = Files.getFileStore(p);
 
                     String blockDirectory = fs.name();
@@ -455,7 +454,7 @@ public class StartupChecks
 
         private long getMaxMapCount()
         {
-            final Path path = Paths.get(MAX_MAP_COUNT_PATH);
+            final Path path = File.getPath(MAX_MAP_COUNT_PATH);
             try (final BufferedReader bufferedReader = 
Files.newBufferedReader(path))
             {
                 final String data = bufferedReader.readLine();
@@ -738,7 +737,7 @@ public class StartupChecks
                 String deviceName = 
blockDirComponents[2].replaceAll("[0-9]*$", "");
                 if (StringUtils.isNotEmpty(deviceName))
                 {
-                    readAheadKBPath = 
Paths.get(String.format(READ_AHEAD_KB_SETTING_PATH, deviceName));
+                    readAheadKBPath = 
File.getPath(String.format(READ_AHEAD_KB_SETTING_PATH, deviceName));
                 }
             }
         }
diff --git a/src/java/org/apache/cassandra/service/StorageService.java 
b/src/java/org/apache/cassandra/service/StorageService.java
index dd06ac41b7..6d0d24eb94 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -26,7 +26,6 @@ import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.net.UnknownHostException;
 import java.nio.ByteBuffer;
-import java.nio.file.Paths;
 import java.time.Instant;
 import java.util.*;
 import java.util.Map.Entry;
@@ -6398,7 +6397,7 @@ public class StorageService extends 
NotificationBroadcasterSupport implements IE
         maxArchiveRetries = maxArchiveRetries != Integer.MIN_VALUE ? 
maxArchiveRetries : fqlOptions.max_archive_retries;
 
         Preconditions.checkNotNull(path, "cassandra.yaml did not set log_dir 
and not set as parameter");
-        FullQueryLogger.instance.enableWithoutClean(Paths.get(path), 
rollCycle, blocking, maxQueueWeight, maxLogSize, archiveCommand, 
maxArchiveRetries);
+        FullQueryLogger.instance.enableWithoutClean(File.getPath(path), 
rollCycle, blocking, maxQueueWeight, maxLogSize, archiveCommand, 
maxArchiveRetries);
     }
 
     @Override
diff --git a/src/java/org/apache/cassandra/service/snapshot/SnapshotLoader.java 
b/src/java/org/apache/cassandra/service/snapshot/SnapshotLoader.java
index 5f2d37e270..15b70a1cb9 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::getPath).collect(Collectors.toList()));
     }
 
     public SnapshotLoader(Collection<Path> dataDirs)
diff --git a/src/java/org/apache/cassandra/service/snapshot/TableSnapshot.java 
b/src/java/org/apache/cassandra/service/snapshot/TableSnapshot.java
index 476bad7ab3..0cfcfea08f 100644
--- a/src/java/org/apache/cassandra/service/snapshot/TableSnapshot.java
+++ b/src/java/org/apache/cassandra/service/snapshot/TableSnapshot.java
@@ -20,7 +20,6 @@ package org.apache.cassandra.service.snapshot;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.time.Instant;
 import java.util.Collection;
 import java.util.HashSet;
@@ -302,7 +301,7 @@ public class TableSnapshot
         if (Directories.isSecondaryIndexFolder(snapshotFilePath.getParent()))
         {
             // Snapshot file structure format is 
{data_dir}/snapshots/{snapshot_name}/.{index}/{sstable-component}.db
-            liveDir = Paths.get(liveDir.getParent().toString(), 
snapshotFilePath.getParent().getFileName().toString());
+            liveDir = File.getPath(liveDir.getParent().toString(), 
snapshotFilePath.getParent().getFileName().toString());
         }
         return new File(liveDir.toString(), 
snapshotFilePath.getFileName().toString());
     }
diff --git a/src/java/org/apache/cassandra/tools/HashPassword.java 
b/src/java/org/apache/cassandra/tools/HashPassword.java
index c4b63148ff..ddc0a722f2 100644
--- a/src/java/org/apache/cassandra/tools/HashPassword.java
+++ b/src/java/org/apache/cassandra/tools/HashPassword.java
@@ -22,7 +22,6 @@ import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.CommandLineParser;
@@ -33,6 +32,8 @@ import org.apache.commons.cli.OptionGroup;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
 import org.apache.commons.lang3.StringUtils;
+
+import org.apache.cassandra.io.util.File;
 import org.mindrot.jbcrypt.BCrypt;
 
 public class HashPassword
@@ -83,7 +84,7 @@ public class HashPassword
                 {
                     try
                     {
-                        Path file = Paths.get(input);
+                        Path file = File.getPath(input);
                         fileInput = Files.readAllBytes(file);
                     }
                     catch (IOException e)
diff --git a/src/java/org/apache/cassandra/tools/SSTableRepairedAtSetter.java 
b/src/java/org/apache/cassandra/tools/SSTableRepairedAtSetter.java
index 62dd76ee56..1289e7e7cc 100644
--- a/src/java/org/apache/cassandra/tools/SSTableRepairedAtSetter.java
+++ b/src/java/org/apache/cassandra/tools/SSTableRepairedAtSetter.java
@@ -22,7 +22,6 @@ import java.io.IOException;
 import java.io.PrintStream;
 import java.nio.charset.Charset;
 import java.nio.file.Files;
-import java.nio.file.Paths;
 import java.nio.file.attribute.FileTime;
 import java.util.Arrays;
 import java.util.List;
@@ -73,7 +72,7 @@ public class SSTableRepairedAtSetter
         List<String> fileNames;
         if (args[2].equals("-f"))
         {
-            fileNames = Files.readAllLines(Paths.get(args[3]), 
Charset.defaultCharset());
+            fileNames = Files.readAllLines(File.getPath(args[3]), 
Charset.defaultCharset());
         }
         else
         {
diff --git a/src/java/org/apache/cassandra/tools/StandaloneScrubber.java 
b/src/java/org/apache/cassandra/tools/StandaloneScrubber.java
index d6e99b9c2f..4484b6947b 100644
--- a/src/java/org/apache/cassandra/tools/StandaloneScrubber.java
+++ b/src/java/org/apache/cassandra/tools/StandaloneScrubber.java
@@ -18,7 +18,6 @@
  */
 package org.apache.cassandra.tools;
 
-import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -144,7 +143,7 @@ public class StandaloneScrubber
                     headerFixBuilder = headerFixBuilder.dryRun();
 
                 for (Pair<Descriptor, Set<Component>> p : listResult)
-                    
headerFixBuilder.withPath(Paths.get(p.left.filenameFor(Component.DATA)));
+                    
headerFixBuilder.withPath(File.getPath(p.left.filenameFor(Component.DATA)));
 
                 SSTableHeaderFix headerFix = headerFixBuilder.build();
                 try
diff --git 
a/test/simulator/main/org/apache/cassandra/simulator/SimulationException.java 
b/test/simulator/main/org/apache/cassandra/simulator/SimulationException.java
new file mode 100644
index 0000000000..71ad4e0a01
--- /dev/null
+++ 
b/test/simulator/main/org/apache/cassandra/simulator/SimulationException.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.cassandra.simulator;
+
+public class SimulationException extends RuntimeException
+{
+    public SimulationException(long seed, Throwable t)
+    {
+        super(createMsg(seed, null), t, true, false);
+    }
+
+    public SimulationException(long seed, String msg, Throwable t)
+    {
+        super(createMsg(seed, msg), t, true, false);
+    }
+
+    private static String createMsg(long seed, String msg)
+    {
+        return String.format("Failed on seed 0x%s%s", Long.toHexString(seed), 
msg == null ? "" : "; " + msg);
+    }
+}
diff --git 
a/test/simulator/main/org/apache/cassandra/simulator/SimulationRunner.java 
b/test/simulator/main/org/apache/cassandra/simulator/SimulationRunner.java
index 3a651c9a08..6f1eb12f30 100644
--- a/test/simulator/main/org/apache/cassandra/simulator/SimulationRunner.java
+++ b/test/simulator/main/org/apache/cassandra/simulator/SimulationRunner.java
@@ -365,9 +365,14 @@ public class SimulationRunner
                 }
                 catch (Throwable t)
                 {
-                    logger.error("Failed on seed {}", Long.toHexString(seed), 
t);
+                    throw new SimulationException(seed, t);
                 }
             }
+            catch (Throwable t)
+            {
+                if (t instanceof SimulationException) throw t;
+                throw new SimulationException(seed, "Failure creating the 
simulation", t);
+            }
         }
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to