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]

Reply via email to