openvidu-server: reset MediaPipeline latch on KurentoSession reset

pull/375/head
pabloFuente 2019-06-12 15:06:38 +02:00
parent 42cf3b4841
commit 2551e131ad
3 changed files with 13 additions and 10 deletions

View File

@ -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<ErrorEvent>() {
@ -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;
}

View File

@ -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<String, Kms> kmss = new ConcurrentHashMap<>();
protected Map<String, Kms> kmss = new ConcurrentHashMap<>();
private Iterator<Kms> 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.
*

View File

@ -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