From e2e9d49393d71aaa589fbfc608de94b460a00e94 Mon Sep 17 00:00:00 2001 From: Daniel Gerhardt <daniel.gerhardt@mni.thm.de> Date: Sat, 9 Mar 2013 20:10:39 +0100 Subject: [PATCH] Inverted database query used to remove inactive users from legacy map. This should perform much better. --- src/main/java/de/thm/arsnova/dao/CouchDBDao.java | 8 ++++---- src/main/java/de/thm/arsnova/dao/IDatabaseDao.java | 2 +- .../java/de/thm/arsnova/services/UserService.java | 12 ++++++++---- .../java/de/thm/arsnova/dao/StubDatabaseDao.java | 2 +- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index 5f7a1e7c..15be30c2 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 74a255fb..8f1fc5cc 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 9d206c44..6f9cadad 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 8340d090..5e8df373 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; } -- GitLab