diff --git a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java index 1358e816..16f0cf8d 100644 --- a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java +++ b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java @@ -911,6 +911,40 @@ public class DatabaseStore { } + void removeGroupUserSettings(String groupId, List users) { + Connection connection = null; + PreparedStatement statement = null; + try { + connection = DBUtil.getConnection(); + + StringBuilder sb = new StringBuilder("delete t_user_setting where _scope in (1,3,5,7) and _uid in ("); + for (int i = 0; i < users.size(); i++) { + sb.append("?"); + if (i != users.size() - 1) { + sb.append(","); + } + } + sb.append(") and _key like '1-_-?'"); + + + statement = connection.prepareStatement(sb.toString()); + int index = 1; + for (String userId:users) { + statement.setString(index++, userId); + } + statement.setString(index++, groupId); + + int count = statement.executeUpdate(); + LOG.info("Update rows {}", count); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + Utility.printExecption(LOG, e); + } finally { + DBUtil.closeDB(connection, statement); + } + } + void persistGroupInfo(final WFCMessage.GroupInfo groupInfo) { mScheduler.execute(()->{ Connection connection = null; diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index fc1fa65b..5156f768 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -758,7 +758,7 @@ public class MemoryMessagesStore implements IMessagesStore { } removeFavGroup(groupId, removedIds); - + removeGroupUserSettings(groupId, removedIds); return ErrorCode.ERROR_CODE_SUCCESS; } @@ -827,9 +827,21 @@ public class MemoryMessagesStore implements IMessagesStore { } removeFavGroup(groupId, Arrays.asList(operator)); + removeGroupUserSettings(groupId, Arrays.asList(operator)); return ErrorCode.ERROR_CODE_SUCCESS; } + private void removeGroupUserSettings(String groupId, List users) { + HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); + MultiMap userSettingMap = hzInstance.getMultiMap(USER_SETTING); + + databaseStore.removeGroupUserSettings(groupId, users); + for (String userId:users) { + userSettingMap.remove(userId); + } + + } + @Override public ErrorCode dismissGroup(String operator, String groupId, boolean isAdmin) { HazelcastInstance hzInstance = m_Server.getHazelcastInstance(); @@ -869,6 +881,7 @@ public class MemoryMessagesStore implements IMessagesStore { } } removeFavGroup(groupId, ids); + removeGroupUserSettings(groupId, ids); return ErrorCode.ERROR_CODE_SUCCESS; }