You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2013/02/26 08:48:43 UTC

svn commit: r1450058 - /openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/ConferenceService.java

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;
 	}