diff --git a/man/systemd-journal-gatewayd.service.xml b/man/systemd-journal-gatewayd.service.xml index bd7a43e181..cf224738c5 100644 --- a/man/systemd-journal-gatewayd.service.xml +++ b/man/systemd-journal-gatewayd.service.xml @@ -286,20 +286,23 @@ Range header - + where - cursor is a cursor string, + cursor is a cursor string, defaults to the first entry, since and until are timestamps (seconds since 1970-01-01 00:00:00 UTC), num_skip is an integer, num_entries is an unsigned integer. Range defaults to all available events. + + If num_skip is negative and no cursor is + given, the last entry will be the reference point. @@ -311,9 +314,9 @@ follow - wait for new events - (like journalctl --follow, except that - the number of events returned is not limited). + wait for new events (like journalctl --follow, the number of + events returned is not limited, unless num_entries is specified in the + Range header). diff --git a/src/journal-remote/journal-gatewayd.c b/src/journal-remote/journal-gatewayd.c index a1de0045e8..8f6c3f1faf 100644 --- a/src/journal-remote/journal-gatewayd.c +++ b/src/journal-remote/journal-gatewayd.c @@ -333,14 +333,16 @@ static int request_parse_range_skip_and_n_entries( } p = (colon2 ?: colon) + 1; - r = safe_atou64(p, &m->n_entries); - if (r < 0) - return r; + if (!isempty(p)) { + r = safe_atou64(p, &m->n_entries); + if (r < 0) + return r; - if (m->n_entries <= 0) - return -EINVAL; + if (m->n_entries <= 0) + return -EINVAL; - m->n_entries_set = true; + m->n_entries_set = true; + } return 0; } diff --git a/test/units/TEST-04-JOURNAL.journal-gatewayd.sh b/test/units/TEST-04-JOURNAL.journal-gatewayd.sh index 35ac91ba40..ef85dc17c6 100755 --- a/test/units/TEST-04-JOURNAL.journal-gatewayd.sh +++ b/test/units/TEST-04-JOURNAL.journal-gatewayd.sh @@ -67,6 +67,21 @@ curl -LSfs \ --header "Range: entries=$BOOT_CURSOR:5:10" \ http://localhost:19531/entries >"$LOG_FILE" jq -se "length == 10" "$LOG_FILE" +# Check that follow with no num_entries follows "indefinitely" +( + set +e; \ + timeout 5 curl -LSfs \ + --header "Accept: application/json" \ + --header "Range: entries=:-1:" \ + http://localhost:19531/entries?follow >"$LOG_FILE" ; \ + test $? -eq 124 # timeout should kill the curl process waiting for new entries +) +# Check that follow with num_entries returns the specified number of entries and exits +timeout 5 curl -LSfs \ + --header "Accept: application/json" \ + --header "Range: entries=:-20:10" \ + http://localhost:19531/entries?follow >"$LOG_FILE" +jq -se "length == 10" "$LOG_FILE" # Check if the specified cursor refers to an existing entry and return just that entry curl -LSfs \ --header "Accept: application/json" \