diff --git a/openvidu-server/src/main/java/io/openvidu/server/OpenViduServer.java b/openvidu-server/src/main/java/io/openvidu/server/OpenViduServer.java index 83f96ac3..8d8f0bfd 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/OpenViduServer.java +++ b/openvidu-server/src/main/java/io/openvidu/server/OpenViduServer.java @@ -66,6 +66,8 @@ import io.openvidu.server.rpc.RpcNotificationService; import io.openvidu.server.utils.CommandExecutor; import io.openvidu.server.utils.GeoLocationByIp; import io.openvidu.server.utils.GeoLocationByIpDummy; +import io.openvidu.server.utils.QuarantineKiller; +import io.openvidu.server.utils.QuarantineKillerDummy; import io.openvidu.server.webhook.CDRLoggerWebhook; /** @@ -179,6 +181,12 @@ public class OpenViduServer implements JsonRpcConfigurer { return new GeoLocationByIpDummy(); } + @Bean + @ConditionalOnMissingBean + public QuarantineKiller quarantineKiller() { + return new QuarantineKillerDummy(); + } + @Override public void registerJsonRpcHandlers(JsonRpcHandlerRegistry registry) { registry.addHandler(rpcHandler().withPingWatchdog(true).withInterceptors(new HttpHandshakeInterceptor()), diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java index 89960a5d..902ea139 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java @@ -51,6 +51,7 @@ import io.openvidu.server.kurento.core.KurentoTokenOptions; import io.openvidu.server.recording.service.RecordingManager; import io.openvidu.server.utils.FormatChecker; import io.openvidu.server.utils.GeoLocation; +import io.openvidu.server.utils.QuarantineKiller; public abstract class SessionManager { @@ -71,6 +72,9 @@ public abstract class SessionManager { @Autowired protected TokenGenerator tokenGenerator; + @Autowired + protected QuarantineKiller quarantineKiller; + public FormatChecker formatChecker = new FormatChecker(); protected ConcurrentMap sessions = new ConcurrentHashMap<>(); @@ -500,6 +504,8 @@ public abstract class SessionManager { recordingManager.stopRecording(session, null, RecordingManager.finalReason(reason)); } + final String mediaServerId = session.getMediaServerId(); + if (session.close(reason)) { sessionEventsHandler.onSessionClosed(session.getSessionId(), reason); } @@ -507,6 +513,10 @@ public abstract class SessionManager { this.cleanCollections(session.getSessionId()); log.info("Session '{}' removed and closed", session.getSessionId()); + + if (mediaServerId != null) { + this.quarantineKiller.dropMediaServer(mediaServerId); + } } protected void cleanCollections(String sessionId) { diff --git a/openvidu-server/src/main/java/io/openvidu/server/utils/QuarantineKiller.java b/openvidu-server/src/main/java/io/openvidu/server/utils/QuarantineKiller.java new file mode 100644 index 00000000..c88b300f --- /dev/null +++ b/openvidu-server/src/main/java/io/openvidu/server/utils/QuarantineKiller.java @@ -0,0 +1,7 @@ +package io.openvidu.server.utils; + +public interface QuarantineKiller { + + public void dropMediaServer(String mediaServerId); + +} diff --git a/openvidu-server/src/main/java/io/openvidu/server/utils/QuarantineKillerDummy.java b/openvidu-server/src/main/java/io/openvidu/server/utils/QuarantineKillerDummy.java new file mode 100644 index 00000000..8a10475b --- /dev/null +++ b/openvidu-server/src/main/java/io/openvidu/server/utils/QuarantineKillerDummy.java @@ -0,0 +1,9 @@ +package io.openvidu.server.utils; + +public class QuarantineKillerDummy implements QuarantineKiller { + + @Override + public void dropMediaServer(String mediaServerId) { + } + +}