バッチ例外の処理
HBase API には、複数のオペレーションを一括して送信する方法として、次の 2 つが用意されています。
Table#batch(List, Object[])
は、複数の get オペレーションと mutation オペレーションを 1 つのバッチ オペレーションにまとめます。BufferedMutator#mutate(List<? extends Mutation> mutations)
は、複数の mutation オペレーションを、1 つまたは一連のバッチ オペレーションにまとめます。
Java 用 Cloud Bigtable HBase クライアントでは、これらのメソッドにより RetriesExhaustedWithDetailsException
がスローされる場合があります。この例外は、なんらかの理由(たとえば、接続の失敗など)で 1 つ以上のバッチ オペレーションが失敗するとスローされます。この例外には、失敗したリクエストのリスト、および各リクエストの失敗の原因となった例外に関する詳細な情報が格納されています。
RetriesExhaustedWithDetailsException
だけでは、リクエストが失敗した理由はわかりません。RetriesExhaustedWithDetailsException#getCauses()
を呼び出して、失敗した各リクエストについて詳細な例外情報を取得する必要があります。その後、詳細な各例外情報をログに書き出すこともできます。このログは失敗の診断に役立ちます。
try {
mutator.mutate(mutationList);
} catch (RetriesExhaustedWithDetailsException e) {
for (Throwable cause : e.getCauses()) {
cause.printStackTrace();
}
throw e;
}
flush
または close
を呼び出すときに例外がスローされることもあります。同じエラー処理が適用されます。