我们的 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?