openvidu-server: close sessions upon nodeCrash refactoring

pull/621/head
pabloFuente 2021-04-19 15:29:57 +02:00
parent 880d5ced54
commit fa9268b124
2 changed files with 24 additions and 4 deletions

View File

@ -86,6 +86,10 @@ public class FixedOneKmsManager extends KmsManager {
} }
} }
@Override
protected void removeMediaNodeUponCrash(String mediaNodeId) {
}
@Override @Override
@PostConstruct @PostConstruct
protected void postConstructInitKurentoClients() { protected void postConstructInitKurentoClients() {

View File

@ -113,7 +113,7 @@ public abstract class KmsManager {
final protected Map<String, Kms> kmss = new ConcurrentHashMap<>(); final protected Map<String, Kms> kmss = new ConcurrentHashMap<>();
private SessionManager sessionManager; protected SessionManager sessionManager;
public KmsManager(SessionManager sessionManager) { public KmsManager(SessionManager sessionManager) {
this.sessionManager = sessionManager; this.sessionManager = sessionManager;
@ -217,13 +217,15 @@ public abstract class KmsManager {
final long timeOfKurentoDisconnection = kms.getTimeOfKurentoClientDisconnection(); final long timeOfKurentoDisconnection = kms.getTimeOfKurentoClientDisconnection();
sessionEventsHandler.onMediaNodeCrashed(kms, timeOfKurentoDisconnection); sessionEventsHandler.onMediaNodeCrashed(kms, timeOfKurentoDisconnection);
// Close all session with reason "nodeCrashed"
log.warn("Closing {} sessions hosted by KMS with uri {}: {}", kms.getKurentoSessions().size(), log.warn("Closing {} sessions hosted by KMS with uri {}: {}", kms.getKurentoSessions().size(),
kms.getUri(), kms.getKurentoSessions().stream().map(s -> s.getSessionId()) kms.getUri(), kms.getKurentoSessions().stream().map(s -> s.getSessionId())
.collect(Collectors.joining(",", "[", "]"))); .collect(Collectors.joining(",", "[", "]")));
closeAllSessionsInKms(kms, EndReason.nodeCrashed);
kms.getKurentoSessions().forEach(kSession -> { // Remove Media Node
sessionManager.closeSession(kSession.getSessionId(), EndReason.nodeCrashed); log.warn("Removing Media Node {} after crash", kms.getId());
}); removeMediaNodeUponCrash(kms.getId());
} else { } else {
@ -313,6 +315,18 @@ public abstract class KmsManager {
} }
} }
public void closeAllSessionsInKms(Kms kms, EndReason reason) {
// Close all active sessions
kms.getKurentoSessions().forEach(kSession -> {
sessionManager.closeSession(kSession.getSessionId(), reason);
});
// Close all non active sessions configured with this Media Node
sessionManager.closeNonActiveSessions(sessionNotActive -> {
return (sessionNotActive.getSessionProperties().mediaNode() != null
&& kms.getId().equals(sessionNotActive.getSessionProperties().mediaNode()));
});
}
public abstract List<Kms> initializeKurentoClients(List<KmsProperties> kmsProperties, boolean disconnectUponFailure) public abstract List<Kms> initializeKurentoClients(List<KmsProperties> kmsProperties, boolean disconnectUponFailure)
throws Exception; throws Exception;
@ -322,6 +336,8 @@ public abstract class KmsManager {
public abstract void decrementActiveRecordings(RecordingProperties recordingProperties, String recordingId, public abstract void decrementActiveRecordings(RecordingProperties recordingProperties, String recordingId,
Session session); Session session);
protected abstract void removeMediaNodeUponCrash(String mediaNodeId);
@PostConstruct @PostConstruct
protected abstract void postConstructInitKurentoClients(); protected abstract void postConstructInitKurentoClients();