Repository: cassandra
Updated Branches:
  refs/heads/trunk 8a91a1a59 -> c84408109


Use $CASSANDRA_HOME for default paths instead of /var

Patch by Tyler Hobbs; reviewed by Brandon Williams and Joshua McKenzie
for CASSANDRA-7136


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

Branch: refs/heads/trunk
Commit: 60be74230e48bb7f3aba132e247d054a8b8b8a0d
Parents: 4722fe7
Author: Tyler Hobbs <ty...@datastax.com>
Authored: Thu Jun 5 15:38:41 2014 -0500
Committer: Tyler Hobbs <ty...@datastax.com>
Committed: Thu Jun 5 15:38:41 2014 -0500

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 NEWS.txt                                        | 10 ++++
 bin/cassandra                                   |  1 +
 bin/cassandra.bat                               |  1 +
 bin/cassandra.ps1                               |  4 ++
 conf/cassandra.yaml                             | 11 ++--
 conf/logback.xml                                |  4 +-
 debian/control                                  |  2 +-
 debian/patches/001cassandra_yaml_dirs.dpatch    | 36 ++++++++++++
 debian/patches/00list                           |  1 +
 debian/rules                                    |  6 +-
 .../cassandra/config/DatabaseDescriptor.java    | 60 ++++++++++++--------
 12 files changed, 104 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/60be7423/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 3cea1e7..fd593e7 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -6,6 +6,7 @@
  * Reduce run time for CQL tests (CASSANDRA-7327)
  * Fix heap size calculation on Windows (CASSANDRA-7352)
  * RefCount native frames from netty (CASSANDRA-7245)
+ * Use tarball dir instead of /var for default paths (CASSANDRA-7136)
 Merged from 2.0:
  * Add per-CF range read request latency metrics (CASSANDRA-7338)
  * Fix NPE in StreamTransferTask.createMessageForRetry() (CASSANDRA-7323)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/60be7423/NEWS.txt
----------------------------------------------------------------------
diff --git a/NEWS.txt b/NEWS.txt
index c1b2b44..4eed9de 100644
--- a/NEWS.txt
+++ b/NEWS.txt
@@ -18,6 +18,16 @@ using the provided 'sstableupgrade' tool.
 
 New features
 ------------
+   - Default data and log locations have changed.  If not set in
+     cassandra.yaml, the data file directory, commitlog directory,
+     and saved caches directory will default to $CASSANDRA_HOME/data/data,
+     $CASSANDRA_HOME/data/commitlog, and $CASSANDRA_HOME/data/saved_caches,
+     respectively.  The log directory now defaults to $CASSANDRA_HOME/logs.
+     If not set, $CASSANDRA_HOME, defaults to the top-level directory of
+     the installation.
+     Note that this should only affect source checkouts and tarballs.
+     Deb and RPM packages will continue to use /var/lib/cassandra and
+     /var/log/cassandra in cassandra.yaml.
    - SSTable data directory name is slightly changed. Each directory will
      have hex string appended after CF name, e.g.
          ks/cf-5be396077b811e3a3ab9dc4b9ac088d/

http://git-wip-us.apache.org/repos/asf/cassandra/blob/60be7423/bin/cassandra
----------------------------------------------------------------------
diff --git a/bin/cassandra b/bin/cassandra
index f34ca8c..797d36b 100755
--- a/bin/cassandra
+++ b/bin/cassandra
@@ -134,6 +134,7 @@ launch_service()
     props="$3"
     class="$4"
     cassandra_parms="-Dlogback.configurationFile=logback.xml"
+    cassandra_parms="$cassandra_parms -Dcassandra.logdir=$CASSANDRA_HOME/logs 
-Dcassandra.storagedir=$CASSANDRA_HOME/data"
 
     if [ "x$pidpath" != "x" ]; then
         cassandra_parms="$cassandra_parms -Dcassandra-pidfile=$pidpath"

http://git-wip-us.apache.org/repos/asf/cassandra/blob/60be7423/bin/cassandra.bat
----------------------------------------------------------------------
diff --git a/bin/cassandra.bat b/bin/cassandra.bat
index 172ca8e..629e58b 100644
--- a/bin/cassandra.bat
+++ b/bin/cassandra.bat
@@ -86,6 +86,7 @@ goto :eof
 REM Include the build\classes\main directory so it works in development
 set 
CASSANDRA_CLASSPATH=%CLASSPATH%;"%CASSANDRA_HOME%\build\classes\main";"%CASSANDRA_HOME%\build\classes\thrift"
 set CASSANDRA_PARAMS=-Dcassandra -Dcassandra-foreground=yes
+set CASSANDRA_PARAMS=%CASSANDRA_PARAMS% 
"-Dcassandra.logdir=%CASSANDRA_HOME%\logs" 
"-Dcassandra.storagedir=%CASSANDRA_HOME%\data"
 if /i "%ARG%" == "INSTALL" goto doInstallOperation
 if /i "%ARG%" == "UNINSTALL" goto doInstallOperation
 goto runDaemon

http://git-wip-us.apache.org/repos/asf/cassandra/blob/60be7423/bin/cassandra.ps1
----------------------------------------------------------------------
diff --git a/bin/cassandra.ps1 b/bin/cassandra.ps1
index 19d831a..ac8d89c 100644
--- a/bin/cassandra.ps1
+++ b/bin/cassandra.ps1
@@ -77,6 +77,10 @@ Function Main
     SetCassandraEnvironment
     $pidfile = "$env:CASSANDRA_HOME/$pidfile"
 
+    $logdir = "$env:CASSANDRA_HOME/logs"
+    $storagedir = "$env:CASSANDRA_HOME/data"
+    $env:CASSANDRA_PARAMS = $env:CASSANDRA_PARAMS + " 
-Dcassandra.logdir=$logdir -Dcassandra.storagedir=$storagedir"
+
     # Other command line params
     if ($H)
     {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/60be7423/conf/cassandra.yaml
----------------------------------------------------------------------
diff --git a/conf/cassandra.yaml b/conf/cassandra.yaml
index 561c7ff..e6c34e0 100644
--- a/conf/cassandra.yaml
+++ b/conf/cassandra.yaml
@@ -93,12 +93,14 @@ partitioner: org.apache.cassandra.dht.Murmur3Partitioner
 # Directories where Cassandra should store data on disk.  Cassandra
 # will spread data evenly across them, subject to the granularity of
 # the configured compaction strategy.
-data_file_directories:
-    - /var/lib/cassandra/data
+# If not set, the default directory is $CASSANDRA_HOME/data/data.
+# data_file_directories:
+#     - /var/lib/cassandra/data
 
 # commit log.  when running on magnetic HDD, this should be a
 # separate spindle than the data directories.
-commitlog_directory: /var/lib/cassandra/commitlog
+# If not set, the default directory is $CASSANDRA_HOME/data/commitlog.
+# commitlog_directory: /var/lib/cassandra/commitlog
 
 # policy for data disk failures:
 # stop_paranoid: shut down gossip and Thrift even for single-sstable errors.
@@ -200,7 +202,8 @@ counter_cache_save_period: 7200
 # memory_allocator: NativeAllocator
 
 # saved caches
-saved_caches_directory: /var/lib/cassandra/saved_caches
+# If not set, the default directory is $CASSANDRA_HOME/data/saved_caches.
+# saved_caches_directory: /var/lib/cassandra/saved_caches
 
 # commitlog_sync may be either "periodic" or "batch." 
 # When in batch mode, Cassandra won't ack writes until the commit log

http://git-wip-us.apache.org/repos/asf/cassandra/blob/60be7423/conf/logback.xml
----------------------------------------------------------------------
diff --git a/conf/logback.xml b/conf/logback.xml
index 61e5a13..e170d41 100644
--- a/conf/logback.xml
+++ b/conf/logback.xml
@@ -20,9 +20,9 @@
 <configuration scan="true">
   <jmxConfigurator />
   <appender name="FILE" 
class="ch.qos.logback.core.rolling.RollingFileAppender">
-    <file>/var/log/cassandra/system.log</file>
+    <file>${cassandra.logdir}/system.log</file>
     <rollingPolicy 
class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
-      <fileNamePattern>/var/log/cassandra/system.log.%i.zip</fileNamePattern>
+      <fileNamePattern>${cassandra.logdir}/system.log.%i.zip</fileNamePattern>
       <minIndex>1</minIndex>
       <maxIndex>20</maxIndex>
     </rollingPolicy>

http://git-wip-us.apache.org/repos/asf/cassandra/blob/60be7423/debian/control
----------------------------------------------------------------------
diff --git a/debian/control b/debian/control
index cc0c49b..f1167c3 100644
--- a/debian/control
+++ b/debian/control
@@ -3,7 +3,7 @@ Section: misc
 Priority: extra
 Maintainer: Eric Evans <eev...@apache.org>
 Uploaders: Sylvain Lebresne <slebre...@apache.org>
-Build-Depends: debhelper (>= 5), openjdk-7-jdk | java7-jdk, ant (>= 1.7), 
ant-optional (>= 1.7), python-support
+Build-Depends: debhelper (>= 5), openjdk-7-jdk | java7-jdk, ant (>= 1.7), 
ant-optional (>= 1.7), python-support, dpatch
 Homepage: http://cassandra.apache.org
 Vcs-Git: http://git-wip-us.apache.org/repos/asf/cassandra.git
 Vcs-Browser: https://git-wip-us.apache.org/repos/asf?p=cassandra.git

http://git-wip-us.apache.org/repos/asf/cassandra/blob/60be7423/debian/patches/001cassandra_yaml_dirs.dpatch
----------------------------------------------------------------------
diff --git a/debian/patches/001cassandra_yaml_dirs.dpatch 
b/debian/patches/001cassandra_yaml_dirs.dpatch
new file mode 100644
index 0000000..3d545e5
--- /dev/null
+++ b/debian/patches/001cassandra_yaml_dirs.dpatch
@@ -0,0 +1,36 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 001cassandra_yaml_dirs.dpatch by Tyler Hobbs <ty...@datastax.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+@DPATCH@
+diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' 
'--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' 
cassandra~/conf/cassandra.yaml cassandra/conf/cassandra.yaml
+--- cassandra~/conf/cassandra.yaml     2014-06-05 13:36:22.000000000 -0500
++++ cassandra/conf/cassandra.yaml      2014-06-05 13:39:20.569034040 -0500
+@@ -94,13 +94,13 @@
+ # will spread data evenly across them, subject to the granularity of
+ # the configured compaction strategy.
+ # If not set, the default directory is $CASSANDRA_HOME/data/data.
+-# data_file_directories:
+-#     - /var/lib/cassandra/data
++data_file_directories:
++    - /var/lib/cassandra/data
+ 
+ # commit log.  when running on magnetic HDD, this should be a
+ # separate spindle than the data directories.
+ # If not set, the default directory is $CASSANDRA_HOME/data/commitlog.
+-# commitlog_directory: /var/lib/cassandra/commitlog
++commitlog_directory: /var/lib/cassandra/commitlog
+ 
+ # policy for data disk failures:
+ # stop_paranoid: shut down gossip and Thrift even for single-sstable errors.
+@@ -203,7 +203,7 @@
+ 
+ # saved caches
+ # If not set, the default directory is $CASSANDRA_HOME/data/saved_caches.
+-# saved_caches_directory: /var/lib/cassandra/saved_caches
++saved_caches_directory: /var/lib/cassandra/saved_caches
+ 
+ # commitlog_sync may be either "periodic" or "batch." 
+ # When in batch mode, Cassandra won't ack writes until the commit log

http://git-wip-us.apache.org/repos/asf/cassandra/blob/60be7423/debian/patches/00list
----------------------------------------------------------------------
diff --git a/debian/patches/00list b/debian/patches/00list
new file mode 100644
index 0000000..508c180
--- /dev/null
+++ b/debian/patches/00list
@@ -0,0 +1 @@
+001cassandra_yaml_dirs.dpatch

http://git-wip-us.apache.org/repos/asf/cassandra/blob/60be7423/debian/rules
----------------------------------------------------------------------
diff --git a/debian/rules b/debian/rules
index 717bbf2..602cfde 100755
--- a/debian/rules
+++ b/debian/rules
@@ -3,6 +3,8 @@
 # Uncomment to enable verbose mode.
 #export DH_VERBOSE=1
 
+include /usr/share/dpatch/dpatch.make
+
 ANT = /usr/bin/ant
 VERSION = $(shell dpkg-parsechangelog | sed -ne 's/^Version: \(.*\)/\1/p')
 
@@ -10,7 +12,7 @@ test:
        dh_testdir
        $(ANT) test
 
-clean:
+clean: unpatch
        dh_testdir
        dh_testroot
        $(ANT) realclean
@@ -22,7 +24,7 @@ clean:
        dh_clean
 
 build: build-stamp
-build-stamp:
+build-stamp: patch-stamp
        dh_testdir
        printf "version=%s" $(VERSION) > build.properties
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/60be7423/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 5b227ae..3cc53de 100644
--- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
+++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -452,35 +452,47 @@ public class DatabaseDescriptor
             throw new ConfigurationException("in_memory_compaction_limit_in_mb 
must be a positive integer");
         }
 
-        if (conf.concurrent_compactors == null)
-            conf.concurrent_compactors = Math.min(8, Math.max(2, 
Math.min(FBUtilities.getAvailableProcessors(), 
conf.data_file_directories.length)));
-
-        if (conf.concurrent_compactors <= 0)
-            throw new ConfigurationException("concurrent_compactors should be 
strictly greater than 0");
-
-        /* data file and commit log directories. they get created later, when 
they're needed. */
-        if (conf.commitlog_directory != null && conf.data_file_directories != 
null && conf.saved_caches_directory != null)
+        // if data dirs, commitlog dir, or saved caches dir are set in 
cassandra.yaml, use that.  Otherwise,
+        // use -Dcassandra.storagedir (set in cassandra-env.sh) as the parent 
dir for data/, commitlog/, and saved_caches/
+        if (conf.commitlog_directory == null)
         {
-            for (String datadir : conf.data_file_directories)
-            {
-                if (datadir.equals(conf.commitlog_directory))
-                    throw new ConfigurationException("commitlog_directory must 
not be the same as any data_file_directories");
-                if (datadir.equals(conf.saved_caches_directory))
-                    throw new ConfigurationException("saved_caches_directory 
must not be the same as any data_file_directories");
-            }
-
-            if (conf.commitlog_directory.equals(conf.saved_caches_directory))
-                throw new ConfigurationException("saved_caches_directory must 
not be the same as the commitlog_directory");
+            conf.commitlog_directory = 
System.getProperty("cassandra.storagedir", null);
+            if (conf.commitlog_directory == null)
+                throw new ConfigurationException("commitlog_directory is 
missing and -Dcassandra.storagedir is not set");
+            conf.commitlog_directory += File.separator + "commitlog";
         }
-        else
+        if (conf.saved_caches_directory == null)
         {
-            if (conf.commitlog_directory == null)
-                throw new ConfigurationException("commitlog_directory 
missing");
-            if (conf.data_file_directories == null)
-                throw new ConfigurationException("data_file_directories 
missing; at least one data directory must be specified");
+            conf.saved_caches_directory = 
System.getProperty("cassandra.storagedir", null);
             if (conf.saved_caches_directory == null)
-                throw new ConfigurationException("saved_caches_directory 
missing");
+                throw new ConfigurationException("saved_caches_directory is 
missing and -Dcassandra.storagedir is not set");
+            conf.saved_caches_directory += File.separator + "saved_caches";
         }
+        if (conf.data_file_directories == null)
+        {
+            String defaultDataDir = System.getProperty("cassandra.storagedir", 
null);
+            if (defaultDataDir == null)
+                throw new ConfigurationException("data_file_directories is not 
missing and -Dcassandra.storagedir is not set");
+            conf.data_file_directories = new String[]{ defaultDataDir + 
File.separator + "data" };
+        }
+
+        /* data file and commit log directories. they get created later, when 
they're needed. */
+        for (String datadir : conf.data_file_directories)
+        {
+            if (datadir.equals(conf.commitlog_directory))
+                throw new ConfigurationException("commitlog_directory must not 
be the same as any data_file_directories");
+            if (datadir.equals(conf.saved_caches_directory))
+                throw new ConfigurationException("saved_caches_directory must 
not be the same as any data_file_directories");
+        }
+
+        if (conf.commitlog_directory.equals(conf.saved_caches_directory))
+            throw new ConfigurationException("saved_caches_directory must not 
be the same as the commitlog_directory");
+
+        if (conf.concurrent_compactors == null)
+            conf.concurrent_compactors = Math.min(8, Math.max(2, 
Math.min(FBUtilities.getAvailableProcessors(), 
conf.data_file_directories.length)));
+
+        if (conf.concurrent_compactors <= 0)
+            throw new ConfigurationException("concurrent_compactors should be 
strictly greater than 0");
 
         if (conf.initial_token != null)
             for (String token : tokensFromString(conf.initial_token))

Reply via email to