{"record":{"id":"cb430767eb64315c","repo":"quarkusio/quarkus","slug":"oidc-token-state-manager-failed-to-create-database","errorCode":null,"errorMessage":"OIDC Token State Manager failed to create database table: <errMsg>","messagePattern":"OIDC Token State Manager failed to create database table: <errMsg>","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"extensions/oidc-db-token-state-manager/runtime/src/main/java/io/quarkus/oidc/db/token/state/manager/runtime/OidcDbTokenStateManagerInitializer.java","lineNumber":149,"sourceCode":"                                            return null;\n                                        }\n                                        // table does not exist\n                                        return FAILED_TO_CREATE_DB_TABLE;\n                                    }\n                                })\n                                .onFailure().recoverWithItem(new Function<Throwable, String>() {\n                                    @Override\n                                    public String apply(Throwable throwable) {\n                                        LOG.error(\"Create database query failed with: \", throwable);\n                                        return FAILED_TO_CREATE_DB_TABLE;\n                                    }\n                                });\n                    }\n                })\n                .await()\n                .indefinitely();\n        if (errMsg != null) {\n            throw new RuntimeException(\"OIDC Token State Manager failed to create database table: \" + errMsg);\n        }\n    }\n\n    public enum SupportedReactiveSqlClient {\n        POSTGRESQL(true,\n                (int idToken, int accessToken, int refreshToken) -> \"CREATE TABLE IF NOT EXISTS oidc_db_token_state_manager (\"\n                        + \"id VARCHAR(100) PRIMARY KEY, \"\n                        + \"id_token VARCHAR(\" + idToken + \"), \"\n                        + \"access_token VARCHAR(\" + accessToken + \"), \"\n                        + \"refresh_token VARCHAR(\" + refreshToken + \"), \"\n                        + \"access_token_expires_in BIGINT, \"\n                        + \"access_token_scope VARCHAR, \"\n                        + \"expires_in BIGINT NOT NULL)\"),\n        DB2(false, (int idToken, int accessToken, int refreshToken) -> \"CREATE TABLE oidc_db_token_state_manager (\"\n                + \"id VARCHAR(100) NOT NULL PRIMARY KEY, \"\n                + \"id_token VARCHAR(\" + idToken + \"), \"\n                + \"access_token VARCHAR(\" + accessToken + \"), \"\n                + \"refresh_token VARCHAR(\" + refreshToken + \"), \"","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/oidc-db-token-state-manager/runtime/src/main/java/io/quarkus/oidc/db/token/state/manager/runtime/OidcDbTokenStateManagerInitializer.java#L131-L167","documentation":"OidcDbTokenStateManagerInitializer.createDatabaseTable collects errors from the reactive SQL statements that create the oidc_db_token_state_manager table, then throws RuntimeException if any error message was captured. It signals the token state manager could not initialize its storage table in the database.","triggerScenarios":"The CREATE TABLE IF NOT EXISTS statement (dialect-specific per SupportedReactiveSqlClient) fails at startup: connection refused, bad credentials, missing schema, insufficient privileges, or dialect errors.","commonSituations":"Database not running or wrong host/port; wrong quarkus.datasource credentials; user lacking CREATE TABLE permission; the database is behind a firewall or the container isn't started in tests.","solutions":["Check errMsg / cause for the underlying database error (connection, auth, or SQL)","Verify quarkus.datasource.reactive URL, credentials, and db-kind","Ensure the database user has CREATE TABLE privileges on the schema","Start the DB (docker-compose, devservices) and verify network reachability before app startup"],"exampleFix":"// before\nquarkus.datasource.db-kind=postgresql\nquarkus.datasource.reactive.url=postgresql://localhost:9999/db\n// after\nquarkus.datasource.reactive.url=postgresql://localhost:5432/db\nquarkus.datasource.username=app\nquarkus.datasource.password=secret","handlingStrategy":"try-catch","validationCode":"// pre-flight: verify datasource reachability before app start\ntry (Connection c = DriverManager.getConnection(jdbcUrl, user, pass)) {\n    // ok\n} catch (SQLException e) {\n    throw new IllegalStateException(\"OIDC token state DB unreachable: \" + e.getMessage());\n}","typeGuard":null,"tryCatchPattern":"try {\n    initializer.initialize();\n} catch (RuntimeException e) {\n    if (e.getMessage().startsWith(\"OIDC Token State Manager failed to create database table\")) {\n        log.errorf(\"Check DB connectivity/privileges: %s\", e.getCause());\n    }\n    throw e;\n}","preventionTips":["Verify reactive datasource URL/credentials/db-kind before startup","Grant the DB user CREATE TABLE rights","Use devservices or testcontainers to ensure the DB is up during tests"],"tags":["quarkus","oidc","database","startup"],"backgroundTag":"database-connection-failed","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}