예제 #1
0
SchemaChangeHandler::SchemaChangeHandler(Connection* connection,
                                         RequestHandler* request_handler,
                                         const SharedRefPtr<Response>& response,
                                         uint64_t elapsed)
  : MultipleRequestHandler(connection)
  , request_handler_(request_handler)
  , request_response_(response)
  , start_ms_(get_time_since_epoch_ms())
  , elapsed_ms_(elapsed) {}
예제 #2
0
void Logger::LogThread::log(CassLogLevel severity,
                            const char* file, int line, const char* function,
                            const char* format, va_list args) {
  CassLogMessage message = {
    get_time_since_epoch_ms(), severity,
    file, line, function,
    ""
  };

  vsnprintf(message.message, sizeof(message.message), format, args);

  if (!log_queue_.enqueue(message)) {
    if (has_been_warned_) {
      has_been_warned_ = true;
      fprintf(stderr, "Warning: Exceeded log queue size (decreased logging performance)\n");
    }
    Logger::cb_(&message, Logger::data_);
  }
}
예제 #3
0
void SchemaChangeHandler::on_set(const ResponseMap& responses) {
  elapsed_ms_ += get_time_since_epoch_ms() - start_ms_;

  bool has_error = false;
  for (MultipleRequestHandler::ResponseMap::const_iterator it = responses.begin(),
       end = responses.end(); it != end; ++it) {
    if (check_error_or_invalid_response("SchemaChangeHandler", CQL_OPCODE_RESULT, it->second.get())) {
      has_error = true;
    }
  }

  if (!has_error && has_schema_agreement(responses)) {
    LOG_DEBUG("Found schema agreement in %llu ms",
              static_cast<unsigned long long>(elapsed_ms_));
    request_handler_->set_response(request_response_);
    return;
  } else if (elapsed_ms_ >= MAX_SCHEMA_AGREEMENT_WAIT_MS) {
    LOG_WARN("No schema agreement on live nodes after %llu ms. "
             "Schema may not be up-to-date on some nodes.",
             static_cast<unsigned long long>(elapsed_ms_));
    request_handler_->set_response(request_response_);
    return;
  }

  LOG_DEBUG("Schema still not up-to-date on some live nodes. "
            "Trying again in %d ms", RETRY_SCHEMA_AGREEMENT_WAIT_MS);

  // Try again
  SharedRefPtr<SchemaChangeHandler> handler(
        new SchemaChangeHandler(connection(),
                                request_handler_.get(),
                                request_response_,
                                elapsed_ms_));
  connection()->schedule_schema_agreement(handler,
                                          RETRY_SCHEMA_AGREEMENT_WAIT_MS);
}