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) {}
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_); } }
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); }