From 3b3fcaa1f0e6ffc3ce205523e3230b0423156a92 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Thu, 2 Sep 2021 17:53:05 +0200 Subject: [PATCH] openvidu-server: fix nullpointers when removing crashed Media Node --- .../openvidu/server/core/SessionEventsHandler.java | 4 ++-- .../server/kurento/kms/FixedOneKmsManager.java | 3 ++- .../io/openvidu/server/kurento/kms/KmsManager.java | 8 ++++---- .../io/openvidu/server/utils/LocalDockerManager.java | 12 +++++++----- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java b/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java index e9bd2b69..ca3a3a92 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java @@ -649,8 +649,8 @@ public class SessionEventsHandler { * This handler must be called before cleaning any sessions or recordings hosted * by the crashed Media Node */ - public void onMediaNodeCrashed(Kms kms, long timeOfKurentoDisconnection, List sessionIds, - List recordingIds) { + public void onMediaNodeCrashed(Kms kms, String environmentId, long timeOfKurentoDisconnection, + List sessionIds, List recordingIds) { } public void onMasterNodeCrashed(CDREventNodeCrashed event) { diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/FixedOneKmsManager.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/FixedOneKmsManager.java index 6d4cdbb2..3c151f9a 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/FixedOneKmsManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/FixedOneKmsManager.java @@ -87,7 +87,8 @@ public class FixedOneKmsManager extends KmsManager { } @Override - protected void removeMediaNodeUponCrash(String mediaNodeId) { + protected String removeMediaNodeUponCrash(String mediaNodeId) { + return null; } @Override 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 62a5a6fc..a15fced9 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 @@ -222,7 +222,7 @@ public abstract class KmsManager { // 1. Remove Media Node from cluster log.warn("Removing Media Node {} after crash", kms.getId()); - removeMediaNodeUponCrash(kms.getId()); + String environmentId = removeMediaNodeUponCrash(kms.getId()); // 2. Close all sessions and recordings with reason "nodeCrashed" log.warn("Closing {} sessions hosted by KMS with uri {}: {}", kms.getKurentoSessions().size(), @@ -237,8 +237,8 @@ public abstract class KmsManager { } // 3. Send nodeCrashed webhook event - sessionEventsHandler.onMediaNodeCrashed(kms, timeOfKurentoDisconnection, affectedSessionIds, - affectedRecordingIds); + sessionEventsHandler.onMediaNodeCrashed(kms, environmentId, timeOfKurentoDisconnection, + affectedSessionIds, affectedRecordingIds); } else { @@ -337,7 +337,7 @@ public abstract class KmsManager { public abstract void decrementActiveRecordings(RecordingProperties recordingProperties, String recordingId, Session session); - protected abstract void removeMediaNodeUponCrash(String mediaNodeId); + protected abstract String removeMediaNodeUponCrash(String mediaNodeId); @PostConstruct protected abstract void postConstructInitKurentoClients(); diff --git a/openvidu-server/src/main/java/io/openvidu/server/utils/LocalDockerManager.java b/openvidu-server/src/main/java/io/openvidu/server/utils/LocalDockerManager.java index 2d03208d..b5dacf1e 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/utils/LocalDockerManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/utils/LocalDockerManager.java @@ -26,8 +26,6 @@ import java.util.concurrent.TimeUnit; import javax.ws.rs.ProcessingException; -import com.github.dockerjava.api.model.*; -import com.google.common.collect.ImmutableList; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,11 +39,17 @@ import com.github.dockerjava.api.exception.ConflictException; import com.github.dockerjava.api.exception.DockerClientException; import com.github.dockerjava.api.exception.InternalServerErrorException; import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.model.Bind; +import com.github.dockerjava.api.model.Container; +import com.github.dockerjava.api.model.DeviceRequest; +import com.github.dockerjava.api.model.HostConfig; +import com.github.dockerjava.api.model.Volume; import com.github.dockerjava.core.DefaultDockerClientConfig; import com.github.dockerjava.core.DockerClientBuilder; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.core.command.ExecStartResultCallback; import com.github.dockerjava.core.command.PullImageResultCallback; +import com.google.common.collect.ImmutableList; import io.openvidu.client.OpenViduException; import io.openvidu.client.OpenViduException.Code; @@ -134,9 +138,7 @@ public class LocalDockerManager implements DockerManager { if (enableGPU) { DeviceRequest deviceRequest = new DeviceRequest() - .withCapabilities(ImmutableList.of(ImmutableList.of("gpu"))) - .withCount(-1) - .withOptions(null); + .withCapabilities(ImmutableList.of(ImmutableList.of("gpu"))).withCount(-1).withOptions(null); hostConfig.withDeviceRequests(ImmutableList.of(deviceRequest)); }