hanicz opened a new pull request, #1146: URL: https://github.com/apache/knox/pull/1146
…eation race condition [KNOX-3252](https://issues.apache.org/jira/browse/KNOX-3252) - Intermittent Postgres type already exists exception ## What changes were proposed in this pull request? The issue is a race condition during table creation when multiple Knox instances are starting up simultaneously. At the initial "isTableExists" check the tables are not yet created. So Knox-instance-0 and Knox-instance-1 will both go ahead with the creation. Postgres will create a record in pg_class and pg_type as well. However the process that gets there later will get the exception due to the record that was created by the other process in pg_type. `2026-02-10 21:19:44,825 ERROR knox.gateway (TokenStateServiceFactory.java:createService(63)) - Error while initiatalizing org.apache.knox.gateway.services.token.impl.JDBCTokenStateService: Error while initiating JDBCTokenStateService: org.postgresql.util.PSQLException: ERROR: type "knox_tokens" already exists` This change catches the duplicate object SQL state and skips the table creation. ## How was this patch tested? Manually tested with a local setup. I had postgres running in docker desktop and a local Knox instance. ``` <property> <name>gateway.service.tokenstate.impl</name> <value>org.apache.knox.gateway.services.token.impl.JDBCTokenStateService</value> </property> <property> <name>gateway.database.type</name> <value>postgresql</value> </property> <property> <name>gateway.database.port</name> <value>5432</value> </property> <property> <name>gateway.database.host</name> <value>localhost</value> </property> <property> <name>gateway.database.name</name> <value>mydb</value> </property> ``` I created the below type in the Knox DB to simulate the race condition `CREATE TYPE knox_tokens AS ENUM ('active', 'expired', 'revoked');` ## Integration Tests N/A ## UI changes N/A -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
