syslog-ng source
qdisk.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2002-2016 Balabit
3  * Copyright (c) 2016 Viktor Juhasz <viktor.juhasz@balabit.com>
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 as published
7  * by the Free Software Foundation, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  *
18  * As an additional exemption you are allowed to compile & link against the
19  * OpenSSL libraries as published by the OpenSSL project. See the file
20  * COPYING for details.
21  *
22  */
23 
24 #ifndef QDISK_H_
25 #define QDISK_H_
26 
27 #include "syslog-ng.h"
28 #include "diskq-options.h"
29 
30 #define LOG_PATH_OPTIONS_FOR_BACKLOG GINT_TO_POINTER(0x80000000)
31 #define QDISK_RESERVED_SPACE 4096
32 #define LOG_PATH_OPTIONS_TO_POINTER(lpo) GUINT_TO_POINTER(0x80000000 | (lpo)->ack_needed)
33 
34 /* NOTE: this must not evaluate ptr multiple times, otherwise the code that
35  * uses this breaks, as it passes the result of a g_queue_pop_head call,
36  * which has side effects.
37  */
38 #define POINTER_TO_LOG_PATH_OPTIONS(ptr, lpo) \
39 ({ \
40  gpointer p = ptr; \
41  (lpo)->ack_needed = (GPOINTER_TO_INT(p) & ~0x80000000); \
42 })
43 
44 typedef gboolean (*QDiskSerializeFunc)(SerializeArchive *sa, gpointer user_data);
45 typedef gboolean (*QDiskDeSerializeFunc)(SerializeArchive *sa, gpointer user_data);
46 
47 typedef struct
48 {
49  gint64 ofs;
50  guint32 len;
51  guint32 count;
52 }
54 
55 typedef struct _QDisk QDisk;
56 
57 QDisk *qdisk_new(DiskQueueOptions *options, const gchar *file_id, const gchar *filename);
58 
59 gboolean qdisk_is_space_avail(QDisk *self, gint at_least);
60 gint64 qdisk_get_max_useful_space(QDisk *self);
61 gint64 qdisk_get_empty_space(QDisk *self);
62 gint64 qdisk_get_used_useful_space(QDisk *self);
63 gboolean qdisk_push_tail(QDisk *self, GString *record);
64 gboolean qdisk_pop_head(QDisk *self, GString *record);
65 gboolean qdisk_peek_head(QDisk *self, GString *record);
66 gboolean qdisk_remove_head(QDisk *self);
67 gboolean qdisk_ack_backlog(QDisk *self);
68 gboolean qdisk_rewind_backlog(QDisk *self, guint rewind_count);
69 void qdisk_empty_backlog(QDisk *self);
70 gint64 qdisk_get_next_tail_position(QDisk *self);
71 gint64 qdisk_get_next_head_position(QDisk *self);
72 gboolean qdisk_start(QDisk *self, GQueue *front_cache, GQueue *backlog, GQueue *flow_control_window);
73 gboolean qdisk_stop(QDisk *self, GQueue *front_cache, GQueue *backlog, GQueue *flow_control_window);
74 void qdisk_reset_file_if_empty(QDisk *self);
75 gboolean qdisk_started(QDisk *self);
76 void qdisk_free(QDisk *self);
77 
79 gint64 qdisk_get_length(QDisk *self);
80 gint64 qdisk_get_maximum_size(QDisk *self);
81 gint64 qdisk_get_writer_head(QDisk *self);
82 gint64 qdisk_get_reader_head(QDisk *self);
83 gint64 qdisk_get_backlog_head(QDisk *self);
84 gint64 qdisk_get_backlog_count(QDisk *self);
85 gint qdisk_get_flow_control_window_bytes(QDisk *self);
86 gboolean qdisk_is_read_only(QDisk *self);
87 const gchar *qdisk_get_filename(QDisk *self);
88 gint64 qdisk_get_file_size(QDisk *self);
89 
90 gchar *qdisk_get_next_filename(const gchar *dir, gboolean reliable);
91 gboolean qdisk_is_file_a_disk_buffer_file(const gchar *filename);
92 gboolean qdisk_is_disk_buffer_file_reliable(const gchar *filename, gboolean *reliable);
93 
94 gboolean qdisk_serialize(GString *serialized, QDiskSerializeFunc serialize_func, gpointer user_data, GError **error);
95 gboolean qdisk_deserialize(GString *serialized, QDiskDeSerializeFunc deserialize_func, gpointer user_data,
96  GError **error);
97 
98 #endif /* QDISK_H_ */
void qdisk_empty_backlog(QDisk *self)
Definition: qdisk.c:1006
gboolean qdisk_peek_head(QDisk *self, GString *record)
Definition: qdisk.c:887
gint64 qdisk_get_file_size(QDisk *self)
Definition: qdisk.c:1798
gint qdisk_get_flow_control_window_bytes(QDisk *self)
Definition: qdisk.c:1828
void qdisk_free(QDisk *self)
Definition: qdisk.c:1840
gint64 qdisk_get_writer_head(QDisk *self)
Definition: qdisk.c:1804
gint64 qdisk_get_backlog_count(QDisk *self)
Definition: qdisk.c:1822
gboolean qdisk_remove_head(QDisk *self)
Definition: qdisk.c:949
gboolean qdisk_is_read_only(QDisk *self)
Definition: qdisk.c:1834
gboolean qdisk_is_disk_buffer_file_reliable(const gchar *filename, gboolean *reliable)
Definition: qdisk.c:323
gboolean qdisk_deserialize(GString *serialized, QDiskDeSerializeFunc deserialize_func, gpointer user_data, GError **error)
Definition: qdisk.c:1053
gint64 qdisk_get_length(QDisk *self)
Definition: qdisk.c:1780
gint64 qdisk_get_next_head_position(QDisk *self)
Definition: qdisk.c:877
gint64 qdisk_get_empty_space(QDisk *self)
Definition: qdisk.c:556
gint64 qdisk_get_reader_head(QDisk *self)
Definition: qdisk.c:1810
gint64 qdisk_get_next_tail_position(QDisk *self)
Definition: qdisk.c:683
gboolean qdisk_pop_head(QDisk *self, GString *record)
Definition: qdisk.c:906
gboolean qdisk_is_space_avail(QDisk *self, gint at_least)
Definition: qdisk.c:390
gint64 qdisk_get_used_useful_space(QDisk *self)
Definition: qdisk.c:670
gboolean qdisk_started(QDisk *self)
Definition: qdisk.c:346
gboolean qdisk_stop(QDisk *self, GQueue *front_cache, GQueue *backlog, GQueue *flow_control_window)
Definition: qdisk.c:1748
gboolean(* QDiskDeSerializeFunc)(SerializeArchive *sa, gpointer user_data)
Definition: qdisk.h:45
DiskQueueOptions * qdisk_get_options(QDisk *self)
Definition: qdisk.c:1774
gboolean qdisk_serialize(GString *serialized, QDiskSerializeFunc serialize_func, gpointer user_data, GError **error)
Definition: qdisk.c:1024
gboolean qdisk_rewind_backlog(QDisk *self, guint rewind_count)
Definition: qdisk.c:981
gint64 qdisk_get_maximum_size(QDisk *self)
Definition: qdisk.c:1786
gint64 qdisk_get_backlog_head(QDisk *self)
Definition: qdisk.c:1816
gint64 qdisk_get_max_useful_space(QDisk *self)
Definition: qdisk.c:550
const gchar * qdisk_get_filename(QDisk *self)
Definition: qdisk.c:1792
gboolean qdisk_push_tail(QDisk *self, GString *record)
Definition: qdisk.c:692
gboolean qdisk_is_file_a_disk_buffer_file(const gchar *filename)
Definition: qdisk.c:294
gboolean(* QDiskSerializeFunc)(SerializeArchive *sa, gpointer user_data)
Definition: qdisk.h:44
gboolean qdisk_ack_backlog(QDisk *self)
Definition: qdisk.c:964
QDisk * qdisk_new(DiskQueueOptions *options, const gchar *file_id, const gchar *filename)
Definition: qdisk.c:1848
gchar * qdisk_get_next_filename(const gchar *dir, gboolean reliable)
Definition: qdisk.c:253
void qdisk_reset_file_if_empty(QDisk *self)
Definition: qdisk.c:1761
gboolean qdisk_start(QDisk *self, GQueue *front_cache, GQueue *backlog, GQueue *flow_control_window)
Definition: qdisk.c:1730
Definition: diskq-options.h:33
Definition: qdisk.h:48
guint32 count
Definition: qdisk.h:51
guint32 len
Definition: qdisk.h:50
gint64 ofs
Definition: qdisk.h:49
Definition: qdisk.c:98
const gchar * file_id
Definition: qdisk.c:100
gchar * filename
Definition: qdisk.c:99
DiskQueueOptions * options
Definition: qdisk.c:104
SerializeArchive * sa
Definition: test_timestamp_serialize.c:31