#include "daemon-util.h"
#include "journald-audit.h"
#include "journald-config.h"
+#include "journald-context.h"
#include "journald-kmsg.h"
#include "journald-manager.h"
#include "journald-socket.h"
(void) manager_reopen_dev_kmsg(m, old.read_kmsg);
manager_reset_kernel_audit(m, old.set_audit);
manager_reload_forward_socket(m, &old.forward_to_socket);
+ manager_refresh_client_contexts_on_reload(m, old.ratelimit_interval, old.ratelimit_burst);
r = manager_reload_journals(m);
if (r < 0)
c->log_ratelimit_interval = m->config.ratelimit_interval;
c->log_ratelimit_burst = m->config.ratelimit_burst;
+ c->log_ratelimit_interval_from_unit = false;
+ c->log_ratelimit_burst_from_unit = false;
c->log_filter_allowed_patterns = set_free(c->log_filter_allowed_patterns);
c->log_filter_denied_patterns = set_free(c->log_filter_denied_patterns);
if (r < 0)
return r;
- return safe_atou64(value, &c->log_ratelimit_interval);
+ r = safe_atou64(value, &c->log_ratelimit_interval);
+ if (r < 0)
+ return r;
+
+ c->log_ratelimit_interval_from_unit = true;
+ return 0;
}
static int client_context_read_log_ratelimit_burst(ClientContext *c) {
if (r < 0)
return r;
- return safe_atou(value, &c->log_ratelimit_burst);
+ r = safe_atou(value, &c->log_ratelimit_burst);
+ if (r < 0)
+ return r;
+
+ c->log_ratelimit_burst_from_unit = true;
+ return 0;
}
static void client_context_really_refresh(
client_context_really_refresh(m, c, ucred, label, label_size, unit_id, timestamp);
}
+static void client_context_refresh_on_reload(Manager *m, ClientContext *c) {
+ assert(m);
+
+ if (!c)
+ return;
+
+ if (!c->log_ratelimit_interval_from_unit)
+ c->log_ratelimit_interval = m->config.ratelimit_interval;
+
+ if (!c->log_ratelimit_burst_from_unit)
+ c->log_ratelimit_burst = m->config.ratelimit_burst;
+}
+
+void manager_refresh_client_contexts_on_reload(Manager *m, usec_t old_interval, unsigned old_burst) {
+ assert(m);
+
+ if (m->config.ratelimit_interval == old_interval && m->config.ratelimit_burst == old_burst)
+ return;
+
+ client_context_refresh_on_reload(m, m->my_context);
+ client_context_refresh_on_reload(m, m->pid1_context);
+
+ ClientContext *c;
+ HASHMAP_FOREACH(c, m->client_contexts)
+ client_context_refresh_on_reload(m, c);
+}
+
static void client_context_try_shrink_to(Manager *m, size_t limit) {
ClientContext *c;
usec_t t;
usec_t log_ratelimit_interval;
unsigned log_ratelimit_burst;
+ bool log_ratelimit_interval_from_unit;
+ bool log_ratelimit_burst_from_unit;
Set *log_filter_allowed_patterns;
Set *log_filter_denied_patterns;
const char *unit_id,
usec_t tstamp);
+void manager_refresh_client_contexts_on_reload(Manager *m, usec_t old_interval, unsigned old_burst);
void client_context_acquire_default(Manager *m);
void client_context_flush_all(Manager *m);
void client_context_flush_regular(Manager *m);