Skip to content

Commit

Permalink
migration: Route errors down through migration_channel_connect
Browse files Browse the repository at this point in the history
Route async errors (especially from sockets) down through
migration_channel_connect and on to migrate_fd_connect where they
can be cleaned up.

Signed-off-by: Dr. David Alan Gilbert <[email protected]>
Reviewed-by: Juan Quintela <[email protected]>
Signed-off-by: Juan Quintela <[email protected]>
Signed-off-by: Dr. David Alan Gilbert <[email protected]>
  • Loading branch information
dagrh committed Feb 6, 2018
1 parent cce8040 commit 688a3dc
Show file tree
Hide file tree
Showing 7 changed files with 23 additions and 25 deletions.
32 changes: 16 additions & 16 deletions migration/channel.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,29 +55,29 @@ void migration_channel_process_incoming(QIOChannel *ioc)
* @s: Current migration state
* @ioc: Channel to which we are connecting
* @hostname: Where we want to connect
* @error: Error indicating failure to connect, free'd here
*/
void migration_channel_connect(MigrationState *s,
QIOChannel *ioc,
const char *hostname)
const char *hostname,
Error *error)
{
trace_migration_set_outgoing_channel(
ioc, object_get_typename(OBJECT(ioc)), hostname);
ioc, object_get_typename(OBJECT(ioc)), hostname, error);

if (s->parameters.tls_creds &&
*s->parameters.tls_creds &&
!object_dynamic_cast(OBJECT(ioc),
TYPE_QIO_CHANNEL_TLS)) {
Error *local_err = NULL;
migration_tls_channel_connect(s, ioc, hostname, &local_err);
if (local_err) {
migrate_fd_error(s, local_err);
error_free(local_err);
}
} else {
QEMUFile *f = qemu_fopen_channel_output(ioc);
if (!error) {
if (s->parameters.tls_creds &&
*s->parameters.tls_creds &&
!object_dynamic_cast(OBJECT(ioc),
TYPE_QIO_CHANNEL_TLS)) {
migration_tls_channel_connect(s, ioc, hostname, &error);
} else {
QEMUFile *f = qemu_fopen_channel_output(ioc);

s->to_dst_file = f;
s->to_dst_file = f;

migrate_fd_connect(s, NULL);
}
}
migrate_fd_connect(s, error);
error_free(error);
}
3 changes: 2 additions & 1 deletion migration/channel.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,6 @@ void migration_channel_process_incoming(QIOChannel *ioc);

void migration_channel_connect(MigrationState *s,
QIOChannel *ioc,
const char *hostname);
const char *hostname,
Error *error_in);
#endif
2 changes: 1 addition & 1 deletion migration/exec.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ void exec_start_outgoing_migration(MigrationState *s, const char *command, Error
}

qio_channel_set_name(ioc, "migration-exec-outgoing");
migration_channel_connect(s, ioc, NULL);
migration_channel_connect(s, ioc, NULL, NULL);
object_unref(OBJECT(ioc));
}

Expand Down
2 changes: 1 addition & 1 deletion migration/fd.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **
}

qio_channel_set_name(QIO_CHANNEL(ioc), "migration-fd-outgoing");
migration_channel_connect(s, ioc, NULL);
migration_channel_connect(s, ioc, NULL, NULL);
object_unref(OBJECT(ioc));
}

Expand Down
4 changes: 1 addition & 3 deletions migration/socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,10 @@ static void socket_outgoing_migration(QIOTask *task,

if (qio_task_propagate_error(task, &err)) {
trace_migration_socket_outgoing_error(error_get_pretty(err));
migrate_fd_error(data->s, err);
error_free(err);
} else {
trace_migration_socket_outgoing_connected(data->hostname);
migration_channel_connect(data->s, sioc, data->hostname);
}
migration_channel_connect(data->s, sioc, data->hostname, err);
object_unref(OBJECT(sioc));
}

Expand Down
3 changes: 1 addition & 2 deletions migration/tls.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,11 +118,10 @@ static void migration_tls_outgoing_handshake(QIOTask *task,

if (qio_task_propagate_error(task, &err)) {
trace_migration_tls_outgoing_handshake_error(error_get_pretty(err));
migrate_fd_error(s, err);
} else {
trace_migration_tls_outgoing_handshake_complete();
migration_channel_connect(s, ioc, NULL);
}
migration_channel_connect(s, ioc, NULL, err);
object_unref(OBJECT(ioc));
}

Expand Down
2 changes: 1 addition & 1 deletion migration/trace-events
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ migrate_transferred(uint64_t tranferred, uint64_t time_spent, double bandwidth,
process_incoming_migration_co_end(int ret, int ps) "ret=%d postcopy-state=%d"
process_incoming_migration_co_postcopy_end_main(void) ""
migration_set_incoming_channel(void *ioc, const char *ioctype) "ioc=%p ioctype=%s"
migration_set_outgoing_channel(void *ioc, const char *ioctype, const char *hostname) "ioc=%p ioctype=%s hostname=%s"
migration_set_outgoing_channel(void *ioc, const char *ioctype, const char *hostname, void *err) "ioc=%p ioctype=%s hostname=%s err=%p"

# migration/rdma.c
qemu_rdma_accept_incoming_migration(void) ""
Expand Down

0 comments on commit 688a3dc

Please sign in to comment.