Re: [PATCHv2 1/3] Share Dup Daemon Function *SetupLogging

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On a Wednesday in 2020, LAN BAI wrote:


On Mar 11, 2020 9:30 AM, Ján Tomko <jtomko@xxxxxxxxxx> wrote:
On a Sunday in 2020, Lan wrote:
One of the BiteSizedTasks

Introduce src/util/virdaemon.c/h files

Introduce a new function virDaemonSetupLogging (src/util/virdaemon.c)
for shared code in
virLockDaemonSetupLogging (src/locking/lock_daemon.c)
virLogDaemonSetupLogging (src/logging/log_daemon.c)
daemonSetupLogging (src/remote/remote_daemon.c)

Introduce virDaemonLogConfig struct for config->log_* variables in
virLockDaemonConfig/virLogDaemonConfig/daemonConfig struct

Signed-off-by: Lan Bai <lbai@xxxxxxxx>
---
src/libvirt_private.syms   |  2 +
src/locking/lock_daemon.c  | 58 ++---------------------------
src/logging/log_daemon.c   | 50 ++-----------------------
src/remote/remote_daemon.c | 57 ++---------------------------
src/util/Makefile.inc.am   |  4 +-
src/util/virdaemon.c       | 75 ++++++++++++++++++++++++++++++++++++++
src/util/virdaemon.h       | 35 ++++++++++++++++++
7 files changed, 126 insertions(+), 155 deletions(-)
create mode 100644 src/util/virdaemon.c
create mode 100644 src/util/virdaemon.h

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index de0c7a3133..50cbd6d7af 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1906,6 +1906,8 @@ virCryptoHashBuf;
virCryptoHashString;
virCryptoHaveCipher;

+# util/virdaemon.h
+virDaemonSetupLogging;

# util/virdbus.h
virDBusCallMethod;
diff --git a/src/locking/lock_daemon.c b/src/locking/lock_daemon.c
index 5e5a0c1089..5ba851cb55 100644
--- a/src/locking/lock_daemon.c
+++ b/src/locking/lock_daemon.c
@@ -46,6 +46,7 @@
#include "virstring.h"
#include "virgettext.h"
#include "virenum.h"
+#include "virdaemon.h"

#include "locking/lock_daemon_dispatch.h"
#include "locking/lock_protocol.h"
@@ -477,59 +478,6 @@ virLockDaemonErrorHandler(void *opaque G_GNUC_UNUSED,
}


-/*
- * Set up the logging environment
- * By default if daemonized all errors go to the logfile libvirtd.log,
- * but if verbose or error debugging is asked for then also output
- * informational and debug messages. Default size if 64 kB.
- */
-static int
-virLockDaemonSetupLogging(virLockDaemonConfigPtr config,
-                          bool privileged,
-                          bool verbose,
-                          bool godaemon)
-{
-    virLogReset();
-
-    /*
-     * Libvirtd's order of precedence is:
-     * cmdline > environment > config
-     *
-     * Given the precedence, we must process the variables in the opposite
-     * order, each one overriding the previous.
-     */
-    if (config->log_level != 0)
-        virLogSetDefaultPriority(config->log_level);
-
-    /* In case the config is empty, both filters and outputs will become empty,
-     * however we can't start with empty outputs, thus we'll need to define and
-     * setup a default one.
-     */
-    ignore_value(virLogSetFilters(config->log_filters));
-    ignore_value(virLogSetOutputs(config->log_outputs));
-
-    /* If there are some environment variables defined, use those instead */
-    virLogSetFromEnv();
-
-    /*
-     * Command line override for --verbose
-     */
-    if ((verbose) && (virLogGetDefaultPriority() > VIR_LOG_INFO))
-        virLogSetDefaultPriority(VIR_LOG_INFO);
-
-    /* Define the default output. This is only applied if there was no setting
-     * from either the config or the environment.
-     */
-    virLogSetDefaultOutput("virtlockd", godaemon, privileged);
-
-    if (virLogGetNbOutputs() == 0)
-        virLogSetOutputs(virLogGetDefaultOutput());
-
-    return 0;
-}
-
-
-
/* Display version information. */
static void
virLockDaemonVersion(const char *argv0)
@@ -1186,7 +1134,9 @@ int main(int argc, char **argv) {
    }
    VIR_FREE(remote_config_file);

-    if (virLockDaemonSetupLogging(config, privileged, verbose, godaemon) < 0) {
+    if (virDaemonSetupLogging((virDaemonLogConfigPtr)(&(config->log_level)),

This still does not compile for me:
../../src/locking/lock_daemon.c:1131:31: error: cast from 'unsigned int *' to 'virDaemonLogConfigPtr' (aka 'struct _virDaemonLogConfig *') increases required alignment from 4 to 8 [-Werror,-Wcast-align]
    if (virDaemonSetupLogging((virDaemonLogConfigPtr)(&(config->log_level)),
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This is modified in following commits. If you apply the whole patch it shouldn't be a problem.

The first step along with introducing the virDaemonLogConfig structure
is moving the three log_parameters into this structure.

So
struct _virLockDaemonConfig {
    unsigned int log_level;
    char *log_filters;
    char *log_outputs;
    unsigned int max_clients;
    unsigned int admin_max_clients;
};

would become something like

struct _virLockDaemonConfig {
    virDaemonLogConfig log_config;
    unsigned int max_clients;
    unsigned int admin_max_clients;
};

And a function like:
virDaemonLogConfigLoadOptions(virDaemonLogConfigPtr log_config, virConfPtr conf)

could be used to replace the three lines in every daemon's config
loader.
How do you solve the problem of different virConfPtr type. I have an initializer for virDaemonLogConfig in following commits.

virLockDaemonConfigLoadOptions which takes virLockDaemonConfigPtr would
call this function only with the virDaemonLogConfig parameter, not the
whole daemon-specific config.

So virLockDaemonConfigLoadOptions would do:
  if (virDaemonLogConfigLoadOptions(&data->log_config, conf) < 0)
     return -1;

taking the log_config from the LockDaemonConfig.

The other functions would do the same with their log_config - which
would be stored in the daemon-specific config struct, but it would still
have the virDaemonLogConfig type.

Jano




Jano

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux