1

新しい接続を開いて次のように更新しようとしています:

for(String str: queries){
    query = getQuery(str);
    TTransport tx_CUCR = getNewTransaction();
    try {
        System.out.println("opening...");
        tx_CUCR.open();
        CqlQuery<String, String, ByteBuffer> cqlQuery = new CqlQuery<String, String, ByteBuffer>(keyspace, StringSerializer.get(), StringSerializer.get(), ByteBufferSerializer.get());
        cqlQuery.setQuery(query);
        System.out.println("executing...");
        QueryResult<CqlRows<String, String, ByteBuffer>> result = cqlQuery.execute();
        if (null != result) {
            rows = result.get();
        }
        System.out.println("flushing...");
        tx_CUCR.flush();
    } catch (HectorException e) {
        e.printStackTrace();
        translateException(e);
    } catch (TTransportException e) {
        e.printStackTrace();
    } finally {
        tx_CUCR.close();
    }
}

queries50 万個のキーが含まれています。for ループの実行中に、いくつかの更新が成功した後、新しい接続を開くときに次のエラーが発生します。

opening...
org.apache.thrift.transport.TTransportException: java.net.NoRouteToHostException: Cannot assign requested address
    at org.apache.thrift.transport.TSocket.open(TSocket.java:183)
    at org.apache.thrift.transport.TFramedTransport.open(TFramedTransport.java:81)
    at com.germinait.influence.cassandra.utils.CassandraUtils.executeQuery(CassandraUtils.java:546)
    at com.germinait.influence.cassandra.utils.CassandraUtils.updateByKey(CassandraUtils.java:484)
    at com.germinait.influence.cassandra.utils.IACassandraUtils.update(IACassandraUtils.java:298)
    at com.germinait.influence.cassandra.utils.IACassandraUtils.updateNodeScores(IACassandraUtils.java:274)
    at com.germinait.influence.cassandra.data.IACassBONodeScores.commit(IACassBONodeScores.java:94)
    at com.germinait.influence.facebook.db.updates.UpdateWithinGraph.initScores(UpdateWithinGraph.java:1048)
    at com.germinait.influence.facebook.db.updates.UpdateWithinGraph.initializePersonInfluenceScores(UpdateWithinGraph.java:981)
    at com.germinait.influence.facebook.db.updates.UpdateWithinGraph.applyInfluenceRankAlgo(UpdateWithinGraph.java:726)
    at com.germinait.influence.utils.IAUpdateUtils.runAlgorithm(IAUpdateUtils.java:296)
    at com.germinait.influence.NetworkIAMain.IA_runAlgorithm(NetworkIAMain.java:422)
    at com.germinait.influence.NetworkIAMain.main(NetworkIAMain.java:587)
Caused by: java.net.NoRouteToHostException: Cannot assign requested address
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384)
    at java.net.Socket.connect(Socket.java:546)
    at org.apache.thrift.transport.TSocket.open(TSocket.java:178)
    ... 12 more

デバッグ中に例外でしばらく一時停止してから続行すると、さらにいくつかの次の更新が続行され、別の時点で再びこの例外が発生する前に正常に完了します。

どうすればこれを克服できますか?

4

0 に答える 0