Message ID | 1599965256-72150-2-git-send-email-zhengchuan@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | *** Add Multifd support for TLS migration *** | expand |
On Sun, Sep 13, 2020 at 10:47:31AM +0800, Chuan Zheng wrote: > hostname is need in multifd-tls, save hostname into MigrationState. > > Signed-off-by: Chuan Zheng <zhengchuan@huawei.com> > Signed-off-by: Yan Jin <jinyan12@huawei.com> > --- > migration/channel.c | 6 ++++++ > migration/migration.c | 1 + > migration/migration.h | 5 +++++ > 3 files changed, 12 insertions(+) > > diff --git a/migration/channel.c b/migration/channel.c > index 20e4c8e..0e4104a 100644 > --- a/migration/channel.c > +++ b/migration/channel.c > @@ -66,6 +66,11 @@ void migration_channel_connect(MigrationState *s, > trace_migration_set_outgoing_channel( > ioc, object_get_typename(OBJECT(ioc)), hostname, error); > > + /* Save hostname into MigrationState for handshake */ > + if (hostname) { > + s->hostname = g_strdup(hostname); > + } > + > if (!error) { > if (s->parameters.tls_creds && > *s->parameters.tls_creds && > @@ -90,5 +95,6 @@ void migration_channel_connect(MigrationState *s, > } > } > migrate_fd_connect(s, error); > + g_free(s->hostname); > error_free(error); > } IIUC, this means hostname is free'd once the initial connection is established. Don't we have to wait until all the multifd connections exist too ? IOW, should we be doing this somewhere in a cleanup path. Perhaps migrate_fd_cancel() is the rigt place ? > diff --git a/migration/migration.c b/migration/migration.c > index 58a5452..e20b778 100644 > --- a/migration/migration.c > +++ b/migration/migration.c > @@ -1883,6 +1883,7 @@ void migrate_init(MigrationState *s) > s->migration_thread_running = false; > error_free(s->error); > s->error = NULL; > + s->hostname = NULL; > > migrate_set_state(&s->state, MIGRATION_STATUS_NONE, MIGRATION_STATUS_SETUP); > > diff --git a/migration/migration.h b/migration/migration.h > index bdc7450..bc96322 100644 > --- a/migration/migration.h > +++ b/migration/migration.h > @@ -259,6 +259,11 @@ struct MigrationState > * (which is in 4M chunk). > */ > uint8_t clear_bitmap_shift; > + > + /* > + * This save hostname when out-going migration starts > + */ > + char *hostname; > }; > > void migrate_set_state(int *state, int old_state, int new_state); > -- > 1.8.3.1 > Regards, Daniel
On 2020/9/14 17:00, Daniel P. Berrangé wrote: > On Sun, Sep 13, 2020 at 10:47:31AM +0800, Chuan Zheng wrote: >> hostname is need in multifd-tls, save hostname into MigrationState. >> >> Signed-off-by: Chuan Zheng <zhengchuan@huawei.com> >> Signed-off-by: Yan Jin <jinyan12@huawei.com> >> --- >> migration/channel.c | 6 ++++++ >> migration/migration.c | 1 + >> migration/migration.h | 5 +++++ >> 3 files changed, 12 insertions(+) >> >> diff --git a/migration/channel.c b/migration/channel.c >> index 20e4c8e..0e4104a 100644 >> --- a/migration/channel.c >> +++ b/migration/channel.c >> @@ -66,6 +66,11 @@ void migration_channel_connect(MigrationState *s, >> trace_migration_set_outgoing_channel( >> ioc, object_get_typename(OBJECT(ioc)), hostname, error); >> >> + /* Save hostname into MigrationState for handshake */ >> + if (hostname) { >> + s->hostname = g_strdup(hostname); >> + } >> + >> if (!error) { >> if (s->parameters.tls_creds && >> *s->parameters.tls_creds && >> @@ -90,5 +95,6 @@ void migration_channel_connect(MigrationState *s, >> } >> } >> migrate_fd_connect(s, error); >> + g_free(s->hostname); >> error_free(error); >> } > > IIUC, this means hostname is free'd once the initial connection is > established. Don't we have to wait until all the multifd connections > exist too ? > > IOW, should we be doing this somewhere in a cleanup path. Perhaps > migrate_fd_cancel() is the rigt place ? > Well, Maybe another alternate way is define series functions to save/destroy tls_hostname in 'tls.c' other than add hostname into MigrationState. such as: +static char *migration_tls_hostname = NULL; + +void migration_destroy_tls_hostname(void) +{ + if (migration_tls_hostname) { + g_free(migration_tls_hostname); + migration_tls_hostname = NULL; + } +} + +static void migration_save_tls_hostname(const char *hostname) +{ + migration_destroy_tls_hostname(); + migration_tls_hostname = g_strdup(hostname); +} + +char *migration_get_tls_hostname(void) +{ + return migration_tls_hostname; +} How do you think, is that better? >> diff --git a/migration/migration.c b/migration/migration.c >> index 58a5452..e20b778 100644 >> --- a/migration/migration.c >> +++ b/migration/migration.c >> @@ -1883,6 +1883,7 @@ void migrate_init(MigrationState *s) >> s->migration_thread_running = false; >> error_free(s->error); >> s->error = NULL; >> + s->hostname = NULL; >> >> migrate_set_state(&s->state, MIGRATION_STATUS_NONE, MIGRATION_STATUS_SETUP); >> >> diff --git a/migration/migration.h b/migration/migration.h >> index bdc7450..bc96322 100644 >> --- a/migration/migration.h >> +++ b/migration/migration.h >> @@ -259,6 +259,11 @@ struct MigrationState >> * (which is in 4M chunk). >> */ >> uint8_t clear_bitmap_shift; >> + >> + /* >> + * This save hostname when out-going migration starts >> + */ >> + char *hostname; >> }; >> >> void migrate_set_state(int *state, int old_state, int new_state); >> -- >> 1.8.3.1 >> > > Regards, > Daniel >
diff --git a/migration/channel.c b/migration/channel.c index 20e4c8e..0e4104a 100644 --- a/migration/channel.c +++ b/migration/channel.c @@ -66,6 +66,11 @@ void migration_channel_connect(MigrationState *s, trace_migration_set_outgoing_channel( ioc, object_get_typename(OBJECT(ioc)), hostname, error); + /* Save hostname into MigrationState for handshake */ + if (hostname) { + s->hostname = g_strdup(hostname); + } + if (!error) { if (s->parameters.tls_creds && *s->parameters.tls_creds && @@ -90,5 +95,6 @@ void migration_channel_connect(MigrationState *s, } } migrate_fd_connect(s, error); + g_free(s->hostname); error_free(error); } diff --git a/migration/migration.c b/migration/migration.c index 58a5452..e20b778 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1883,6 +1883,7 @@ void migrate_init(MigrationState *s) s->migration_thread_running = false; error_free(s->error); s->error = NULL; + s->hostname = NULL; migrate_set_state(&s->state, MIGRATION_STATUS_NONE, MIGRATION_STATUS_SETUP); diff --git a/migration/migration.h b/migration/migration.h index bdc7450..bc96322 100644 --- a/migration/migration.h +++ b/migration/migration.h @@ -259,6 +259,11 @@ struct MigrationState * (which is in 4M chunk). */ uint8_t clear_bitmap_shift; + + /* + * This save hostname when out-going migration starts + */ + char *hostname; }; void migrate_set_state(int *state, int old_state, int new_state);