mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-10-04 09:27:27 +02:00
Fix nickname cache call blocking server thread
This commit is contained in:
parent
82fbbb5209
commit
8caa8350ca
@ -76,12 +76,9 @@ public class ChatListener implements Listener {
|
||||
UUID uuid = player.getUniqueId();
|
||||
String displayName = player.getDisplayName();
|
||||
|
||||
if (displayName.equals(nicknameCache.getDisplayName(uuid))) {
|
||||
return;
|
||||
}
|
||||
|
||||
dbSystem.getDatabase().executeTransaction(
|
||||
new NicknameStoreTransaction(uuid, new Nickname(displayName, time, serverInfo.getServerUUID()))
|
||||
);
|
||||
dbSystem.getDatabase().executeTransaction(new NicknameStoreTransaction(
|
||||
uuid, new Nickname(displayName, time, serverInfo.getServerUUID()),
|
||||
(playerUUID, name) -> name.equals(nicknameCache.getDisplayName(playerUUID))
|
||||
));
|
||||
}
|
||||
}
|
||||
|
@ -167,11 +167,10 @@ public class PlayerOnlineListener implements Listener {
|
||||
sessionCache.cacheSession(uuid, new Session(uuid, serverUUID, time, world, gm))
|
||||
.ifPresent(previousSession -> database.executeTransaction(new SessionEndTransaction(previousSession)));
|
||||
|
||||
if (!displayName.equals(nicknameCache.getDisplayName(uuid))) {
|
||||
database.executeTransaction(
|
||||
new NicknameStoreTransaction(uuid, new Nickname(displayName, time, serverUUID))
|
||||
);
|
||||
}
|
||||
database.executeTransaction(new NicknameStoreTransaction(
|
||||
uuid, new Nickname(displayName, time, serverUUID),
|
||||
(playerUUID, name) -> name.equals(nicknameCache.getDisplayName(playerUUID))
|
||||
));
|
||||
|
||||
processing.submitNonCritical(processors.info().playerPageUpdateProcessor(uuid));
|
||||
|
||||
|
@ -21,6 +21,7 @@ import com.djrapitops.plan.db.access.queries.DataStoreQueries;
|
||||
import com.djrapitops.plan.db.access.transactions.Transaction;
|
||||
|
||||
import java.util.UUID;
|
||||
import java.util.function.BiPredicate;
|
||||
|
||||
/**
|
||||
* Transaction to store player's nickname information in the database.
|
||||
@ -31,10 +32,17 @@ public class NicknameStoreTransaction extends Transaction {
|
||||
|
||||
private final UUID playerUUID;
|
||||
private final Nickname nickname;
|
||||
private final BiPredicate<UUID, String> isNicknameCachedCheck;
|
||||
|
||||
public NicknameStoreTransaction(UUID playerUUID, Nickname nickname) {
|
||||
public NicknameStoreTransaction(UUID playerUUID, Nickname nickname, BiPredicate<UUID, String> isNicknameCachedCheck) {
|
||||
this.playerUUID = playerUUID;
|
||||
this.nickname = nickname;
|
||||
this.isNicknameCachedCheck = isNicknameCachedCheck;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean shouldBeExecuted() {
|
||||
return !isNicknameCachedCheck.test(playerUUID, nickname.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -68,18 +68,6 @@ public class NicknameCache implements SubSystem {
|
||||
displayNames.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to update PlayerName and DisplayName caches.
|
||||
*
|
||||
* @param uuid UUID of the player.
|
||||
* @param displayName DisplayName of the player.
|
||||
*/
|
||||
public void updateDisplayName(UUID uuid, String displayName) {
|
||||
if (displayName != null) {
|
||||
displayNames.put(uuid, displayName);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeDisplayName(UUID uuid) {
|
||||
displayNames.remove(uuid);
|
||||
}
|
||||
|
@ -259,8 +259,8 @@ public abstract class CommonDBTest {
|
||||
saveUserOne();
|
||||
|
||||
Nickname expected = new Nickname("TestNickname", System.currentTimeMillis(), serverUUID);
|
||||
db.executeTransaction(new NicknameStoreTransaction(playerUUID, expected));
|
||||
db.executeTransaction(new NicknameStoreTransaction(playerUUID, expected));
|
||||
db.executeTransaction(new NicknameStoreTransaction(playerUUID, expected, (uuid, name) -> false /* Not cached */));
|
||||
db.executeTransaction(new NicknameStoreTransaction(playerUUID, expected, (uuid, name) -> true /* Cached */));
|
||||
commitTest();
|
||||
|
||||
List<Nickname> nicknames = db.query(NicknameQueries.fetchNicknameDataOfPlayer(playerUUID));
|
||||
@ -472,7 +472,7 @@ public abstract class CommonDBTest {
|
||||
session.setPlayerKills(createKills());
|
||||
|
||||
execute(DataStoreQueries.storeSession(session));
|
||||
db.executeTransaction(new NicknameStoreTransaction(playerUUID, new Nickname("TestNick", System.currentTimeMillis(), serverUUID)));
|
||||
db.executeTransaction(new NicknameStoreTransaction(playerUUID, new Nickname("TestNick", System.currentTimeMillis(), serverUUID), (uuid, name) -> false /* Not cached */));
|
||||
saveGeoInfo(playerUUID, new GeoInfo("1.2.3.4", "TestLoc", 223456789L, "3"));
|
||||
|
||||
assertTrue(db.query(PlayerFetchQueries.isPlayerRegistered(playerUUID)));
|
||||
@ -522,7 +522,7 @@ public abstract class CommonDBTest {
|
||||
|
||||
execute(DataStoreQueries.storeSession(session));
|
||||
db.executeTransaction(
|
||||
new NicknameStoreTransaction(playerUUID, new Nickname("TestNick", System.currentTimeMillis(), serverUUID))
|
||||
new NicknameStoreTransaction(playerUUID, new Nickname("TestNick", System.currentTimeMillis(), serverUUID), (uuid, name) -> false /* Not cached */)
|
||||
);
|
||||
saveGeoInfo(playerUUID, new GeoInfo("1.2.3.4", "TestLoc", 223456789L,
|
||||
new SHA256Hash("1.2.3.4").create()));
|
||||
@ -953,8 +953,8 @@ public abstract class CommonDBTest {
|
||||
db.executeTransaction(new PlayerRegisterTransaction(playerUUID, () -> 1L, "Not random"));
|
||||
|
||||
String nickname = "2" + RandomData.randomString(10);
|
||||
db.executeTransaction(new NicknameStoreTransaction(uuid, new Nickname(nickname, System.currentTimeMillis(), serverUUID)));
|
||||
db.executeTransaction(new NicknameStoreTransaction(playerUUID, new Nickname("No nick", System.currentTimeMillis(), serverUUID)));
|
||||
db.executeTransaction(new NicknameStoreTransaction(uuid, new Nickname(nickname, System.currentTimeMillis(), serverUUID), (u, name) -> false /* Not cached */));
|
||||
db.executeTransaction(new NicknameStoreTransaction(playerUUID, new Nickname("No nick", System.currentTimeMillis(), serverUUID), (u, name) -> true /* Cached */));
|
||||
|
||||
String searchFor = "2";
|
||||
|
||||
|
@ -75,12 +75,9 @@ public class SpongeChatListener {
|
||||
UUID uuid = player.getUniqueId();
|
||||
String displayName = player.getDisplayNameData().displayName().get().toPlain();
|
||||
|
||||
if (displayName.equals(nicknameCache.getDisplayName(uuid))) {
|
||||
return;
|
||||
}
|
||||
|
||||
dbSystem.getDatabase().executeTransaction(
|
||||
new NicknameStoreTransaction(uuid, new Nickname(displayName, time, serverInfo.getServerUUID()))
|
||||
);
|
||||
dbSystem.getDatabase().executeTransaction(new NicknameStoreTransaction(
|
||||
uuid, new Nickname(displayName, time, serverInfo.getServerUUID()),
|
||||
(playerUUID, name) -> name.equals(nicknameCache.getDisplayName(playerUUID))
|
||||
));
|
||||
}
|
||||
}
|
@ -142,11 +142,11 @@ public class SpongePlayerListener {
|
||||
private void actOnJoinEvent(ClientConnectionEvent.Join event) {
|
||||
Player player = event.getTargetEntity();
|
||||
|
||||
UUID playerUUID = player.getUniqueId();
|
||||
UUID uuid = player.getUniqueId();
|
||||
UUID serverUUID = serverInfo.getServerUUID();
|
||||
long time = System.currentTimeMillis();
|
||||
|
||||
SpongeAFKListener.AFK_TRACKER.performedAction(playerUUID, time);
|
||||
SpongeAFKListener.AFK_TRACKER.performedAction(uuid, time);
|
||||
|
||||
String world = player.getWorld().getName();
|
||||
Optional<GameMode> gameMode = player.getGameModeData().get(Keys.GAME_MODE);
|
||||
@ -163,21 +163,20 @@ public class SpongePlayerListener {
|
||||
boolean gatheringGeolocations = config.isTrue(DataGatheringSettings.GEOLOCATIONS);
|
||||
if (gatheringGeolocations) {
|
||||
database.executeTransaction(
|
||||
new GeoInfoStoreTransaction(playerUUID, address, time, geolocationCache::getCountry)
|
||||
new GeoInfoStoreTransaction(uuid, address, time, geolocationCache::getCountry)
|
||||
);
|
||||
}
|
||||
|
||||
database.executeTransaction(new PlayerServerRegisterTransaction(playerUUID, () -> time, playerName, serverUUID));
|
||||
sessionCache.cacheSession(playerUUID, new Session(playerUUID, serverUUID, time, world, gm))
|
||||
database.executeTransaction(new PlayerServerRegisterTransaction(uuid, () -> time, playerName, serverUUID));
|
||||
sessionCache.cacheSession(uuid, new Session(uuid, serverUUID, time, world, gm))
|
||||
.ifPresent(previousSession -> database.executeTransaction(new SessionEndTransaction(previousSession)));
|
||||
|
||||
if (!displayName.equals(nicknameCache.getDisplayName(playerUUID))) {
|
||||
database.executeTransaction(
|
||||
new NicknameStoreTransaction(playerUUID, new Nickname(displayName, time, serverUUID))
|
||||
);
|
||||
}
|
||||
database.executeTransaction(new NicknameStoreTransaction(
|
||||
uuid, new Nickname(displayName, time, serverUUID),
|
||||
(playerUUID, name) -> name.equals(nicknameCache.getDisplayName(playerUUID))
|
||||
));
|
||||
|
||||
processing.submitNonCritical(processors.info().playerPageUpdateProcessor(playerUUID));
|
||||
processing.submitNonCritical(processors.info().playerPageUpdateProcessor(uuid));
|
||||
}
|
||||
|
||||
@Listener(order = Order.POST)
|
||||
|
Loading…
Reference in New Issue
Block a user