Fix race condition during SensitiveFilter update

This commit is contained in:
gitlab-runner
2019-11-30 17:27:56 +08:00
parent 6883418e22
commit ab7b20871a
@@ -41,6 +41,7 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
@@ -110,7 +111,7 @@ public class MemoryMessagesStore implements IMessagesStore {
private final DatabaseStore databaseStore;
private ConcurrentHashMap<String, Long> userMaxPullSeq = new ConcurrentHashMap<>();
private SensitiveFilter mSensitiveFilter;
private AtomicReference<SensitiveFilter> mSensitiveFilter;
private volatile long lastUpdateSensitiveTime = 0;
private ConcurrentHashMap<String, Boolean> userGlobalSlientMap = new ConcurrentHashMap<>();
@@ -145,7 +146,7 @@ public class MemoryMessagesStore implements IMessagesStore {
}
}
Set<String> sensitiveWords = databaseStore.getSensitiveWord();
mSensitiveFilter = new SensitiveFilter(sensitiveWords);
mSensitiveFilter.set(new SensitiveFilter(sensitiveWords));
}
}
@@ -2492,7 +2493,7 @@ public class MemoryMessagesStore implements IMessagesStore {
@Override
public Set<String> handleSensitiveWord(String message) {
updateSensitiveWord();
return mSensitiveFilter.getSensitiveWords(message, SensitiveFilter.MatchType.MAX_MATCH);
return mSensitiveFilter.get().getSensitiveWords(message, SensitiveFilter.MatchType.MAX_MATCH);
}
@Override