openvidu-server: add ReentrantLock to KmsManager

pull/370/head
pabloFuente 2019-12-04 15:46:10 +01:00
parent c6adaa2688
commit 5c4335b6d4
2 changed files with 12 additions and 0 deletions

View File

@ -82,6 +82,7 @@ public class KurentoSessionManager extends SessionManager {
@Override
public synchronized void joinRoom(Participant participant, String sessionId, Integer transactionId) {
Set<Participant> existingParticipants = null;
boolean lockAcquired = false;
try {
KurentoSession kSession = (KurentoSession) sessions.get(sessionId);
@ -99,6 +100,9 @@ public class KurentoSessionManager extends SessionManager {
openviduConfig, recordingManager);
}
lockAcquired = true;
KmsManager.selectAndRemoveKmsLock.lock();
Kms lessLoadedKms = null;
try {
lessLoadedKms = this.kmsManager.getLessLoadedAndRunningKms();
@ -126,6 +130,10 @@ public class KurentoSessionManager extends SessionManager {
log.warn("PARTICIPANT {}: Error joining/creating session {}", participant.getParticipantPublicId(),
sessionId, e);
sessionEventsHandler.onParticipantJoined(participant, sessionId, null, transactionId, e);
} finally {
if (lockAcquired) {
KmsManager.selectAndRemoveKmsLock.unlock();
}
}
if (existingParticipants != null) {
sessionEventsHandler.onParticipantJoined(participant, sessionId, existingParticipants, transactionId, null);

View File

@ -24,6 +24,8 @@ import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
import javax.annotation.PostConstruct;
@ -41,6 +43,8 @@ import io.openvidu.server.utils.MediaNodeStatusManager;
public abstract class KmsManager {
public static final Lock selectAndRemoveKmsLock = new ReentrantLock(true);
public class KmsLoad implements Comparable<KmsLoad> {
private Kms kms;