From: Jeremy Sowden <jeremy@azazel.net>
To: Netfilter Devel <netfilter-devel@vger.kernel.org>
Subject: [PATCH ulogd2 v2 v2 23/34] db: refactor backlog
Date: Tue, 29 Nov 2022 21:47:38 +0000 [thread overview]
Message-ID: <20221129214749.247878-24-jeremy@azazel.net> (raw)
In-Reply-To: <20221129214749.247878-1-jeremy@azazel.net>
Move the backlog fields into a separate structure along the same lines
as the ring-buffer.
Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
---
include/ulogd/db.h | 18 +++++++++++++-----
util/db.c | 44 ++++++++++++++++++++++----------------------
2 files changed, 35 insertions(+), 27 deletions(-)
diff --git a/include/ulogd/db.h b/include/ulogd/db.h
index ebf4f42917c3..fc3b15ef0e0f 100644
--- a/include/ulogd/db.h
+++ b/include/ulogd/db.h
@@ -45,6 +45,18 @@ struct db_stmt_ring {
};
+struct db_stmt_backlog {
+
+ struct llist_head items;
+
+ unsigned int memcap;
+ unsigned int memusage;
+ unsigned int oneshot;
+
+ int full;
+
+};
+
struct db_stmt {
char *stmt;
int len;
@@ -61,11 +73,7 @@ struct db_instance {
/* DB ring buffer */
struct db_stmt_ring ring;
/* Backlog system */
- unsigned int backlog_memcap;
- unsigned int backlog_memusage;
- unsigned int backlog_oneshot;
- unsigned char backlog_full;
- struct llist_head backlog;
+ struct db_stmt_backlog backlog;
};
#define RECONNECT_DEFAULT 2
diff --git a/util/db.c b/util/db.c
index 8a870846332b..89c81d8d1dc5 100644
--- a/util/db.c
+++ b/util/db.c
@@ -259,7 +259,7 @@ _interp_db_init(struct ulogd_pluginstance *upi)
if (di->reconnect && di->reconnect > time(NULL)) {
/* store entry to backlog if it is active */
- if (di->backlog_memcap && !di->backlog_full) {
+ if (di->backlog.memcap && !di->backlog.full) {
_bind_sql_stmt(upi, di->stmt);
_add_to_backlog(upi, di->stmt, strlen(di->stmt));
}
@@ -268,7 +268,7 @@ _interp_db_init(struct ulogd_pluginstance *upi)
if (di->driver->open_db(upi) < 0) {
ulogd_log(ULOGD_ERROR, "can't establish database connection\n");
- if (di->backlog_memcap && !di->backlog_full) {
+ if (di->backlog.memcap && !di->backlog.full) {
_bind_sql_stmt(upi, di->stmt);
_add_to_backlog(upi, di->stmt, strlen(di->stmt));
}
@@ -302,7 +302,7 @@ _interp_db_main(struct ulogd_pluginstance *upi)
_bind_sql_stmt(upi, di->stmt);
/* if backup log is not empty we add current query to it */
- if (!llist_empty(&di->backlog)) {
+ if (!llist_empty(&di->backlog.items)) {
int ret = _add_to_backlog(upi, di->stmt, strlen(di->stmt));
if (ret == 0) {
if (_process_backlog(upi) < 0)
@@ -623,27 +623,27 @@ _configure_backlog(struct ulogd_pluginstance *upi)
{
struct db_instance *di = (struct db_instance *) &upi->private;
- INIT_LLIST_HEAD(&di->backlog);
+ INIT_LLIST_HEAD(&di->backlog.items);
- di->backlog_memusage = 0;
- di->backlog_memcap = backlog_memcap_ce(upi->config_kset).u.value;
- di->backlog_full = 0;
+ di->backlog.memusage = 0;
+ di->backlog.memcap = backlog_memcap_ce(upi->config_kset).u.value;
+ di->backlog.full = 0;
- if (di->backlog_memcap == 0)
+ if (di->backlog.memcap == 0)
return 0;
if (ringsize_ce(upi->config_kset).u.value) {
ulogd_log(ULOGD_ERROR,
"Ring buffer has precedence over backlog\n");
- di->backlog_memcap = 0;
+ di->backlog.memcap = 0;
return 0;
}
- di->backlog_oneshot = backlog_oneshot_ce(upi->config_kset).u.value;
- if (di->backlog_oneshot <= 2) {
+ di->backlog.oneshot = backlog_oneshot_ce(upi->config_kset).u.value;
+ if (di->backlog.oneshot <= 2) {
ulogd_log(ULOGD_ERROR,
"backlog_oneshot_requests must be > 2 to be effective. Setting it to 3.\n");
- di->backlog_oneshot = 3;
+ di->backlog.oneshot = 3;
}
return 0;
@@ -658,17 +658,17 @@ _add_to_backlog(struct ulogd_pluginstance *upi,
struct db_stmt *query;
/* check if we are using backlog */
- if (di->backlog_memcap == 0)
+ if (di->backlog.memcap == 0)
return 0;
query_size = sizeof(*query) + len + 1;
/* check len against backlog */
- if (query_size + di->backlog_memcap - di->backlog_memusage) {
- if (di->backlog_full == 0)
+ if (query_size + di->backlog.memcap - di->backlog.memusage) {
+ if (!di->backlog.full)
ulogd_log(ULOGD_ERROR,
"Backlog is full starting to reject events.\n");
- di->backlog_full = 1;
+ di->backlog.full = 1;
return -1;
}
@@ -684,10 +684,10 @@ _add_to_backlog(struct ulogd_pluginstance *upi,
return -1;
}
- di->backlog_memusage += query_size;
- di->backlog_full = 0;
+ di->backlog.memusage += query_size;
+ di->backlog.full = 0;
- llist_add_tail(&query->list, &di->backlog);
+ llist_add_tail(&query->list, &di->backlog.items);
return 0;
}
@@ -696,7 +696,7 @@ static int
_process_backlog(struct ulogd_pluginstance *upi)
{
struct db_instance *di = (struct db_instance *) &upi->private;
- int i = di->backlog_oneshot;
+ int i = di->backlog.oneshot;
struct db_stmt *query;
struct db_stmt *nquery;
@@ -704,13 +704,13 @@ _process_backlog(struct ulogd_pluginstance *upi)
if (di->reconnect && di->reconnect > time(NULL))
return 0;
- llist_for_each_entry_safe(query, nquery, &di->backlog, list) {
+ llist_for_each_entry_safe(query, nquery, &di->backlog.items, list) {
if (di->driver->execute(upi, query->stmt, query->len) < 0) {
/* error occur, database connexion need to be closed */
di->driver->close_db(upi);
return _reconnect_db(upi);
} else {
- di->backlog_memusage -= sizeof(*query) + query->len + 1;
+ di->backlog.memusage -= sizeof(*query) + query->len + 1;
llist_del(&query->list);
free(query->stmt);
free(query);
--
2.35.1
next prev parent reply other threads:[~2022-11-29 21:59 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-29 21:47 [PATCH ulogd2 v2 v2 00/34] Refactor of the DB output plug-ins Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 01/34] ulogd: fix parse-error check Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 02/34] filter: fix buffer sizes in filter plug-ins Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 03/34] output: JSON: remove incorrect config value check Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 04/34] db: fix back-log capacity checks Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 05/34] build: add checks to configure.ac Jeremy Sowden
2022-11-30 10:04 ` Jan Engelhardt
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 06/34] src: remove some trailing white space Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 07/34] src: remove zero-valued config-key fields Jeremy Sowden
2022-11-30 10:21 ` Jan Engelhardt
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 08/34] src: parenthesize config-entry macro arguments Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 09/34] src: define constructors and destructors consistently Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 10/34] src: remove `TIME_ERR` macro Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 11/34] src: remove superfluous casts Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 12/34] conffile: replace malloc+strcpy with strdup Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 13/34] output: remove zero-initialized `struct ulogd_plugin` members Jeremy Sowden
2022-11-30 10:26 ` Jan Engelhardt
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 14/34] output: de-duplicate allocation of input keys Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 15/34] db: reorganize source Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 16/34] db: use consistent integer return values to indicate errors Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 17/34] db: change return type of two functions to `void` Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 18/34] db: open-code `_loop_reconnect_db` Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 19/34] db: improve calculation of sql statement length Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 20/34] db: refactor configuration Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 21/34] db: refactor ring-buffer initialization Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 22/34] db: refactor ring-buffer Jeremy Sowden
2022-11-29 21:47 ` Jeremy Sowden [this message]
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 24/34] db: use `struct db_stmt` objects more widely Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 25/34] db: synchronize access to ring-buffer Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 26/34] db: avoid cancelling ring-buffer thread Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 27/34] db, IP2BIN: defer formatting of raw strings Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 28/34] db: add prep & exec support Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 29/34] output: mysql: " Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 30/34] output: pgsql: remove a couple of struct members Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 31/34] output: pgsql: remove variable-length arrays Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 32/34] output: pgsql: tidy up `open_db_pgsql` and fix memory leak Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 33/34] output: pgsql: add prep & exec support Jeremy Sowden
2022-11-29 21:47 ` [PATCH ulogd2 v2 v2 34/34] output: sqlite3: reimplement using the common DB API Jeremy Sowden
2022-11-30 10:27 ` [PATCH ulogd2 v2 v2 00/34] Refactor of the DB output plug-ins Pablo Neira Ayuso
2022-11-30 16:03 ` Jeremy Sowden
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221129214749.247878-24-jeremy@azazel.net \
--to=jeremy@azazel.net \
--cc=netfilter-devel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).