Ignore:
Timestamp:
05/05/2008 15:44:38 (4 years ago)
Author:
chris
Message:

Add restore -f option to force restore to continue after an error.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • box/trunk/lib/backupclient/BackupClientRestore.cpp

    r2144 r2157  
    194194        bool PrintDots; 
    195195        bool RestoreDeleted; 
     196        bool ContinueAfterErrors; 
     197        bool ContinuedAfterError; 
    196198        std::string mRestoreResumeInfoFilename; 
    197199        RestoreResumeInfo mResumeInfo; 
     
    388390                BOX_LOG_SYS_ERROR("Failed to create directory '" << 
    389391                        rLocalDirectoryName << "'"); 
    390                 return Restore_UnknownError; 
     392 
     393                if (Params.ContinueAfterErrors) 
     394                { 
     395                        Params.ContinuedAfterError = true; 
     396                } 
     397                else 
     398                { 
     399                        return Restore_UnknownError; 
     400                } 
    391401        } 
    392402 
     
    401411                        Params.mRestoreResumeInfoFilename << "': " << 
    402412                        e.what()); 
    403                 return Restore_UnknownError; 
     413 
     414                if (Params.ContinueAfterErrors) 
     415                { 
     416                        Params.ContinuedAfterError = true; 
     417                } 
     418                else 
     419                { 
     420                        return Restore_UnknownError; 
     421                } 
    404422        } 
    405423        catch(...) 
     
    408426                        Params.mRestoreResumeInfoFilename << 
    409427                        "': unknown error"); 
    410                 return Restore_UnknownError; 
     428 
     429                if (Params.ContinueAfterErrors) 
     430                { 
     431                        Params.ContinuedAfterError = true; 
     432                } 
     433                else 
     434                { 
     435                        return Restore_UnknownError; 
     436                } 
    411437        } 
    412438 
     
    436462                BOX_ERROR("Failed to restore attributes for '" << 
    437463                        rLocalDirectoryName << "': " << e.what()); 
    438                 return Restore_UnknownError; 
     464 
     465                if (Params.ContinueAfterErrors) 
     466                { 
     467                        Params.ContinuedAfterError = true; 
     468                } 
     469                else 
     470                { 
     471                        return Restore_UnknownError; 
     472                } 
    439473        } 
    440474        catch(...) 
     
    442476                BOX_ERROR("Failed to restore attributes for '" << 
    443477                        rLocalDirectoryName << "': unknown error"); 
    444                 return Restore_UnknownError; 
     478 
     479                if (Params.ContinueAfterErrors) 
     480                { 
     481                        Params.ContinuedAfterError = true; 
     482                } 
     483                else 
     484                { 
     485                        return Restore_UnknownError; 
     486                } 
    445487        } 
    446488 
     
    474516                                                "file '" << localFilename <<  
    475517                                                "'"); 
    476                                         return Restore_UnknownError; 
     518 
     519                                        if (Params.ContinueAfterErrors) 
     520                                        { 
     521                                                Params.ContinuedAfterError = true; 
     522                                        } 
     523                                        else 
     524                                        { 
     525                                                return Restore_UnknownError; 
     526                                        } 
    477527                                } 
    478528                                 
     
    508558                                                localFilename << "': " << 
    509559                                                e.what()); 
    510                                         return Restore_UnknownError; 
     560 
     561                                        if (Params.ContinueAfterErrors) 
     562                                        { 
     563                                                Params.ContinuedAfterError = true; 
     564                                        } 
     565                                        else 
     566                                        { 
     567                                                return Restore_UnknownError; 
     568                                        } 
    511569                                } 
    512570                                catch(...) 
     
    515573                                                localFilename << 
    516574                                                "': unknown error"); 
    517                                         return Restore_UnknownError; 
     575 
     576                                        if (Params.ContinueAfterErrors) 
     577                                        { 
     578                                                Params.ContinuedAfterError = true; 
     579                                        } 
     580                                        else 
     581                                        { 
     582                                                return Restore_UnknownError; 
     583                                        } 
    518584                                } 
    519585                                 
     
    546612                                                localFilename << "': " << 
    547613                                                e.what()); 
    548                                         return Restore_UnknownError; 
     614 
     615                                        if (Params.ContinueAfterErrors) 
     616                                        { 
     617                                                Params.ContinuedAfterError = true; 
     618                                        } 
     619                                        else 
     620                                        { 
     621                                                return Restore_UnknownError; 
     622                                        } 
    549623                                } 
    550624                                catch(...) 
     
    554628                                                localFilename << "': " 
    555629                                                "unknown error"); 
    556                                         return Restore_UnknownError; 
     630 
     631                                        if (Params.ContinueAfterErrors) 
     632                                        { 
     633                                                Params.ContinuedAfterError = true; 
     634                                        } 
     635                                        else 
     636                                        { 
     637                                                return Restore_UnknownError; 
     638                                        } 
    557639                                } 
    558640 
     
    607689                                Params.mRestoreResumeInfoFilename << "': " << 
    608690                                e.what()); 
    609                         return Restore_UnknownError; 
     691                        if (Params.ContinueAfterErrors) 
     692                        { 
     693                                Params.ContinuedAfterError = true; 
     694                        } 
     695                        else 
     696                        { 
     697                                return Restore_UnknownError; 
     698                        } 
    610699                } 
    611700                catch(...) 
     
    614703                                Params.mRestoreResumeInfoFilename << 
    615704                                "': unknown error"); 
    616                         return Restore_UnknownError; 
     705                        if (Params.ContinueAfterErrors) 
     706                        { 
     707                                Params.ContinuedAfterError = true; 
     708                        } 
     709                        else 
     710                        { 
     711                                return Restore_UnknownError; 
     712                        } 
    617713                } 
    618714                 
     
    671767                BOX_ERROR("Failed to restore attributes for '" << 
    672768                        rLocalDirectoryName << "': " << e.what()); 
    673                 return Restore_UnknownError; 
     769                if (Params.ContinueAfterErrors) 
     770                { 
     771                        Params.ContinuedAfterError = true; 
     772                } 
     773                else 
     774                { 
     775                        return Restore_UnknownError; 
     776                } 
    674777        } 
    675778        catch(...) 
     
    677780                BOX_ERROR("Failed to restore attributes for '" << 
    678781                        rLocalDirectoryName << "': unknown error"); 
    679                 return Restore_UnknownError; 
     782                if (Params.ContinueAfterErrors) 
     783                { 
     784                        Params.ContinuedAfterError = true; 
     785                } 
     786                else 
     787                { 
     788                        return Restore_UnknownError; 
     789                } 
    680790        } 
    681791 
     
    688798// Function 
    689799//              Name:    BackupClientRestore(BackupProtocolClient &, int64_t, 
    690 //                       const char *, bool, bool) 
     800//                       const char *, bool, bool, bool, bool, bool) 
    691801//              Purpose: Restore a directory on the server to a local 
    692802//                       directory on the disc. The local directory must not 
     
    708818// 
    709819//                       Returns Restore_Complete on success. (Exceptions 
    710 //                       on error.) 
     820//                       on error, unless ContinueAfterError is true and 
     821//                       the error is recoverable, in which case it returns 
     822//                       Restore_CompleteWithErrors) 
    711823//              Created: 23/11/03 
    712824// 
     
    715827        int64_t DirectoryID, const char *LocalDirectoryName, 
    716828        bool PrintDots, bool RestoreDeleted, 
    717         bool UndeleteAfterRestoreDeleted, bool Resume) 
     829        bool UndeleteAfterRestoreDeleted, bool Resume, 
     830        bool ContinueAfterErrors) 
    718831{ 
    719832        // Parameter block 
     
    721834        params.PrintDots = PrintDots; 
    722835        params.RestoreDeleted = RestoreDeleted; 
     836        params.ContinueAfterErrors = ContinueAfterErrors; 
     837        params.ContinuedAfterError = false; 
    723838        params.mRestoreResumeInfoFilename = LocalDirectoryName; 
    724839        params.mRestoreResumeInfoFilename += ".boxbackupresume"; 
     
    783898        ::unlink(params.mRestoreResumeInfoFilename.c_str()); 
    784899 
    785         return Restore_Complete; 
     900        return params.ContinuedAfterError ? Restore_CompleteWithErrors 
     901                : Restore_Complete; 
    786902} 
    787903 
Note: See TracChangeset for help on using the changeset viewer.