[ 
https://issues.apache.org/jira/browse/HDDS-14046?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Arafat Khan resolved HDDS-14046.
--------------------------------
    Resolution: Fixed

> ReconStorageContainerManagerFacade is not getting initialized properly after 
> upgrade
> ------------------------------------------------------------------------------------
>
>                 Key: HDDS-14046
>                 URL: https://issues.apache.org/jira/browse/HDDS-14046
>             Project: Apache Ozone
>          Issue Type: Improvement
>          Components: Ozone Recon
>            Reporter: Arafat Khan
>            Assignee: Arafat Khan
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 2.2.0
>
>
> The issue is a race condition during the Recon startup sequence. The 
> *{{ReconTaskStatusTableUpgradeAction}}* (which adds the 
> *{{last_task_run_status}}* column) was being executed _after_ the Recon 
> services were started.
> Specifically, *{{ReconServer.start()}}* initializes and registers 
> {*}{{ReconTaskStatusMetrics}}{*}. The metrics system (or other background 
> tasks started by {*}{{start()}}{*}) immediately attempts to query the 
> *{{RECON_TASK_STATUS}}* table. Since the upgrade logic 
> ({*}{{finalizeLayoutFeatures}}{*}) was scheduled to run _after_ 
> {*}{{start()}}{*}, the query failed with *{{SQLSyntaxErrorException}}* 
> because the new column did not exist yet.
> *The Error we are getting now -* 
> {code:java}
> Caused by: java.sql.SQLSyntaxErrorException: Column 
> 'RECON_TASK_STATUS.last_task_run_status' is either not in any table in the 
> FROM list or appears within a join specification and is outside the scope of 
> the join specification or appears in a HAVING clause and is not in the GROUP 
> BY list. If this is a CREATE or ALTER TABLE  statement then 
> 'RECON_TASK_STATUS.last_task_run_status' is not a column in the target table. 
>    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown 
> Source)       at 
> org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)       
> at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown 
> Source)        at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown 
> Source)   at 
> org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)   
> at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source) 
>   at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown Source) 
>     at org.apache.derby.impl.jdbc.EmbedPreparedStatement42.<init>(Unknown 
> Source)   at org.apache.derby.jdbc.Driver42.newEmbedPreparedStatement(Unknown 
> Source)     at 
> org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)  
> at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown 
> Source)  at 
> org.jooq.impl.ProviderEnabledConnection.prepareStatement(ProviderEnabledConnection.java:109)
>  at 
> org.jooq.impl.SettingsEnabledConnection.prepareStatement(SettingsEnabledConnection.java:73)
>   at org.jooq.impl.AbstractResultQuery.prepare(AbstractResultQuery.java:239)  
>     at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:322)  ... 49 
> moreCaused by: ERROR 42X04: Column 'RECON_TASK_STATUS.last_task_run_status' 
> is either not in any table in the FROM list or appears within a join 
> specification and is outside the scope of the join specification or appears 
> in a HAVING clause and is not in the GROUP BY list. If this is a CREATE or 
> ALTER TABLE  statement then 'RECON_TASK_STATUS.last_task_run_status' is not a 
> column in the target table.        at 
> org.apache.derby.iapi.error.StandardException.newException(Unknown Source)   
> at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) 
>   at org.apache.derby.impl.sql.compile.ColumnReference.bindExpression(Unknown 
> Source)     at 
> org.apache.derby.impl.sql.compile.ColumnReference.bindExpression(Unknown 
> Source)     at 
> org.apache.derby.impl.sql.compile.ResultColumn.bindExpression(Unknown Source) 
>        at 
> org.apache.derby.impl.sql.compile.ResultColumnList.bindExpressions(Unknown 
> Source)   at 
> org.apache.derby.impl.sql.compile.SelectNode.bindExpressions(Unknown Source) 
> at org.apache.derby.impl.sql.compile.DMLStatementNode.bindExpressions(Unknown 
> Source)   at org.apache.derby.impl.sql.compile.DMLStatementNode.bind(Unknown 
> Source)      at 
> org.apache.derby.impl.sql.compile.CursorNode.bindStatement(Unknown Source)   
> at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)      
>   at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)   at 
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown
>  Source)     ... 58 more2025-11-24 06:52:10,562 ERROR 
> [main]-org.apache.hadoop.ozone.recon.ReconServer: 
> ReconStorageContainerManagerFacade is not initialized properly. Setting 
> health status to false and adding error code.2025-11-24 06:52:10,563 INFO 
> [main]-org.apache.hadoop.ozone.recon.ReconContext: Update healthStatus of 
> Recon from true to false.2025-11-24 06:52:10,563 ERROR 
> [main]-org.apache.hadoop.ozone.recon.ReconServer: OzoneManagerServiceProvider 
> is not initialized properly. Setting health status to false and adding error 
> code.2025-11-24 06:52:10,563 INFO 
> [main]-org.apache.hadoop.ozone.recon.ReconContext: Update healthStatus of 
> Recon from false to false. {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to