mirror of
https://github.com/clearlinux/systemd-stable.git
synced 2026-10-03 23:38:39 +00:00
journalctl: Add support for showing messages from a previous boot
Hi, I redid the boot ID look up to use enumerate_unique. This is quite fast if the cache is warm but painfully slow if it isn't. It has a slight chance of returning the wrong order if realtime clock jumps around. This one has to do n searches for every boot ID there is plus a sort, so it depends heavily on cache hotness. This is in contrast to the other way of look-up through filtering by a MESSAGE_ID, which only needs about 1 seek + whatever amount of relative IDs you want to walk. I also have a linked-list + (in-place) mergesort version of this patch, which has pretty much the same runtime. But since this one is using libc sorting and armortized allocation, I prefer this one. To summarize: The MESSAGE_ID way is a *lot* faster but can be incomplete due to rotation, while the enumerate+sort will find every boot ID out there but will be painfully slow for large journals and cold caches. You choose :P Jan
This commit is contained in:
committed by
Lennart Poettering
parent
18d4e7c26e
commit
a331b5e6d4
@@ -37,19 +37,22 @@ __journal_fields=(MESSAGE{,_ID} PRIORITY CODE_{FILE,LINE,FUNC}
|
||||
_journalctl() {
|
||||
local field_vals= cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||
local -A OPTS=(
|
||||
[STANDALONE]='-a --all --full
|
||||
--system --user
|
||||
-b --this-boot --disk-usage -f --follow --header
|
||||
[STANDALONE]='-a --all --full --system --user
|
||||
--disk-usage -f --follow --header
|
||||
-h --help -l --local --new-id128 -m --merge --no-pager
|
||||
--no-tail -q --quiet --setup-keys --this-boot --verify
|
||||
--version --list-catalog --update-catalog'
|
||||
[ARG]='-D --directory -F --field -o --output -u --unit --user-unit'
|
||||
[ARG]='-b --boot --this-boot -D --directory -F --field
|
||||
-o --output -u --unit --user-unit'
|
||||
[ARGUNKNOWN]='-c --cursor --interval -n --lines -p --priority --since --until
|
||||
--verify-key'
|
||||
)
|
||||
|
||||
if __contains_word "$prev" ${OPTS[ARG]} ${OPTS[ARGUNKNOWN]}; then
|
||||
case $prev in
|
||||
--boot|--this-boot|-b)
|
||||
comps=$(journalctl -F '_BOOT_ID' 2>/dev/null)
|
||||
;;
|
||||
--directory|-D)
|
||||
comps=$(compgen -d -- "$cur")
|
||||
compopt -o filenames
|
||||
|
||||
Reference in New Issue
Block a user