2016-04-22 3 views
0

WindowsでMSSQLバックエンドを使用してSonarQube 5.3を実行しています。SonarQubeが不正な(?)ElasticSearchクエリを使用してScmAccountToUserを取得します

新しい問題を作成するときに、SonarQubeはそのElasticSearchユーザーインデックスを照会し、問題を示す行の "git blame"情報の作成者ログインを取得します。

以下は/server/sonar-server/src/main/java/org/sonar/server/computation/issue/IssueAssigner.javaで起こる:

=> "gitの責任" の情報は、著者を返します。影響を受けた行の、(匿名化)私の例では:

steve [email protected] 

=>この値は、レイジーElasticSearchインデックス「ユーザー」を照会ScmAccountToUser、中に検索されます。

{ 
    "size": 3, 
    "query": { 
    "filtered": { 
     "query": { 
     "match_all": {} 
     }, 
     "filter": { 
     "bool": { 
      "must": { 
      "term": { 
       "active": true 
      } 
      }, 
      "should": [ 
      { 
       "term": { 
       "login": "steve [email protected]" 
       } 
      }, 
      { 
       "term": { 
       "email": "steve [email protected]" 
       } 
      }, 
      { 
       "term": { 
       "scmAccounts": "steve [email protected]" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

このクエリは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 [email protected] 
", 
      "[email protected] 
" 
      ], 
      "email": "[email protected]", 
      "updatedAt": 1450088380632 
     } 
     }, 
     // snip 
    ] 
    } 
} 

この問題は、現在の私のSonarQubeインスタンスを妨げている問題の多くを自動割り当て:私は、全体の指数を列挙するとき

は対照的に、私は一般的に試合は、このユーザーすべきヒットを取得します。私は、以前に成功したオートアサインメントのように、いつ、どのように壊れたかを把握しています。

これはクエリまたはデータでエラーですか?どういうわけかこの問題を回避することはできますか?

+0

'scmAccounts'フィールドのマッピングは何ですか? 'not_analyzed'文字列フィールドでなければ、それが理由です。異なる、 // ... - { "ストリング" "インデックス" ::: "not_analyzed"、 "タイプ"} // ... "scmAccountsを": – Val

+0

マッピングが指定し他のフィールドから、例えばログイン: "ログイン":{ - "インデックス": "not_analyzed"、 "タイプ": "文字列"、 "フィールド":{ - "ngrams":{ - "search_analyzer": "search_ngrams" 、 "index_analyzer": "index_ngrams"、 "タイプ": "文字列" }} }、 これは、マッピングの設定ミスですか?私はすでにインデックスを完全に復元しているので、問題は引き続き表示されます。 – ThePadawan

+1

根本原因はscmアカウントの空白のようです。あなたは確認しますか? –

答えて

2

問題は、「scmAccounts」フィールドエントリの改行が原因であることが判明しました。手動でSCMを再追加することにより

がSonarQube UIに占める、これらのフィールドは、クエリが成功し、問題の割り当てが成功した後

"scmAccounts": 
[ - 
      "steve [email protected]", 
      "[email protected]" 
], 

に更新されました。

バックアップSQL INSERTスクリプトからSQLサーバー上のテーブル「ユーザー」を手動で復元したため、改行が最初にフィールドに入りました。

+1

お役立ち情報誰が改行を導入したのですか?あなたまたはSQLServerバックアップツール?後者の場合、SonarQubeはこのコーナーケースをカバーし、Elasticsearchにインデックス登録するときにSCMアカウントをサニタイズする必要があります。 –

+0

@ SimonBrandhof-SonarSource私は、改行をエクスポートした.sql INSERTスクリプト(MSSQL Server 2012を使用)にDBの表形式のエクスポートを実行しました。 Windowsの行末が原因で問題が発生する可能性があります。問題を再現するためにusers.sqlファイルを(検閲された)ファイルに送信できます。ご連絡ください。 – ThePadawan

+0

ありがとうございますが、再現するのはかなり簡単です。問題はデータベースバックアップであるため、SonarQubeでは何も修正する必要はありません。 –

関連する問題