mirror of https://github.com/OpenVidu/openvidu.git
openvidu-server: add ReentrantLock to KmsManager
parent
c6adaa2688
commit
5c4335b6d4
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue