qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v2 01/11] migration: support file: uri for source migration


From: Nikolay Borisov
Subject: Re: [PATCH v2 01/11] migration: support file: uri for source migration
Date: Tue, 18 Oct 2022 12:49:19 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.2


On 18.10.22 г. 12:10 ч., Daniel P. Berrangé wrote:
On Mon, Oct 10, 2022 at 04:33:58PM +0300, Nikolay Borisov wrote:
Implement support for a "file:" uri so that a migration can be initiated
directly to a file from QEMU.
Can we add a reminder here

   Unlike other migration protocol backends, the 'file' protocol cannot
   honour non-blocking mode. POSIX file/block storage will always report
   ready to read/write, regardless of how slow the underlying storage
   will be at servicing the request.

   For outgoing migration this limitation is not a serious problem as
   the migration data transfer always happens in a dedicated thread.
   It may, however, result in delays in honouring a request to cancel
   the migration operation.
Sure, I assume the same text should be added to the incoming migration 
patch as well and emphasize that it could be more problematic there?
In any case I'd wait to gather more feedback before sending v3

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
---
  migration/file.c      | 23 +++++++++++++++++++++++
  migration/file.h      |  9 +++++++++
  migration/meson.build |  1 +
  migration/migration.c |  3 +++
  4 files changed, 36 insertions(+)
  create mode 100644 migration/file.c
  create mode 100644 migration/file.h

diff --git a/migration/file.c b/migration/file.c
new file mode 100644
index 000000000000..02896a7cab99
--- /dev/null
+++ b/migration/file.c
@@ -0,0 +1,23 @@
+#include "qemu/osdep.h"
+#include "channel.h"
+#include "io/channel-file.h"
+#include "file.h"
+#include "qemu/error-report.h"
+
+
+void file_start_outgoing_migration(MigrationState *s, const char *fname, Error 
**errp)
+{
+       QIOChannelFile *ioc;
+
+       ioc = qio_channel_file_new_path(fname, O_CREAT|O_TRUNC|O_WRONLY, 0660, 
errp);
+       if (!ioc) {
+               error_report("Error creating a channel");
+               return;
+       }
+
+       qio_channel_set_name(QIO_CHANNEL(ioc), "migration-file-outgoing");
+       migration_channel_connect(s, QIO_CHANNEL(ioc), NULL, NULL);
+       object_unref(OBJECT(ioc));
+}
+
+
diff --git a/migration/file.h b/migration/file.h
new file mode 100644
index 000000000000..d476eb1157f9
--- /dev/null
+++ b/migration/file.h
@@ -0,0 +1,9 @@
+#ifndef QEMU_MIGRATION_FILE_H
+#define QEMU_MIGRATION_FILE_H
+
+void file_start_outgoing_migration(MigrationState *s,
+                                   const char *filename,
+                                   Error **errp);
+
+#endif
+
diff --git a/migration/meson.build b/migration/meson.build
index 690487cf1a81..30a8392701c3 100644
--- a/migration/meson.build
+++ b/migration/meson.build
@@ -17,6 +17,7 @@ softmmu_ss.add(files(
    'colo.c',
    'exec.c',
    'fd.c',
+  'file.c',
    'global_state.c',
    'migration.c',
    'multifd.c',
diff --git a/migration/migration.c b/migration/migration.c
index bb8bbddfe467..8813b78b9a6b 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -20,6 +20,7 @@
  #include "migration/blocker.h"
  #include "exec.h"
  #include "fd.h"
+#include "file.h"
  #include "socket.h"
  #include "sysemu/runstate.h"
  #include "sysemu/sysemu.h"
@@ -2414,6 +2415,8 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
          exec_start_outgoing_migration(s, p, &local_err);
      } else if (strstart(uri, "fd:", &p)) {
          fd_start_outgoing_migration(s, p, &local_err);
+    } else if (strstart(uri, "file:", &p)) {
+       file_start_outgoing_migration(s, p, &local_err);
      } else {
          if (!(has_resume && resume)) {
              yank_unregister_instance(MIGRATION_YANK_INSTANCE);
--
2.34.1

With regards,
Daniel


reply via email to

[Prev in Thread] Current Thread [Next in Thread]