2016-03-21 12 views
0

からインデックス名を取得中。エラーの下に、この問題の原因をElasticsearch:私たちは私たちのプロジェクトに<strong>Elasticsearchプラグイン</strong>を使用していてAssertionError別名

エラー

{ 
    "error": "AssertionError[Expected current thread[Thread[elasticsearch[Seth][http_server_worker][T#2]{New I/O worker #20},5,main]] to not be a transport thread. Reason: [Blocking operation]]", "status": 500 
    } 

コード

String realIndex = client.admin().cluster().prepareState() 
        .execute().actionGet().getState().getMetaData() 
        .aliases().get(aliasName).iterator() 
        .next().key; 

を取得別名からインデックス名を取得中?あなたが戻って結果を得るまでには、スレッドをブロックしますと、この操作は、トランスポートスレッド上で許可されていないように、それはエラーの表情からは任意のヘルプ

答えて

1

を取得していないグーグル、それはそうです。これを実行スレッド上で実行する必要があります。

public String getIndexName() { 
    final IndexNameHolder result = new IndexNameHolder(); // holds the index Name. Needed a final instance here, hence created a holder. 
    getTransportClient().admin().cluster().prepareState().execute(new ActionListener<ClusterStateResponse>() { 

     @Override 
     public void onResponse(ClusterStateResponse response) { 
      result.indexName = response.getState().getMetaData().aliases().get("alias").iterator().next().key; 

     } 
     @Override 
     public void onFailure(Throwable e) { 
      //Handle failures 
     } 
    }); 
    return result.value; 
} 

​​の別の方法があります。これはリスナーを取ります。独自のリスナーを実装する必要があります。私の答えでは、私はリスナーの匿名の実装を持っています。

は、私はそれが私が別名値からインデックス名を取得することができ、これを、試してみました

+0

に役立ちますが、それはまだ同じエラー –

+0

を取得した後、私はこれを取得didnのを願っています。インデックス名を取得した後にエラーが発生しましたか?どこで、まったく同じエラーですか? ** _ JAVA_OPTIONS = -ea **環境変数からすべてが正常に動作し除去した後 – Rahul

+0

。上記のコードがなくても実行できます。時には前に** ElasticsearchIntegrationTest **私は環境変数にJAVA_OPTIONS ** _追加することを余儀なくされた**でユニットテストを実行中。なぜそれがElasticsearchユニットテストに必要ないデバッグする必要があるとなぜそれがプラグインでエラーが発生するのでしょうか? –

関連する問題