This is a counterpart to the 'file:' uri support for source migration, now a file can also serve as the source of an incoming migration. 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 incoming migration this limitation may result in the main event loop not being fully responsive while loading the VM state. This won't impact the VM since it is not running at this phase, however, it may impact management applications. Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Nikolay Borisov <nborisov@suse.com> Signed-off-by: Fabiano Rosas <farosas@suse.de>
37 lines
994 B
C
37 lines
994 B
C
#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));
|
|
}
|
|
|
|
void file_start_incoming_migration(const char *fname, Error **errp)
|
|
{
|
|
QIOChannelFile *ioc;
|
|
|
|
ioc = qio_channel_file_new_path(fname, O_RDONLY, 0, errp);
|
|
if (!ioc) {
|
|
error_report("Error creating a channel");
|
|
return;
|
|
}
|
|
|
|
qio_channel_set_name(QIO_CHANNEL(ioc), "migration-file-incoming");
|
|
migration_channel_process_incoming(QIO_CHANNEL(ioc));
|
|
object_unref(OBJECT(ioc));
|
|
}
|