From f501fb5803d4b9e9b65cf94c3aeac655d857c847 Mon Sep 17 00:00:00 2001 From: Richard Alam <ritzalam@gmail.com> Date: Thu, 21 Jan 2016 20:43:28 +0000 Subject: [PATCH] - expire redis recording keys after 14 days --- .../core/service/recorder/RedisDispatcher.java | 15 +++++++++++---- akka-bbb-apps/src/main/resources/application.conf | 2 ++ .../src/main/scala/org/bigbluebutton/Boot.scala | 2 +- .../org/bigbluebutton/SystemConfiguration.scala | 1 + .../app/video/EventRecordingService.java | 8 +++++--- .../webapp/WEB-INF/bigbluebutton-video.properties | 2 ++ bbb-video/src/main/webapp/WEB-INF/red5-web.xml | 1 + .../deskshare/server/recorder/EventRecorder.java | 10 ++++++---- .../src/main/webapp/WEB-INF/deskshare.properties | 3 ++- .../app/src/main/webapp/WEB-INF/red5-web.xml | 1 + 10 files changed, 32 insertions(+), 13 deletions(-) diff --git a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/service/recorder/RedisDispatcher.java b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/service/recorder/RedisDispatcher.java index 7be78cd6a4..5df1e393a6 100755 --- a/akka-bbb-apps/src/main/java/org/bigbluebutton/core/service/recorder/RedisDispatcher.java +++ b/akka-bbb-apps/src/main/java/org/bigbluebutton/core/service/recorder/RedisDispatcher.java @@ -27,8 +27,9 @@ public class RedisDispatcher implements Recorder { private static final String COLON=":"; private JedisPool redisPool; - - public RedisDispatcher(String host, int port, String password) { + private int keysExpiresInSec; + + public RedisDispatcher(String host, int port, String password, int keysExpiresInSec) { GenericObjectPoolConfig config = new GenericObjectPoolConfig(); config.setMaxTotal(32); config.setMaxIdle(8); @@ -41,6 +42,8 @@ public class RedisDispatcher implements Recorder { config.setTimeBetweenEvictionRunsMillis(60000); config.setBlockWhenExhausted(true); + this.keysExpiresInSec = keysExpiresInSec; + // Set the name of this client to be able to distinguish when doing // CLIENT LIST on redis-cli redisPool = new JedisPool(config, host, port, Protocol.DEFAULT_TIMEOUT, null, @@ -52,8 +55,12 @@ public class RedisDispatcher implements Recorder { Jedis jedis = redisPool.getResource(); try { Long msgid = jedis.incr("global:nextRecordedMsgId"); - jedis.hmset("recording" + COLON + session + COLON + msgid, message.toMap()); - jedis.rpush("meeting" + COLON + session + COLON + "recordings", msgid.toString()); + String key = "recording" + COLON + session + COLON + msgid; + jedis.hmset(key, message.toMap()); + jedis.expire(key, keysExpiresInSec); + key = "meeting" + COLON + session + COLON + "recordings"; + jedis.rpush(key, msgid.toString()); + jedis.expire(key, keysExpiresInSec); } finally { jedis.close(); } diff --git a/akka-bbb-apps/src/main/resources/application.conf b/akka-bbb-apps/src/main/resources/application.conf index e1e8967123..ed9229b889 100755 --- a/akka-bbb-apps/src/main/resources/application.conf +++ b/akka-bbb-apps/src/main/resources/application.conf @@ -31,4 +31,6 @@ redis { host="127.0.0.1" port=6379 password="" + # recording keys should expire in 14 days + keyExpiry=1209600 } diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/Boot.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/Boot.scala index 59d4c20981..6e981e1281 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/Boot.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/Boot.scala @@ -25,7 +25,7 @@ object Boot extends App with SystemConfiguration { val redisPublisher = new RedisPublisher(system) val msgSender = new MessageSender(redisPublisher) - val redisDispatcher = new RedisDispatcher(redisHost, redisPort, redisPassword) + val redisDispatcher = new RedisDispatcher(redisHost, redisPort, redisPassword, keysExpiresInSec) val recorderApp = new RecorderApplication(redisDispatcher) recorderApp.start() diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/SystemConfiguration.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/SystemConfiguration.scala index 663c885576..cb96d04538 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/SystemConfiguration.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/SystemConfiguration.scala @@ -10,4 +10,5 @@ trait SystemConfiguration { lazy val redisHost = Try(config.getString("redis.host")).getOrElse("127.0.0.1") lazy val redisPort = Try(config.getInt("redis.port")).getOrElse(6379) lazy val redisPassword = Try(config.getString("redis.password")).getOrElse("") + lazy val keysExpiresInSec = Try(config.getInt("redis.keyExpiry")).getOrElse(14 * 86400) // 14 days } \ No newline at end of file diff --git a/bbb-video/src/main/java/org/bigbluebutton/app/video/EventRecordingService.java b/bbb-video/src/main/java/org/bigbluebutton/app/video/EventRecordingService.java index 05e594aafd..ff9f49ecf4 100755 --- a/bbb-video/src/main/java/org/bigbluebutton/app/video/EventRecordingService.java +++ b/bbb-video/src/main/java/org/bigbluebutton/app/video/EventRecordingService.java @@ -28,10 +28,12 @@ public class EventRecordingService { private final String host; private final int port; + private final int keyExpiry; - public EventRecordingService(String host, int port) { + public EventRecordingService(String host, int port, int keyExpiry) { this.host = host; this.port = port; + this.keyExpiry = keyExpiry; } public void record(String meetingId, Map<String, String> event) { @@ -44,9 +46,9 @@ public class EventRecordingService { * recording the event into redis even if the meeting is not * recorded. (ralam sept 23, 2015) */ - jedis.expire(key, 14*24*60*60 /*14days*/); + jedis.expire(key, keyExpiry); key = "meeting:" + meetingId + COLON + "recordings"; jedis.rpush(key, msgid.toString()); - jedis.expire(key, 14*24*60*60 /*14days*/); + jedis.expire(key, keyExpiry); } } diff --git a/bbb-video/src/main/webapp/WEB-INF/bigbluebutton-video.properties b/bbb-video/src/main/webapp/WEB-INF/bigbluebutton-video.properties index c5307457dd..5f8030de0c 100755 --- a/bbb-video/src/main/webapp/WEB-INF/bigbluebutton-video.properties +++ b/bbb-video/src/main/webapp/WEB-INF/bigbluebutton-video.properties @@ -1,2 +1,4 @@ redis.host=127.0.0.1 redis.port=6379 +# recording keys should expire in 14 days +redis.keyExpiry=1209600 diff --git a/bbb-video/src/main/webapp/WEB-INF/red5-web.xml b/bbb-video/src/main/webapp/WEB-INF/red5-web.xml index 918f924882..d54025f793 100755 --- a/bbb-video/src/main/webapp/WEB-INF/red5-web.xml +++ b/bbb-video/src/main/webapp/WEB-INF/red5-web.xml @@ -59,6 +59,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <bean id="redisRecorder" class="org.bigbluebutton.app.video.EventRecordingService"> <constructor-arg index="0" value="${redis.host}"/> <constructor-arg index="1" value="${redis.port}"/> + <constructor-arg index="2" value="${redis.keyExpiry}"/> </bean> <bean id="redisSender" class="org.bigbluebutton.red5.pubsub.MessageSender" diff --git a/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/recorder/EventRecorder.java b/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/recorder/EventRecorder.java index 2df5ef806d..37f8fa7bb6 100755 --- a/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/recorder/EventRecorder.java +++ b/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/recorder/EventRecorder.java @@ -30,10 +30,12 @@ public class EventRecorder implements RecordStatusListener { private static final String COLON=":"; private String host; private int port; - - public EventRecorder(String host, int port){ + private final int keyExpiry; + + public EventRecorder(String host, int port, int keyExpiry){ this.host = host; this.port = port; + this.keyExpiry = keyExpiry; } private Long genTimestamp() { @@ -50,10 +52,10 @@ public class EventRecorder implements RecordStatusListener { * recording the event into redis even if the meeting is not * recorded. (ralam sept 23, 2015) */ - jedis.expire(key, 14*24*60*60 /*14days*/); + jedis.expire(key, keyExpiry); key = "meeting" + COLON + session + COLON + "recordings"; jedis.rpush(key, msgid.toString()); - jedis.expire(key, 14*24*60*60 /*14days*/); + jedis.expire(key, keyExpiry); } @Override diff --git a/deskshare/app/src/main/webapp/WEB-INF/deskshare.properties b/deskshare/app/src/main/webapp/WEB-INF/deskshare.properties index f847481b99..355db0630c 100755 --- a/deskshare/app/src/main/webapp/WEB-INF/deskshare.properties +++ b/deskshare/app/src/main/webapp/WEB-INF/deskshare.properties @@ -13,7 +13,8 @@ recordingDirectory=/var/bigbluebutton/deskshare redis.host=127.0.0.1 redis.port=6379 - +# recording keys should expire in 14 days +redis.keyExpiry=1209600 serverPort = 9123 diff --git a/deskshare/app/src/main/webapp/WEB-INF/red5-web.xml b/deskshare/app/src/main/webapp/WEB-INF/red5-web.xml index a2d0249da4..f83f636841 100755 --- a/deskshare/app/src/main/webapp/WEB-INF/red5-web.xml +++ b/deskshare/app/src/main/webapp/WEB-INF/red5-web.xml @@ -69,5 +69,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <bean id="redisRecorder" class="org.bigbluebutton.deskshare.server.recorder.EventRecorder"> <constructor-arg index="0" value="${redis.host}"/> <constructor-arg index="1" value="${redis.port}"/> + <constructor-arg index="2" value="${redis.keyExpiry}"/> </bean> </beans> -- GitLab