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.