Skip to content

Conversation

@HasonHuang
Copy link
Contributor

问题

使用数据库选主,当历史心跳记录距今大于 3020399 秒,删除这些过期心跳记录时会报错。

详细日志:

2020-07-14 22:02:50.491 ERROR 7036 --- [pool-3-thread-1] c.y.e.e.i.d.DatabaseMasterSelectorImpl   : heart beat failed!38

org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [delete from trx_election where app_id = ? and TIME_TO_SEC(TIMEDIFF(NOW(), heart_beat_time)) > ?]; Data truncation: Truncated incorrect time value: '1797:03:18'; nested exception is com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect time value: '1797:03:18'
	at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:102)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:82)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:82)
	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:655)
	at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:876)
	at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:937)
	at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:947)
	at com.yiqiniu.easytrans.extensionsuite.impl.database.DatabaseMasterSelectorImpl.updateHeartBeat(DatabaseMasterSelectorImpl.java:84)
	at com.yiqiniu.easytrans.extensionsuite.impl.database.DatabaseMasterSelectorImpl.access$0(DatabaseMasterSelectorImpl.java:72)
	at com.yiqiniu.easytrans.extensionsuite.impl.database.DatabaseMasterSelectorImpl$1.run(DatabaseMasterSelectorImpl.java:67)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect time value: '1797:03:18'
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3931)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3869)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2675)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1912)
	at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2133)
	at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2067)
	at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5175)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2052)
	at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeUpdate(DruidPooledPreparedStatement.java:256)
	at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:883)
	at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:876)
	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:639)
	... 13 common frames omitted

环境

版本:1.4.3

原因

MySQL 文档 - TIMEDIFF 描述了 TIMEDIFF 的范围是 '-838:59:59' - '838:59:59'。因此,当时间差大于约35天时,DML 语句报错。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant