openvidu-server: initializeKurentoClients refactoring (support for POST /pro/media-servers)

pull/375/head
pabloFuente 2019-07-04 10:25:37 +02:00
parent a4509528f1
commit a79434fb4a
5 changed files with 43 additions and 29 deletions

View File

@ -76,8 +76,8 @@ import io.openvidu.server.webhook.CDRLoggerWebhook;
* - size: number
* - status: string
* - webrtcConnectionDestroyed.reason: "unsubscribe", "unpublish", "disconnect", "networkDisconnect", "mediaServerDisconnect", "openviduServerStopped"
* - participantLeft.reason: "unsubscribe", "unpublish", "disconnect", "networkDisconnect", "openviduServerStopped"
* - sessionDestroyed.reason: "lastParticipantLeft", "openviduServerStopped"
* - participantLeft.reason: "unsubscribe", "unpublish", "disconnect", "networkDisconnect", "mediaServerDisconnect", "openviduServerStopped"
* - sessionDestroyed.reason: "lastParticipantLeft", "mediaServerDisconnect", "openviduServerStopped"
* - recordingStopped.reason: "recordingStoppedByServer", "lastParticipantLeft", "sessionClosedByServer", "automaticStop", "mediaServerDisconnect", "openviduServerStopped"
*
* [OPTIONAL_PROPERTIES]:
@ -210,8 +210,11 @@ public class CallDetailRecord {
RecordingManager.finalReason(reason), timestamp);
this.log(recordingStoppedEvent);
// Summary: update ended recording
sessionManager.getAccumulatedRecordings(recording.getSessionId()).add(recordingStoppedEvent);
// FIXME: Summary: update ended recording if recordSessionDestroyed has not been
// already called
if (sessionManager.getAccumulatedRecordings(recording.getSessionId()) != null) {
sessionManager.getAccumulatedRecordings(recording.getSessionId()).add(recordingStoppedEvent);
}
}
public void recordRecordingStatusChanged(Recording recording, EndReason finalReason, long timestamp,

View File

@ -20,6 +20,7 @@ package io.openvidu.server.kurento.core;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.NoSuchElementException;
import java.util.Set;
import org.kurento.client.GenericMediaElement;
@ -90,7 +91,13 @@ public class KurentoSessionManager extends SessionManager {
openviduConfig, recordingManager);
}
Kms lessLoadedKms = this.kmsManager.getLessLoadedKms();
Kms lessLoadedKms = null;
try {
lessLoadedKms = this.kmsManager.getLessLoadedKms();
} catch (NoSuchElementException e) {
throw new OpenViduException(Code.ROOM_CANNOT_BE_CREATED_ERROR_CODE,
"There is no available media server where to initialize session '" + sessionId + "'");
}
log.info("KMS less loaded is {} with a load of {}", lessLoadedKms.getUri(), lessLoadedKms.getLoad());
kSession = createSession(sessionNotActive, lessLoadedKms);
}
@ -301,9 +308,10 @@ public class KurentoSessionManager extends SessionManager {
// Abort automatic recording stop (user published before timeout)
log.info("Participant {} published before timeout finished. Aborting automatic recording stop",
participant.getParticipantPublicId());
boolean stopAborted = recordingManager.abortAutomaticRecordingStopThread(kSession);
boolean stopAborted = recordingManager.abortAutomaticRecordingStopThread(kSession,
EndReason.automaticStop);
if (stopAborted) {
log.info("Automatic recording stopped succesfully aborted");
log.info("Automatic recording stopped successfully aborted");
} else {
log.info("Automatic recording stopped couldn't be aborted. Recording of session {} has stopped",
kSession.getSessionId());

View File

@ -17,21 +17,22 @@
package io.openvidu.server.kurento.kms;
import java.util.List;
import org.kurento.client.KurentoClient;
import org.kurento.commons.exception.KurentoException;
public class FixedOneKmsManager extends KmsManager {
@Override
protected void initializeKurentoClients() {
final String kmsUri = this.openviduConfig.getKmsUris().get(0);
public void initializeKurentoClients(List<String> kmsUris) throws Exception {
final String kmsUri = kmsUris.get(0);
KurentoClient kClient = null;
try {
kClient = KurentoClient.create(kmsUri, this.generateKurentoConnectionListener(kmsUri));
} catch (KurentoException e) {
log.error("KMS in {} is not reachable by OpenVidu Server", kmsUri);
log.error("Shutting down OpenVidu Server");
System.exit(1);
throw new Exception();
}
Kms kms = new Kms(kmsUri, kClient, loadManager);
kms.setKurentoClientConnected(true);

View File

@ -22,6 +22,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.concurrent.ConcurrentHashMap;
import javax.annotation.PostConstruct;
@ -89,24 +90,19 @@ public abstract class KmsManager {
this.kmss.put(kms.getUri(), kms);
}
public synchronized void removeKms(Kms kms) {
this.kmss.remove(kms.getUri());
public synchronized void removeKms(String kmsUri) {
this.kmss.remove(kmsUri);
}
public synchronized Kms getLessLoadedKms() {
public synchronized Kms getLessLoadedKms() throws NoSuchElementException {
return Collections.min(getKmsLoads()).kms;
}
public synchronized Kms getNextLessLoadedKms() {
List<KmsLoad> sortedLoads = getKmssSortedByLoad();
if (sortedLoads.size() > 1) {
return sortedLoads.get(1).kms;
} else {
return sortedLoads.get(0).kms;
}
public Kms getKms(String kmsUri) {
return this.kmss.get(kmsUri);
}
public synchronized Collection<Kms> getKmss() {
public Collection<Kms> getKmss() {
return this.kmss.values();
}
@ -179,11 +175,17 @@ public abstract class KmsManager {
};
}
protected abstract void initializeKurentoClients();
public abstract void initializeKurentoClients(List<String> kmsUris) throws Exception;
@PostConstruct
protected void postConstruct() {
this.initializeKurentoClients();
private void postConstruct() {
try {
this.initializeKurentoClients(this.openviduConfig.getKmsUris());
} catch (Exception e) {
// Some KMS wasn't reachable
log.error("Shutting down OpenVidu Server");
System.exit(1);
}
}
}

View File

@ -226,7 +226,7 @@ public class RecordingManager {
recording = this.singleStreamRecordingService.stopRecording(session, recording, reason);
break;
}
this.abortAutomaticRecordingStopThread(session);
this.abortAutomaticRecordingStopThread(session, reason);
return recording;
}
@ -248,7 +248,7 @@ public class RecordingManager {
kmsDisconnectionTime);
break;
}
this.abortAutomaticRecordingStopThread(session);
this.abortAutomaticRecordingStopThread(session, reason);
return recording;
}
@ -433,7 +433,7 @@ public class RecordingManager {
this.automaticRecordingStopThreads.putIfAbsent(session.getSessionId(), future);
}
public boolean abortAutomaticRecordingStopThread(Session session) {
public boolean abortAutomaticRecordingStopThread(Session session, EndReason reason) {
ScheduledFuture<?> future = this.automaticRecordingStopThreads.remove(session.getSessionId());
if (future != null) {
boolean cancelled = future.cancel(false);
@ -445,7 +445,7 @@ public class RecordingManager {
log.info(
"Ongoing recording of session {} was explicetly stopped within timeout for automatic recording stop. Closing session",
session.getSessionId());
sessionManager.closeSessionAndEmptyCollections(session, EndReason.automaticStop);
sessionManager.closeSessionAndEmptyCollections(session, reason);
sessionManager.showTokens();
}
return cancelled;