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:
[email protected]
With regards,
Apache Git Services