]>
Commit | Line | Data |
---|---|---|
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 |
33 | typedef struct Window { |
34 | void *ptr; | |
35 | uint64_t offset; | |
36 | uint64_t size; | |
37 | } Window; | |
38 | ||
39 | enum { | |
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 | 50 | typedef 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 |
57 | typedef 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 |
85 | typedef enum direction { |
86 | DIRECTION_UP, | |
87 | DIRECTION_DOWN | |
88 | } direction_t; | |
89 | ||
0ac38b70 | 90 | int journal_file_open(const char *fname, int flags, mode_t mode, JournalFile *template, JournalFile **ret); |
87d2c1ff LP |
91 | void journal_file_close(JournalFile *j); |
92 | ||
9447a7f1 LP |
93 | int journal_file_open_reliably(const char *fname, int flags, mode_t mode, JournalFile *template, JournalFile **ret); |
94 | ||
de190aef | 95 | int journal_file_move_to_object(JournalFile *f, int type, uint64_t offset, Object **ret); |
87d2c1ff LP |
96 | |
97 | uint64_t journal_file_entry_n_items(Object *o); | |
98 | ||
c2373f84 | 99 | int 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 |
101 | int journal_file_find_data_object(JournalFile *f, const void *data, uint64_t size, Object **ret, uint64_t *offset); |
102 | int 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 |
104 | int journal_file_next_entry(JournalFile *f, Object *o, uint64_t p, direction_t direction, Object **ret, uint64_t *offset); |
105 | int journal_file_skip_entry(JournalFile *f, Object *o, uint64_t p, int64_t skip, Object **ret, uint64_t *offset); | |
87d2c1ff | 106 | |
de190aef LP |
107 | int 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 | ||
109 | int journal_file_move_to_entry_by_seqnum(JournalFile *f, uint64_t seqnum, direction_t direction, Object **ret, uint64_t *offset); | |
110 | int journal_file_move_to_entry_by_realtime(JournalFile *f, uint64_t realtime, direction_t direction, Object **ret, uint64_t *offset); | |
111 | int 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 | ||
113 | int 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); | |
114 | int 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 |
116 | int journal_file_copy_entry(JournalFile *from, JournalFile *to, Object *o, uint64_t p, uint64_t *seqnum, Object **ret, uint64_t *offset); |
117 | ||
87d2c1ff LP |
118 | void journal_file_dump(JournalFile *f); |
119 | ||
0ac38b70 LP |
120 | int journal_file_rotate(JournalFile **f); |
121 | ||
122 | int journal_directory_vacuum(const char *directory, uint64_t max_use, uint64_t min_free); | |
123 | ||
cf244689 LP |
124 | void journal_file_post_change(JournalFile *f); |
125 | ||
babfc091 LP |
126 | void journal_default_metrics(JournalMetrics *m, int fd); |
127 | ||
87d2c1ff | 128 | #endif |