UpdateMeasuresDebtToMinutes升级到SonarQube 4.5.1失败

时间:2015-01-08 16:36:33

标签: sonarqube sonarqube-4.5 sonarqube-4.0

我正在尝试从4.0更新到4.5.1但该过程始终在UpdateMeasuresDebtToMinutes失败。我使用MySQL 5.5.27作为数据库,InnoDB作为表引擎。

基本上问题看起来像this problem

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_measures
  • project_measures包含超过770000行
  • 进程总是在249行之后挂起
  • org.sonar.server.migrations.MassUpdate强制执行和提交
  • 之后调用update.addBatch()BatchSession.MAX_BATCH_SIZE (250)挂起

有没有办法配置数据库连接以允许它继续?

2 个答案:

答案 0 :(得分:0)

首先,您是否可以尝试将数据库恢复为4.0并重试? 那么,你能不能给我们提供你正在使用的JDBC网址(sonar.jdbc.url)?

由于

答案 1 :(得分:0)

当我需要声纳服务器运行时,我终于实现了一种解决方法。

似乎我根本无法写入数据库,只要一个大的结果集仍然打开(我尝试使用第二个表但是和以前一样的问题)。

因此,我更改了所有需要读取和写入project_measures表(org.sonar.server.db.migrations.v43.TechnicalDebtMeasuresMigrationorg.sonar.server.db.migrations.v43.RequirementMeasuresMigrationorg.sonar.server.db.migrations.v44.MeasureDataMigration)的迁移,以将更改的数据加载到内存结构中关闭读取结果集后,将其写回。 这听起来很骇人听闻,并且不适用于需要通过分页数据或将所有内容存储到辅助数据存储区中的大型数据集。

此外我发现稍后(在546_inverse_rule_key_index.rb中)需要在rules表上创建一个索引,该索引大于mysql上的最大密钥长度(带有UTF的2个varchar(255)列) -8超过1000字节..)所以我不得不限制密钥长度..

正如我所说,这是一种解决方法,因此我不会接受它作为答案..