drdswriter 出现No operations allowed after statement closed
- Dominant language
- Java
- Stars
- 17.4k
- Forks
- 5.7k
- PR merge metrics
- No merged PRs in 30d
Description
通过datax 往drds迁移数据的时候,执行出现 **No operations allowed after statement closed** 错误
> java.sql.SQLException: [109702d57bd78000][10.0.59.228:3306][coldchain]No operations allowed after statement closed.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965) ~[mysql-connector-java-5.1.47.jar:5.1.47]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3978) ~[mysql-connector-java-5.1.47.jar:5.1.47]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3914) ~[mysql-connector-java-5.1.47.jar:5.1.47]
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530) ~[mysql-connector-java-5.1.47.jar:5.1.47]
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683) ~[mysql-connector-java-5.1.47.jar:5.1.47]
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2495) ~[mysql-connector-java-5.1.47.jar:5.1.47]
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1903) ~[mysql-connector-java-5.1.47.jar:5.1.47]
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1242) ~[mysql-connector-java-5.1.47.jar:5.1.47]
at com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter$Task.doOneInsert(CommonRdbmsWriter.java:383) [plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na
]
at com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter$Task.doBatchInsert(CommonRdbmsWriter.java:363) [plugin-rdbms-util-0.0.1-SNAPSHOT.jar:
na]
at com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter$Task.startWriteWithConnection(CommonRdbmsWriter.java:291) [plugin-rdbms-util-0.0.1-SN
APSHOT.jar:na]
at com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter$Task.startWrite(CommonRdbmsWriter.java:319) [plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na]
at com.alibaba.datax.plugin.writer.drdswriter.DrdsWriter$Task.startWrite(DrdsWriter.java:82) [drdswriter-0.0.1-SNAPSHOT.jar:na]
at com.alibaba.datax.core.taskgroup.runner.WriterRunner.run(WriterRunner.java:56) [datax-core-0.0.1-SNAPSHOT.jar:na]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
然后一直提示如下信息:
> 2020-05-08 11:15:51.400 [0-0-96-writer] WARN CommonRdbmsWriter$Task - 回滚此次写入, 采用每次写入一行方式提交. 因为:[109702d802d78000-2][xxx.xxx.xxx.xxx:330
6][tableName]No operations allowed after statement closed.
2020-05-08 11:15:51.671 [0-0-96-writer] WARN CommonRdbmsWriter$Task - 回滚此次写入, 采用每次写入一行方式提交. 因为:[109702d846978000-2][xxx.xxx.xxx.xxx:330
6][tableName]No operations allowed after statement closed.
2020-05-08 11:15:51.942 [0-0-96-writer] WARN CommonRdbmsWriter$Task - 回滚此次写入, 采用每次写入一行方式提交. 因为:[109702d88a978000-2][xxx.xxx.xxx.xxx:330
6][tableName]No operations allowed after statement closed.
经过我添加日志发现connection 和 preparedStatement的isClosed状态都为false,我也在抛异常的地方添加了preparedStatement.exeucte("select 1") ,没有抛出类似异常
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with plugin-rdbms-util's CommonRdbmsWriter.java around doOneInsert, doBatchInsert, and startWriteWithConnection, then inspect DrdsWriter.java around startWrite. Reproduce the DataX-to-DRDS failure and compare the statement lifecycle with the reported isClosed checks. Done means the failing write path no longer reports the closed-statement error and its batch or fallback behavior is verified.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- databases
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100