Gérer les exceptions par lot
L'API HBase propose deux méthodes pour envoyer plusieurs opérations comme un lot :
Table#batch(List, Object[])
combine plusieurs opérations get et mutations en un seul lot.BufferedMutator#mutate(List<? extends Mutation> mutations)
combine plusieurs mutations en un lot ou une série de lots.
Avec le client Cloud Bigtable HBase pour Java, ces deux méthodes peuvent lever une exception RetriesExhaustedWithDetailsException
. Cette exception est levée lorsqu'une ou plusieurs opérations par lots échouent pour quelque raison que ce soit (par exemple, l'échec de la connexion). Elle contient une liste des requêtes ayant échoué, ainsi que des détails sur l'exception à l'origine de l'échec de chaque requête.
En soi, une exception RetriesExhaustedWithDetailsException
ne vous donne pas d'informations sur la raison de l'échec de la requête. Vous devez appeler la méthode RetriesExhaustedWithDetailsException#getCauses()
afin de récupérer le détail des exceptions pour chaque requête ayant échoué. Vous pouvez alors consigner les informations concernant ces exceptions, ce qui vous aidera à analyser l'échec de l'opération par lots :
try {
mutator.mutate(mutationList);
} catch (RetriesExhaustedWithDetailsException e) {
for (Throwable cause : e.getCauses()) {
cause.printStackTrace();
}
throw e;
}
Une exception peut également être générée lorsque vous appelez flush
ou close
.
La même gestion des exceptions s'applique.