Skip to content

Commit

Permalink
bbb-web: Fix for race condition that causes the maxParticipants filte…
Browse files Browse the repository at this point in the history
…r to fail (registeredUser now tracks the timestamp instead of Date)
  • Loading branch information
jfederico committed May 19, 2016
1 parent 81aef00 commit 875ad47
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 14 deletions.
Expand Up @@ -132,18 +132,18 @@ public void removeExpiredMeetings() {
*/
public void purgeRegisteredUsers() {
for (AbstractMap.Entry<String, Meeting> entry : this.meetings.entrySet()) {
Date now = new Date();
Long now = System.nanoTime();
Meeting meeting = entry.getValue();

ConcurrentMap<String, User> users = meeting.getUsersMap();

for (AbstractMap.Entry<String, Date> registeredUser : meeting.getRegisteredUsers().entrySet()) {
for (AbstractMap.Entry<String, Long> registeredUser : meeting.getRegisteredUsers().entrySet()) {
String registeredUserID = registeredUser.getKey();
Date registeredUserDate = registeredUser.getValue();
Long registeredUserDate = registeredUser.getValue();

long registrationTime = registeredUserDate.getTime();
long elapsedTime = now.getTime() - registrationTime;
if ( elapsedTime >= 600000 && !users.containsKey(registeredUserID)) {
long registrationTime = registeredUserDate.longValue();
long elapsedTime = now - registrationTime;
if ( elapsedTime >= 60000 && !users.containsKey(registeredUserID)) {
meeting.userUnregistered(registeredUserID);
}
}
Expand Down Expand Up @@ -659,7 +659,7 @@ private void userLeft(UserLeft message) {
m.setEndTime(System.currentTimeMillis());
}

Date userRegistered = m.userUnregistered(message.userId);
Long userRegistered = m.userUnregistered(message.userId);
if (userRegistered != null) {
log.info("User unregistered from meeting");
} else {
Expand Down
Expand Up @@ -61,7 +61,7 @@ public class Meeting {
private Map<String, String> metadata;
private Map<String, Object> userCustomData;
private final ConcurrentMap<String, User> users;
private final ConcurrentMap<String, Date> registeredUsers;
private final ConcurrentMap<String, Long> registeredUsers;
private final ConcurrentMap<String, Config> configs;

private long lastUserLeftOn = 0;
Expand All @@ -88,7 +88,7 @@ record = builder.record;
userCustomData = new HashMap<String, Object>();

users = new ConcurrentHashMap<String, User>();
registeredUsers = new ConcurrentHashMap<String, Date>();
registeredUsers = new ConcurrentHashMap<String, Long>();

configs = new ConcurrentHashMap<String, Config>();
}
Expand Down Expand Up @@ -466,17 +466,16 @@ public Meeting build() {
}

public void userRegistered(String internalUserID) {
Date now = new java.util.Date();
this.registeredUsers.put(internalUserID, now);
this.registeredUsers.put(internalUserID, new Long(System.nanoTime()));
}

public Date userUnregistered(String userid) {
public Long userUnregistered(String userid) {
String internalUserIDSeed = userid.split("_")[0];
Date r = (Date) this.registeredUsers.remove(internalUserIDSeed);
Long r = (Long) this.registeredUsers.remove(internalUserIDSeed);
return r;
}

public ConcurrentMap<String, Date> getRegisteredUsers() {
public ConcurrentMap<String, Long> getRegisteredUsers() {
return registeredUsers;
}
}

0 comments on commit 875ad47

Please sign in to comment.