openvidu-server: protect get KMS if there's no running and connected one

pull/508/head
pabloFuente 2020-06-16 14:53:47 +02:00
parent a3406d3dfe
commit 7085bb899b
2 changed files with 60 additions and 46 deletions

View File

@ -114,8 +114,12 @@ public abstract class KmsManager {
public synchronized Kms getLessLoadedConnectedAndRunningKms() throws NoSuchElementException { public synchronized Kms getLessLoadedConnectedAndRunningKms() throws NoSuchElementException {
List<KmsLoad> kmsLoads = getKmsLoads().stream().filter(kmsLoad -> kmsLoad.kms.isKurentoClientConnected() List<KmsLoad> kmsLoads = getKmsLoads().stream().filter(kmsLoad -> kmsLoad.kms.isKurentoClientConnected()
&& mediaNodeStatusManager.isRunning(kmsLoad.kms.getId())).collect(Collectors.toList()); && mediaNodeStatusManager.isRunning(kmsLoad.kms.getId())).collect(Collectors.toList());
if (kmsLoads.isEmpty()) {
throw new NoSuchElementException();
} else {
return Collections.min(kmsLoads).kms; return Collections.min(kmsLoads).kms;
} }
}
public synchronized List<KmsLoad> getKmssSortedByLoad() { public synchronized List<KmsLoad> getKmssSortedByLoad() {
List<KmsLoad> kmsLoads = getKmsLoads(); List<KmsLoad> kmsLoads = getKmsLoads();

View File

@ -27,6 +27,7 @@ import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
@ -67,6 +68,7 @@ import io.openvidu.server.core.Session;
import io.openvidu.server.core.SessionEventsHandler; import io.openvidu.server.core.SessionEventsHandler;
import io.openvidu.server.core.SessionManager; import io.openvidu.server.core.SessionManager;
import io.openvidu.server.kurento.core.KurentoSession; import io.openvidu.server.kurento.core.KurentoSession;
import io.openvidu.server.kurento.kms.Kms;
import io.openvidu.server.kurento.kms.KmsManager; import io.openvidu.server.kurento.kms.KmsManager;
import io.openvidu.server.recording.Recording; import io.openvidu.server.recording.Recording;
import io.openvidu.server.recording.RecordingDownloader; import io.openvidu.server.recording.RecordingDownloader;
@ -678,7 +680,14 @@ public class RecordingManager {
if (this.kmsManager.getKmss().isEmpty()) { if (this.kmsManager.getKmss().isEmpty()) {
log.warn("No KMSs were defined in KMS_URIS array. Recording path check aborted"); log.warn("No KMSs were defined in KMS_URIS array. Recording path check aborted");
} else { } else {
Kms kms = null;
try {
kms = this.kmsManager.getLessLoadedConnectedAndRunningKms();
} catch (NoSuchElementException e) {
}
if (kms == null) {
log.warn("There are not running and connected KMSs. Recording path check aborted");
} else {
MediaPipeline pipeline = this.kmsManager.getLessLoadedConnectedAndRunningKms().getKurentoClient() MediaPipeline pipeline = this.kmsManager.getLessLoadedConnectedAndRunningKms().getKurentoClient()
.createMediaPipeline(); .createMediaPipeline();
RecorderEndpoint recorder = new RecorderEndpoint.Builder(pipeline, "file://" + testFilePath).build(); RecorderEndpoint recorder = new RecorderEndpoint.Builder(pipeline, "file://" + testFilePath).build();
@ -733,6 +742,7 @@ public class RecordingManager {
throw new OpenViduException(Code.RECORDING_PATH_NOT_VALID, errorMessage); throw new OpenViduException(Code.RECORDING_PATH_NOT_VALID, errorMessage);
} }
} }
}
if (openviduConfig.openviduRecordingCustomLayoutChanged(openviduRecordingCustomLayout)) { if (openviduConfig.openviduRecordingCustomLayoutChanged(openviduRecordingCustomLayout)) {
// Property OPENVIDU_RECORDING_CUSTOM_LAYOUT changed // Property OPENVIDU_RECORDING_CUSTOM_LAYOUT changed