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:
parent
85a131e8d8
commit
9cfb57c989
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user