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