0

我在带有 MSSQL 后端的 Windows 上运行 SonarQube 5.3。

创建新问题时,SonarQube 会查询其 ElasticSearch 用户索引,以获取作者登录以获取出现问题的行的“git blame”信息。

以下发生在 /server/sonar-server/src/main/java/org/sonar/server/computation/issue/IssueAssigner.java 中:

=> “git blame”信息返回受影响行的作者,在我的示例中(匿名):

steve smith@ca5553f7-9c36-c34d-916b-b330600317e9

=> 这个值在 ScmAccountToUser 中查找,它懒惰地查询 ElasticSearch 索引“users”。我添加了一些调试输出来打印 ES 查询,即:

{
  "size": 3,
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "bool": {
          "must": {
            "term": {
              "active": true
            }
          },
          "should": [
            {
              "term": {
                "login": "steve smith@ca5553f7-9c36-c34d-916b-b330600317e9"
              }
            },
            {
              "term": {
                "email": "steve smith@ca5553f7-9c36-c34d-916b-b330600317e9"
              }
            },
            {
              "term": {
                "scmAccounts": "steve smith@ca5553f7-9c36-c34d-916b-b330600317e9"
              }
            }
          ]
        }
      }
    }
  }
}

此查询返回 0 个结果。

相反,当我枚举整个索引时,我得到的结果通常应该匹配这个用户:

{ -
  "took": 4,
  "timed_out": false,
  "_shards": { -
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": { -
    "total": 39,
    "max_score": 1,
    "hits": [ -
      { -
        // snip
      },
      // snip
      { -
        "_index": "users",
        "_type": "user",
        "_id": "steve.smith",
        "_score": 1,
        "_source": { -
          "createdAt": 1442988141642,
          "name": "Steve Smith",
          "active": true,
          "login": "steve.smith",
          "scmAccounts": [ -
            "
",
            "steve smith@ca5553f7-9c36-c34d-916b-b330600317e9
",
            "steve.smith@ca5553f7-9c36-c34d-916b-b330600317e9
"
          ],
          "email": "steve.smith@globodex.ch",
          "updatedAt": 1450088380632
        }
      },
      // snip
    ]
  }
}

这个问题目前正在阻止我的 SonarQube 实例自动分配很多问题。我正在弄清楚这是什么时候/如何发生的,因为一些自动分配之前已经成功。

这是查询中的错误还是数据中的错误?我可以以某种方式解决这个问题吗?

4

1 回答 1

2

事实证明,问题出在“scmAccounts”字段条目中的换行符。

通过在 SonarQube UI 中手动重新添加 SCM 帐户,这些字段已更新为

"scmAccounts": 
[ -
            "steve smith@ca5553f7-9c36-c34d-916b-b330600317e9",
            "steve.smith@ca5553f7-9c36-c34d-916b-b330600317e9"
],

,之后查询成功,问题分配成功。

换行符首先进入了字段,因为我从备份 SQL INSERT 脚本手动恢复了 SQL 服务器上的“用户”表。

于 2016-04-27T06:18:10.357 回答