Handle batch exceptions

The HBase API provides two ways to send multiple operations as a batch:

With the Cloud Bigtable HBase client for Java, both of these methods can throw a RetriesExhaustedWithDetailsException. This exception is thrown when one or more of the batch operations fail for any reason (for example, because the connection failed). It contains a list of failed requests, along with details about the exception that caused each request to fail.

By itself, a RetriesExhaustedWithDetailsException does not tell you why a request failed. You must call RetriesExhaustedWithDetailsException#getCauses() to retrieve the detailed exceptions for each failed request. You can then log information about each of the detailed exceptions, which will help you diagnose the failure:

try {
  mutator.mutate(mutationList);
} catch (RetriesExhaustedWithDetailsException e) {
  for (Throwable cause : e.getCauses()) {
    cause.printStackTrace();
  }
  throw e;
}

An exception can also be thrown when you call flush or close. The same error handling applies.