Search in sources :

Example 6 with CommunicationsException

use of com.mysql.cj.jdbc.exceptions.CommunicationsException in project ExciteBot by TheGameCommunity.

the class Main method main.

@SuppressWarnings("rawtypes")
public static void main(String[] args) throws InterruptedException, ClassNotFoundException, IOException, SQLException {
    if (args.length % 2 != 0) {
        throw new IllegalArgumentException("Must be started with an even number of arguments!");
    }
    for (int i = 0; i < args.length; i++) {
        if (args[i].equals("-owner")) {
            botOwner = Long.parseLong(args[++i]);
        }
    }
    wiimmfi = startWiimmfi(args);
    discordBot = null;
    int bootAttempts = 0;
    while (discordBot == null) {
        try {
            bootAttempts++;
            discordBot = startDiscordBot(args, wiimmfi);
            discordBot.setLoading();
            discordBot.setWiimmfi(wiimmfi);
        } catch (LoginException | IOException | ErrorResponseException e) {
            LOGGER.log(Level.SEVERE, e, () -> e.getMessage());
            if (bootAttempts >= 3) {
                System.exit(-2);
            }
            Thread.sleep(5000);
        }
    }
    while (CONSOLE == null) {
        try {
            CONSOLE = new ConsoleUser();
        } catch (IOError e) {
            System.out.println(e);
            discordBot.setNoDB();
            Thread.sleep(5000);
        }
    }
    do {
        try {
            DatabaseConnection.INSTANCE = new DatabaseConnection();
        } catch (Throwable t) {
            System.out.println(t);
            discordBot.setNoDB();
            Thread.sleep(5000);
        }
    } while (DatabaseConnection.INSTANCE == null);
    Throwable prevError = null;
    Instant nextDiscordPing = Instant.now().minusMillis(1);
    Instant sendDiscordNotifications = Instant.now().minusMillis(1);
    startConsole();
    Thread mailThread = startMailThread();
    try {
        while (true) {
            try {
                System.gc();
                Throwable error = wiimmfi.getError();
                wiimmfi.update();
                if (error == null) {
                    if (prevError != null) {
                    // LOGGER.log(Level.SEVERE, "Error resolved.");
                    }
                } else {
                    if (prevError == null || !prevError.getClass().equals(error.getClass())) {
                        System.out.println("Error!");
                        LOGGER.log(Level.SEVERE, error, () -> error.getMessage());
                    }
                    prevError = error;
                }
                if (discordBot != null) {
                    if (nextDiscordPing.isBefore(Instant.now())) {
                        nextDiscordPing = Instant.now().plus(Duration.ofSeconds(5));
                        updateLists(true, true);
                    }
                    if (sendDiscordNotifications.isBefore(Instant.now())) {
                        sendDiscordNotifications = Instant.now().plus(Duration.ofSeconds(4));
                        DiscordUser.notifyDiscordUsers();
                    }
                }
                while (!consoleCommandsAwaitingProcessing.isEmpty()) {
                    Commands.DISPATCHER.handleCommand(consoleCommandsAwaitingProcessing.pollFirst());
                }
            } catch (ErrorResponseException e) {
                CONSOLE.sendMessage(StacktraceUtil.getStackTrace(e));
                CONSOLE.sendMessage("An ErrorResponseException occurred... waiting 10 seconds");
            } catch (Throwable t) {
                if (t != null && (t instanceof ConnectionIsClosedException || t instanceof CommunicationsException || t instanceof CJCommunicationsException || t instanceof SQLNonTransientConnectionException || (t.getCause() != null && (t.getCause() instanceof IOException || t.getCause() instanceof SQLException || t.getCause() instanceof IOError)))) {
                    System.err.println("Attempting to recover from database connection failure...");
                    DatabaseConnection.INSTANCE.close();
                    DatabaseConnection.INSTANCE = null;
                    while (DatabaseConnection.INSTANCE == null) {
                        discordBot.setNoDB();
                        try {
                            DatabaseConnection.INSTANCE = new DatabaseConnection();
                        } catch (Throwable t2) {
                            System.err.println("Attempting to recover from database connection failure...");
                            t2.printStackTrace(System.err);
                            DatabaseConnection.INSTANCE = null;
                        }
                        Thread.sleep(5000);
                    }
                    continue;
                }
                throw t;
            }
            if (!mailThread.isAlive() && !stopping) {
                throw new Error("Mail thread has died");
            }
            Thread.sleep(1000);
        }
    } catch (Throwable t) {
        t.printStackTrace();
        if (discordBot != null) {
            discordBot.jda.getPresence().setPresence(OnlineStatus.DO_NOT_DISTURB, Activity.of(ActivityType.DEFAULT, "Bot Crashed"));
            if (botOwner != -1) {
                try {
                    DiscordUser user = DiscordUser.getDiscordUserIncludingUnknown(ConsoleContext.INSTANCE, botOwner);
                    if (!(user instanceof UnknownDiscordUser)) {
                        user.sendMessage(StacktraceUtil.getStackTrace(t));
                    } else {
                        CONSOLE.sendMessage(StacktraceUtil.getStackTrace(t));
                    }
                } catch (Throwable t2) {
                    CONSOLE.sendMessage(StacktraceUtil.getStackTrace(t));
                }
            }
            while (true) {
                Thread.sleep(1000);
            }
        } else {
            CONSOLE.sendMessage(StacktraceUtil.getStackTrace(t));
        }
    }
    System.exit(-1);
}
Also used : DiscordUser(com.gamebuster19901.excite.bot.user.DiscordUser) UnknownDiscordUser(com.gamebuster19901.excite.bot.user.UnknownDiscordUser) SQLException(java.sql.SQLException) UnknownDiscordUser(com.gamebuster19901.excite.bot.user.UnknownDiscordUser) Instant(java.time.Instant) IOError(java.io.IOError) IOException(java.io.IOException) CJCommunicationsException(com.mysql.cj.exceptions.CJCommunicationsException) SQLNonTransientConnectionException(java.sql.SQLNonTransientConnectionException) IOError(java.io.IOError) LoginException(javax.security.auth.login.LoginException) ErrorResponseException(net.dv8tion.jda.api.exceptions.ErrorResponseException) ConsoleUser(com.gamebuster19901.excite.bot.user.ConsoleUser) DatabaseConnection(com.gamebuster19901.excite.bot.database.sql.DatabaseConnection) CommunicationsException(com.mysql.cj.jdbc.exceptions.CommunicationsException) CJCommunicationsException(com.mysql.cj.exceptions.CJCommunicationsException) ConnectionIsClosedException(com.mysql.cj.exceptions.ConnectionIsClosedException)

Example 7 with CommunicationsException

use of com.mysql.cj.jdbc.exceptions.CommunicationsException in project ABC by RuiPinto96274.

the class ExceptionsTest method testConstructors.

@Test
public void testConstructors() {
    new CommunicationsException(TEST_MESSAGE, new Throwable());
    new CommunicationsException((JdbcConnection) this.conn, new PacketSentTimeHolder() {
    }, new PacketReceivedTimeHolder() {
    }, new Exception());
    new ConnectionFeatureNotAvailableException(TEST_MESSAGE, new Throwable());
    new ConnectionFeatureNotAvailableException((JdbcConnection) this.conn, new PacketSentTimeHolder() {
    }, new Exception());
    new MysqlDataTruncation(TEST_MESSAGE, 0, false, false, 0, 0, 0);
    new MySQLQueryInterruptedException();
    new MySQLQueryInterruptedException(TEST_MESSAGE);
    new MySQLQueryInterruptedException(TEST_MESSAGE, TEST_SQL_STATE);
    new MySQLQueryInterruptedException(TEST_MESSAGE, TEST_SQL_STATE, 0);
    new MySQLStatementCancelledException();
    new MySQLStatementCancelledException(TEST_MESSAGE);
    new MySQLStatementCancelledException(TEST_MESSAGE, TEST_SQL_STATE);
    new MySQLStatementCancelledException(TEST_MESSAGE, TEST_SQL_STATE, 0);
    new MySQLTimeoutException();
    new MySQLTimeoutException(TEST_MESSAGE);
    new MySQLTimeoutException(TEST_MESSAGE, TEST_SQL_STATE);
    new MySQLTimeoutException(TEST_MESSAGE, TEST_SQL_STATE, 0);
    new MySQLTransactionRollbackException();
    new MySQLTransactionRollbackException(TEST_MESSAGE);
    new MySQLTransactionRollbackException(TEST_MESSAGE, TEST_SQL_STATE);
    new MySQLTransactionRollbackException(TEST_MESSAGE, TEST_SQL_STATE, 0);
    new NotUpdatable(TEST_MESSAGE);
    new OperationNotSupportedException();
    new OperationNotSupportedException(TEST_MESSAGE);
    new PacketTooBigException(TEST_MESSAGE);
    new PacketTooBigException(0, 100);
    new SQLError();
}
Also used : OperationNotSupportedException(com.mysql.cj.jdbc.exceptions.OperationNotSupportedException) PacketTooBigException(com.mysql.cj.jdbc.exceptions.PacketTooBigException) ConnectionFeatureNotAvailableException(com.mysql.cj.jdbc.exceptions.ConnectionFeatureNotAvailableException) MysqlDataTruncation(com.mysql.cj.jdbc.exceptions.MysqlDataTruncation) MySQLTransactionRollbackException(com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException) PacketReceivedTimeHolder(com.mysql.cj.protocol.PacketReceivedTimeHolder) MySQLStatementCancelledException(com.mysql.cj.jdbc.exceptions.MySQLStatementCancelledException) MySQLQueryInterruptedException(com.mysql.cj.jdbc.exceptions.MySQLQueryInterruptedException) OperationNotSupportedException(com.mysql.cj.jdbc.exceptions.OperationNotSupportedException) ConnectionFeatureNotAvailableException(com.mysql.cj.jdbc.exceptions.ConnectionFeatureNotAvailableException) MySQLTransactionRollbackException(com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException) SQLException(java.sql.SQLException) PacketTooBigException(com.mysql.cj.jdbc.exceptions.PacketTooBigException) MySQLTimeoutException(com.mysql.cj.jdbc.exceptions.MySQLTimeoutException) CommunicationsException(com.mysql.cj.jdbc.exceptions.CommunicationsException) NotUpdatable(com.mysql.cj.jdbc.exceptions.NotUpdatable) MySQLTimeoutException(com.mysql.cj.jdbc.exceptions.MySQLTimeoutException) SQLError(com.mysql.cj.jdbc.exceptions.SQLError) PacketSentTimeHolder(com.mysql.cj.protocol.PacketSentTimeHolder) MySQLStatementCancelledException(com.mysql.cj.jdbc.exceptions.MySQLStatementCancelledException) CommunicationsException(com.mysql.cj.jdbc.exceptions.CommunicationsException) MySQLQueryInterruptedException(com.mysql.cj.jdbc.exceptions.MySQLQueryInterruptedException) Test(org.junit.jupiter.api.Test)

Example 8 with CommunicationsException

use of com.mysql.cj.jdbc.exceptions.CommunicationsException in project JavaSegundasQuintas by ecteruel.

the class ExceptionsTest method testConstructors.

@Test
public void testConstructors() {
    new CommunicationsException(TEST_MESSAGE, new Throwable());
    new CommunicationsException((JdbcConnection) this.conn, new PacketSentTimeHolder() {
    }, new PacketReceivedTimeHolder() {
    }, new Exception());
    new ConnectionFeatureNotAvailableException(TEST_MESSAGE, new Throwable());
    new ConnectionFeatureNotAvailableException((JdbcConnection) this.conn, new PacketSentTimeHolder() {
    }, new Exception());
    new MysqlDataTruncation(TEST_MESSAGE, 0, false, false, 0, 0, 0);
    new MySQLQueryInterruptedException();
    new MySQLQueryInterruptedException(TEST_MESSAGE);
    new MySQLQueryInterruptedException(TEST_MESSAGE, TEST_SQL_STATE);
    new MySQLQueryInterruptedException(TEST_MESSAGE, TEST_SQL_STATE, 0);
    new MySQLStatementCancelledException();
    new MySQLStatementCancelledException(TEST_MESSAGE);
    new MySQLStatementCancelledException(TEST_MESSAGE, TEST_SQL_STATE);
    new MySQLStatementCancelledException(TEST_MESSAGE, TEST_SQL_STATE, 0);
    new MySQLTimeoutException();
    new MySQLTimeoutException(TEST_MESSAGE);
    new MySQLTimeoutException(TEST_MESSAGE, TEST_SQL_STATE);
    new MySQLTimeoutException(TEST_MESSAGE, TEST_SQL_STATE, 0);
    new MySQLTransactionRollbackException();
    new MySQLTransactionRollbackException(TEST_MESSAGE);
    new MySQLTransactionRollbackException(TEST_MESSAGE, TEST_SQL_STATE);
    new MySQLTransactionRollbackException(TEST_MESSAGE, TEST_SQL_STATE, 0);
    new NotUpdatable(TEST_MESSAGE);
    new OperationNotSupportedException();
    new OperationNotSupportedException(TEST_MESSAGE);
    new PacketTooBigException(TEST_MESSAGE);
    new PacketTooBigException(0, 100);
    new SQLError();
}
Also used : OperationNotSupportedException(com.mysql.cj.jdbc.exceptions.OperationNotSupportedException) PacketTooBigException(com.mysql.cj.jdbc.exceptions.PacketTooBigException) ConnectionFeatureNotAvailableException(com.mysql.cj.jdbc.exceptions.ConnectionFeatureNotAvailableException) MysqlDataTruncation(com.mysql.cj.jdbc.exceptions.MysqlDataTruncation) MySQLTransactionRollbackException(com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException) PacketReceivedTimeHolder(com.mysql.cj.protocol.PacketReceivedTimeHolder) MySQLStatementCancelledException(com.mysql.cj.jdbc.exceptions.MySQLStatementCancelledException) MySQLQueryInterruptedException(com.mysql.cj.jdbc.exceptions.MySQLQueryInterruptedException) OperationNotSupportedException(com.mysql.cj.jdbc.exceptions.OperationNotSupportedException) ConnectionFeatureNotAvailableException(com.mysql.cj.jdbc.exceptions.ConnectionFeatureNotAvailableException) MySQLTransactionRollbackException(com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException) SQLException(java.sql.SQLException) PacketTooBigException(com.mysql.cj.jdbc.exceptions.PacketTooBigException) MySQLTimeoutException(com.mysql.cj.jdbc.exceptions.MySQLTimeoutException) CommunicationsException(com.mysql.cj.jdbc.exceptions.CommunicationsException) NotUpdatable(com.mysql.cj.jdbc.exceptions.NotUpdatable) MySQLTimeoutException(com.mysql.cj.jdbc.exceptions.MySQLTimeoutException) SQLError(com.mysql.cj.jdbc.exceptions.SQLError) PacketSentTimeHolder(com.mysql.cj.protocol.PacketSentTimeHolder) MySQLStatementCancelledException(com.mysql.cj.jdbc.exceptions.MySQLStatementCancelledException) CommunicationsException(com.mysql.cj.jdbc.exceptions.CommunicationsException) MySQLQueryInterruptedException(com.mysql.cj.jdbc.exceptions.MySQLQueryInterruptedException) Test(org.junit.jupiter.api.Test)

Example 9 with CommunicationsException

use of com.mysql.cj.jdbc.exceptions.CommunicationsException in project JavaSegundasQuintas by ecteruel.

the class ResultSetRegressionTest method testBug75309.

/**
 * Tests fix for BUG#75309 - mysql connector/J driver in streaming mode will in the blocking state.
 *
 * @throws Exception
 */
@Test
public void testBug75309() throws Exception {
    Properties props = new Properties();
    props.setProperty(PropertyKey.useSSL.getKeyName(), "false");
    props.setProperty(PropertyKey.allowPublicKeyRetrieval.getKeyName(), "true");
    props.setProperty(PropertyKey.socketTimeout.getKeyName(), "1000");
    Connection testConn = getConnectionWithProps(props);
    Statement testStmt = testConn.createStatement();
    // turn on streaming results.
    testStmt.setFetchSize(Integer.MIN_VALUE);
    final ResultSet testRs1 = testStmt.executeQuery("SELECT 1 + 18446744073709551615");
    assertThrows(SQLException.class, "Data truncation: BIGINT UNSIGNED value is out of range in '\\(1 \\+ 18446744073709551615\\)'", new Callable<Void>() {

        public Void call() throws Exception {
            testRs1.next();
            return null;
        }
    });
    try {
        testRs1.close();
    } catch (CJCommunicationsException | CommunicationsException ex) {
        fail("ResultSet.close() locked while trying to read remaining, nonexistent, streamed data.");
    }
    try {
        ResultSet testRs2 = testStmt.executeQuery("SELECT 1");
        assertTrue(testRs2.next());
        assertEquals(1, testRs2.getInt(1));
        testRs2.close();
    } catch (SQLException ex) {
        if (ex.getMessage().startsWith("Streaming result set")) {
            fail("There is a Streaming result set still active. No other statements can be issued on this connection.");
        } else {
            ex.printStackTrace();
            fail(ex.getMessage());
        }
    }
    testStmt.close();
    testConn.close();
}
Also used : SQLException(java.sql.SQLException) PreparedStatement(java.sql.PreparedStatement) CallableStatement(java.sql.CallableStatement) ServerPreparedStatement(com.mysql.cj.jdbc.ServerPreparedStatement) Statement(java.sql.Statement) Connection(java.sql.Connection) JdbcConnection(com.mysql.cj.jdbc.JdbcConnection) MysqlConnection(com.mysql.cj.MysqlConnection) ResultSet(java.sql.ResultSet) UpdatableResultSet(com.mysql.cj.jdbc.result.UpdatableResultSet) Properties(java.util.Properties) CJCommunicationsException(com.mysql.cj.exceptions.CJCommunicationsException) CommunicationsException(com.mysql.cj.jdbc.exceptions.CommunicationsException) CJCommunicationsException(com.mysql.cj.exceptions.CJCommunicationsException) InvocationTargetException(java.lang.reflect.InvocationTargetException) SQLException(java.sql.SQLException) SQLDataException(java.sql.SQLDataException) CommunicationsException(com.mysql.cj.jdbc.exceptions.CommunicationsException) CJCommunicationsException(com.mysql.cj.exceptions.CJCommunicationsException) Test(org.junit.jupiter.api.Test)

Example 10 with CommunicationsException

use of com.mysql.cj.jdbc.exceptions.CommunicationsException in project ABC by RuiPinto96274.

the class ResultSetRegressionTest method testBug75309.

/**
 * Tests fix for BUG#75309 - mysql connector/J driver in streaming mode will in the blocking state.
 *
 * @throws Exception
 */
@Test
public void testBug75309() throws Exception {
    Properties props = new Properties();
    props.setProperty(PropertyKey.useSSL.getKeyName(), "false");
    props.setProperty(PropertyKey.allowPublicKeyRetrieval.getKeyName(), "true");
    props.setProperty(PropertyKey.socketTimeout.getKeyName(), "1000");
    Connection testConn = getConnectionWithProps(props);
    Statement testStmt = testConn.createStatement();
    // turn on streaming results.
    testStmt.setFetchSize(Integer.MIN_VALUE);
    final ResultSet testRs1 = testStmt.executeQuery("SELECT 1 + 18446744073709551615");
    assertThrows(SQLException.class, "Data truncation: BIGINT UNSIGNED value is out of range in '\\(1 \\+ 18446744073709551615\\)'", new Callable<Void>() {

        public Void call() throws Exception {
            testRs1.next();
            return null;
        }
    });
    try {
        testRs1.close();
    } catch (CJCommunicationsException | CommunicationsException ex) {
        fail("ResultSet.close() locked while trying to read remaining, nonexistent, streamed data.");
    }
    try {
        ResultSet testRs2 = testStmt.executeQuery("SELECT 1");
        assertTrue(testRs2.next());
        assertEquals(1, testRs2.getInt(1));
        testRs2.close();
    } catch (SQLException ex) {
        if (ex.getMessage().startsWith("Streaming result set")) {
            fail("There is a Streaming result set still active. No other statements can be issued on this connection.");
        } else {
            ex.printStackTrace();
            fail(ex.getMessage());
        }
    }
    testStmt.close();
    testConn.close();
}
Also used : SQLException(java.sql.SQLException) PreparedStatement(java.sql.PreparedStatement) CallableStatement(java.sql.CallableStatement) ServerPreparedStatement(com.mysql.cj.jdbc.ServerPreparedStatement) Statement(java.sql.Statement) Connection(java.sql.Connection) JdbcConnection(com.mysql.cj.jdbc.JdbcConnection) MysqlConnection(com.mysql.cj.MysqlConnection) ResultSet(java.sql.ResultSet) UpdatableResultSet(com.mysql.cj.jdbc.result.UpdatableResultSet) Properties(java.util.Properties) CJCommunicationsException(com.mysql.cj.exceptions.CJCommunicationsException) CommunicationsException(com.mysql.cj.jdbc.exceptions.CommunicationsException) CJCommunicationsException(com.mysql.cj.exceptions.CJCommunicationsException) InvocationTargetException(java.lang.reflect.InvocationTargetException) SQLException(java.sql.SQLException) SQLDataException(java.sql.SQLDataException) CommunicationsException(com.mysql.cj.jdbc.exceptions.CommunicationsException) CJCommunicationsException(com.mysql.cj.exceptions.CJCommunicationsException) Test(org.junit.jupiter.api.Test)

Aggregations

CommunicationsException (com.mysql.cj.jdbc.exceptions.CommunicationsException)10 Test (org.junit.jupiter.api.Test)9 CJCommunicationsException (com.mysql.cj.exceptions.CJCommunicationsException)7 SQLException (java.sql.SQLException)7 MysqlConnection (com.mysql.cj.MysqlConnection)6 JdbcConnection (com.mysql.cj.jdbc.JdbcConnection)6 ServerPreparedStatement (com.mysql.cj.jdbc.ServerPreparedStatement)6 CallableStatement (java.sql.CallableStatement)6 Connection (java.sql.Connection)6 PreparedStatement (java.sql.PreparedStatement)6 Statement (java.sql.Statement)6 Properties (java.util.Properties)6 IOException (java.io.IOException)4 ClientPreparedStatement (com.mysql.cj.jdbc.ClientPreparedStatement)3 JdbcPreparedStatement (com.mysql.cj.jdbc.JdbcPreparedStatement)3 JdbcStatement (com.mysql.cj.jdbc.JdbcStatement)3 ConnectionFeatureNotAvailableException (com.mysql.cj.jdbc.exceptions.ConnectionFeatureNotAvailableException)3 MySQLQueryInterruptedException (com.mysql.cj.jdbc.exceptions.MySQLQueryInterruptedException)3 MySQLStatementCancelledException (com.mysql.cj.jdbc.exceptions.MySQLStatementCancelledException)3 MySQLTimeoutException (com.mysql.cj.jdbc.exceptions.MySQLTimeoutException)3