升级到SonarQube 4.5.1在UpdateMeasuresDebtoMinutes时失败
我正在尝试从4.0更新到4.5.1,但在升级到SonarQube 4.5.1在UpdateMeasuresDebtoMinutes时失败,sonarqube,sonarqube-4.5,sonarqube-4.0,Sonarqube,Sonarqube 4.5,Sonarqube 4.0,我正在尝试从4.0更新到4.5.1,但在updateMeasuresDebtoMinutes时,该过程总是失败。我使用MySQL 5.5.27作为数据库,InnoDB作为表引擎 基本上,问题看起来是这样的 writeTimeout超过(600秒)后,日志中出现异常 Caused by: java.io.EOFException: Can not read response from server. Expected to read 81 bytes, read 15 bytes before c
updateMeasuresDebtoMinutes
时,该过程总是失败。我使用MySQL 5.5.27作为数据库,InnoDB作为表引擎
基本上,问题看起来是这样的
writeTimeout超过(600秒)后,日志中出现异常
Caused by: java.io.EOFException: Can not read response from server. Expected to read 81 bytes, read 15 bytes before connection was unexpectedly lost.
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3166) ~[mysql-connector-java-5.1.27.jar:na]
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3676) ~[mysql-connector-java-5.1.27.jar:na]
添加链接问题中建议的索引没有帮助
进一步调查后,我注意到以下几点:
- 迁移步骤从表中读取数据,并希望写回同一个表(
)project\u measures
- project_measures包含超过770000行
- 进程始终在249行之后挂起
- 调用
时,挂起发生在update.addBatch()
中,在org.sonar.server.migrations.MassUpdate
之后强制执行和提交BatchSession.MAX\u BATCH\u SIZE(250)
是否有办法配置数据库连接以允许继续进行此操作?首先,您能否尝试将数据库恢复到4.0并重试? 那么,您能告诉我们您正在使用的JDBCURL(sonar.JDBC.url)吗
谢谢因为我需要声纳服务器来运行,所以我最终实现了一个解决方案 似乎我根本无法写入数据库,只要一个大的结果集仍然打开(我尝试使用第二个表,但问题与以前相同) 因此,我更改了所有需要读写
project\u measures
表的迁移(org.sonar.server.db.migrations.v43.technicaldebtmeasuresmiglation
,org.sonar.server.db.migrations.v43.RequirementMeasuresMigration
,org.sonar.server.db.migrations.v44.MeasureDataMigration
)将更改的数据加载到内存结构中,并在关闭读取结果集后将其写回。
这听起来像是黑客攻击,不适用于较大的数据集,因为在这些数据集中,您需要通过分页数据或将所有内容存储到辅助数据存储中来实现这一点
此外,我后来发现(在546\u reverse\u rule\u key\u index.rb
)需要在rules
表上创建一个索引,该索引大于mysql上的最大键长度(2个带UTF-8的varchar(255)列超过1000字节),因此我也必须限制该表上的键长度
正如我所说,这是一个解决办法,因此我不会接受它作为答案。当你说它失败时,日志中没有任何错误吗?是的,当然。。与链接问题中相同,超过超时后会出现java.io.EOFException。。将向上面的文本中添加一个代码段还原只会一次又一次地导致相同的问题。。作为JDBCURL,我尝试了几个具有不同超时设置的版本,但这些只是更改了记录异常的时刻。现在我使用这个设置
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
FYI应为mysql管理规则索引的最大长度。它被截断为支持的最大长度。