[Qemu-devel] [PATCH qemu-ga] qemu-ga: Don't display errors to the user on thaw command

Sameeh Jubran posted 1 patch 7 years, 1 month ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20170321141435.23701-1-sameeh@daynix.com
Test checkpatch passed
Test docker passed
Test s390x passed
qga/vss-win32/requester.cpp | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
[Qemu-devel] [PATCH qemu-ga] qemu-ga: Don't display errors to the user on thaw command
Posted by Sameeh Jubran 7 years, 1 month ago
Errors that are related to ur inner implementation for the thaw command
shouldn't be displayed to the user.

Signed-off-by: Sameeh Jubran <sameeh@daynix.com>
---
 qga/vss-win32/requester.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/qga/vss-win32/requester.cpp b/qga/vss-win32/requester.cpp
index 0cd2f0e..272e71b 100644
--- a/qga/vss-win32/requester.cpp
+++ b/qga/vss-win32/requester.cpp
@@ -463,7 +463,7 @@ void requester_thaw(int *num_vols, ErrorSet *errset)
             hr = WaitForAsync(pAsync);
         }
         if (FAILED(hr)) {
-            err_set(errset, hr, "failed to complete backup");
+            fprintf(stderr, "failed to complete backup");
         }
         break;
 
@@ -480,18 +480,18 @@ void requester_thaw(int *num_vols, ErrorSet *errset)
 
     case VSS_E_UNEXPECTED_PROVIDER_ERROR:
         if (WaitForSingleObject(vss_ctx.hEventTimeout, 0) != WAIT_OBJECT_0) {
-            err_set(errset, hr, "unexpected error in VSS provider");
+            fprintf(stderr, "unexpected error in VSS provider");
             break;
         }
         /* fall through if hEventTimeout is signaled */
 
     case (HRESULT)VSS_E_HOLD_WRITES_TIMEOUT:
-        err_set(errset, hr, "couldn't hold writes: "
+        fprintf(stderr, "couldn't hold writes: "
                 "fsfreeze is limited up to 10 seconds");
         break;
 
     default:
-        err_set(errset, hr, "failed to do snapshot set");
+        fprintf(stderr, "failed to do snapshot set");
     }
 
     if (err_is_set(errset)) {
-- 
2.9.3


Re: [Qemu-devel] [PATCH qemu-ga] qemu-ga: Don't display errors to the user on thaw command
Posted by Sameeh Jubran 7 years ago
Ping.

On Tue, Mar 21, 2017 at 5:14 PM, Sameeh Jubran <sameeh@daynix.com> wrote:

> Errors that are related to ur inner implementation for the thaw command
> shouldn't be displayed to the user.
>
> Signed-off-by: Sameeh Jubran <sameeh@daynix.com>
> ---
>  qga/vss-win32/requester.cpp | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/qga/vss-win32/requester.cpp b/qga/vss-win32/requester.cpp
> index 0cd2f0e..272e71b 100644
> --- a/qga/vss-win32/requester.cpp
> +++ b/qga/vss-win32/requester.cpp
> @@ -463,7 +463,7 @@ void requester_thaw(int *num_vols, ErrorSet *errset)
>              hr = WaitForAsync(pAsync);
>          }
>          if (FAILED(hr)) {
> -            err_set(errset, hr, "failed to complete backup");
> +            fprintf(stderr, "failed to complete backup");
>          }
>          break;
>
> @@ -480,18 +480,18 @@ void requester_thaw(int *num_vols, ErrorSet *errset)
>
>      case VSS_E_UNEXPECTED_PROVIDER_ERROR:
>          if (WaitForSingleObject(vss_ctx.hEventTimeout, 0) !=
> WAIT_OBJECT_0) {
> -            err_set(errset, hr, "unexpected error in VSS provider");
> +            fprintf(stderr, "unexpected error in VSS provider");
>              break;
>          }
>          /* fall through if hEventTimeout is signaled */
>
>      case (HRESULT)VSS_E_HOLD_WRITES_TIMEOUT:
> -        err_set(errset, hr, "couldn't hold writes: "
> +        fprintf(stderr, "couldn't hold writes: "
>                  "fsfreeze is limited up to 10 seconds");
>          break;
>
>      default:
> -        err_set(errset, hr, "failed to do snapshot set");
> +        fprintf(stderr, "failed to do snapshot set");
>      }
>
>      if (err_is_set(errset)) {
> --
> 2.9.3
>
>


-- 
Respectfully,
*Sameeh Jubran*
*Linkedin <https://il.linkedin.com/pub/sameeh-jubran/87/747/a8a>*
*Software Engineer @ Daynix <http://www.daynix.com>.*
Re: [Qemu-devel] [PATCH qemu-ga] qemu-ga: Don't display errors to the user on thaw command
Posted by Michael Roth 7 years ago
Quoting Sameeh Jubran (2017-03-21 09:14:35)
> Errors that are related to ur inner implementation for the thaw command
> shouldn't be displayed to the user.
> 
> Signed-off-by: Sameeh Jubran <sameeh@daynix.com>
> ---
>  qga/vss-win32/requester.cpp | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/qga/vss-win32/requester.cpp b/qga/vss-win32/requester.cpp
> index 0cd2f0e..272e71b 100644
> --- a/qga/vss-win32/requester.cpp
> +++ b/qga/vss-win32/requester.cpp
> @@ -463,7 +463,7 @@ void requester_thaw(int *num_vols, ErrorSet *errset)
>              hr = WaitForAsync(pAsync);
>          }
>          if (FAILED(hr)) {
> -            err_set(errset, hr, "failed to complete backup");

We cannot do this. If the freeze operation didn't successfully maintain
the frozen state for entire duration we *must* report an error to the
user, otherwise users have no way to know that their snapshot might be
completely corrupted. Well, I suppose they can look at
guest-fsfreeze-thaw's return value and check that it matches the number
of volumes that were originally frozen, but that aspect is intended as a
sanity check to identify situations outside of qemu-ga's control, like
another user/application unfreezing the filesystems before qemu-ga. This
situation *is* within qemu-ga's control, and should be reported as an
error. Same for the other failures below.

> +            fprintf(stderr, "failed to complete backup");
>          }
>          break;
> 
> @@ -480,18 +480,18 @@ void requester_thaw(int *num_vols, ErrorSet *errset)
> 
>      case VSS_E_UNEXPECTED_PROVIDER_ERROR:
>          if (WaitForSingleObject(vss_ctx.hEventTimeout, 0) != WAIT_OBJECT_0) {
> -            err_set(errset, hr, "unexpected error in VSS provider");
> +            fprintf(stderr, "unexpected error in VSS provider");
>              break;
>          }
>          /* fall through if hEventTimeout is signaled */
> 
>      case (HRESULT)VSS_E_HOLD_WRITES_TIMEOUT:
> -        err_set(errset, hr, "couldn't hold writes: "
> +        fprintf(stderr, "couldn't hold writes: "
>                  "fsfreeze is limited up to 10 seconds");
>          break;
> 
>      default:
> -        err_set(errset, hr, "failed to do snapshot set");
> +        fprintf(stderr, "failed to do snapshot set");
>      }
> 
>      if (err_is_set(errset)) {
> -- 
> 2.9.3
> 


Re: [Qemu-devel] [PATCH qemu-ga] qemu-ga: Don't display errors to the user on thaw command
Posted by Sameeh Jubran 7 years ago
On Wed, Apr 5, 2017 at 1:55 AM, Michael Roth <mdroth@linux.vnet.ibm.com>
wrote:

> Quoting Sameeh Jubran (2017-03-21 09:14:35)
> > Errors that are related to ur inner implementation for the thaw command
> > shouldn't be displayed to the user.
> >
> > Signed-off-by: Sameeh Jubran <sameeh@daynix.com>
> > ---
> >  qga/vss-win32/requester.cpp | 8 ++++----
> >  1 file changed, 4 insertions(+), 4 deletions(-)
> >
> > diff --git a/qga/vss-win32/requester.cpp b/qga/vss-win32/requester.cpp
> > index 0cd2f0e..272e71b 100644
> > --- a/qga/vss-win32/requester.cpp
> > +++ b/qga/vss-win32/requester.cpp
> > @@ -463,7 +463,7 @@ void requester_thaw(int *num_vols, ErrorSet *errset)
> >              hr = WaitForAsync(pAsync);
> >          }
> >          if (FAILED(hr)) {
> > -            err_set(errset, hr, "failed to complete backup");
>
> We cannot do this. If the freeze operation didn't successfully maintain
> the frozen state for entire duration we *must* report an error to the
> user, otherwise users have no way to know that their snapshot might be
> completely corrupted. Well, I suppose they can look at
> guest-fsfreeze-thaw's return value and check that it matches the number
> of volumes that were originally frozen, but that aspect is intended as a
> sanity check to identify situations outside of qemu-ga's control, like
> another user/application unfreezing the filesystems before qemu-ga. This
> situation *is* within qemu-ga's control, and should be reported as an
> error. Same for the other failures below.

This patch was introduced to hide the error "{"error": {"class":
"GenericError", "desc": "couldn't hold writes: fsfreeze is limited up to 10
seconds: "}" which shows up whenever we
execute thaw after 10 seconds have passed from freeze event and in order to
align the behaviour Windows with Linux. However I agree with you about
informing the user about possible
corruption during the backup operation.

>


> > +            fprintf(stderr, "failed to complete backup");
> >          }
> >          break;
> >
> > @@ -480,18 +480,18 @@ void requester_thaw(int *num_vols, ErrorSet
> *errset)
> >
> >      case VSS_E_UNEXPECTED_PROVIDER_ERROR:
> >          if (WaitForSingleObject(vss_ctx.hEventTimeout, 0) !=
> WAIT_OBJECT_0) {
> > -            err_set(errset, hr, "unexpected error in VSS provider");
> > +            fprintf(stderr, "unexpected error in VSS provider");
> >              break;
> >          }
> >          /* fall through if hEventTimeout is signaled */
> >
> >      case (HRESULT)VSS_E_HOLD_WRITES_TIMEOUT:
> > -        err_set(errset, hr, "couldn't hold writes: "
> > +        fprintf(stderr, "couldn't hold writes: "
> >                  "fsfreeze is limited up to 10 seconds");
> >          break;
> >
> >      default:
> > -        err_set(errset, hr, "failed to do snapshot set");
> > +        fprintf(stderr, "failed to do snapshot set");
> >      }
> >
> >      if (err_is_set(errset)) {
> > --
> > 2.9.3
> >
>
>


-- 
Respectfully,
*Sameeh Jubran*
*Linkedin <https://il.linkedin.com/pub/sameeh-jubran/87/747/a8a>*
*Software Engineer @ Daynix <http://www.daynix.com>.*