Esempio n. 1
0
void RequestHandler::on_error_response(ResponseMessage* response) {
  ErrorResponse* error =
      static_cast<ErrorResponse*>(response->response_body().get());


  switch(error->code()) {
    case CQL_ERROR_UNPREPARED:
      on_error_unprepared(error);
      break;

    case CQL_ERROR_READ_TIMEOUT:
      handle_retry_decision(response,
                            retry_policy_->on_read_timeout(error->consistency(),
                                                           error->received(),
                                                           error->required(),
                                                           error->data_present() > 0,
                                                           num_retries_));
      break;

    case CQL_ERROR_WRITE_TIMEOUT:
      handle_retry_decision(response,
                            retry_policy_->on_write_timeout(error->consistency(),
                                                            error->received(),
                                                            error->required(),
                                                            error->write_type(),
                                                            num_retries_));
      break;

    case CQL_ERROR_UNAVAILABLE:
      handle_retry_decision(response,
                            retry_policy_->on_unavailable(error->consistency(),
                                                          error->required(),
                                                          error->received(),
                                                          num_retries_));
      break;

    default:
      set_error(static_cast<CassError>(CASS_ERROR(
                                         CASS_ERROR_SOURCE_SERVER, error->code())),
                error->message().to_string());
      break;
  }
}