Repository: cassandra
Updated Branches:
  refs/heads/trunk 97dcba601 -> 15e7ac7d3


force Windows to use non-mapped i/o
patch by Josh McKenzie; reviewed by Benedict Elliott Smith for CASSANDRA-6993


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/15e7ac7d
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/15e7ac7d
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/15e7ac7d

Branch: refs/heads/trunk
Commit: 15e7ac7d37a49c7ff852057f6f124aee611470da
Parents: 97dcba6
Author: Jonathan Ellis <[email protected]>
Authored: Tue Apr 22 12:31:28 2014 -0500
Committer: Jonathan Ellis <[email protected]>
Committed: Tue Apr 22 12:31:28 2014 -0500

----------------------------------------------------------------------
 .../cassandra/config/DatabaseDescriptor.java    | 35 +++++++++++++-------
 .../org/apache/cassandra/utils/FBUtilities.java |  6 ++--
 2 files changed, 26 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/15e7ac7d/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java 
b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
index 9f8a0df..cf11b77 100644
--- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
+++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -189,23 +189,34 @@ public class DatabaseDescriptor
         if (conf.commitlog_total_space_in_mb == null)
             conf.commitlog_total_space_in_mb = hasLargeAddressSpace() ? 1024 : 
32;
 
-        /* evaluate the DiskAccessMode Config directive, which also affects 
indexAccessMode selection */
-        if (conf.disk_access_mode == Config.DiskAccessMode.auto)
+        if (FBUtilities.isUnix())
         {
-            conf.disk_access_mode = hasLargeAddressSpace() ? 
Config.DiskAccessMode.mmap : Config.DiskAccessMode.standard;
-            indexAccessMode = conf.disk_access_mode;
-            logger.info("DiskAccessMode 'auto' determined to be {}, 
indexAccessMode is {}", conf.disk_access_mode, indexAccessMode);
-        }
-        else if (conf.disk_access_mode == 
Config.DiskAccessMode.mmap_index_only)
-        {
-            conf.disk_access_mode = Config.DiskAccessMode.standard;
-            indexAccessMode = Config.DiskAccessMode.mmap;
-            logger.info("DiskAccessMode is {}, indexAccessMode is {}", 
conf.disk_access_mode, indexAccessMode);
+            /* evaluate the DiskAccessMode Config directive, which also 
affects indexAccessMode selection */
+            if (conf.disk_access_mode == Config.DiskAccessMode.auto)
+            {
+                conf.disk_access_mode = hasLargeAddressSpace() ? 
Config.DiskAccessMode.mmap : Config.DiskAccessMode.standard;
+                indexAccessMode = conf.disk_access_mode;
+                logger.info("DiskAccessMode 'auto' determined to be {}, 
indexAccessMode is {}", conf.disk_access_mode, indexAccessMode);
+            }
+            else if (conf.disk_access_mode == 
Config.DiskAccessMode.mmap_index_only)
+            {
+                conf.disk_access_mode = Config.DiskAccessMode.standard;
+                indexAccessMode = Config.DiskAccessMode.mmap;
+                logger.info("DiskAccessMode is {}, indexAccessMode is {}", 
conf.disk_access_mode, indexAccessMode);
+            }
+            else
+            {
+                indexAccessMode = conf.disk_access_mode;
+                logger.info("DiskAccessMode is {}, indexAccessMode is {}", 
conf.disk_access_mode, indexAccessMode);
+            }
         }
+        // Always force standard mode access on Windows - CASSANDRA-6993. 
Windows won't allow deletion of hard-links to files that
+        // are memory-mapped which causes trouble with snapshots.
         else
         {
+            conf.disk_access_mode = Config.DiskAccessMode.standard;
             indexAccessMode = conf.disk_access_mode;
-            logger.info("DiskAccessMode is {}, indexAccessMode is {}", 
conf.disk_access_mode, indexAccessMode);
+            logger.info("Non-unix environment detected.  DiskAccessMode set to 
{}, indexAccessMode {}", conf.disk_access_mode, indexAccessMode);
         }
 
         /* Authentication and authorization backend, implementing 
IAuthenticator and IAuthorizer */

http://git-wip-us.apache.org/repos/asf/cassandra/blob/15e7ac7d/src/java/org/apache/cassandra/utils/FBUtilities.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/utils/FBUtilities.java 
b/src/java/org/apache/cassandra/utils/FBUtilities.java
index 12c393a..a8c95de 100644
--- a/src/java/org/apache/cassandra/utils/FBUtilities.java
+++ b/src/java/org/apache/cassandra/utils/FBUtilities.java
@@ -70,11 +70,11 @@ public class FBUtilities
     public static final BigInteger TWO = new BigInteger("2");
     private static final String DEFAULT_TRIGGER_DIR = "triggers";
 
-    private static final String OPERATING_SYSTEM = 
System.getProperty("os.name").toLowerCase();
-
     private static volatile InetAddress localInetAddress;
     private static volatile InetAddress broadcastInetAddress;
 
+    private static final boolean isWindows = 
System.getProperty("os.name").startsWith("Windows");
+
     public static int getAvailableProcessors()
     {
         if (System.getProperty("cassandra.available_processors") != null)
@@ -691,6 +691,6 @@ public class FBUtilities
 
     public static boolean isUnix()
     {
-        return OPERATING_SYSTEM.contains("nix") || 
OPERATING_SYSTEM.contains("nux") || OPERATING_SYSTEM.contains("aix");
+        return !isWindows;
     }
 }

Reply via email to