From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 457D062B61 for ; Thu, 1 Oct 2020 10:54:07 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 3CC561F6F1 for ; Thu, 1 Oct 2020 10:53:37 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 00D331F6E7 for ; Thu, 1 Oct 2020 10:53:36 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id BE64845B40 for ; Thu, 1 Oct 2020 10:53:35 +0200 (CEST) From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= To: pve-devel@lists.proxmox.com Date: Thu, 1 Oct 2020 10:53:24 +0200 Message-Id: <20201001085326.3815261-2-f.gruenbichler@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20201001085326.3815261-1-f.gruenbichler@proxmox.com> References: <20201001085326.3815261-1-f.gruenbichler@proxmox.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.037 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [RFC cluster 1/3] pmxcfs: switch log domain to enum X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Oct 2020 08:54:07 -0000 GQuarks does not work correctly across threads, which can cause misattribution to log domains, e.g. [status] notice: members: 1/2116, 2/2454111 [status] notice: starting data syncronisation [status] notice: members: 1/2116, 2/2454111 [status] notice: starting data syncronisation [dcdb] notice: received sync request (epoch 1/2116/00000036) [status] notice: received sync request (epoch 1/2116/00000036) [dcdb] notice: received all states [dcdb] notice: leader is 1/2116 [dcdb] notice: synced members: 1/2116, 2/2454111 [dcdb] notice: all data is up to date [status] notice: received all states [status] notice: all data is up to date gets logged instead of [dcdb] notice: members: 1/2116, 2/2454111, 3/1254 [dcdb] notice: starting data syncronisation [status] notice: members: 1/2116, 2/2454111, 3/1254 [status] notice: starting data syncronisation [dcdb] notice: received sync request (epoch 1/2116/00000035) [status] notice: received sync request (epoch 1/2116/00000035) [dcdb] notice: received all states [dcdb] notice: leader is 1/2116 [dcdb] notice: synced members: 1/2116, 2/2454111 [dcdb] notice: all data is up to date [status] notice: received all states [status] notice: all data is up to date this only happens with threaded logging (not yet enabled). Signed-off-by: Fabian Grünbichler --- not entirely happy with this approach - open for more elegant suggestions ;) data/src/cfs-utils.h | 36 ++++++++++++++++++++++++++++++++---- data/src/dfsm.h | 6 +++--- data/src/loop.h | 2 +- data/src/cfs-utils.c | 4 ++-- data/src/confdb.c | 2 +- data/src/dcdb.c | 2 +- data/src/dfsm.c | 4 ++-- data/src/loop.c | 10 +++++----- data/src/pmxcfs.c | 14 +++++--------- data/src/quorum.c | 2 +- data/src/status.c | 2 +- 11 files changed, 54 insertions(+), 30 deletions(-) diff --git a/data/src/cfs-utils.h b/data/src/cfs-utils.h index eb86379..51cfef0 100644 --- a/data/src/cfs-utils.h +++ b/data/src/cfs-utils.h @@ -37,6 +37,34 @@ #define CFS_MAX(a, b) (((a) > (b)) ? (a) : (b)) #define CFS_MIN(a, b) (((a) < (b)) ? (a) : (b)) +typedef enum { + CFS_LOG_MAIN = 0, + CFS_LOG_LOOP = 1, + CFS_LOG_IPCS = 2, + CFS_LOG_GLIB = 3, + CFS_LOG_CONFDB = 4, + CFS_LOG_QUORUM = 5, + CFS_LOG_DB = 6, + CFS_LOG_STATUS = 7, + CFS_LOG_DCDB = 8, + CFS_LOG_UNKNOWN = 9, + CFS_LOG_LAST_VALUE = 10, +} cfs_log_domain_t; + +static const char * const cfs_log_domain_strings[] = { + "main", + "loop", + "ipcs", + "glib", + "confdb", + "quorum", + "database", + "status", + "dcdb", + "unknown", + "invalid", +}; + typedef struct { char *nodename; char *ip; @@ -55,7 +83,7 @@ utf8_to_ascii( void cfs_log( - const gchar *log_domain, + cfs_log_domain_t log_domain, GLogLevelFlags log_level, const char *file, int line, @@ -72,7 +100,7 @@ void ipc_log_fn( #define cfs_debug(...) G_STMT_START { \ if (cfs.debug) \ - cfs_log(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, __FILE__, __LINE__, G_STRFUNC, __VA_ARGS__); \ + cfs_log(CFS_LOG_UNKNOWN, G_LOG_LEVEL_DEBUG, __FILE__, __LINE__, G_STRFUNC, __VA_ARGS__); \ } G_STMT_END #define cfs_dom_debug(domain, ...) G_STMT_START { \ @@ -80,9 +108,9 @@ void ipc_log_fn( cfs_log(domain, G_LOG_LEVEL_DEBUG, __FILE__, __LINE__, G_STRFUNC, __VA_ARGS__); \ } G_STMT_END -#define cfs_critical(...) cfs_log(G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, __FILE__, __LINE__, G_STRFUNC, __VA_ARGS__) +#define cfs_critical(...) cfs_log(CFS_LOG_UNKNOWN, G_LOG_LEVEL_CRITICAL, __FILE__, __LINE__, G_STRFUNC, __VA_ARGS__) #define cfs_dom_critical(domain, ...) cfs_log(domain, G_LOG_LEVEL_CRITICAL, __FILE__, __LINE__, G_STRFUNC, __VA_ARGS__) -#define cfs_message(...) cfs_log(G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, __FILE__, __LINE__, G_STRFUNC, __VA_ARGS__) +#define cfs_message(...) cfs_log(CFS_LOG_UNKNOWN, G_LOG_LEVEL_MESSAGE, __FILE__, __LINE__, G_STRFUNC, __VA_ARGS__) #define cfs_dom_message(domain, ...) cfs_log(domain, G_LOG_LEVEL_MESSAGE, __FILE__, __LINE__, G_STRFUNC, __VA_ARGS__) guint64 diff --git a/data/src/dfsm.h b/data/src/dfsm.h index 858127f..79d20a4 100644 --- a/data/src/dfsm.h +++ b/data/src/dfsm.h @@ -120,9 +120,9 @@ typedef struct { dfsm_t * dfsm_new( gpointer data, - const char *group_name, - const char *log_domain, - guint32 protocol_version, + const char *group_name, + cfs_log_domain_t log_domain, + guint32 protocol_version, dfsm_callbacks_t *callbacks); void diff --git a/data/src/loop.h b/data/src/loop.h index 68b783c..b1e39e2 100644 --- a/data/src/loop.h +++ b/data/src/loop.h @@ -58,7 +58,7 @@ typedef struct { cfs_service_t *cfs_service_new( cfs_service_callbacks_t *callbacks, - const char *log_domain, + cfs_log_domain_t log_domain, gpointer context); gpointer cfs_service_get_context( diff --git a/data/src/cfs-utils.c b/data/src/cfs-utils.c index 5770833..134c1cb 100644 --- a/data/src/cfs-utils.c +++ b/data/src/cfs-utils.c @@ -108,7 +108,7 @@ utf8_to_ascii( void cfs_log( - const gchar *log_domain, + cfs_log_domain_t log_domain, GLogLevelFlags log_level, const char *file, int line, @@ -152,7 +152,7 @@ cfs_log( char msg[8192]; utf8_to_ascii(msg, sizeof(msg), orgmsg, FALSE); - uint32_t tag = g_quark_from_string(log_domain); + uint32_t tag = (uint32_t) log_domain; qb_log_from_external_source(func, file, "%s", level, line, tag, msg); diff --git a/data/src/confdb.c b/data/src/confdb.c index 839f576..7c4c992 100644 --- a/data/src/confdb.c +++ b/data/src/confdb.c @@ -344,7 +344,7 @@ service_confdb_new(void) if (!private) return NULL; - service = cfs_service_new(&cfs_confdb_callbacks, G_LOG_DOMAIN, private); + service = cfs_service_new(&cfs_confdb_callbacks, CFS_LOG_CONFDB, private); return service; } diff --git a/data/src/dcdb.c b/data/src/dcdb.c index b690355..b4f4359 100644 --- a/data/src/dcdb.c +++ b/data/src/dcdb.c @@ -949,6 +949,6 @@ dfsm_t *dcdb_new(memdb_t *memdb) { g_return_val_if_fail(memdb != NULL, NULL); - return dfsm_new(memdb, DCDB_CPG_GROUP_NAME, G_LOG_DOMAIN, + return dfsm_new(memdb, DCDB_CPG_GROUP_NAME, CFS_LOG_DCDB, DCDB_PROTOCOL_VERSION, &dcdb_dfsm_callbacks); } diff --git a/data/src/dfsm.c b/data/src/dfsm.c index ddfcc23..ab761e1 100644 --- a/data/src/dfsm.c +++ b/data/src/dfsm.c @@ -103,7 +103,7 @@ typedef struct { } dfsm_queued_message_t; struct dfsm { - const char *log_domain; + cfs_log_domain_t log_domain; cpg_callbacks_t *cpg_callbacks; dfsm_callbacks_t *dfsm_callbacks; cpg_handle_t cpg_handle; @@ -1223,7 +1223,7 @@ dfsm_t * dfsm_new( gpointer data, const char *group_name, - const char *log_domain, + cfs_log_domain_t log_domain, guint32 protocol_version, dfsm_callbacks_t *callbacks) { diff --git a/data/src/loop.c b/data/src/loop.c index a80fc66..09c8590 100644 --- a/data/src/loop.c +++ b/data/src/loop.c @@ -40,8 +40,8 @@ #include "loop.h" struct cfs_service { - qb_loop_t *qbloop; - const char *log_domain; + qb_loop_t *qbloop; + cfs_log_domain_t log_domain; cfs_service_callbacks_t *callbacks; gboolean restartable; gpointer context; @@ -98,7 +98,7 @@ cfs_service_set_restartable( cfs_service_t * cfs_service_new( cfs_service_callbacks_t *callbacks, - const char *log_domain, + cfs_log_domain_t log_domain, gpointer context) { g_return_val_if_fail(callbacks != NULL, NULL); @@ -113,7 +113,7 @@ cfs_service_new( if (log_domain) service->log_domain = log_domain; else - service->log_domain = G_LOG_DOMAIN; + service->log_domain = CFS_LOG_LOOP; service->callbacks = callbacks; @@ -170,7 +170,7 @@ cfs_loop_add_service( { g_return_val_if_fail(loop != NULL, FALSE); g_return_val_if_fail(service != NULL, FALSE); - g_return_val_if_fail(service->log_domain != NULL, FALSE); + g_return_val_if_fail(service->log_domain < CFS_LOG_LAST_VALUE, FALSE); service->priority = priority; service->qbloop = loop->qbloop; diff --git a/data/src/pmxcfs.c b/data/src/pmxcfs.c index b6d6576..d5a3aac 100644 --- a/data/src/pmxcfs.c +++ b/data/src/pmxcfs.c @@ -81,7 +81,7 @@ static void glib_log_handler(const gchar *log_domain, gpointer user_data) { - cfs_log(log_domain, log_level, NULL, 0, NULL, "%s", message); + cfs_log(CFS_LOG_GLIB, log_level, NULL, 0, NULL, "%s - %s", log_domain, message); } static gboolean write_pidfile(pid_t pid) @@ -760,15 +760,11 @@ static const char* log_tags_stringify(uint32_t tags) { if (qb_bit_is_set(tags, QB_LOG_TAG_LIBQB_MSG_BIT)) { return "libqb"; + } else if (tags >= CFS_LOG_LAST_VALUE) { + return cfs_log_domain_strings[CFS_LOG_MAIN]; } else { - GQuark quark = tags; - const char *domain = g_quark_to_string(quark); - if (domain != NULL) { - return domain; - } else { - return "main"; - } - } + return cfs_log_domain_strings[tags]; + } } int main(int argc, char *argv[]) diff --git a/data/src/quorum.c b/data/src/quorum.c index 9df0e90..0a75f7f 100644 --- a/data/src/quorum.c +++ b/data/src/quorum.c @@ -202,7 +202,7 @@ cfs_service_t *service_quorum_new(void) if (!private) return NULL; - service = cfs_service_new(&cfs_quorum_callbacks, G_LOG_DOMAIN, private); + service = cfs_service_new(&cfs_quorum_callbacks, CFS_LOG_QUORUM, private); return service; } diff --git a/data/src/status.c b/data/src/status.c index e15a257..004f02e 100644 --- a/data/src/status.c +++ b/data/src/status.c @@ -1834,7 +1834,7 @@ cfs_status_dfsm_new(void) { g_mutex_lock (&mutex); - cfs_status.kvstore = dfsm_new(NULL, KVSTORE_CPG_GROUP_NAME, G_LOG_DOMAIN, + cfs_status.kvstore = dfsm_new(NULL, KVSTORE_CPG_GROUP_NAME, CFS_LOG_STATUS, 0, &kvstore_dfsm_callbacks); g_mutex_unlock (&mutex); -- 2.20.1