From 2551e131ad365c3d0bddaf4a61dd857f9c24bc1c Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 12 Jun 2019 15:06:38 +0200 Subject: [PATCH] openvidu-server: reset MediaPipeline latch on KurentoSession reset --- .../server/kurento/core/KurentoSession.java | 13 +++++++++++-- .../io/openvidu/server/kurento/kms/KmsManager.java | 9 +-------- .../src/main/resources/application.properties | 1 + 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSession.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSession.java index c0f73d7b..06ca9cb0 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSession.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSession.java @@ -48,6 +48,7 @@ public class KurentoSession extends Session { private MediaPipeline pipeline; private CountDownLatch pipelineLatch = new CountDownLatch(1); + private Throwable pipelineCreationErrorCause; private Kms kms; private KurentoSessionEventsHandler kurentoSessionHandler; @@ -219,6 +220,7 @@ public class KurentoSession extends Session { @Override public void onError(Throwable cause) throws Exception { + pipelineCreationErrorCause = cause; pipelineLatch.countDown(); log.error("SESSION {}: Failed to create MediaPipeline", sessionId, cause); } @@ -228,8 +230,11 @@ public class KurentoSession extends Session { pipelineLatch.countDown(); } if (getPipeline() == null) { - throw new OpenViduException(Code.ROOM_CANNOT_BE_CREATED_ERROR_CODE, - "Unable to create media pipeline for session '" + sessionId + "'"); + final String message = pipelineCreationErrorCause != null + ? pipelineCreationErrorCause.getLocalizedMessage() + : "Unable to create media pipeline for session '" + sessionId + "'"; + pipelineCreationErrorCause = null; + throw new OpenViduException(Code.ROOM_CANNOT_BE_CREATED_ERROR_CODE, message); } pipeline.addErrorListener(new EventListener() { @@ -246,6 +251,10 @@ public class KurentoSession extends Session { private void closePipeline(Runnable callback) { synchronized (pipelineReleaseLock) { + + this.pipelineLatch = new CountDownLatch(1); + this.pipelineCreationErrorCause = null; + if (pipeline == null) { return; } diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/KmsManager.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/KmsManager.java index 3692afda..c37c13fb 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/KmsManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/KmsManager.java @@ -66,7 +66,7 @@ public abstract class KmsManager { private final Logger log = LoggerFactory.getLogger(KmsManager.class); // Using KMS websocket uris as unique identifiers - private Map kmss = new ConcurrentHashMap<>(); + protected Map kmss = new ConcurrentHashMap<>(); private Iterator usageIterator = null; @@ -82,13 +82,6 @@ public abstract class KmsManager { this.kmss.remove(kms.getUri()); } - public synchronized Kms getKms(String sessionId) { - if (usageIterator == null || !usageIterator.hasNext()) { - usageIterator = kmss.values().iterator(); - } - return usageIterator.next(); - } - /** * Returns a {@link Kms} using a round-robin strategy. * diff --git a/openvidu-server/src/main/resources/application.properties b/openvidu-server/src/main/resources/application.properties index 41211b1e..78935f51 100644 --- a/openvidu-server/src/main/resources/application.properties +++ b/openvidu-server/src/main/resources/application.properties @@ -2,6 +2,7 @@ server.address: 0.0.0.0 server.ssl.enabled: true openvidu.recording.version: 2.9.0 logging.level.root=info +spring.main.allow-bean-definition-overriding: true