[PATCH 1/3] DO NOT APPLY: code to show logging issues

Nikolay Shirokovskiy nshirokovskiy at virtuozzo.com
Thu Sep 24 13:24:31 UTC 2020


---
 src/logging/log_handler.c |  1 +
 src/qemu/qemu_process.c   | 35 +++++++++++++++++++++++++++++++++++
 2 files changed, 36 insertions(+)

diff --git a/src/logging/log_handler.c b/src/logging/log_handler.c
index 87748d9..cfadc69 100644
--- a/src/logging/log_handler.c
+++ b/src/logging/log_handler.c
@@ -160,6 +160,7 @@ virLogHandlerDomainLogFileEvent(int watch,
     }
 
  reread:
+    g_usleep(200 * 1000);
     len = read(fd, buf, sizeof(buf));
     if (len < 0) {
         if (errno == EINTR)
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index f21b8f1..22219f8 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -93,6 +93,8 @@
 #include "viridentity.h"
 #include "virthreadjob.h"
 #include "virutil.h"
+#include "logging/log_manager.h"
+#include "logging/log_protocol.h"
 
 #define VIR_FROM_THIS VIR_FROM_QEMU
 
@@ -6829,6 +6831,39 @@ qemuProcessLaunch(virConnectPtr conn,
                             incoming != NULL) < 0)
         goto cleanup;
 
+    if (qemuDomainLogContextGetManager(logCtxt)) {
+        int fd = -1;
+        char *buf;
+        int rc;
+        ino_t inode;
+        off_t offset;
+
+        if ((fd = virLogManagerDomainOpenLogFile(
+                        qemuDomainLogContextGetManager(logCtxt),
+                        "qemu",
+                        vm->def->uuid,
+                        vm->def->name,
+                        "/tmp/virtlogd-test",
+                        VIR_LOG_MANAGER_PROTOCOL_DOMAIN_OPEN_LOG_FILE_TRUNCATE,
+                        NULL, NULL)) < 0)
+            goto cleanup;
+
+        buf = g_new0(char, 10000);
+        rc = safewrite(fd, buf, 10000);
+        VIR_FORCE_CLOSE(fd);
+
+        if (rc < 10000) {
+            virReportError(VIR_ERR_INTERNAL_ERROR,
+                           "can't write all bytes to test file");
+            goto cleanup;
+        }
+
+        if (virLogManagerDomainGetLogFilePosition(
+                        qemuDomainLogContextGetManager(logCtxt),
+                        "/tmp/virtlogd-test", 0, &inode, &offset) < 0)
+            goto cleanup;
+    }
+
     VIR_DEBUG("Building emulator command line");
     if (!(cmd = qemuBuildCommandLine(driver,
                                      qemuDomainLogContextGetManager(logCtxt),
-- 
1.8.3.1




More information about the libvir-list mailing list