diff mbox

[v4,10/11] qemu-img: Set the ID of the block job in img_commit()

Message ID e369d41f15ff1330ea42d5d143c5d76e5fc6e192.1467727577.git.berto@igalia.com (mailing list archive)
State New, archived
Headers show

Commit Message

Alberto Garcia July 5, 2016, 2:29 p.m. UTC
img_commit() creates a block job without an ID. This is no longer
allowed now that we require it to be unique and well-formed. We were
solving this by having a fallback in block_job_create(), but now that
we extended the API of commit_active_start() we can finally set an
explicit ID and revert that change.

Signed-off-by: Alberto Garcia <berto@igalia.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
---
 blockjob.c | 6 ------
 qemu-img.c | 2 +-
 2 files changed, 1 insertion(+), 7 deletions(-)

Comments

Max Reitz July 5, 2016, 3:56 p.m. UTC | #1
On 05.07.2016 16:29, Alberto Garcia wrote:
> img_commit() creates a block job without an ID. This is no longer
> allowed now that we require it to be unique and well-formed. We were
> solving this by having a fallback in block_job_create(), but now that
> we extended the API of commit_active_start() we can finally set an
> explicit ID and revert that change.
> 
> Signed-off-by: Alberto Garcia <berto@igalia.com>
> Reviewed-by: Max Reitz <mreitz@redhat.com>
> Reviewed-by: Kevin Wolf <kwolf@redhat.com>
> ---
>  blockjob.c | 6 ------
>  qemu-img.c | 2 +-
>  2 files changed, 1 insertion(+), 7 deletions(-)
> 
> diff --git a/blockjob.c b/blockjob.c
> index 511c0db..3b9cec7 100644
> --- a/blockjob.c
> +++ b/blockjob.c
> @@ -132,12 +132,6 @@ void *block_job_create(const char *job_id, const BlockJobDriver *driver,
>  
>      if (job_id == NULL) {
>          job_id = bdrv_get_device_name(bs);
> -        /* Assign a default ID if the BDS does not have a device
> -         * name. We'll get rid of this soon when we finish extending
> -         * the API of all commands that create block jobs. */
> -        if (job_id[0] == '\0') {
> -            job_id = "default_job";
> -        }

I stand by my R-b, but as a remark to what you said for v3: I can't
imagine how this function can be called in a way that job_id will be
empty here (after this patch), and this is why I proposed an
assert(job_id[0] != '\0'). It'd probably be a mistake on our part if
such a case could happen (which is why an assertion would be fine).

However, gracefully returning an error is of course fine, too. The issue
I take with this is that the error we'd be returning is "Invalid job ID
''", which isn't very helpful (it should be "No job ID specified, and no
default available").

In any case, since I can't imagine the job_id being empty here and since
we'll handle that case gracefully in case it should occur, I won't
object (and my R-b stands).

Max

>      }
>  
>      if (!id_wellformed(job_id)) {
> diff --git a/qemu-img.c b/qemu-img.c
> index a78f598..521724c 100644
> --- a/qemu-img.c
> +++ b/qemu-img.c
> @@ -921,7 +921,7 @@ static int img_commit(int argc, char **argv)
>          .bs   = bs,
>      };
>  
> -    commit_active_start(NULL, bs, base_bs, 0, BLOCKDEV_ON_ERROR_REPORT,
> +    commit_active_start("commit", bs, base_bs, 0, BLOCKDEV_ON_ERROR_REPORT,
>                          common_block_job_cb, &cbi, &local_err);
>      if (local_err) {
>          goto done;
>
Alberto Garcia July 6, 2016, 12:07 p.m. UTC | #2
On Tue 05 Jul 2016 05:56:09 PM CEST, Max Reitz <mreitz@redhat.com> wrote:
>> @@ -132,12 +132,6 @@ void *block_job_create(const char *job_id, const BlockJobDriver *driver,
>>  
>>      if (job_id == NULL) {
>>          job_id = bdrv_get_device_name(bs);
>> -        /* Assign a default ID if the BDS does not have a device
>> -         * name. We'll get rid of this soon when we finish extending
>> -         * the API of all commands that create block jobs. */
>> -        if (job_id[0] == '\0') {
>> -            job_id = "default_job";
>> -        }
>
> I stand by my R-b, but as a remark to what you said for v3: I can't
> imagine how this function can be called in a way that job_id will be
> empty here (after this patch), and this is why I proposed an
> assert(job_id[0] != '\0'). It'd probably be a mistake on our part if
> such a case could happen (which is why an assertion would be fine).

At the moment you cannot do it, but if we allow creating block jobs on
other nodes (e.g. intermediate block streaming) the user must provide a
job ID, else there'll be no default.

> However, gracefully returning an error is of course fine, too. The
> issue I take with this is that the error we'd be returning is "Invalid
> job ID ''", which isn't very helpful (it should be "No job ID
> specified, and no default available").

We can add a special check for the empty string and use that error
message that you propose.

Berto
diff mbox

Patch

diff --git a/blockjob.c b/blockjob.c
index 511c0db..3b9cec7 100644
--- a/blockjob.c
+++ b/blockjob.c
@@ -132,12 +132,6 @@  void *block_job_create(const char *job_id, const BlockJobDriver *driver,
 
     if (job_id == NULL) {
         job_id = bdrv_get_device_name(bs);
-        /* Assign a default ID if the BDS does not have a device
-         * name. We'll get rid of this soon when we finish extending
-         * the API of all commands that create block jobs. */
-        if (job_id[0] == '\0') {
-            job_id = "default_job";
-        }
     }
 
     if (!id_wellformed(job_id)) {
diff --git a/qemu-img.c b/qemu-img.c
index a78f598..521724c 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -921,7 +921,7 @@  static int img_commit(int argc, char **argv)
         .bs   = bs,
     };
 
-    commit_active_start(NULL, bs, base_bs, 0, BLOCKDEV_ON_ERROR_REPORT,
+    commit_active_start("commit", bs, base_bs, 0, BLOCKDEV_ON_ERROR_REPORT,
                         common_block_job_cb, &cbi, &local_err);
     if (local_err) {
         goto done;