Switch back to official Postgres JDBC driver

This commit is contained in:
Luck 2023-06-11 14:36:00 +01:00
parent d859085056
commit 2e5a1d79a4
No known key found for this signature in database
GPG Key ID: EFA9B3EC5FD90F8B
14 changed files with 59 additions and 56 deletions

View File

@ -29,7 +29,7 @@ shadowJar {
relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore' relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore'
relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb' relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb'
relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql' relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql'
relocate 'com.impossibl', 'me.lucko.luckperms.lib.postgresql' relocate 'org.postgresql', 'me.lucko.luckperms.lib.postgresql'
relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari' relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari'
relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb' relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb'
relocate 'org.bson', 'me.lucko.luckperms.lib.bson' relocate 'org.bson', 'me.lucko.luckperms.lib.bson'

View File

@ -39,7 +39,7 @@ shadowJar {
relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore' relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore'
relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb' relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb'
relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql' relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql'
relocate 'com.impossibl', 'me.lucko.luckperms.lib.postgresql' relocate 'org.postgresql', 'me.lucko.luckperms.lib.postgresql'
relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari' relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari'
relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb' relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb'
relocate 'org.bson', 'me.lucko.luckperms.lib.bson' relocate 'org.bson', 'me.lucko.luckperms.lib.bson'

View File

@ -31,7 +31,7 @@ shadowJar {
relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore' relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore'
relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb' relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb'
relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql' relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql'
relocate 'com.impossibl', 'me.lucko.luckperms.lib.postgresql' relocate 'org.postgresql', 'me.lucko.luckperms.lib.postgresql'
relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari' relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari'
relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb' relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb'
relocate 'org.bson', 'me.lucko.luckperms.lib.bson' relocate 'org.bson', 'me.lucko.luckperms.lib.bson'

View File

@ -78,6 +78,6 @@ dependencies {
compileOnly 'io.nats:jnats:2.16.4' compileOnly 'io.nats:jnats:2.16.4'
compileOnly 'com.rabbitmq:amqp-client:5.12.0' compileOnly 'com.rabbitmq:amqp-client:5.12.0'
compileOnly 'org.mongodb:mongodb-driver-legacy:4.5.0' compileOnly 'org.mongodb:mongodb-driver-legacy:4.5.0'
compileOnly 'com.impossibl.pgjdbc-ng:pgjdbc-ng:0.8.9' compileOnly 'org.postgresql:postgresql:42.6.0'
compileOnly 'org.yaml:snakeyaml:1.28' compileOnly 'org.yaml:snakeyaml:1.28'
} }

View File

@ -153,18 +153,11 @@ public enum Dependency {
Relocation.of("mysql", "com{}mysql") Relocation.of("mysql", "com{}mysql")
), ),
POSTGRESQL_DRIVER( POSTGRESQL_DRIVER(
"com{}impossibl{}pgjdbc-ng", "org{}postgresql",
"pgjdbc-ng", "postgresql",
"0.8.9", "42.6.0",
"WEYMezl02Rot2n2ATs7NABcvL9ceQ/oLA/XPduIEaWA=", "uBfGekDJQkn9WdTmhuMyftDT0/rkJrINoPHnVlLPxGE=",
Relocation.of("postgresql", "com{}impossibl") Relocation.of("postgresql", "org{}postgresql")
),
POSTGRESQL_DRIVER_SPY(
"com{}impossibl{}pgjdbc-ng",
"spy",
"0.8.9",
"72ZuhpMy/4EYJZuSjBjGI5NGgdWmOpwjDHW9ISnqso8=",
Relocation.of("postgresql", "com{}impossibl")
), ),
H2_DRIVER_LEGACY( H2_DRIVER_LEGACY(
"com.h2database", "com.h2database",

View File

@ -55,7 +55,7 @@ public class DependencyRegistry {
.putAll(StorageType.MONGODB, Dependency.MONGODB_DRIVER_CORE, Dependency.MONGODB_DRIVER_LEGACY, Dependency.MONGODB_DRIVER_SYNC, Dependency.MONGODB_DRIVER_BSON) .putAll(StorageType.MONGODB, Dependency.MONGODB_DRIVER_CORE, Dependency.MONGODB_DRIVER_LEGACY, Dependency.MONGODB_DRIVER_SYNC, Dependency.MONGODB_DRIVER_BSON)
.putAll(StorageType.MARIADB, Dependency.SLF4J_API, Dependency.SLF4J_SIMPLE, Dependency.HIKARI, Dependency.MARIADB_DRIVER) .putAll(StorageType.MARIADB, Dependency.SLF4J_API, Dependency.SLF4J_SIMPLE, Dependency.HIKARI, Dependency.MARIADB_DRIVER)
.putAll(StorageType.MYSQL, Dependency.SLF4J_API, Dependency.SLF4J_SIMPLE, Dependency.HIKARI, Dependency.MYSQL_DRIVER) .putAll(StorageType.MYSQL, Dependency.SLF4J_API, Dependency.SLF4J_SIMPLE, Dependency.HIKARI, Dependency.MYSQL_DRIVER)
.putAll(StorageType.POSTGRESQL, Dependency.SLF4J_API, Dependency.SLF4J_SIMPLE, Dependency.HIKARI, Dependency.POSTGRESQL_DRIVER, Dependency.POSTGRESQL_DRIVER_SPY) .putAll(StorageType.POSTGRESQL, Dependency.SLF4J_API, Dependency.SLF4J_SIMPLE, Dependency.HIKARI, Dependency.POSTGRESQL_DRIVER)
.putAll(StorageType.SQLITE, Dependency.SQLITE_DRIVER) .putAll(StorageType.SQLITE, Dependency.SQLITE_DRIVER)
.putAll(StorageType.H2, Dependency.H2_DRIVER) .putAll(StorageType.H2, Dependency.H2_DRIVER)
.build(); .build();

View File

@ -25,8 +25,6 @@
package me.lucko.luckperms.common.messaging.postgres; package me.lucko.luckperms.common.messaging.postgres;
import com.impossibl.postgres.api.jdbc.PGConnection;
import com.impossibl.postgres.api.jdbc.PGNotificationListener;
import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.plugin.scheduler.SchedulerTask; import me.lucko.luckperms.common.plugin.scheduler.SchedulerTask;
import me.lucko.luckperms.common.storage.implementation.sql.SqlStorage; import me.lucko.luckperms.common.storage.implementation.sql.SqlStorage;
@ -34,12 +32,17 @@ import net.luckperms.api.messenger.IncomingMessageConsumer;
import net.luckperms.api.messenger.Messenger; import net.luckperms.api.messenger.Messenger;
import net.luckperms.api.messenger.message.OutgoingMessage; import net.luckperms.api.messenger.message.OutgoingMessage;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import org.postgresql.PGConnection;
import org.postgresql.PGNotification;
import org.postgresql.util.PSQLException;
import java.net.SocketException;
import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.Statement; import java.sql.Statement;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
/** /**
* An implementation of {@link Messenger} using Postgres. * An implementation of {@link Messenger} using Postgres.
@ -68,7 +71,7 @@ public class PostgresMessenger implements Messenger {
@Override @Override
public void sendOutgoingMessage(@NonNull OutgoingMessage outgoingMessage) { public void sendOutgoingMessage(@NonNull OutgoingMessage outgoingMessage) {
try (PGConnection connection = this.sqlStorage.getConnectionFactory().getConnection().unwrap(PGConnection.class)) { try (Connection connection = this.sqlStorage.getConnectionFactory().getConnection()) {
try (PreparedStatement ps = connection.prepareStatement("SELECT pg_notify(?, ?)")) { try (PreparedStatement ps = connection.prepareStatement("SELECT pg_notify(?, ?)")) {
ps.setString(1, CHANNEL); ps.setString(1, CHANNEL);
ps.setString(2, outgoingMessage.asEncodedString()); ps.setString(2, outgoingMessage.asEncodedString());
@ -122,47 +125,60 @@ public class PostgresMessenger implements Messenger {
} }
} }
private class NotificationListener implements PGNotificationListener, AutoCloseable { private class NotificationListener implements AutoCloseable {
private final CountDownLatch latch = new CountDownLatch(1); private static final int RECEIVE_TIMEOUT_MILLIS = 1000;
private final AtomicBoolean listening = new AtomicBoolean(false);
private final AtomicBoolean open = new AtomicBoolean(true);
private final AtomicReference<Thread> listeningThread = new AtomicReference<>();
public void listenAndBind() { public void listenAndBind() {
try (PGConnection connection = PostgresMessenger.this.sqlStorage.getConnectionFactory().getConnection().unwrap(PGConnection.class)) { try (Connection connection = PostgresMessenger.this.sqlStorage.getConnectionFactory().getConnection()) {
connection.addNotificationListener(CHANNEL, this);
try (Statement s = connection.createStatement()) { try (Statement s = connection.createStatement()) {
s.execute("LISTEN \"" + CHANNEL + "\""); s.execute("LISTEN \"" + CHANNEL + "\"");
} }
this.listening.set(true); PGConnection pgConnection = connection.unwrap(PGConnection.class);
this.latch.await(); this.listeningThread.set(Thread.currentThread());
while (this.open.get()) {
PGNotification[] notifications = pgConnection.getNotifications(RECEIVE_TIMEOUT_MILLIS);
if (notifications != null) {
for (PGNotification notification : notifications) {
handleNotification(notification);
}
}
}
} catch (PSQLException e) {
if (!(e.getCause() instanceof SocketException && e.getCause().getMessage().equals("Socket closed"))) {
e.printStackTrace();
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
this.listening.set(false); this.listeningThread.set(null);
} }
} }
public boolean isListening() { public boolean isListening() {
return this.listening.get(); return this.listeningThread.get() != null;
} }
@Override public void handleNotification(PGNotification notification) {
public void notification(int processId, String channelName, String payload) { if (!CHANNEL.equals(notification.getName())) {
if (!CHANNEL.equals(channelName)) {
return; return;
} }
PostgresMessenger.this.consumer.consumeIncomingMessageAsString(payload); PostgresMessenger.this.consumer.consumeIncomingMessageAsString(notification.getParameter());
}
@Override
public void closed() {
this.latch.countDown();
} }
@Override @Override
public void close() { public void close() {
this.latch.countDown(); if (this.open.compareAndSet(true, false)) {
Thread thread = this.listeningThread.get();
if (thread != null) {
thread.interrupt();
}
}
} }
} }

View File

@ -48,9 +48,9 @@ public class PostgresConnectionFactory extends HikariConnectionFactory {
@Override @Override
protected void configureDatabase(HikariConfig config, String address, String port, String databaseName, String username, String password) { protected void configureDatabase(HikariConfig config, String address, String port, String databaseName, String username, String password) {
config.setDataSourceClassName("com.impossibl.postgres.jdbc.PGDataSource"); config.setDataSourceClassName("org.postgresql.ds.PGSimpleDataSource");
config.addDataSourceProperty("serverName", address); config.addDataSourceProperty("serverName", address);
config.addDataSourceProperty("portNumber", Integer.parseInt(port)); config.addDataSourceProperty("portNumber", port);
config.addDataSourceProperty("databaseName", databaseName); config.addDataSourceProperty("databaseName", databaseName);
config.addDataSourceProperty("user", username); config.addDataSourceProperty("user", username);
config.addDataSourceProperty("password", password); config.addDataSourceProperty("password", password);
@ -63,12 +63,6 @@ public class PostgresConnectionFactory extends HikariConnectionFactory {
// remove the default config properties which don't exist for PostgreSQL // remove the default config properties which don't exist for PostgreSQL
properties.remove("useUnicode"); properties.remove("useUnicode");
properties.remove("characterEncoding"); properties.remove("characterEncoding");
// socketTimeout -> networkTimeout
Object socketTimeout = properties.remove("socketTimeout");
if (socketTimeout != null) {
properties.putIfAbsent("networkTimeout", Integer.parseInt(socketTimeout.toString()));
}
} }
@Override @Override

View File

@ -61,7 +61,7 @@ shadowJar {
relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore' relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore'
relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb' relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb'
relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql' relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql'
relocate 'com.impossibl', 'me.lucko.luckperms.lib.postgresql' relocate 'org.postgresql', 'me.lucko.luckperms.lib.postgresql'
relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari' relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari'
relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb' relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb'
relocate 'org.bson', 'me.lucko.luckperms.lib.bson' relocate 'org.bson', 'me.lucko.luckperms.lib.bson'

View File

@ -39,7 +39,7 @@ shadowJar {
relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore' relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore'
relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb' relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb'
relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql' relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql'
relocate 'com.impossibl', 'me.lucko.luckperms.lib.postgresql' relocate 'org.postgresql', 'me.lucko.luckperms.lib.postgresql'
relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari' relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari'
relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb' relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb'
relocate 'org.bson', 'me.lucko.luckperms.lib.bson' relocate 'org.bson', 'me.lucko.luckperms.lib.bson'

View File

@ -29,7 +29,7 @@ shadowJar {
relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore' relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore'
relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb' relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb'
relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql' relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql'
relocate 'com.impossibl', 'me.lucko.luckperms.lib.postgresql' relocate 'org.postgresql', 'me.lucko.luckperms.lib.postgresql'
relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari' relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari'
relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb' relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb'
relocate 'org.bson', 'me.lucko.luckperms.lib.bson' relocate 'org.bson', 'me.lucko.luckperms.lib.bson'

View File

@ -42,7 +42,7 @@ shadowJar {
relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore' relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore'
relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb' relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb'
relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql' relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql'
relocate 'com.impossibl', 'me.lucko.luckperms.lib.postgresql' relocate 'org.postgresql', 'me.lucko.luckperms.lib.postgresql'
relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari' relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari'
relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb' relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb'
relocate 'org.bson', 'me.lucko.luckperms.lib.bson' relocate 'org.bson', 'me.lucko.luckperms.lib.bson'

View File

@ -32,7 +32,7 @@ dependencies {
testImplementation 'redis.clients:jedis:3.5.2' testImplementation 'redis.clients:jedis:3.5.2'
testImplementation 'io.nats:jnats:2.16.4' testImplementation 'io.nats:jnats:2.16.4'
testImplementation 'com.rabbitmq:amqp-client:5.12.0' testImplementation 'com.rabbitmq:amqp-client:5.12.0'
testImplementation 'com.impossibl.pgjdbc-ng:pgjdbc-ng:0.8.9' testImplementation 'org.postgresql:postgresql:42.6.0'
testImplementation 'com.h2database:h2:2.1.214' testImplementation 'com.h2database:h2:2.1.214'
testImplementation 'mysql:mysql-connector-java:8.0.23' testImplementation 'mysql:mysql-connector-java:8.0.23'
testImplementation 'org.mariadb.jdbc:mariadb-java-client:3.1.3' testImplementation 'org.mariadb.jdbc:mariadb-java-client:3.1.3'
@ -60,7 +60,7 @@ shadowJar {
relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore' relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore'
relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb' relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb'
relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql' relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql'
relocate 'com.impossibl', 'me.lucko.luckperms.lib.postgresql' relocate 'org.postgresql', 'me.lucko.luckperms.lib.postgresql'
relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari' relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari'
relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb' relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb'
relocate 'org.bson', 'me.lucko.luckperms.lib.bson' relocate 'org.bson', 'me.lucko.luckperms.lib.bson'

View File

@ -36,7 +36,7 @@ shadowJar {
relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore' relocate 'me.lucko.commodore', 'me.lucko.luckperms.lib.commodore'
relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb' relocate 'org.mariadb.jdbc', 'me.lucko.luckperms.lib.mariadb'
relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql' relocate 'com.mysql', 'me.lucko.luckperms.lib.mysql'
relocate 'com.impossibl', 'me.lucko.luckperms.lib.postgresql' relocate 'org.postgresql', 'me.lucko.luckperms.lib.postgresql'
relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari' relocate 'com.zaxxer.hikari', 'me.lucko.luckperms.lib.hikari'
relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb' relocate 'com.mongodb', 'me.lucko.luckperms.lib.mongodb'
relocate 'org.bson', 'me.lucko.luckperms.lib.bson' relocate 'org.bson', 'me.lucko.luckperms.lib.bson'