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