[gparted] Also stop OperationDetail execution timer when setting status to N/A (#790842)



commit 3c1fdd14f4d902ad5abcacd860a41bc179fadec6
Author: Mike Fleetwood <mike fleetwood googlemail com>
Date:   Fri Nov 24 22:38:50 2017 +0000

    Also stop OperationDetail execution timer when setting status to N/A (#790842)
    
    PATCH SET SUMMARY:
    
    Libparted exception messages are reported into the operation details at
    the end of each separate operation.  For operations which involve
    multiple steps of partition manipulation there is no way to identify
    which exceptions occurred with which steps.
    
    Example resize/move operation in which multiple libparted exceptions
    were raised:
    
      Move /dev/sdb to the right and shrink it from 1.15 GiB to ...(ERROR)
      * calibrate /dev/sdb3                                        (SUCCESS)
      * check file system on /dev/sdb3 for errors and (if possib...(SUCCESS)
        * e2fsck -f -y -v -C 0 '/dev/sdb3'                         (SUCCESS)
      * shrink file system                                         (SUCCESS)
        * resize2fs -p 'dev/sdb3' 1048576K                         (SUCCESS)
      * shrink partition from 1.14 GiB to 1.00 GiB                 (SUCCESS)
      * check file system on /dev/sdb3 for errors and (if possib...(SUCCESS)
        * e2fsck -f -y -v -C 0 '/dev/sdb3'                         (SUCCESS)
      * grow partition from 1.00 GiB to 1.12 GiB                   (SUCCESS)
      * move file system to the right                              (SUCCESS)
        * e2image -ra -p -O 134217728 '/dev/sdb3'                  (SUCCESS)
      * shrink partition from 1.12 GiB to 1.00 GiB                 (ERROR)
      * libparted messages                                         (INFO)
        * DEBUG: GParted generated synthetic libparted exception...
        * Error informing the kernel about modifications to part...
        * Error informing the kernel about modifications to part...
        * DEBUG: GParted generated synthetic libparted exception...
        * DEBUG: GParted generated synthetic libparted exception...
    
    But there is no way to know which of the libparted steps: 1 calibrate or
    3 partition resize steps encountered which exceptions.
    
    Fix this by reporting the libparted messages into the operation details
    at the point at which they occur.  Then the above example would become:
    
      Move /dev/sdb to the right and shrink it from 1.15 GiB to ...(ERROR)
      * calibrate /dev/sdb3                                        (SUCCESS)
      * check file system on /dev/sdb3 for errors and (if possib...(SUCCESS)
        * e2fsck -f -y -v -C 0 '/dev/sdb3'                         (SUCCESS)
      * shrink file system                                         (SUCCESS)
        * resize2fs -p 'dev/sdb3' 1048576K                         (SUCCESS)
      * shrink partition from 1.14 GiB to 1.00 GiB                 (SUCCESS)
        * libparted messages                                       (INFO)
          * DEBUG: GParted generated synthetic libparted excepti...
      * check file system on /dev/sdb3 for errors and (if possib...(SUCCESS)
        * e2fsck -f -y -v -C 0 '/dev/sdb3'                         (SUCCESS)
      * grow partition from 1.00 GiB to 1.12 GiB                   (SUCCESS)
        * libparted messages                                       (INFO)
          * Error informing the kernel about modifications to pa...
          * Error informing the kernel about modifications to pa...
          * DEBUG: GParted generated synthetic libparted excepti...
      * move file system to the right                              (SUCCESS)
        * e2image -ra -p -O 134217728 '/dev/sdb3'                  (SUCCESS)
      * shrink partition from 1.12 GiB to 1.00 GiB                 (ERROR)
        * libparted messages                                       (ERROR)
          * DEBUG: GParted generated synthetic libparted excepti...
    
    THIS PATCH:
    
    Small change so that setting the status of an OperationDetail to N/A,
    warning, also stops the execution timer if it was running.  Matching
    what happens when the status is set to either success or error.
    
    This is to avoid having to set status twice, first time just to stop the
    timer, and second time to set it to the desired status when reporting a
    warning.
    
    Bug 790842 - Report libparted messages into operation details at the
                 point at which they occur

 src/FileSystem.cc      |    1 -
 src/OperationDetail.cc |    1 +
 2 files changed, 1 insertions(+), 1 deletions(-)
---
diff --git a/src/FileSystem.cc b/src/FileSystem.cc
index 79a52ee..c89ac02 100644
--- a/src/FileSystem.cc
+++ b/src/FileSystem.cc
@@ -245,7 +245,6 @@ void FileSystem::rm_temp_dir( const Glib::ustring dir_name, OperationDetail & op
                //Don't mark operation as errored just because rmdir
                //  failed.  Set to Warning (N/A) instead.
                int e = errno ;
-               operationdetail .get_last_child() .set_status( STATUS_SUCCES ) ;  //Stop timer
                operationdetail .get_last_child() .set_status( STATUS_N_A ) ;
                operationdetail .get_last_child() .add_child( OperationDetail(
                                String::ucompose( "rmdir(%1): ", dir_name ) + Glib::strerror( e ), 
STATUS_NONE ) ) ;
diff --git a/src/OperationDetail.cc b/src/OperationDetail.cc
index aa8912d..a8fe3a1 100644
--- a/src/OperationDetail.cc
+++ b/src/OperationDetail.cc
@@ -90,6 +90,7 @@ void OperationDetail::set_status( OperationDetailStatus status )
                                time_start = std::time( NULL ) ;
                                break ;
                        case STATUS_ERROR:
+                       case STATUS_N_A:
                        case STATUS_SUCCES:
                                if( time_start != -1 )
                                        time_elapsed = std::time( NULL ) - time_start ;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]