mirror of https://github.com/OpenVidu/openvidu.git
openvidu-server: avoid race condition when checking new final user
parent
9cd389eb61
commit
a007f30687
|
@ -64,14 +64,14 @@ public class FinalUser {
|
||||||
return connections;
|
return connections;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addConnection(Participant participant) {
|
public void addConnectionIfAbsent(Participant participant) {
|
||||||
this.connections.put(participant.getParticipantPublicId(), new ParticipantSummary(this.sessionId, participant));
|
this.connections.putIfAbsent(participant.getParticipantPublicId(), new ParticipantSummary(this.sessionId, participant));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setConnection(CDREventParticipant event) {
|
public void setConnection(CDREventParticipant event) {
|
||||||
ParticipantSummary oldSummary = this.connections.remove(event.getParticipant().getParticipantPublicId());
|
final String participantPublicId = event.getParticipant().getParticipantPublicId();
|
||||||
this.connections.put(event.getParticipant().getParticipantPublicId(),
|
ParticipantSummary oldSummary = this.connections.remove(participantPublicId);
|
||||||
new ParticipantSummary(event, oldSummary));
|
this.connections.put(participantPublicId, new ParticipantSummary(event, oldSummary));
|
||||||
}
|
}
|
||||||
|
|
||||||
public JsonObject toJson() {
|
public JsonObject toJson() {
|
||||||
|
|
|
@ -368,18 +368,11 @@ public abstract class SessionManager {
|
||||||
p.setParticipantPublicId(participantPublicId);
|
p.setParticipantPublicId(participantPublicId);
|
||||||
}
|
}
|
||||||
|
|
||||||
FinalUser finalUser = this.sessionidFinalUsers.get(sessionId).get(finalUserId);
|
this.sessionidFinalUsers.get(sessionId).computeIfAbsent(finalUserId, k -> {
|
||||||
if (finalUser == null) {
|
log.info("Participant {} of session {} is a final user connecting to this session for the first time",
|
||||||
// First connection for new final user
|
|
||||||
log.info("Participant {} of session {} belongs to a new final user", p.getParticipantPublicId(),
|
|
||||||
sessionId);
|
|
||||||
this.sessionidFinalUsers.get(sessionId).put(finalUserId, new FinalUser(finalUserId, sessionId, p));
|
|
||||||
} else {
|
|
||||||
// New connection for previously existing final user
|
|
||||||
log.info("Participant {} of session {} belongs to a previously existing user",
|
|
||||||
p.getParticipantPublicId(), sessionId);
|
p.getParticipantPublicId(), sessionId);
|
||||||
finalUser.addConnection(p);
|
return new FinalUser(finalUserId, sessionId, p);
|
||||||
}
|
}).addConnectionIfAbsent(p);
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -33,8 +33,8 @@ public class ParticipantSummary {
|
||||||
private Map<String, CDREventWebrtcConnection> publishers = new ConcurrentHashMap<>();
|
private Map<String, CDREventWebrtcConnection> publishers = new ConcurrentHashMap<>();
|
||||||
private Map<String, CDREventWebrtcConnection> subscribers = new ConcurrentHashMap<>();
|
private Map<String, CDREventWebrtcConnection> subscribers = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
public ParticipantSummary(CDREventParticipant event) {
|
public ParticipantSummary(String sessionId, Participant participant) {
|
||||||
this.eventParticipantEnd = event;
|
this.eventParticipantEnd = new CDREventParticipant(sessionId, participant);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ParticipantSummary(CDREventParticipant event, ParticipantSummary oldSummary) {
|
public ParticipantSummary(CDREventParticipant event, ParticipantSummary oldSummary) {
|
||||||
|
@ -43,10 +43,6 @@ public class ParticipantSummary {
|
||||||
this.subscribers = oldSummary.subscribers;
|
this.subscribers = oldSummary.subscribers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ParticipantSummary(String sessionId, Participant participant) {
|
|
||||||
this.eventParticipantEnd = new CDREventParticipant(sessionId, participant);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addPublisherClosed(String streamId, CDREventWebrtcConnection event) {
|
public void addPublisherClosed(String streamId, CDREventWebrtcConnection event) {
|
||||||
this.publishers.put(streamId, event);
|
this.publishers.put(streamId, event);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue