0

我们的 SonarQube 设置中有一个非常烦人的问题。

设置

在服务器上,我们有一个正在运行的 SQ 4.5.5 安装。我们使用 SonarQube eclipse 插件将 Sonar 功能集成到 IDE 中。我们目前使用 3.4 版的 SQ eclipse 插件。

问题

当我们尝试为我们的任何 Eclipse 插件同步 Sonar 问题时,这需要几分钟,然后会出现下面屏幕截图中的对话框。

在此处输入图像描述

Eclipse 工作区中的 .log 文件在向 SonarQube 服务器查询问题时显示超时。如果我在浏览器中打开 URL,页面加载需要很长时间,但最终会显示有关我们的声纳问题的 JSON 格式数据。所以这显然是一个服务器问题——我们的服务器只是为了及时获取数据而变慢。

!ENTRY org.sonar.ide.eclipse.core 4 4 2016-04-01 08:24:35.561
!MESSAGE Error during issue query org.sonar.wsclient.issue.IssueQuery@f3d040
!STACK 0
org.sonar.ide.eclipse.wsclient.SonarWSClientException: Error during issue query org.sonar.wsclient.issue.IssueQuery@f3d040
    at org.sonar.ide.eclipse.wsclient.internal.SonarWSClientFacade.findIssues(SonarWSClientFacade.java:199)
    at org.sonar.ide.eclipse.wsclient.internal.SonarWSClientFacade.getUnresolvedRemoteIssuesRecursively(SonarWSClientFacade.java:174)
    at org.sonar.ide.eclipse.core.internal.remote.RemoteSourceCode.getRemoteIssuesRecursively(RemoteSourceCode.java:102)
    at org.sonar.ide.eclipse.core.internal.jobs.SynchronizeAllIssuesJob.doRefreshIssues(SynchronizeAllIssuesJob.java:138)
    at org.sonar.ide.eclipse.core.internal.jobs.SynchronizeAllIssuesJob.fetchRemoteIssues(SynchronizeAllIssuesJob.java:127)
    at org.sonar.ide.eclipse.core.internal.jobs.SynchronizeAllIssuesJob.run(SynchronizeAllIssuesJob.java:78)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Caused by: java.lang.IllegalStateException: Fail to request http://AcmeSonarServer:8080/sonar/api/issues/search?resolved=false&pageSize=-1&componentRoots=ACME.Test.All:acmeTests&pageIndex=1
    at org.sonar.wsclient.internal.HttpRequestFactory.execute(HttpRequestFactory.java:156)
    at org.sonar.wsclient.internal.HttpRequestFactory.get(HttpRequestFactory.java:129)
    at org.sonar.wsclient.issue.internal.DefaultIssueClient.find(DefaultIssueClient.java:49)
    at org.sonar.ide.eclipse.wsclient.internal.SonarWSClientFacade.findIssues(SonarWSClientFacade.java:195)
    ... 6 more
Caused by: java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.io.BufferedInputStream.fill(Unknown Source)
    at java.io.BufferedInputStream.read1(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.HttpURLConnection.getResponseCode(Unknown Source)
    at org.sonar.wsclient.kevinsawicki.HttpRequest.code(HttpRequest.java:1481)
    at org.sonar.wsclient.internal.HttpRequestFactory.isSuccess(HttpRequestFactory.java:161)
    at org.sonar.wsclient.internal.HttpRequestFactory.execute(HttpRequestFactory.java:149)
    ... 9 more

这个问题在我们测试过的任何版本的 eclipse(Indigo、Luna、Mars)上都存在。我们发现的唯一解决方法是在 3.5 版中安装 SonarQube 插件并选中Force full preview 而不是增量分析选项。但是,检查 3.4 版 eclipse 插件中的选项并没有帮助。

在此处输入图像描述

为什么不升级插件呢?

很明显,我们应该更新我们的 eclipse 插件以再次拥有一个工作环境,但 3.5 版需要 Java 1.7。截至目前,我们仍在使用旧的 1.6,我们无法在当前环境中轻松升级。

除此之外,如果未选中强制完整预览而不是增量分析,则该问题仍然与插件 3.5 有关。因此,这意味着该错误可以通过多个 Eclipse 版本和多个插件版本重现。

毕竟它与 SQ 4.5.5 和 eclipse 插件 3.4 一起工作了几个月,我们只是不知道上述超时行为的原因是什么。

  • 将我们的 Sonar Cube 服务器更新到更新的版本会有所帮助吗?
  • 数据库维护操作(重组索引或类似的东西)在这里有帮助吗?
  • 我们如何配置服务器以便能够及时提供答案?

更新:

正如我在下面的回答中所提到的,每天重建数据库索引最初是有帮助的。但几天后,即使是在重建索引后直接使用 SonarQube 触发本地声纳分析也会失败。

SonarQube 4.5.7 的更新也无济于事。所以基本上,我们现在回到了第一方。

  • 是不是我们的声纳项目太大了?我们正在一个超过 500k LOC 的声纳项目中跟踪我们的软件开发。
  • 您是否建议升级到 SonarQube 5.x?
4

1 回答 1

0

更新

重建数据库索引并没有解决这个问题。请查看原始问题中的更新。

原始答案

所以,我们终于找到了问题所在,它是由碎片化的数据库表索引引起的。重建索引后,查询原始问题中 Stacktrace 中包含的 URL 只需 3 秒。而不是几分钟。

每次 Sonar 分析运行并将数据导入数据库时​​都会发生这种情况。这在我们的设置中每天发生一次,所以从现在开始我们也将再次更新索引。

这是比更新 eclipse 插件更好的解决方法,但在我看来,这也只是一种解决方法。SonarCube 分析不应使服务器处于需要几分钟才能检索到问题列表的状态。

如果有人对此问题有更好的解决方案,请分享:)

于 2016-04-08T09:45:50.213 回答