Skip to content

Commit

Permalink
[Minor] Add some more logging
Browse files Browse the repository at this point in the history
  • Loading branch information
vstakhov committed Aug 18, 2022
1 parent a92526d commit 73d6f22
Showing 1 changed file with 19 additions and 7 deletions.
26 changes: 19 additions & 7 deletions src/libserver/symcache/symcache_impl.cxx
Expand Up @@ -1185,7 +1185,8 @@ symcache::process_settings_elt(struct rspamd_config_settings_elt *elt) -> void

auto symcache::get_max_timeout() const -> double
{
double accumulated_timeout = 0;
auto accumulated_timeout = 0.0;
auto log_func = RSPAMD_LOG_FUNC;

auto get_item_timeout = [](const cache_item_ptr &it) {
return it->get_numeric_augmentation("timeout").value_or(0.0);
Expand All @@ -1194,7 +1195,7 @@ auto symcache::get_max_timeout() const -> double
/* This function returns the timeout for an item and all it's dependencies */
auto get_filter_timeout = [&](const cache_item_ptr &it, auto self) -> double {
auto own_timeout = get_item_timeout(it);
double max_child_timeout = 0;
auto max_child_timeout = 0.0;

for (const auto &dep : it->deps) {
auto cld_timeout = self(dep.item, self);
Expand All @@ -1208,12 +1209,15 @@ auto symcache::get_max_timeout() const -> double
};

/* For prefilters and postfilters, we just care about priorities */
auto pre_postfilter_iter = [&](const items_ptr_vec &vec) {
auto pre_postfilter_iter = [&](const items_ptr_vec &vec) -> double {
auto saved_priority = -1;
double max_timeout = 0;
auto max_timeout = 0.0, added_timeout = 0.0;
for (const auto &it : vec) {
if (it->priority != saved_priority) {
accumulated_timeout += max_timeout;
added_timeout += max_timeout;
msg_debug_cache_lambda("added %.2f to the timeout (%.2f) as the priority has changed (%d -> %d)",
max_timeout, accumulated_timeout, saved_priority, it->priority);
max_timeout = 0;
saved_priority = it->priority;
}
Expand All @@ -1224,11 +1228,13 @@ auto symcache::get_max_timeout() const -> double
max_timeout = timeout;
}
}

return added_timeout;
};

pre_postfilter_iter(this->prefilters);
pre_postfilter_iter(this->postfilters);
pre_postfilter_iter(this->idempotent);
auto prefilters_timeout = pre_postfilter_iter(this->prefilters);
auto postfilters_timeout = pre_postfilter_iter(this->postfilters);
auto idempotent_timeout = pre_postfilter_iter(this->idempotent);

/* For normal filters, we check the maximum chain of the dependencies
* This function might have O(N^2) complexity if all symbols are in a single
Expand All @@ -1245,6 +1251,12 @@ auto symcache::get_max_timeout() const -> double

accumulated_timeout += max_filters_timeout;

msg_debug_cache("overall cache timeout: %.2f, %.2f from prefilters,"
" %.2f from postfilters, %.2f from idempotent filters,"
" %.2f from normal filters",
accumulated_timeout, prefilters_timeout, postfilters_timeout,
idempotent_timeout, max_filters_timeout);

return accumulated_timeout;
}

Expand Down

0 comments on commit 73d6f22

Please sign in to comment.