]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/journal/journal-file.h
relicense to LGPLv2.1 (with exceptions)
[thirdparty/systemd.git] / src / journal / journal-file.h
CommitLineData
87d2c1ff
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
cec736d2
LP
3#ifndef foojournalfilehfoo
4#define foojournalfilehfoo
87d2c1ff
LP
5
6/***
7 This file is part of systemd.
8
9 Copyright 2011 Lennart Poettering
10
11 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
12 under the terms of the GNU Lesser General Public License as published by
13 the Free Software Foundation; either version 2.1 of the License, or
87d2c1ff
LP
14 (at your option) any later version.
15
16 systemd is distributed in the hope that it will be useful, but
17 WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 19 Lesser General Public License for more details.
87d2c1ff 20
5430f7f2 21 You should have received a copy of the GNU Lesser General Public License
87d2c1ff
LP
22 along with systemd; If not, see <http://www.gnu.org/licenses/>.
23***/
24
25#include <inttypes.h>
26
81527be1
LP
27#include <systemd/sd-id128.h>
28
4fd052ae 29#include "sparse-endian.h"
87d2c1ff
LP
30#include "journal-def.h"
31#include "util.h"
260a2be4 32
de190aef
LP
33typedef struct Window {
34 void *ptr;
35 uint64_t offset;
36 uint64_t size;
37} Window;
38
39enum {
40 WINDOW_UNKNOWN = OBJECT_UNUSED,
41 WINDOW_DATA = OBJECT_DATA,
42 WINDOW_ENTRY = OBJECT_ENTRY,
43 WINDOW_DATA_HASH_TABLE = OBJECT_DATA_HASH_TABLE,
44 WINDOW_FIELD_HASH_TABLE = OBJECT_FIELD_HASH_TABLE,
45 WINDOW_ENTRY_ARRAY = OBJECT_ENTRY_ARRAY,
46 WINDOW_HEADER,
47 _WINDOW_MAX
48};
49
bc85bfee 50typedef struct JournalMetrics {
babfc091 51 uint64_t max_use;
bc85bfee
LP
52 uint64_t max_size;
53 uint64_t min_size;
54 uint64_t keep_free;
55} JournalMetrics;
56
f4b47811
LP
57typedef struct JournalFile {
58 int fd;
59 char *path;
60 struct stat last_stat;
0ac38b70
LP
61 mode_t mode;
62 int flags;
f4b47811
LP
63 int prot;
64 bool writable;
de190aef 65 bool tail_entry_monotonic_valid;
f4b47811
LP
66
67 Header *header;
de190aef
LP
68 HashItem *data_hash_table;
69 HashItem *field_hash_table;
f4b47811 70
de190aef 71 Window windows[_WINDOW_MAX];
f4b47811 72
f4b47811 73 uint64_t current_offset;
bc85bfee
LP
74
75 JournalMetrics metrics;
807e17f0
LP
76
77 bool compress;
78
79#ifdef HAVE_XZ
80 void *compress_buffer;
b785c858 81 uint64_t compress_buffer_size;
807e17f0 82#endif
f4b47811
LP
83} JournalFile;
84
e892bd17
LP
85typedef enum direction {
86 DIRECTION_UP,
87 DIRECTION_DOWN
88} direction_t;
89
0ac38b70 90int journal_file_open(const char *fname, int flags, mode_t mode, JournalFile *template, JournalFile **ret);
87d2c1ff
LP
91void journal_file_close(JournalFile *j);
92
9447a7f1
LP
93int journal_file_open_reliably(const char *fname, int flags, mode_t mode, JournalFile *template, JournalFile **ret);
94
de190aef 95int journal_file_move_to_object(JournalFile *f, int type, uint64_t offset, Object **ret);
87d2c1ff
LP
96
97uint64_t journal_file_entry_n_items(Object *o);
98
c2373f84 99int 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 100
de190aef
LP
101int journal_file_find_data_object(JournalFile *f, const void *data, uint64_t size, Object **ret, uint64_t *offset);
102int journal_file_find_data_object_with_hash(JournalFile *f, const void *data, uint64_t size, uint64_t hash, Object **ret, uint64_t *offset);
87d2c1ff 103
de190aef
LP
104int journal_file_next_entry(JournalFile *f, Object *o, uint64_t p, direction_t direction, Object **ret, uint64_t *offset);
105int journal_file_skip_entry(JournalFile *f, Object *o, uint64_t p, int64_t skip, Object **ret, uint64_t *offset);
87d2c1ff 106
de190aef
LP
107int 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);
108
109int journal_file_move_to_entry_by_seqnum(JournalFile *f, uint64_t seqnum, direction_t direction, Object **ret, uint64_t *offset);
110int journal_file_move_to_entry_by_realtime(JournalFile *f, uint64_t realtime, direction_t direction, Object **ret, uint64_t *offset);
111int 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);
112
113int 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);
114int 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);
87d2c1ff 115
cf244689
LP
116int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint64_t p, uint64_t *seqnum, Object **ret, uint64_t *offset);
117
87d2c1ff
LP
118void journal_file_dump(JournalFile *f);
119
0ac38b70
LP
120int journal_file_rotate(JournalFile **f);
121
122int journal_directory_vacuum(const char *directory, uint64_t max_use, uint64_t min_free);
123
cf244689
LP
124void journal_file_post_change(JournalFile *f);
125
babfc091
LP
126void journal_default_metrics(JournalMetrics *m, int fd);
127
87d2c1ff 128#endif