(void) serialize_item_format(f, "user-lookup", "%i %i", copy0, copy1);
}
- (void) serialize_item_format(f,
- "dump-ratelimit",
- USEC_FMT " " USEC_FMT " %u %u",
- m->dump_ratelimit.begin,
- m->dump_ratelimit.interval,
- m->dump_ratelimit.num,
- m->dump_ratelimit.burst);
+ (void) serialize_ratelimit(f, "dump-ratelimit", &m->dump_ratelimit);
bus_track_serialize(m->subscribed, f, "subscribed");
* remains set until all serialized contents are handled. */
if (deserialize_varlink_sockets)
(void) varlink_server_deserialize_one(m->varlink_server, val, fds);
- } else if ((val = startswith(l, "dump-ratelimit="))) {
- usec_t begin, interval;
- unsigned num, burst;
-
- if (sscanf(val, USEC_FMT " " USEC_FMT " %u %u", &begin, &interval, &num, &burst) != 4)
- log_notice("Failed to parse dump ratelimit, ignoring: %s", val);
- else {
- /* If we changed the values across versions, flush the counter */
- if (interval != m->dump_ratelimit.interval || burst != m->dump_ratelimit.burst)
- m->dump_ratelimit.num = 0;
- else
- m->dump_ratelimit.num = num;
- m->dump_ratelimit.begin = begin;
- }
-
- } else {
+ } else if ((val = startswith(l, "dump-ratelimit=")))
+ deserialize_ratelimit(&m->dump_ratelimit, "dump-ratelimit", val);
+ else {
ManagerTimestamp q;
for (q = 0; q < _MANAGER_TIMESTAMP_MAX; q++) {
return serialize_item_format(f, key, "@%i", copy);
}
+int serialize_ratelimit(FILE *f, const char *key, const RateLimit *rl) {
+ assert(rl);
+
+ return serialize_item_format(f, key,
+ USEC_FMT " " USEC_FMT " %u %u",
+ rl->begin,
+ rl->interval,
+ rl->num,
+ rl->burst);
+}
+
int serialize_item_hexmem(FILE *f, const char *key, const void *p, size_t l) {
_cleanup_free_ char *encoded = NULL;
int r;
return 0;
}
+void deserialize_ratelimit(RateLimit *rl, const char *name, const char *value) {
+ usec_t begin, interval;
+ unsigned num, burst;
+
+ assert(rl);
+ assert(name);
+ assert(value);
+
+ if (sscanf(value, USEC_FMT " " USEC_FMT " %u %u", &begin, &interval, &num, &burst) != 4)
+ return log_notice("Failed to parse %s, ignoring: %s", name, value);
+
+ /* Preserve the counter only if the configuration didn't change. */
+ rl->num = (interval == rl->interval && burst == rl->burst) ? num : 0;
+ rl->begin = begin;
+}
+
int open_serialization_fd(const char *ident) {
int fd;
#include "image-policy.h"
#include "macro.h"
#include "pidref.h"
+#include "ratelimit.h"
#include "set.h"
#include "string-util.h"
#include "time-util.h"
int serialize_dual_timestamp(FILE *f, const char *key, const dual_timestamp *t);
int serialize_strv(FILE *f, const char *key, char **l);
int serialize_pidref(FILE *f, FDSet *fds, const char *key, PidRef *pidref);
+int serialize_ratelimit(FILE *f, const char *key, const RateLimit *rl);
int serialize_string_set(FILE *f, const char *key, Set *s);
int serialize_image_policy(FILE *f, const char *key, const ImagePolicy *p);
int deserialize_environment(const char *value, char ***environment);
int deserialize_strv(const char *value, char ***l);
int deserialize_pidref(FDSet *fds, const char *value, PidRef *ret);
+void deserialize_ratelimit(RateLimit *rl, const char *name, const char *value);
int open_serialization_fd(const char *ident);
int open_serialization_file(const char *ident, FILE **ret);