[{"id":1770300,"web_url":"http://patchwork.ozlabs.org/comment/1770300/","msgid":"<20170918163400.GL2581@work-vm>","list_archive_url":null,"date":"2017-09-18T16:34:01","subject":"Re: [Qemu-devel] [PATCH v8 05/20] migration: Improve migration\n\tthread error handling","submitter":{"id":48102,"url":"http://patchwork.ozlabs.org/api/people/48102/","name":"Dr. David Alan Gilbert","email":"dgilbert@redhat.com"},"content":"* Juan Quintela (quintela@redhat.com) wrote:\n> We now report errors also when we finish migration, not only on info\n> migrate.  We plan to use this error from several places, and we want\n> the first error to happen to win, so we add an mutex to order it.\n> \n> Signed-off-by: Juan Quintela <quintela@redhat.com>\n> ---\n>  migration/migration.c | 19 ++++++++++++++++---\n>  migration/migration.h |  7 ++++++-\n>  migration/ram.c       |  2 +-\n>  migration/tls.c       |  1 -\n>  4 files changed, 23 insertions(+), 6 deletions(-)\n> \n> diff --git a/migration/migration.c b/migration/migration.c\n> index bac4a99277..adc07e442a 100644\n> --- a/migration/migration.c\n> +++ b/migration/migration.c\n> @@ -1013,19 +1013,30 @@ static void migrate_fd_cleanup(void *opaque)\n>                            MIGRATION_STATUS_CANCELLED);\n>      }\n>  \n> +    if (s->error) {\n> +        /* It is used on info migrate.  We can't free it */\n> +        error_report_err(error_copy(s->error));\n> +    }\n>      notifier_list_notify(&migration_state_notifiers, s);\n>      block_cleanup_parameters(s);\n>  }\n>  \n> +void migrate_set_error(MigrationState *s, const Error *error)\n> +{\n> +    qemu_mutex_lock(&s->error_mutex);\n> +    if (!s->error) {\n> +        s->error = error_copy(error);\n> +    }\n> +    qemu_mutex_unlock(&s->error_mutex);\n> +}\n> +\n>  void migrate_fd_error(MigrationState *s, const Error *error)\n>  {\n>      trace_migrate_fd_error(error_get_pretty(error));\n>      assert(s->to_dst_file == NULL);\n>      migrate_set_state(&s->state, MIGRATION_STATUS_SETUP,\n>                        MIGRATION_STATUS_FAILED);\n> -    if (!s->error) {\n> -        s->error = error_copy(error);\n> -    }\n> +    migrate_set_error(s, error);\n>      notifier_list_notify(&migration_state_notifiers, s);\n>      block_cleanup_parameters(s);\n>  }\n> @@ -2244,6 +2255,7 @@ static void migration_instance_finalize(Object *obj)\n>      MigrationState *ms = MIGRATION_OBJ(obj);\n>      MigrationParameters *params = &ms->parameters;\n>  \n> +    qemu_mutex_destroy(&ms->error_mutex);\n>      g_free(params->tls_hostname);\n>      g_free(params->tls_creds);\n>  }\n> @@ -2256,6 +2268,7 @@ static void migration_instance_init(Object *obj)\n>      ms->state = MIGRATION_STATUS_NONE;\n>      ms->xbzrle_cache_size = DEFAULT_MIGRATE_CACHE_SIZE;\n>      ms->mbps = -1;\n> +    qemu_mutex_init(&ms->error_mutex);\n>  \n>      params->tls_hostname = g_strdup(\"\");\n>      params->tls_creds = g_strdup(\"\");\n> diff --git a/migration/migration.h b/migration/migration.h\n> index 1881e4a754..9a81b8a70a 100644\n> --- a/migration/migration.h\n> +++ b/migration/migration.h\n> @@ -129,8 +129,12 @@ struct MigrationState\n>      int64_t colo_checkpoint_time;\n>      QEMUTimer *colo_delay_timer;\n>  \n> -    /* The last error that occurred */\n> +    /* The first error that has occurred.\n> +       We used the mutex to be able to return the 1st error message */\n>      Error *error;\n> +    /* mutex to protect errp */\n> +    QemuMutex error_mutex;\n> +\n>      /* Do we have to clean up -b/-i from old migrate parameters */\n>      /* This feature is deprecated and will be removed */\n>      bool must_remove_block_options;\n> @@ -159,6 +163,7 @@ bool  migration_has_all_channels(void);\n>  \n>  uint64_t migrate_max_downtime(void);\n>  \n> +void migrate_set_error(MigrationState *s, const Error *error);\n>  void migrate_fd_error(MigrationState *s, const Error *error);\n>  \n>  void migrate_fd_connect(MigrationState *s);\n> diff --git a/migration/ram.c b/migration/ram.c\n> index e18b3e2d4f..e0179fc838 100644\n> --- a/migration/ram.c\n> +++ b/migration/ram.c\n> @@ -1789,7 +1789,7 @@ int ram_discard_range(const char *rbname, uint64_t start, size_t length)\n>      RAMBlock *rb = qemu_ram_block_by_name(rbname);\n>  \n>      if (!rb) {\n> -        error_report(\"ram_discard_range: Failed to find block '%s'\", rbname);\n> +        error_report(\"ram_discard_rang0e: Failed to find block '%s'\", rbname);\n\nExcept for that typo;\n\n\nReviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>\n\n>          goto err;\n>      }\n>  \n> diff --git a/migration/tls.c b/migration/tls.c\n> index 596e8790bd..026a008667 100644\n> --- a/migration/tls.c\n> +++ b/migration/tls.c\n> @@ -119,7 +119,6 @@ static void migration_tls_outgoing_handshake(QIOTask *task,\n>      if (qio_task_propagate_error(task, &err)) {\n>          trace_migration_tls_outgoing_handshake_error(error_get_pretty(err));\n>          migrate_fd_error(s, err);\n> -        error_free(err);\n>      } else {\n>          trace_migration_tls_outgoing_handshake_complete();\n>          migration_channel_connect(s, ioc, NULL);\n> -- \n> 2.13.5\n> \n--\nDr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","ext-mx07.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com","ext-mx07.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=dgilbert@redhat.com"],"Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xws6y0f94z9s78\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 19 Sep 2017 02:35:05 +1000 (AEST)","from localhost ([::1]:37765 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dtz0h-0002Tc-Ct\n\tfor incoming@patchwork.ozlabs.org; Mon, 18 Sep 2017 12:35:03 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:51295)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <dgilbert@redhat.com>) id 1dtyzs-0002Qo-Iu\n\tfor qemu-devel@nongnu.org; Mon, 18 Sep 2017 12:34:13 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <dgilbert@redhat.com>) id 1dtyzo-0000lP-Ju\n\tfor qemu-devel@nongnu.org; Mon, 18 Sep 2017 12:34:12 -0400","from mx1.redhat.com ([209.132.183.28]:34506)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <dgilbert@redhat.com>) id 1dtyzo-0000kq-AU\n\tfor qemu-devel@nongnu.org; Mon, 18 Sep 2017 12:34:08 -0400","from smtp.corp.redhat.com\n\t(int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 59877C07DEAB\n\tfor <qemu-devel@nongnu.org>; Mon, 18 Sep 2017 16:34:07 +0000 (UTC)","from work-vm (ovpn-117-229.ams2.redhat.com [10.36.117.229])\n\tby smtp.corp.redhat.com (Postfix) with ESMTPS id 72CDF1880D;\n\tMon, 18 Sep 2017 16:34:03 +0000 (UTC)"],"DMARC-Filter":"OpenDMARC Filter v1.3.2 mx1.redhat.com 59877C07DEAB","Date":"Mon, 18 Sep 2017 17:34:01 +0100","From":"\"Dr. David Alan Gilbert\" <dgilbert@redhat.com>","To":"Juan Quintela <quintela@redhat.com>","Message-ID":"<20170918163400.GL2581@work-vm>","References":"<20170913105953.13760-1-quintela@redhat.com>\n\t<20170913105953.13760-6-quintela@redhat.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20170913105953.13760-6-quintela@redhat.com>","User-Agent":"Mutt/1.8.3 (2017-05-23)","X-Scanned-By":"MIMEDefang 2.79 on 10.5.11.12","X-Greylist":"Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.31]);\n\tMon, 18 Sep 2017 16:34:07 +0000 (UTC)","X-detected-operating-system":"by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]","X-Received-From":"209.132.183.28","Subject":"Re: [Qemu-devel] [PATCH v8 05/20] migration: Improve migration\n\tthread error handling","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"lvivier@redhat.com, qemu-devel@nongnu.org, peterx@redhat.com","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}}]