CernVM-FS  2.13.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
catalog_merge_tool.h
Go to the documentation of this file.
1 
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,
42  : CatalogDiffTool<RoCatalogMgr>(old_catalog_mgr, new_catalog_mgr)
43  , repo_path_("")
44  , cache_dir_("")
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, const PathString &lease_path,
56  const std::string &temp_dir_prefix,
57  download::DownloadManager *download_manager,
59  : CatalogDiffTool<RoCatalogMgr>(old_catalog_mgr, new_catalog_mgr)
60  , repo_path_(repo_path)
61  , cache_dir_("")
62  , lease_path_(lease_path)
63  , temp_dir_prefix_(temp_dir_prefix)
64  , download_manager_(download_manager)
65  , manifest_(manifest)
66  , needs_setup_(true)
67  , statistics_(statistics)
68  , counters_(NULL) { }
69 
70  CatalogMergeTool(const std::string &repo_path,
71  const shash::Any &old_root_hash,
72  const shash::Any &new_root_hash,
73  const PathString &lease_path,
74  const std::string &temp_dir_prefix,
75  download::DownloadManager *download_manager,
77  perf::Statistics *statistics,
78  const std::string &cache_dir)
79  : CatalogDiffTool<RoCatalogMgr>(repo_path, old_root_hash, new_root_hash,
80  temp_dir_prefix, download_manager,
81  cache_dir)
82  , repo_path_(repo_path)
83  , cache_dir_(cache_dir)
84  , lease_path_(lease_path)
85  , temp_dir_prefix_(temp_dir_prefix)
86  , download_manager_(download_manager)
87  , manifest_(manifest)
88  , needs_setup_(true)
89  , statistics_(statistics)
90  , counters_(NULL) { }
91 
92  virtual ~CatalogMergeTool() { }
93 
94  bool Run(const Params &params, std::string *new_manifest_path,
95  shash::Any *new_manifest_hash, uint64_t *final_rev);
96 
97  protected:
98  virtual bool IsIgnoredPath(const PathString &path);
99  virtual bool IsReportablePath(const PathString &path);
100 
101  virtual bool ReportAddition(const PathString &path,
102  const catalog::DirectoryEntry &entry,
103  const XattrList &xattrs,
104  const FileChunkList &chunks);
105  virtual void ReportRemoval(const PathString &path,
106  const catalog::DirectoryEntry &entry);
107  virtual bool ReportModification(const PathString &path,
108  const catalog::DirectoryEntry &old_entry,
109  const catalog::DirectoryEntry &new_entry,
110  const XattrList &xattrs,
111  const FileChunkList &chunks);
112 
113  private:
114  bool CreateNewManifest(std::string *new_manifest_path);
115 
116  std::string repo_path_;
117  const std::string cache_dir_; // path if local cache is used, otherwise empty
118 
120  std::string temp_dir_prefix_;
121 
123 
125 
127 
128  const bool needs_setup_;
129 
132 };
133 
134 } // namespace receiver
135 
136 #include "catalog_merge_tool_impl.h"
137 
138 #endif // CVMFS_RECEIVER_CATALOG_MERGE_TOOL_H_
UniquePtr< RwCatalogMgr > output_catalog_mgr_
virtual bool ReportAddition(const PathString &path, const catalog::DirectoryEntry &entry, const XattrList &xattrs, const FileChunkList &chunks)
const manifest::Manifest * manifest() const
Definition: repository.h:125
virtual bool ReportModification(const PathString &path, const catalog::DirectoryEntry &old_entry, const catalog::DirectoryEntry &new_entry, const XattrList &xattrs, const FileChunkList &chunks)
perf::Statistics * statistics_
CatalogMergeTool(RoCatalogMgr *old_catalog_mgr, RoCatalogMgr *new_catalog_mgr, const std::string &repo_path, const PathString &lease_path, const std::string &temp_dir_prefix, download::DownloadManager *download_manager, manifest::Manifest *manifest, perf::Statistics *statistics)
UniquePtr< perf::FsCounters > counters_
bool Run(const Params &params, std::string *new_manifest_path, shash::Any *new_manifest_hash, uint64_t *final_rev)
CatalogMergeTool(RoCatalogMgr *old_catalog_mgr, RoCatalogMgr *new_catalog_mgr, RwCatalogMgr *output_catalog_mgr, const PathString &lease_path, const std::string &temp_dir_prefix, manifest::Manifest *manifest, perf::Statistics *statistics)
virtual bool IsReportablePath(const PathString &path)
download::DownloadManager * download_manager_
CatalogMergeTool(const std::string &repo_path, const shash::Any &old_root_hash, const shash::Any &new_root_hash, const PathString &lease_path, const std::string &temp_dir_prefix, download::DownloadManager *download_manager, manifest::Manifest *manifest, perf::Statistics *statistics, const std::string &cache_dir)
virtual bool IsIgnoredPath(const PathString &path)
manifest::Manifest * manifest_
bool CreateNewManifest(std::string *new_manifest_path)
virtual void ReportRemoval(const PathString &path, const catalog::DirectoryEntry &entry)