Author: solomax
Date: Tue Feb 26 07:48:43 2013
New Revision: 1450058
URL: http://svn.apache.org/r1450058
Log:
Cluster: duplicated "null" server is removed from comparison.
Modified:
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ConferenceService.java
Modified:
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ConferenceService.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ConferenceService.java?rev=1450058&r1=1450057&r2=1450058&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ConferenceService.java
(original)
+++
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ConferenceService.java
Tue Feb 26 07:48:43 2013
@@ -45,10 +45,10 @@ import org.apache.openmeetings.data.user
import org.apache.openmeetings.persistence.beans.basic.Server;
import org.apache.openmeetings.persistence.beans.calendar.Appointment;
import org.apache.openmeetings.persistence.beans.room.Client;
-import org.apache.openmeetings.persistence.beans.room.RoomModerator;
-import org.apache.openmeetings.persistence.beans.room.RoomType;
import org.apache.openmeetings.persistence.beans.room.Room;
+import org.apache.openmeetings.persistence.beans.room.RoomModerator;
import org.apache.openmeetings.persistence.beans.room.RoomOrganisation;
+import org.apache.openmeetings.persistence.beans.room.RoomType;
import org.apache.openmeetings.persistence.beans.user.User;
import org.apache.openmeetings.session.ISessionManager;
import org.apache.openmeetings.utils.math.CalendarPatterns;
@@ -774,26 +774,19 @@ public class ConferenceService {
Long user_level = userManager.getUserLevelByID(users_id);
if (authLevelUtil.checkUserLevel(user_level)) {
List<Server> serverList = serverDao.getActiveServers();
-
- //if there is no cluster set up, just redirect to the
current one
+
+ // if there is no cluster set up, just redirect to the
current one
if (serverList.size() == 0) {
return null;
}
-
- //if the room is already opened on a server, redirect
the user to that one,
- //we do that in two loop's because there is no query
involved here,
- //only the first user that enters the conference room
needs to be adjusted
- //to that server that has the less maxUser count in its
rooms currently.
- //But if the room is already opened, then the maxUser
is no more relevant,
- //the user will be just redirected to the same server
-
- //check if the user is on master hosted, (serverId ==
null)
- for (Long activeRoomId :
sessionManager.getActiveRoomIdsByServer(null)) {
- if (activeRoomId != null &&
activeRoomId.equals(roomId)) {
- return null;
- }
- }
-
+
+ // if the room is already opened on a server, redirect
the user to that one,
+ // we do that in two loop's because there is no query
involved here,
+ // only the first user that enters the conference room
needs to be adjusted
+ // to that server that has the less maxUser count in
its rooms currently.
+ // But if the room is already opened, then the maxUser
is no more relevant,
+ // the user will be just redirected to the same server
+
for (Server server : serverList) {
for (Long activeRoomId :
sessionManager.getActiveRoomIdsByServer(server)) {
if (activeRoomId.equals(roomId)) {
@@ -801,53 +794,44 @@ public class ConferenceService {
}
}
}
-
- //the room is not opened on any server yet, its the
first user, get the maxUser
- //per room
-
- //TODO / FIXME: Get room's maxUser in a single query
instead a query for each room
- final Map<Server,List<Room>> serverRoomMap = new
HashMap<Server,List<Room>>();
-
- //Locally handled sessions are serverId = null
- List<Room> localRoomList = new ArrayList<Room>();
- for (Long activeRoomId :
sessionManager.getActiveRoomIdsByServer(null)) {
- //FIXME / TODO: This is the single query to get
the room by its id
- localRoomList.add(roomDao.get(activeRoomId));
- }
- serverRoomMap.put(null, localRoomList);
-
- //Slave/Server rooms
+
+ // the room is not opened on any server yet, its the
first user, get the maxUser
+ // per room
+
+ // TODO / FIXME: Get room's maxUser in a single query
instead a query for each room
+ final Map<Server, List<Room>> serverRoomMap = new
HashMap<Server, List<Room>>();
+ // Slave/Server rooms
for (Server server : serverList) {
List<Room> roomList = new ArrayList<Room>();
for (Long activeRoomId :
sessionManager.getActiveRoomIdsByServer(server)) {
- //FIXME / TODO: This is the single
query to get the room by its id
+ // FIXME / TODO: This is the single
query to get the room by its id
roomList.add(roomDao.get(activeRoomId));
}
serverRoomMap.put(server, roomList);
}
-
- //calc server with lowest max users
+
+ // calc server with lowest max users
List<Server> list = new LinkedList<Server>();
list.addAll(serverRoomMap.keySet());
Collections.sort(list, new Comparator<Server>() {
- public int compare(Server s1, Server s2) {
- int maxUsersInRoomS1 = 0;
- log.debug("serverRoomMap.get(s1) SIZE
"+serverRoomMap.get(s1).size());
- for (Room room : serverRoomMap.get(s1)) {
- log.debug("s1 room: "+room);
- maxUsersInRoomS1 +=
room.getNumberOfPartizipants();
- }
- int maxUsersInRoomS2 = 0;
- log.debug("serverRoomMap.get(s2) SIZE
"+serverRoomMap.get(s2).size());
- for (Room room : serverRoomMap.get(s2)) {
- log.debug("s2 room: "+room);
- maxUsersInRoomS2 +=
room.getNumberOfPartizipants();
- }
-
- return maxUsersInRoomS1 - maxUsersInRoomS2;
- }
- });
-
+ public int compare(Server s1, Server s2) {
+ int maxUsersInRoomS1 = 0;
+ log.debug("serverRoomMap.get(s1) SIZE "
+ serverRoomMap.get(s1).size());
+ for (Room room : serverRoomMap.get(s1))
{
+ log.debug("s1 room: " + room);
+ maxUsersInRoomS1 +=
room.getNumberOfPartizipants();
+ }
+ int maxUsersInRoomS2 = 0;
+ log.debug("serverRoomMap.get(s2) SIZE "
+ serverRoomMap.get(s2).size());
+ for (Room room : serverRoomMap.get(s2))
{
+ log.debug("s2 room: " + room);
+ maxUsersInRoomS2 +=
room.getNumberOfPartizipants();
+ }
+
+ return maxUsersInRoomS1 -
maxUsersInRoomS2;
+ }
+ });
+
LinkedHashMap<Server, List<Room>> serverRoomMapOrdered
= new LinkedHashMap<Server, List<Room>>();
for (Server server : list) {
serverRoomMapOrdered.put(server,
serverRoomMap.get(server));
@@ -855,39 +839,38 @@ public class ConferenceService {
if (log.isDebugEnabled()) {
log.debug("Resulting order: ");
- for (Entry<Server, List<Room>> entry :
serverRoomMapOrdered
- .entrySet()) {
+ for (Entry<Server, List<Room>> entry :
serverRoomMapOrdered.entrySet()) {
int maxUsersInRoom = 0;
for (Room room : entry.getValue()) {
maxUsersInRoom +=
room.getNumberOfPartizipants();
}
-
+
String roomids = "";
- for (Room r : entry.getValue()) {
- roomids += " " +
r.getRooms_id();
+ for (Room r : entry.getValue()) {
+ roomids += " " +
r.getRooms_id();
}
-
- log.debug("entry " + entry.getKey() + "
Number of rooms "
- +
entry.getValue().size()+ " RoomIds: " + roomids + " max(Sum): " +
maxUsersInRoom);
+
+ log.debug("entry " + entry.getKey() + "
Number of rooms " + entry.getValue().size() + " RoomIds: "
+ + roomids + " max(Sum):
" + maxUsersInRoom);
}
}
log.debug("Resulting Server");
-
+
Server s =
serverRoomMapOrdered.entrySet().iterator().next().getKey();
-
+
if (s == null) {
return null;
}
-
- //Somehow this object here cannot be serialized cause
its abused by OpenJPA
- //so get a fresh copy from the entity manager and
return that
+
+ // Somehow this object here cannot be serialized cause
its abused by OpenJPA
+ // so get a fresh copy from the entity manager and
return that
return new ServerDTO(s);
}
log.error("Could not get server for cluster session");
- //Empty server object
+ // Empty server object
return null;
}