]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/journal/journal-file.h
journal: implement generic sharable mmap caching logic
[thirdparty/systemd.git] / src / journal / journal-file.h
CommitLineData
87d2c1ff
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
c2f1db8f 3#pragma once
87d2c1ff
LP
4
5/***
6 This file is part of systemd.
7
8 Copyright 2011 Lennart Poettering
9
10 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
87d2c1ff
LP
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 18 Lesser General Public License for more details.
87d2c1ff 19
5430f7f2 20 You should have received a copy of the GNU Lesser General Public License
87d2c1ff
LP
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
24#include <inttypes.h>
25
7560fffc
LP
26#ifdef HAVE_GCRYPT
27#include <gcrypt.h>
28#endif
29
81527be1
LP
30#include <systemd/sd-id128.h>
31
4fd052ae 32#include "sparse-endian.h"
87d2c1ff
LP
33#include "journal-def.h"
34#include "util.h"
16e9f408 35#include "mmap-cache.h"
de190aef 36
bc85bfee 37typedef struct JournalMetrics {
babfc091 38 uint64_t max_use;
bc85bfee
LP
39 uint64_t max_size;
40 uint64_t min_size;
41 uint64_t keep_free;
42} JournalMetrics;
43
f4b47811
LP
44typedef struct JournalFile {
45 int fd;
46 char *path;
47 struct stat last_stat;
0ac38b70 48 mode_t mode;
7560fffc 49
0ac38b70 50 int flags;
f4b47811
LP
51 int prot;
52 bool writable;
7560fffc
LP
53 bool compress;
54 bool authenticate;
55
de190aef 56 bool tail_entry_monotonic_valid;
f4b47811
LP
57
58 Header *header;
de190aef
LP
59 HashItem *data_hash_table;
60 HashItem *field_hash_table;
f4b47811 61
f4b47811 62 uint64_t current_offset;
bc85bfee
LP
63
64 JournalMetrics metrics;
16e9f408 65 MMapCache *mmap;
807e17f0 66
807e17f0
LP
67#ifdef HAVE_XZ
68 void *compress_buffer;
b785c858 69 uint64_t compress_buffer_size;
807e17f0 70#endif
7560fffc
LP
71
72#ifdef HAVE_GCRYPT
73 gcry_md_hd_t hmac;
74 bool hmac_running;
75
76 FSPRGHeader *fsprg_header;
77 size_t fsprg_size;
78#endif
f4b47811
LP
79} JournalFile;
80
e892bd17
LP
81typedef enum direction {
82 DIRECTION_UP,
83 DIRECTION_DOWN
84} direction_t;
85
4a92baf3
LP
86int journal_file_open(
87 const char *fname,
88 int flags,
89 mode_t mode,
7560fffc
LP
90 bool compress,
91 bool authenticate,
4a92baf3 92 JournalMetrics *metrics,
16e9f408 93 MMapCache *mmap,
4a92baf3
LP
94 JournalFile *template,
95 JournalFile **ret);
96
87d2c1ff
LP
97void journal_file_close(JournalFile *j);
98
4a92baf3
LP
99int journal_file_open_reliably(
100 const char *fname,
101 int flags,
102 mode_t mode,
7560fffc
LP
103 bool compress,
104 bool authenticate,
4a92baf3 105 JournalMetrics *metrics,
16e9f408 106 MMapCache *mmap,
4a92baf3
LP
107 JournalFile *template,
108 JournalFile **ret);
9447a7f1 109
de190aef 110int journal_file_move_to_object(JournalFile *f, int type, uint64_t offset, Object **ret);
87d2c1ff
LP
111
112uint64_t journal_file_entry_n_items(Object *o);
113
c2373f84 114int journal_file_append_entry(JournalFile *f, const dual_timestamp *ts, const struct iovec iovec[], unsigned n_iovec, uint64_t *seqno, Object **ret, uint64_t *offset);
87d2c1ff 115
de190aef
LP
116int journal_file_find_data_object(JournalFile *f, const void *data, uint64_t size, Object **ret, uint64_t *offset);
117int journal_file_find_data_object_with_hash(JournalFile *f, const void *data, uint64_t size, uint64_t hash, Object **ret, uint64_t *offset);
87d2c1ff 118
de190aef
LP
119int journal_file_next_entry(JournalFile *f, Object *o, uint64_t p, direction_t direction, Object **ret, uint64_t *offset);
120int journal_file_skip_entry(JournalFile *f, Object *o, uint64_t p, int64_t skip, Object **ret, uint64_t *offset);
87d2c1ff 121
de190aef
LP
122int journal_file_next_entry_for_data(JournalFile *f, Object *o, uint64_t p, uint64_t data_offset, direction_t direction, Object **ret, uint64_t *offset);
123
cbdca852 124int journal_file_move_to_entry_by_offset(JournalFile *f, uint64_t seqnum, direction_t direction, Object **ret, uint64_t *offset);
de190aef
LP
125int journal_file_move_to_entry_by_seqnum(JournalFile *f, uint64_t seqnum, direction_t direction, Object **ret, uint64_t *offset);
126int journal_file_move_to_entry_by_realtime(JournalFile *f, uint64_t realtime, direction_t direction, Object **ret, uint64_t *offset);
127int journal_file_move_to_entry_by_monotonic(JournalFile *f, sd_id128_t boot_id, uint64_t monotonic, direction_t direction, Object **ret, uint64_t *offset);
128
cbdca852 129int journal_file_move_to_entry_by_offset_for_data(JournalFile *f, uint64_t data_offset, uint64_t p, direction_t direction, Object **ret, uint64_t *offset);
de190aef
LP
130int journal_file_move_to_entry_by_seqnum_for_data(JournalFile *f, uint64_t data_offset, uint64_t seqnum, direction_t direction, Object **ret, uint64_t *offset);
131int journal_file_move_to_entry_by_realtime_for_data(JournalFile *f, uint64_t data_offset, uint64_t realtime, direction_t direction, Object **ret, uint64_t *offset);
cbdca852 132int journal_file_move_to_entry_by_monotonic_for_data(JournalFile *f, uint64_t data_offset, sd_id128_t boot_id, uint64_t monotonic, direction_t direction, Object **ret, uint64_t *offset);
87d2c1ff 133
cf244689
LP
134int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint64_t p, uint64_t *seqnum, Object **ret, uint64_t *offset);
135
87d2c1ff 136void journal_file_dump(JournalFile *f);
dca6219e 137void journal_file_print_header(JournalFile *f);
87d2c1ff 138
7560fffc 139int journal_file_rotate(JournalFile **f, bool compress, bool authenticate);
0ac38b70
LP
140
141int journal_directory_vacuum(const char *directory, uint64_t max_use, uint64_t min_free);
142
cf244689
LP
143void journal_file_post_change(JournalFile *f);
144
babfc091
LP
145void journal_default_metrics(JournalMetrics *m, int fd);
146
08984293
LP
147int journal_file_get_cutoff_realtime_usec(JournalFile *f, usec_t *from, usec_t *to);
148int journal_file_get_cutoff_monotonic_usec(JournalFile *f, sd_id128_t boot, usec_t *from, usec_t *to);
149
dca6219e 150bool journal_file_rotate_suggested(JournalFile *f);
b0af6f41
LP
151
152int journal_file_append_tag(JournalFile *f);