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" \