1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-25 01:34:28 +03:00

journald: when checking available disk space for rate limiting, cache the results temporarily

This commit is contained in:
Lennart Poettering 2011-12-27 23:18:09 +01:00
parent 85a131e8d8
commit 9cfb57c989

View File

@ -44,6 +44,8 @@
#define USER_JOURNALS_MAX 1024 #define USER_JOURNALS_MAX 1024
#define STDOUT_STREAMS_MAX 4096 #define STDOUT_STREAMS_MAX 4096
#define RECHECK_AVAILABLE_SPACE_USEC (30*USEC_PER_SEC)
typedef struct StdoutStream StdoutStream; typedef struct StdoutStream StdoutStream;
typedef struct Server { typedef struct Server {
@ -68,6 +70,9 @@ typedef struct Server {
uint64_t max_use; uint64_t max_use;
bool compress; bool compress;
uint64_t cached_available_space;
usec_t cached_available_space_timestamp;
LIST_HEAD(StdoutStream, stdout_streams); LIST_HEAD(StdoutStream, stdout_streams);
unsigned n_stdout_streams; unsigned n_stdout_streams;
} Server; } Server;
@ -108,6 +113,10 @@ static uint64_t available_space(Server *s) {
uint64_t sum = 0, avail = 0, ss_avail = 0; uint64_t sum = 0, avail = 0, ss_avail = 0;
int r; int r;
DIR *d; DIR *d;
usec_t ts = now(CLOCK_MONOTONIC);
if (s->cached_available_space_timestamp + RECHECK_AVAILABLE_SPACE_USEC > ts)
return s->cached_available_space;
r = sd_id128_get_machine(&machine); r = sd_id128_get_machine(&machine);
if (r < 0) if (r < 0)
@ -163,6 +172,9 @@ static uint64_t available_space(Server *s) {
if (ss_avail < avail) if (ss_avail < avail)
avail = ss_avail; avail = ss_avail;
s->cached_available_space = avail;
s->cached_available_space_timestamp = ts;
finish: finish:
closedir(d); closedir(d);
@ -326,6 +338,8 @@ static void server_vacuum(Server *s) {
if (r < 0 && r != -ENOENT) if (r < 0 && r != -ENOENT)
log_error("Failed to vacuum %s: %s", p, strerror(-r)); log_error("Failed to vacuum %s: %s", p, strerror(-r));
free(p); free(p);
s->cached_available_space_timestamp = 0;
} }
static char *shortened_cgroup_path(pid_t pid) { static char *shortened_cgroup_path(pid_t pid) {