Parameterization of cassandra gc logging rotation
Change-Id: Ibc0d81ab721cdc926d872d828b9d08d97e2b840d
Closes-Bug: PROD-15778
diff --git a/README.rst b/README.rst
index 901848d..bc1f622 100644
--- a/README.rst
+++ b/README.rst
@@ -745,6 +745,28 @@
override_rpf_default_by: 'disable'
...
+Cassandra GC logging
+--------------------
+
+From Contrail version 3 you can set a way you want to handle Cassandra GC logs.
+The behavior is controlled by `cassandra_gc_logging`. Valid values are
+'rotation' (default), 'legacy' and false.
+
+- 'rotation' is supported by JDK 6u34 7u2 or later and handles rotation of log
+files automatically.
+- 'legacy' is a way to support older JDKs and you will need to handle logs by
+other means. This can be handled for example by using
+`- service.opencontrail.database.cassandra_log_cleanup` in your reclass model.
+- false will disable the cassandra gc logging
+
+.. code-block:: yaml
+
+ opencontrail:
+ ...
+ database:
+ cassandra_gc_logging: false
+ ...
+
Disable Contrail API authentication
-----------------------------------
diff --git a/metadata/service/database/cassandra_log_cleanup.yml b/metadata/service/database/cassandra_log_cleanup.yml
new file mode 100644
index 0000000..d73980e
--- /dev/null
+++ b/metadata/service/database/cassandra_log_cleanup.yml
@@ -0,0 +1,12 @@
+parameters:
+ _param:
+ opencontrail_cassandra_gc_log_cleanup_mtime: '+7'
+ opencontrail_cassandra_gc_log_cleanup_dir: '/var/log/cassandra/'
+ linux:
+ system:
+ job:
+ cassandra_gc_logs_cleanup:
+ command: "find ${_param:opencontrail_cassandra_gc_log_cleanup_dir} -name 'gc-*.log' -type f -mtime ${_param:opencontrail_cassandra_gc_log_cleanup_mtime} -exec rm {} \\;"
+ identifier: cassandra_gc_logs_cleanup
+ hour: 0
+ minute: 0
diff --git a/opencontrail/files/3.0/database/cassandra-env.sh b/opencontrail/files/3.0/database/cassandra-env.sh
index ba438ec..2eb5fbd 100644
--- a/opencontrail/files/3.0/database/cassandra-env.sh
+++ b/opencontrail/files/3.0/database/cassandra-env.sh
@@ -237,6 +237,8 @@
JVM_OPTS="$JVM_OPTS -XX:+UseCondCardMark"
fi
+{% set cassandra_gc_logging = database.get('cassandra_gc_logging', 'rotation') %}
+{% if cassandra_gc_logging %}
# GC logging options -- uncomment to enable
JVM_OPTS="$JVM_OPTS -XX:+PrintGCDetails"
JVM_OPTS="$JVM_OPTS -XX:+PrintGCDateStamps"
@@ -245,13 +247,19 @@
JVM_OPTS="$JVM_OPTS -XX:+PrintGCApplicationStoppedTime"
JVM_OPTS="$JVM_OPTS -XX:+PrintPromotionFailure"
JVM_OPTS="$JVM_OPTS -XX:PrintFLSStatistics=1"
+{% if cassandra_gc_logging == 'legacy' %}
JVM_OPTS="$JVM_OPTS -Xloggc:/var/log/cassandra/gc-`date +%s`.log"
+{% elif cassandra_gc_logging == 'rotation' %}
+#JVM_OPTS="$JVM_OPTS -Xloggc:/var/log/cassandra/gc-`date +%s`.log"
+
# If you are using JDK 6u34 7u2 or later you can enable GC log rotation
# don't stick the date in the log name if rotation is on.
-# JVM_OPTS="$JVM_OPTS -Xloggc:/var/log/cassandra/gc.log"
-# JVM_OPTS="$JVM_OPTS -XX:+UseGCLogFileRotation"
-# JVM_OPTS="$JVM_OPTS -XX:NumberOfGCLogFiles=10"
-# JVM_OPTS="$JVM_OPTS -XX:GCLogFileSize=10M"
+JVM_OPTS="$JVM_OPTS -Xloggc:/var/log/cassandra/gc.log"
+JVM_OPTS="$JVM_OPTS -XX:+UseGCLogFileRotation"
+JVM_OPTS="$JVM_OPTS -XX:NumberOfGCLogFiles=10"
+JVM_OPTS="$JVM_OPTS -XX:GCLogFileSize=10M"
+{% endif %}
+{% endif %}
# Configure the following for JEMallocAllocator and if jemalloc is not available in the system
# library path (Example: /usr/local/lib/). Usually "make install" will do the right thing.
diff --git a/opencontrail/files/4.0/database/cassandra-env.sh b/opencontrail/files/4.0/database/cassandra-env.sh
index ba438ec..2eb5fbd 100644
--- a/opencontrail/files/4.0/database/cassandra-env.sh
+++ b/opencontrail/files/4.0/database/cassandra-env.sh
@@ -237,6 +237,8 @@
JVM_OPTS="$JVM_OPTS -XX:+UseCondCardMark"
fi
+{% set cassandra_gc_logging = database.get('cassandra_gc_logging', 'rotation') %}
+{% if cassandra_gc_logging %}
# GC logging options -- uncomment to enable
JVM_OPTS="$JVM_OPTS -XX:+PrintGCDetails"
JVM_OPTS="$JVM_OPTS -XX:+PrintGCDateStamps"
@@ -245,13 +247,19 @@
JVM_OPTS="$JVM_OPTS -XX:+PrintGCApplicationStoppedTime"
JVM_OPTS="$JVM_OPTS -XX:+PrintPromotionFailure"
JVM_OPTS="$JVM_OPTS -XX:PrintFLSStatistics=1"
+{% if cassandra_gc_logging == 'legacy' %}
JVM_OPTS="$JVM_OPTS -Xloggc:/var/log/cassandra/gc-`date +%s`.log"
+{% elif cassandra_gc_logging == 'rotation' %}
+#JVM_OPTS="$JVM_OPTS -Xloggc:/var/log/cassandra/gc-`date +%s`.log"
+
# If you are using JDK 6u34 7u2 or later you can enable GC log rotation
# don't stick the date in the log name if rotation is on.
-# JVM_OPTS="$JVM_OPTS -Xloggc:/var/log/cassandra/gc.log"
-# JVM_OPTS="$JVM_OPTS -XX:+UseGCLogFileRotation"
-# JVM_OPTS="$JVM_OPTS -XX:NumberOfGCLogFiles=10"
-# JVM_OPTS="$JVM_OPTS -XX:GCLogFileSize=10M"
+JVM_OPTS="$JVM_OPTS -Xloggc:/var/log/cassandra/gc.log"
+JVM_OPTS="$JVM_OPTS -XX:+UseGCLogFileRotation"
+JVM_OPTS="$JVM_OPTS -XX:NumberOfGCLogFiles=10"
+JVM_OPTS="$JVM_OPTS -XX:GCLogFileSize=10M"
+{% endif %}
+{% endif %}
# Configure the following for JEMallocAllocator and if jemalloc is not available in the system
# library path (Example: /usr/local/lib/). Usually "make install" will do the right thing.