arpadboda commented on a change in pull request #743: Minificpp 1169 - Simplify C2 metrics collection and reporting URL: https://github.com/apache/nifi-minifi-cpp/pull/743#discussion_r409396297
########## File path: libminifi/src/c2/C2Agent.cpp ########## @@ -89,44 +93,68 @@ C2Agent::C2Agent(const std::shared_ptr<core::controller::ControllerServiceProvid } request_mutex.unlock(); } - - if ( time_since > heart_beat_period_ ) { - last_run_ = now; - try { - performHeartBeat(); - } - catch(const std::exception &e) { - logger_->log_error("Exception occurred while performing heartbeat. error: %s", e.what()); - } - catch(...) { - logger_->log_error("Unknonwn exception occurred while performing heartbeat."); - } + try { + performHeartBeat(); + } + catch(const std::exception &e) { + logger_->log_error("Exception occurred while performing heartbeat. error: %s", e.what()); + } + catch(...) { + logger_->log_error("Unknonwn exception occurred while performing heartbeat."); } checkTriggers(); - std::this_thread::sleep_for(std::chrono::milliseconds(heart_beat_period_ > 500 ? 500 : heart_beat_period_)); - return state::Update(state::UpdateStatus(state::UpdateState::READ_COMPLETE, false)); + return utils::TaskRescheduleInfo::RetryIn(std::chrono::milliseconds(heart_beat_period_)); }; - functions_.push_back(c2_producer_); c2_consumer_ = [&]() { auto now = std::chrono::steady_clock::now(); if ( queue_mutex.try_lock_until(now + std::chrono::seconds(1)) ) { - if (responses.size() > 0) { - const C2Payload payload(std::move(responses.back())); - responses.pop_back(); - extractPayload(std::move(payload)); + if (responses.empty()) { + queue_mutex.unlock(); + return utils::TaskRescheduleInfo::RetryImmediately(); Review comment: RetryImmediately was introduced for a reason: when something takes quite long (an ontrigger call of a processor for eg), it might happen that the next schedule is already in the past. Although we cannot continue executing it as that would result in starvation. In this case it's fair to reschedule immediately. This means that the given task is put back to the end of the queue, so in case there are tasks already waiting for CPU, those are executed first, otherwise this one can be continued immediately without unnecessary wait. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services