1 /***********************************************************************************************************************************
2 Backup Protocol Handler
3 ***********************************************************************************************************************************/
4 #include "build.auto.h"
5 
6 #include "command/backup/file.h"
7 #include "command/backup/protocol.h"
8 #include "common/debug.h"
9 #include "common/io/io.h"
10 #include "common/log.h"
11 #include "common/memContext.h"
12 #include "common/type/json.h"
13 #include "config/config.h"
14 #include "storage/helper.h"
15 
16 /**********************************************************************************************************************************/
17 void
backupFileProtocol(PackRead * const param,ProtocolServer * const server)18 backupFileProtocol(PackRead *const param, ProtocolServer *const server)
19 {
20     FUNCTION_LOG_BEGIN(logLevelDebug);
21         FUNCTION_LOG_PARAM(PACK_READ, param);
22         FUNCTION_LOG_PARAM(PROTOCOL_SERVER, server);
23     FUNCTION_LOG_END();
24 
25     ASSERT(param != NULL);
26     ASSERT(server != NULL);
27 
28     MEM_CONTEXT_TEMP_BEGIN()
29     {
30         // Backup file
31         const String *const pgFile = pckReadStrP(param);
32         const bool pgFileIgnoreMissing = pckReadBoolP(param);
33         const uint64_t pgFileSize = pckReadU64P(param);
34         const bool pgFileCopyExactSize = pckReadBoolP(param);
35         const String *const pgFileChecksum = pckReadStrP(param);
36         const bool pgFileChecksumPage = pckReadBoolP(param);
37         const uint64_t pgFileChecksumPageLsnLimit = pckReadU64P(param);
38         const String *const repoFile = pckReadStrP(param);
39         const bool repoFileHasReference = pckReadBoolP(param);
40         const CompressType repoFileCompressType = (CompressType)pckReadU32P(param);
41         const int repoFileCompressLevel = pckReadI32P(param);
42         const String *const backupLabel = pckReadStrP(param);
43         const bool delta = pckReadBoolP(param);
44         const CipherType cipherType = (CipherType)pckReadU64P(param);
45         const String *const cipherPass = pckReadStrP(param);
46 
47         const BackupFileResult result = backupFile(
48             pgFile, pgFileIgnoreMissing, pgFileSize, pgFileCopyExactSize, pgFileChecksum, pgFileChecksumPage,
49             pgFileChecksumPageLsnLimit, repoFile, repoFileHasReference, repoFileCompressType, repoFileCompressLevel,
50             backupLabel, delta, cipherType, cipherPass);
51 
52         // Return result
53         PackWrite *const resultPack = protocolPackNew();
54         pckWriteU32P(resultPack, result.backupCopyResult);
55         pckWriteU64P(resultPack, result.copySize);
56         pckWriteU64P(resultPack, result.repoSize);
57         pckWriteStrP(resultPack, result.copyChecksum);
58         pckWriteStrP(resultPack, result.pageChecksumResult != NULL ? jsonFromKv(result.pageChecksumResult) : NULL);
59 
60         protocolServerDataPut(server, resultPack);
61         protocolServerDataEndPut(server);
62     }
63     MEM_CONTEXT_TEMP_END();
64 
65     FUNCTION_LOG_RETURN_VOID();
66 }
67