From 300e8510a9491b6ecb52f178ca5bf890ec2f3776 Mon Sep 17 00:00:00 2001
From: uhensler <urs.hensler@frentix.com>
Date: Tue, 17 Dec 2019 07:27:28 +0100
Subject: [PATCH] OO-4357: Use only one thread pool to watch live stream events

---
 .../nodes/livestream/LiveStreamService.java    |  3 +++
 ...iceImpl.java => LiveStreamServiceImpl.java} | 18 ++++++++++++++++--
 .../livestream/ui/LiveStreamsController.java   | 17 +++++++++++------
 3 files changed, 30 insertions(+), 8 deletions(-)
 rename src/main/java/org/olat/course/nodes/livestream/manager/{LIveStreamServiceImpl.java => LiveStreamServiceImpl.java} (88%)

diff --git a/src/main/java/org/olat/course/nodes/livestream/LiveStreamService.java b/src/main/java/org/olat/course/nodes/livestream/LiveStreamService.java
index 5ffc1a1f51d..e642a0eb71f 100644
--- a/src/main/java/org/olat/course/nodes/livestream/LiveStreamService.java
+++ b/src/main/java/org/olat/course/nodes/livestream/LiveStreamService.java
@@ -20,6 +20,7 @@
 package org.olat.course.nodes.livestream;
 
 import java.util.List;
+import java.util.concurrent.ScheduledExecutorService;
 
 import org.olat.course.nodes.cal.CourseCalendars;
 
@@ -31,6 +32,8 @@ import org.olat.course.nodes.cal.CourseCalendars;
  */
 public interface LiveStreamService {
 	
+	ScheduledExecutorService getScheduler();
+	
 	List<? extends LiveStreamEvent> getRunningEvents(CourseCalendars calendars, int bufferBeforeMin,
 			int bufferAfterMin);
 
diff --git a/src/main/java/org/olat/course/nodes/livestream/manager/LIveStreamServiceImpl.java b/src/main/java/org/olat/course/nodes/livestream/manager/LiveStreamServiceImpl.java
similarity index 88%
rename from src/main/java/org/olat/course/nodes/livestream/manager/LIveStreamServiceImpl.java
rename to src/main/java/org/olat/course/nodes/livestream/manager/LiveStreamServiceImpl.java
index db1bc78323f..5b7a52b92f5 100644
--- a/src/main/java/org/olat/course/nodes/livestream/manager/LIveStreamServiceImpl.java
+++ b/src/main/java/org/olat/course/nodes/livestream/manager/LiveStreamServiceImpl.java
@@ -23,6 +23,9 @@ import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ThreadFactory;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
@@ -35,6 +38,7 @@ import org.olat.course.nodes.livestream.LiveStreamEvent;
 import org.olat.course.nodes.livestream.LiveStreamService;
 import org.olat.course.nodes.livestream.model.LiveStreamEventImpl;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
 import org.springframework.stereotype.Service;
 
 /**
@@ -44,11 +48,22 @@ import org.springframework.stereotype.Service;
  *
  */
 @Service
-public class LIveStreamServiceImpl implements LiveStreamService {
+public class LiveStreamServiceImpl implements LiveStreamService {
+	
+	private ScheduledExecutorService scheduler;
 	
 	@Autowired
 	private CalendarManager calendarManager;
 
+	@Override
+	public ScheduledExecutorService getScheduler() {
+		if (scheduler == null) {
+			ThreadFactory threadFactory = new CustomizableThreadFactory("oo-livestream-");
+			scheduler = Executors.newScheduledThreadPool(1, threadFactory);
+		}
+		return scheduler;
+	}
+
 	@Override
 	public List<? extends LiveStreamEvent> getRunningEvents(CourseCalendars calendars, int bufferBeforeMin,
 			int bufferAfterMin) {
@@ -132,5 +147,4 @@ public class LIveStreamServiceImpl implements LiveStreamService {
 		}
 		return liveStreamEvent;
 	}
-
 }
diff --git a/src/main/java/org/olat/course/nodes/livestream/ui/LiveStreamsController.java b/src/main/java/org/olat/course/nodes/livestream/ui/LiveStreamsController.java
index 58ea48fa253..8cf2a144172 100644
--- a/src/main/java/org/olat/course/nodes/livestream/ui/LiveStreamsController.java
+++ b/src/main/java/org/olat/course/nodes/livestream/ui/LiveStreamsController.java
@@ -19,8 +19,8 @@
  */
 package org.olat.course.nodes.livestream.ui;
 
-import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.logging.log4j.Logger;
@@ -33,7 +33,9 @@ import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.UserSession;
 import org.olat.course.nodes.cal.CourseCalendars;
+import org.olat.course.nodes.livestream.LiveStreamService;
 import org.olat.modules.ModuleConfiguration;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * 
@@ -49,8 +51,11 @@ public class LiveStreamsController extends BasicController {
 	
 	private LiveStreamViewersController viewersCtrl;
 	private LiveStreamListController listCtrl;
+	
+	private final ScheduledFuture<?> refreshFuture;
 
-	private ScheduledExecutorService scheduler;
+	@Autowired
+	private LiveStreamService liveStreamService;
 
 	public LiveStreamsController(UserRequest ureq, WindowControl wControl, ModuleConfiguration moduleConfiguration,
 			CourseCalendars calendars) {
@@ -65,9 +70,9 @@ public class LiveStreamsController extends BasicController {
 		listenTo(listCtrl);
 		mainVC.put("list", listCtrl.getInitialComponent());
 		
-		scheduler = Executors.newScheduledThreadPool(1);
-		scheduler.scheduleAtFixedRate(new RefreshTask(ureq.getUserSession()), 10, 10, TimeUnit.SECONDS);
-
+		ScheduledExecutorService scheduler = liveStreamService.getScheduler();
+		refreshFuture = scheduler.scheduleAtFixedRate(new RefreshTask(ureq.getUserSession()), 10, 10, TimeUnit.SECONDS);
+		
 		putInitialPanel(mainVC);
 	}
 
@@ -84,7 +89,7 @@ public class LiveStreamsController extends BasicController {
 
 	@Override
 	protected void doDispose() {
-		scheduler.shutdown();
+		refreshFuture.cancel(true);
 	}
 
 	private final class RefreshTask implements Runnable {
-- 
GitLab