From 279082ed4907ea7e425b0c436a068bd3076d4de7 Mon Sep 17 00:00:00 2001 From: Jayanth Ananthapadmanaban Date: Sat, 5 Jun 2021 06:33:54 -0700 Subject: [PATCH] Add a network timeout option to journal-upload --- man/journal-upload.conf.xml | 11 +++++++++++ src/journal-remote/journal-upload.c | 16 ++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/man/journal-upload.conf.xml b/man/journal-upload.conf.xml index 403eb57c69b..a1caae19827 100644 --- a/man/journal-upload.conf.xml +++ b/man/journal-upload.conf.xml @@ -74,6 +74,17 @@ SSL CA certificate. + + NetworkTimeoutSec= + + When network connectivity to the server is lost, this option + configures the time to wait for the connectivity to get restored. If the server is + not reachable over the network for the configured time, systemd-journal-upload + exits. Takes a value in seconds (or in other time units if suffixed with "ms", "min", "h", etc). + For details, see systemd.time5. + + + diff --git a/src/journal-remote/journal-upload.c b/src/journal-remote/journal-upload.c index c3d580e49e4..2a38d206ea1 100644 --- a/src/journal-remote/journal-upload.c +++ b/src/journal-remote/journal-upload.c @@ -53,6 +53,7 @@ static const char *arg_machine = NULL; static bool arg_merge = false; static int arg_follow = -1; static const char *arg_save_state = NULL; +static usec_t arg_network_timeout_usec = USEC_INFINITY; static void close_fd_input(Uploader *u); @@ -211,6 +212,12 @@ int start_upload(Uploader *u, return log_error_errno(SYNTHETIC_ERRNO(ENOSR), "Call to curl_easy_init failed."); + /* If configured, set a timeout for the curl operation. */ + if (arg_network_timeout_usec != USEC_INFINITY) + easy_setopt(curl, CURLOPT_TIMEOUT, + (long) DIV_ROUND_UP(arg_network_timeout_usec, USEC_PER_SEC), + LOG_ERR, return -EXFULL); + /* tell it to POST to the URL */ easy_setopt(curl, CURLOPT_POST, 1L, LOG_ERR, return -EXFULL); @@ -561,10 +568,11 @@ finalize: static int parse_config(void) { const ConfigTableItem items[] = { - { "Upload", "URL", config_parse_string, 0, &arg_url }, - { "Upload", "ServerKeyFile", config_parse_path_or_ignore, 0, &arg_key }, - { "Upload", "ServerCertificateFile", config_parse_path_or_ignore, 0, &arg_cert }, - { "Upload", "TrustedCertificateFile", config_parse_path_or_ignore, 0, &arg_trust }, + { "Upload", "URL", config_parse_string, 0, &arg_url }, + { "Upload", "ServerKeyFile", config_parse_path_or_ignore, 0, &arg_key }, + { "Upload", "ServerCertificateFile", config_parse_path_or_ignore, 0, &arg_cert }, + { "Upload", "TrustedCertificateFile", config_parse_path_or_ignore, 0, &arg_trust }, + { "Upload", "NetworkTimeoutSec", config_parse_sec, 0, &arg_network_timeout_usec }, {} };