XBaith opened a new issue, #3101:
URL: https://github.com/apache/amoro/issues/3101

   ### What happened?
   
   When an optimizing process completes and commits, a SQL exception (e.g. sql 
connection exhaustion, DB corruption) may cause the status to remain blocked in 
the db while committing and cannot be manually cancelled.
   
   ### Affects Versions
   
   master/0.7.x
   
   ### What table formats are you seeing the problem on?
   
   Iceberg
   
   ### What engines are you seeing the problem on?
   
   AMS
   
   ### How to reproduce
   
   _No response_
   
   ### Relevant log output
   
   ```shell
   2024-08-14 11:52:26,585 ERROR [async-optimizing-commit-executor-5] 
[org.apache.amoro.server.optimizing.OptimizingQueue] [] - 
iceberg.db.xxx(tableId=94156) Commit optimizing failed 
   org.apache.amoro.server.exception.PersistenceException: 
org.apache.ibatis.exceptions.PersistenceException: 
   ### Error updating database.  Cause: java.sql.SQLException: Cannot get a 
connection, pool error Timeout waiting for idle object, 
borrowMaxWaitDuration=PT1S
   ### The error may exist in 
org/apache/amoro/server/persistence/mapper/OptimizingMapper.java (best guess)
   ### The error may involve 
org.apache.amoro.server.persistence.mapper.OptimizingMapper.updateOptimizingProcess
   ### The error occurred while executing an update
   ### Cause: java.sql.SQLException: Cannot get a connection, pool error 
Timeout waiting for idle object, borrowMaxWaitDuration=PT1S
           at 
org.apache.amoro.server.exception.AmoroRuntimeException.wrap(AmoroRuntimeException.java:141)
 ~[amoro-ams-server-0.7.0-incubating.jar:0.7.0-incubating]
           at 
org.apache.amoro.server.persistence.PersistentBase.doAs(PersistentBase.java:53) 
~[amoro-ams-server-0.7.0-incubating.jar:0.7.0-incubating]
           at 
org.apache.amoro.server.optimizing.OptimizingQueue.access$600(OptimizingQueue.java:73)
 ~[amoro-ams-server-0.7.0-incubating.jar:0.7.0-incubating]
           at 
org.apache.amoro.server.optimizing.OptimizingQueue$TableOptimizingProcess.lambda$persistProcessCompleted$11(OptimizingQueue.java:645)
 ~[amoro-ams-server-0.7.0-incubating.jar:0.7.0-incubating]
           at 
java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) 
~[?:1.8.0_412]
           at 
java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:647) 
~[?:1.8.0_412]
           at 
org.apache.amoro.server.persistence.PersistentBase.doAsTransaction(PersistentBase.java:61)
 ~[amoro-ams-server-0.7.0-incubating.jar:0.7.0-incubating]
           at 
org.apache.amoro.server.optimizing.OptimizingQueue.access$400(OptimizingQueue.java:73)
 ~[amoro-ams-server-0.7.0-incubating.jar:0.7.0-incubating]
           at 
org.apache.amoro.server.optimizing.OptimizingQueue$TableOptimizingProcess.persistProcessCompleted(OptimizingQueue.java:643)
 ~[amoro-ams-server-0.7.0-incubating.jar:0.7.0-incubating]
           at 
org.apache.amoro.server.optimizing.OptimizingQueue$TableOptimizingProcess.commit(OptimizingQueue.java:566)
 ~[amoro-ams-server-0.7.0-incubating.jar:0.7.0-incubating]
           at 
org.apache.amoro.server.table.executor.OptimizingCommitExecutor.execute(OptimizingCommitExecutor.java:53)
 ~[amoro-ams-server-0.7.0-incubating.jar:0.7.0-incubating]
           at 
org.apache.amoro.server.table.executor.BaseTableExecutor.executeTask(BaseTableExecutor.java:84)
 ~[amoro-ams-server-0.7.0-incubating.jar:0.7.0-incubating]
           at 
org.apache.amoro.server.table.executor.BaseTableExecutor.lambda$scheduleIfNecessary$4(BaseTableExecutor.java:95)
 ~[amoro-ams-server-0.7.0-incubating.jar:0.7.0-incubating]
           at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
[?:1.8.0_412]
           at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
[?:1.8.0_412]
           at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
 [?:1.8.0_412]
           at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
 [?:1.8.0_412]
           at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
[?:1.8.0_412]
           at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
[?:1.8.0_412]
           at java.lang.Thread.run(Thread.java:750) [?:1.8.0_412]
   Caused by: org.apache.ibatis.exceptions.PersistenceException: 
   ### Error updating database.  Cause: java.sql.SQLException: Cannot get a 
connection, pool error Timeout waiting for idle object, 
borrowMaxWaitDuration=PT1S
   ### The error may exist in 
org/apache/amoro/server/persistence/mapper/OptimizingMapper.java (best guess)
   ### The error may involve 
org.apache.amoro.server.persistence.mapper.OptimizingMapper.updateOptimizingProcess
   ### The error occurred while executing an update
   ### Cause: java.sql.SQLException: Cannot get a connection, pool error 
Timeout waiting for idle object, borrowMaxWaitDuration=PT1S
           at 
org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
 ~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:199)
 ~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:67) 
~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:141)
 ~[mybatis-3.5.15.jar:3.5.15]
           at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) 
~[mybatis-3.5.15.jar:3.5.15]
           at com.sun.proxy.$Proxy48.updateOptimizingProcess(Unknown Source) 
~[?:?]
           at 
org.apache.amoro.server.optimizing.OptimizingQueue$TableOptimizingProcess.lambda$null$10(OptimizingQueue.java:648)
 ~[amoro-ams-server-0.7.0-incubating.jar:0.7.0-incubating]
           at 
org.apache.amoro.server.persistence.PersistentBase.doAs(PersistentBase.java:49) 
~[amoro-ams-server-0.7.0-incubating.jar:0.7.0-incubating]
           ... 18 more
   Caused by: java.sql.SQLException: Cannot get a connection, pool error 
Timeout waiting for idle object, borrowMaxWaitDuration=PT1S
           at 
org.apache.commons.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:147)
 ~[commons-dbcp2-2.9.0.jar:2.9.0]
           at 
org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:731)
 ~[commons-dbcp2-2.9.0.jar:2.9.0]
           at 
org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnection(JdbcTransaction.java:145)
 ~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.transaction.jdbc.JdbcTransaction.getConnection(JdbcTransaction.java:67)
 ~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) 
~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89)
 ~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:49) 
~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) 
~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) 
~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)
 ~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:67) 
~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:141)
 ~[mybatis-3.5.15.jar:3.5.15]
           at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) 
~[mybatis-3.5.15.jar:3.5.15]
           at com.sun.proxy.$Proxy48.updateOptimizingProcess(Unknown Source) 
~[?:?]
           at 
org.apache.amoro.server.optimizing.OptimizingQueue$TableOptimizingProcess.lambda$null$10(OptimizingQueue.java:648)
 ~[amoro-ams-server-0.7.0-incubating.jar:0.7.0-incubating]
           at 
org.apache.amoro.server.persistence.PersistentBase.doAs(PersistentBase.java:49) 
~[amoro-ams-server-0.7.0-incubating.jar:0.7.0-incubating]
           ... 18 more
   Caused by: java.util.NoSuchElementException: Timeout waiting for idle 
object, borrowMaxWaitDuration=PT1S
           at 
org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:316)
 ~[commons-pool2-2.12.0.jar:2.12.0]
           at 
org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:233)
 ~[commons-pool2-2.12.0.jar:2.12.0]
           at 
org.apache.commons.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:141)
 ~[commons-dbcp2-2.9.0.jar:2.9.0]
           at 
org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:731)
 ~[commons-dbcp2-2.9.0.jar:2.9.0]
           at 
org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnection(JdbcTransaction.java:145)
 ~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.transaction.jdbc.JdbcTransaction.getConnection(JdbcTransaction.java:67)
 ~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348) 
~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89)
 ~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:49) 
~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) 
~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) 
~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)
 ~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:67) 
~[mybatis-3.5.15.jar:3.5.15]
           at 
org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:141)
 ~[mybatis-3.5.15.jar:3.5.15]
           at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) 
~[mybatis-3.5.15.jar:3.5.15]
           at com.sun.proxy.$Proxy48.updateOptimizingProcess(Unknown Source) 
~[?:?]
           at 
org.apache.amoro.server.optimizing.OptimizingQueue$TableOptimizingProcess.lambda$null$10(OptimizingQueue.java:648)
 ~[amoro-ams-server-0.7.0-incubating.jar:0.7.0-incubating]
           at 
org.apache.amoro.server.persistence.PersistentBase.doAs(PersistentBase.java:49) 
~[amoro-ams-server-0.7.0-incubating.jar:0.7.0-incubating]
           ... 18 more
   ```
   
   
   ### Anything else
   
   _No response_
   
   ### Are you willing to submit a PR?
   
   - [X] Yes I am willing to submit a PR!
   
   ### Code of Conduct
   
   - [X] I agree to follow this project's Code of Conduct


-- 
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