Author: brandonwilliams
Date: Fri Dec 16 21:31:36 2011
New Revision: 1215295

URL: http://svn.apache.org/viewvc?rev=1215295&view=rev
Log:
Check for permission problems with directories on startup.
Patch by Yuki Morishita, reviewed by brandonwilliams for CASSANDRA-3544

Modified:
    
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java

Modified: 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java?rev=1215295&r1=1215294&r2=1215295&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java
 (original)
+++ 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java
 Fri Dec 16 21:31:36 2011
@@ -23,6 +23,8 @@ import java.io.IOException;
 import java.net.InetAddress;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.Arrays;
+import java.util.List;
 import java.util.UUID;
 import java.util.concurrent.SynchronousQueue;
 import java.util.concurrent.ThreadPoolExecutor;
@@ -46,6 +48,9 @@ import org.apache.cassandra.db.commitlog
 import org.apache.cassandra.db.migration.Migration;
 import org.apache.cassandra.utils.CLibrary;
 import org.apache.cassandra.utils.Mx4jTool;
+import org.apache.commons.lang.ArrayUtils;
+
+import com.google.common.collect.Iterables;
 
 /**
  * The <code>CassandraDaemon</code> is an abstraction for a Cassandra daemon
@@ -117,10 +122,10 @@ public abstract class AbstractCassandraD
      */
     protected void setup() throws IOException
     {
-       logger.info("JVM vendor/version: {}/{}", 
System.getProperty("java.vm.name"), System.getProperty("java.version") );
+        logger.info("JVM vendor/version: {}/{}", 
System.getProperty("java.vm.name"), System.getProperty("java.version") );
         logger.info("Heap size: {}/{}", Runtime.getRuntime().totalMemory(), 
Runtime.getRuntime().maxMemory());
-               logger.info("Classpath: {}", 
System.getProperty("java.class.path"));
-       CLibrary.tryMlockall();
+        logger.info("Classpath: {}", System.getProperty("java.class.path"));
+        CLibrary.tryMlockall();
 
         listenPort = DatabaseDescriptor.getRpcPort();
         listenAddr = DatabaseDescriptor.getRpcAddress();
@@ -139,7 +144,20 @@ public abstract class AbstractCassandraD
                 }
             }
         });
-        
+
+        // check all directories(data, commitlog, saved cache) for existence 
and permission
+        Iterable<String> dirs = 
Iterables.concat(Arrays.asList(DatabaseDescriptor.getAllDataFileLocations()),
+                                                 Arrays.asList(new String[] 
{DatabaseDescriptor.getCommitLogLocation(),
+                                                                             
DatabaseDescriptor.getSavedCachesLocation()}));
+        for (String dataDir : dirs)
+        {
+            logger.debug("Checking directory {}", dataDir);
+            File dir = new File(dataDir);
+            if (dir.exists())
+                assert dir.isDirectory() && dir.canRead() && dir.canWrite() && 
dir.canExecute()
+                    : String.format("Directory %s is not accessible.", 
dataDir);
+        }
+
         // check the system table to keep user from shooting self in foot by 
changing partitioner, cluster name, etc.
         // we do a one-off scrub of the system table first; we can't load the 
list of the rest of the tables,
         // until system table is opened.


Reply via email to