GCC Code Coverage Report


Directory: cvmfs/
File: cvmfs/receiver/catalog_merge_tool.h
Date: 2024-04-28 02:33:07
Exec Total Coverage
Lines: 10 10 100.0%
Branches: 5 10 50.0%

Line Branch Exec Source
1 /**
2 * This file is part of the CernVM File System.
3 */
4
5 #ifndef CVMFS_RECEIVER_CATALOG_MERGE_TOOL_H_
6 #define CVMFS_RECEIVER_CATALOG_MERGE_TOOL_H_
7
8 #include <string>
9
10 #include "catalog_diff_tool.h"
11 #include "file_chunk.h"
12 #include "params.h"
13 #include "statistics.h"
14 #include "util/pointer.h"
15
16 namespace catalog {
17 class WritableCatalogManager;
18 }
19
20 namespace download {
21 class DownloadManager;
22 }
23
24 namespace manifest {
25 class Manifest;
26 }
27
28 namespace shash {
29 struct Any;
30 }
31
32 namespace receiver {
33
34 template <typename RwCatalogMgr, typename RoCatalogMgr>
35 class CatalogMergeTool : public CatalogDiffTool<RoCatalogMgr> {
36 public:
37 CatalogMergeTool(RoCatalogMgr* old_catalog_mgr, RoCatalogMgr* new_catalog_mgr,
38 RwCatalogMgr* output_catalog_mgr,
39 const PathString& lease_path,
40 const std::string& temp_dir_prefix,
41 manifest::Manifest* manifest,
42 perf::Statistics* statistics)
43 : CatalogDiffTool<RoCatalogMgr>(old_catalog_mgr, new_catalog_mgr),
44 repo_path_(""),
45 lease_path_(lease_path),
46 temp_dir_prefix_(temp_dir_prefix),
47 download_manager_(NULL),
48 manifest_(manifest),
49 output_catalog_mgr_(output_catalog_mgr),
50 needs_setup_(false),
51 statistics_(statistics),
52 counters_(NULL) {}
53
54 CatalogMergeTool(RoCatalogMgr* old_catalog_mgr, RoCatalogMgr* new_catalog_mgr,
55 const std::string& repo_path,
56 const PathString& lease_path,
57 const std::string& temp_dir_prefix,
58 download::DownloadManager* download_manager,
59 manifest::Manifest* manifest,
60 perf::Statistics* statistics)
61 : CatalogDiffTool<RoCatalogMgr>(old_catalog_mgr, new_catalog_mgr),
62 repo_path_(repo_path),
63 lease_path_(lease_path),
64 temp_dir_prefix_(temp_dir_prefix),
65 download_manager_(download_manager),
66 manifest_(manifest),
67 needs_setup_(true),
68 statistics_(statistics),
69 counters_(NULL) {}
70
71 2 CatalogMergeTool(const std::string& repo_path,
72 const shash::Any& old_root_hash,
73 const shash::Any& new_root_hash,
74 const PathString& lease_path,
75 const std::string& temp_dir_prefix,
76 download::DownloadManager* download_manager,
77 manifest::Manifest* manifest,
78 perf::Statistics* statistics)
79 : CatalogDiffTool<RoCatalogMgr>(repo_path, old_root_hash, new_root_hash,
80 temp_dir_prefix, download_manager),
81 2 repo_path_(repo_path),
82
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 lease_path_(lease_path),
83
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 temp_dir_prefix_(temp_dir_prefix),
84 2 download_manager_(download_manager),
85 2 manifest_(manifest),
86 2 needs_setup_(true),
87 2 statistics_(statistics),
88
3/6
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
4 counters_(NULL) {}
89
90 4 virtual ~CatalogMergeTool() {}
91
92 bool Run(const Params& params, std::string* new_manifest_path,
93 uint64_t *final_rev);
94
95 protected:
96 virtual bool IsIgnoredPath(const PathString& path);
97 virtual bool IsReportablePath(const PathString& path);
98
99 virtual void ReportAddition(const PathString& path,
100 const catalog::DirectoryEntry& entry,
101 const XattrList& xattrs,
102 const FileChunkList& chunks);
103 virtual void ReportRemoval(const PathString& path,
104 const catalog::DirectoryEntry& entry);
105 virtual bool ReportModification(const PathString& path,
106 const catalog::DirectoryEntry& old_entry,
107 const catalog::DirectoryEntry& new_entry,
108 const XattrList& xattrs,
109 const FileChunkList& chunks);
110
111 private:
112 bool CreateNewManifest(std::string* new_manifest_path);
113
114 std::string repo_path_;
115
116 PathString lease_path_;
117 std::string temp_dir_prefix_;
118
119 download::DownloadManager* download_manager_;
120
121 manifest::Manifest* manifest_;
122
123 UniquePtr<RwCatalogMgr> output_catalog_mgr_;
124
125 const bool needs_setup_;
126
127 perf::Statistics *statistics_;
128 UniquePtr<perf::FsCounters> counters_;
129 };
130
131 } // namespace receiver
132
133 #include "catalog_merge_tool_impl.h"
134
135 #endif // CVMFS_RECEIVER_CATALOG_MERGE_TOOL_H_
136