diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index 5f7a1e7cf8a721ebcf8bb32ddbd261ab77d104e4..15be30c27c21ece6be51d7edf99361743e71b2a0 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -1376,14 +1376,14 @@ public class CouchDBDao implements IDatabaseDao { } @Override - public final List<String> getInactiveUsers(int timeDifference) { + public final List<String> getActiveUsers(int timeDifference) { try { long inactiveBeforeTimestamp = new Date().getTime() - timeDifference * 1000; View view = new View("logged_in/by_and_only_timestamp_and_username"); - view.setEndKey("[" + URLEncoder.encode(String.valueOf(inactiveBeforeTimestamp) + ",{}", "UTF-8") + "]"); + view.setStartKey("[" + URLEncoder.encode(String.valueOf(inactiveBeforeTimestamp), "UTF-8") + "]"); ViewResults results = this.getDatabase().view(view); - LOGGER.debug("getInactiveUsers result count: {}", String.valueOf(results.size())); + LOGGER.debug("getActiveUsers result count: {}", String.valueOf(results.size())); List<String> result = new ArrayList<String>(); for (Document d : results.getResults()) { @@ -1392,7 +1392,7 @@ public class CouchDBDao implements IDatabaseDao { return result; } catch (UnsupportedEncodingException e) { - LOGGER.error("Error while retrieving inactive users", e); + LOGGER.error("Error while retrieving active users", e); } return null; } diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java index 74a255fb19c7dd61a11268cf463dcbb4aa67ea11..8f1fc5cc74b9f1d6c15f01ab0777c98fc1b8951e 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -134,5 +134,5 @@ public interface IDatabaseDao { Session lockSession(Session session, Boolean lock); - List<String> getInactiveUsers(int timeDifference); + List<String> getActiveUsers(int timeDifference); } diff --git a/src/main/java/de/thm/arsnova/services/UserService.java b/src/main/java/de/thm/arsnova/services/UserService.java index 9d206c4482e40a3337a1d1512f59f24ae5592ee1..6f9cadad1abf476afe229f6dc8e3796e6278dd61 100644 --- a/src/main/java/de/thm/arsnova/services/UserService.java +++ b/src/main/java/de/thm/arsnova/services/UserService.java @@ -64,10 +64,10 @@ public class UserService implements IUserService, InitializingBean, DisposableBe @Scheduled(fixedDelay = DEFAULT_SCHEDULER_DELAY_MS) public final void removeInactiveUsersFromLegacyMap() { - List<String> usernames = databaseDao.getInactiveUsers(MAX_USER_INACTIVE_SECONDS); + List<String> usernames = databaseDao.getActiveUsers(MAX_USER_INACTIVE_SECONDS); Set<String> affectedSessions = new HashSet<String>(); LOGGER.info( - "Inactive users count: {}, user2sessionLegacy count: {}", + "Active users in database: {}, active users in memory (user2sessionLegacy): {}", usernames.size(), user2sessionLegacy.size() ); for (Entry<User, String> e : user2sessionLegacy.entrySet()) { @@ -76,8 +76,12 @@ public class UserService implements IUserService, InitializingBean, DisposableBe LOGGER.debug("key: {}", key); String username = key.getUsername(); LOGGER.debug("username: {}", username); - if (usernames.contains(username)) { - affectedSessions.add(e.getValue()); + if (!usernames.contains(username)) { + if (null != e.getValue()) { + affectedSessions.add(e.getValue()); + } else { + LOGGER.warn("Session for user {} is null", key); + } LOGGER.debug("Removing user {} from user2sessionLegacy", e.getKey()); user2sessionLegacy.remove(e.getKey()); } diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java index 8340d0909d737ef89e09fc07075388675e78f2e3..5e8df373853d23fdb9d162b03b8a68622cc50b9f 100644 --- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java +++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java @@ -427,7 +427,7 @@ public class StubDatabaseDao implements IDatabaseDao { } @Override - public List<String> getInactiveUsers(int timeDifference) { + public List<String> getActiveUsers(int timeDifference) { // TODO Auto-generated method stub return null; }