Compare commits

...

5 Commits

Author SHA1 Message Date
4abd6b9134 Add debug code 2023-04-12 09:53:04 +02:00
4717bf82f7 Acquire save lock before getting a SQL connection 2023-04-12 09:27:26 +02:00
0214827266 Increase leak detection threshold 2023-04-12 09:08:30 +02:00
55adbaa58b Temporarily disable MySQL performance optimizations 2023-04-12 09:04:31 +02:00
7603da0b6b Enable leak detection 2023-04-11 17:38:57 +02:00
5 changed files with 18 additions and 13 deletions

View File

@ -165,7 +165,7 @@
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.19-R0.1-SNAPSHOT</version>
<version>1.19.4-R0.1-SNAPSHOT</version>
<scope>provided</scope>
<!-- Use our own newer api version -->
<exclusions>

View File

@ -250,7 +250,6 @@ public class ProtocolLibListener extends PacketAdapter {
}
}
plugin.getLog().trace("GameProfile {} with {} connecting", sessionKey, username);
packetEvent.getAsyncMarker().incrementProcessingDelay();

View File

@ -70,7 +70,7 @@
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>4.0.3</version>
<version>5.0.2-SNAPSHOT</version>
<exclusions>
<!-- HikariCP uses an old version of this API that has a typo in the service interface -->
<!-- We will use the api provided by the jdk14 dependency -->

View File

@ -55,6 +55,9 @@ public class MySQLStorage extends SQLStorage {
config.addDataSourceProperty("useSSL", useSSL);
config.addDataSourceProperty("requireSSL", useSSL);
//enable leak detection of holding connections
config.setLeakDetectionThreshold(10_000);
// adding paranoid, hides hostname, username, version and so
// could be useful for hiding server details
config.addDataSourceProperty("paranoid", true);
@ -62,7 +65,7 @@ public class MySQLStorage extends SQLStorage {
config.setJdbcUrl(JDBC_PROTOCOL + buildJDBCUrl(driver, host, port, database));
// enable MySQL specific optimizations
addPerformanceProperties(config);
// addPerformanceProperties(config);
return config;
}

View File

@ -143,11 +143,12 @@ public abstract class SQLStorage implements AuthStorage {
@Override
public void save(StoredProfile playerProfile) {
try (Connection con = dataSource.getConnection()) {
String uuid = playerProfile.getOptId().map(UUIDAdapter::toMojangId).orElse(null);
playerProfile.getSaveLock().lock();
try {
core.getPlugin().getLog().info("Before Lock");
synchronized (playerProfile) {
core.getPlugin().getLog().info("Inside Lock - Before acquiring connection");
try (Connection con = dataSource.getConnection()) {
core.getPlugin().getLog().info("Acquired connection");
if (playerProfile.isSaved()) {
try (PreparedStatement saveStmt = con.prepareStatement(UPDATE_PROFILE)) {
saveStmt.setString(1, uuid);
@ -174,12 +175,14 @@ public abstract class SQLStorage implements AuthStorage {
}
}
}
} finally {
playerProfile.getSaveLock().unlock();
}
} catch (SQLException ex) {
core.getPlugin().getLog().error("Failed to save playerProfile {}", playerProfile, ex);
}
core.getPlugin().getLog().info("Released connection");
}
core.getPlugin().getLog().info("Released lock");
}
@Override