CernVM-FS  2.12.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
repository.h
Go to the documentation of this file.
1 
5 #ifndef CVMFS_PUBLISH_REPOSITORY_H_
6 #define CVMFS_PUBLISH_REPOSITORY_H_
7 
8 #include <string>
9 #include <vector>
10 
11 #include "gateway_util.h"
12 #include "history.h" // for History::Tag
13 #include "publish/settings.h"
14 #include "repository_util.h"
15 #include "upload_spooler_result.h"
16 #include "util/pointer.h"
17 #include "util/single_copy.h"
18 
19 namespace catalog {
20 class DeltaCounters;
21 class DirectoryEntry;
22 class SimpleCatalogManager;
23 class WritableCatalogManager;
24 }
25 namespace download {
26 class DownloadManager;
27 }
28 namespace history {
29 class SqliteHistory;
30 }
31 namespace manifest {
32 class Manifest;
33 class Reflog;
34 }
35 namespace perf {
36 class Statistics;
37 class StatisticsTemplate;
38 }
39 namespace signature {
40 class SignatureManager;
41 }
42 class SyncParameters;
43 namespace upload {
44 class Spooler;
45 }
46 namespace whitelist {
47 class Whitelist;
48 }
49 
50 namespace publish {
51 
52 class SyncMediator;
53 class SyncUnion;
54 
58 class __attribute__((visibility("default"))) DiffListener {
59  public:
60  virtual ~DiffListener() {}
61  virtual void OnInit(const history::History::Tag &from_tag,
62  const history::History::Tag &to_tag) = 0;
63  virtual void OnStats(const catalog::DeltaCounters &delta) = 0;
64  virtual void OnAdd(const std::string &path,
65  const catalog::DirectoryEntry &entry) = 0;
66  virtual void OnRemove(const std::string &path,
67  const catalog::DirectoryEntry &entry) = 0;
68  virtual void OnModify(const std::string &path,
69  const catalog::DirectoryEntry &entry_from,
70  const catalog::DirectoryEntry &entry_to) = 0;
71 };
72 
73 
74 class __attribute__((visibility("default"))) Env {
75  public:
82  static void DropCapabilities();
83 
88  static std::string GetEnterSessionDir();
89 };
90 
91 
92 class __attribute__((visibility("default"))) Repository : SingleCopy {
93  public:
97  static const char kRawHashSymbol = '@';
98 
99  static std::string GetFqrnFromUrl(const std::string &url);
100 
101  explicit Repository(const SettingsRepository &settings,
102  const bool exists = true);
103  virtual ~Repository();
104 
105  void Check();
106  void GarbageCollect();
107  void List();
108 
113  void Diff(const std::string &from, const std::string &to,
114  DiffListener *diff_listener);
115 
119  bool IsMasterReplica();
120 
122  return signature_mgr_;
123  }
124  const whitelist::Whitelist *whitelist() const { return whitelist_; }
125  const manifest::Manifest *manifest() const { return manifest_; }
126  // Inheritance of History and SqliteHistory unknown in the header
127  const history::History *history() const;
128  std::string meta_info() const { return meta_info_; }
129 
130  protected:
131  void DownloadRootObjects(
132  const std::string &url,
133  const std::string &fqrn,
134  const std::string &tmp_dir);
136 
138 
150  // TODO(jblomer): make MetaInfo class
151  std::string meta_info_;
152 };
153 
154 class __attribute__((visibility("default"))) Publisher : public Repository {
155  public:
159  class ManagedNode {
160  public:
164  enum EFailures {
165  kFailOk = 0,
166  kFailRdOnlyBroken = 0x01,
167  kFailRdOnlyOutdated = 0x02,
168  kFailRdOnlyWrongRevision = 0x04,
169  kFailUnionBroken = 0x08,
170  kFailUnionWritable = 0x10,
171  kFailUnionLocked = 0x20,
172  };
173 
174  explicit ManagedNode(Publisher *p) : publisher_(p) {}
179  int Check(bool is_quiet = false);
183  void Open();
187  void Lock();
192  void Unmount();
196  void Mount();
200  void ClearScratch();
201 
202  private:
218  };
219 
220  void AlterMountpoint(EMountpointAlterations how, int log_level);
221  void SetRootHash(const shash::Any &hash);
222 
224  }; // class ManagedNode
225 
226 
231  public:
232  struct Settings {
233  Settings() : llvl(0) {}
234  std::string service_endpoint;
238  std::string repo_path;
239  std::string gw_key_path;
240  std::string token_path;
241  int llvl;
242  };
243 
248  Session() : keep_alive_(false), has_lease_(true) {}
249  explicit Session(const Settings &settings_session);
250  explicit Session(const SettingsPublisher &settings_publisher, int llvl = 0);
254  ~Session();
255 
256  void Acquire();
257  void Drop();
258  void SetKeepAlive(bool value);
259 
260  bool has_lease() const { return has_lease_; }
261  std::string token_path() const { return settings_.token_path; }
262 
263  private:
273  }; // class Session
274 
278  static const unsigned kRequiredLayoutRevision = 143;
279 
280  static Publisher *Create(const SettingsPublisher &settings);
281 
282  explicit Publisher(const SettingsPublisher &settings,
283  const bool exists = true);
284  virtual ~Publisher();
285 
286  void UpdateMetaInfo();
287  void Transaction();
288  void Abort();
289  void Publish();
290  void Ingest();
291  void Sync();
292 
299  void ExitShell();
300 
306  void EditTags(const std::vector<history::History::Tag> &add_tags,
307  const std::vector<std::string> &rm_tags);
311  void MarkReplicatible(bool value);
312 
313  void Rollback();
314  void Resign();
315  void Migrate();
316 
317  const SettingsPublisher &settings() const { return settings_; }
318  const ServerFlagFile &in_transaction() const { return in_transaction_; }
319  const ServerLockFile &is_publishing() const { return is_publishing_; }
320  Session *session() const { return session_.weak_ref(); }
321  const upload::Spooler *spooler_files() const { return spooler_files_; }
322  const upload::Spooler *spooler_catalogs() const { return spooler_catalogs_; }
323 
324  private:
328  void ConstructSpoolers();
333  void ConstructSyncManagers();
334  void WipeScratchArea();
335 
336  void CreateKeychain();
337  void CreateStorage();
338  void CreateSpoolArea();
339  void CreateRootObjects();
340 
341  void ExportKeychain();
342  void CreateDirectoryAsOwner(const std::string &path, int mode);
343  void InitSpoolArea();
344 
345  void PushCertificate();
346  void PushHistory();
347  void PushManifest();
348  void PushMetainfo();
349  void PushReflog();
350  void PushWhitelist();
351 
352  void OnProcessCertificate(const upload::SpoolerResult &result);
353  void OnProcessHistory(const upload::SpoolerResult &result);
354  void OnProcessMetainfo(const upload::SpoolerResult &result);
355  void OnUploadManifest(const upload::SpoolerResult &result);
356  void OnUploadReflog(const upload::SpoolerResult &result);
357  void OnUploadWhitelist(const upload::SpoolerResult &result);
358 
359  void CheckTagName(const std::string &name);
360 
361  void TransactionRetry();
362  void TransactionImpl();
363 
364  SettingsPublisher settings_;
369  int llvl_;
382 
383  upload::Spooler *spooler_files_;
384  upload::Spooler *spooler_catalogs_;
389 };
390 
391 class __attribute__((visibility("default"))) Replica : public Repository {
392  public:
393  static Replica *Create();
394  explicit Replica(const SettingsReplica &settings);
395  virtual ~Replica();
396 
397  void Snapshot();
398 };
399 
400 } // namespace publish
401 
402 #endif // CVMFS_PUBLISH_REPOSITORY_H_
const SettingsRepository settings_
Definition: repository.h:137
void CreateRootObjects()
Definition: repository.cc:294
manifest::Reflog * reflog_
Definition: repository.h:147
const manifest::Manifest * manifest() const
Definition: repository.h:125
download::DownloadManager * download_mgr_
Definition: repository.h:141
Publisher * publisher_
Definition: repository.h:223
void ConstructSyncManagers()
Definition: repository.cc:677
void OnUploadReflog(const upload::SpoolerResult &result)
Definition: repository.cc:551
catalog::SimpleCatalogManager * GetSimpleCatalogManager()
Definition: repository.cc:118
UniquePtr< ManagedNode > managed_node_
Definition: repository.h:381
Session * session() const
Definition: repository.h:320
void Ingest()
Definition: repository.cc:843
UniquePtr< perf::StatisticsTemplate > statistics_publish_
Definition: repository.h:365
static Publisher * Create(const SettingsPublisher &settings)
void Lock()
void OnProcessCertificate(const upload::SpoolerResult &result)
Definition: repository.cc:521
void Open()
const history::History * history() const
void CreateDirectoryAsOwner(const std::string &path, int mode)
Definition: repository.cc:563
void PushCertificate()
Definition: repository.cc:345
void OnUploadWhitelist(const upload::SpoolerResult &result)
Definition: repository.cc:557
void CreateStorage()
Definition: repository.cc:338
bool IsMasterReplica()
Definition: repository.cc:227
void AlterMountpoint(EMountpointAlterations how, int log_level)
const SettingsPublisher & settings() const
Definition: repository.h:317
perf::Statistics * statistics_
Definition: repository.h:139
virtual ~Replica()
Definition: repository.cc:863
upload::Spooler * spooler_catalogs_
Definition: repository.h:384
gateway::GatewayKey gw_key_
Definition: repository.h:372
void PushMetainfo()
Definition: repository.cc:374
void List()
class __attribute__((visibility("default"))) DiffListener
Definition: repository.h:58
void Abort()
class __attribute__((visibility("default"))) Publisher ManagedNode(Publisher *p)
Definition: repository.h:174
void PushReflog()
Definition: repository.cc:420
void ExitShell()
Definition: repository.cc:761
catalog::WritableCatalogManager * catalog_mgr_
Definition: repository.h:385
Repository(const SettingsRepository &settings, const bool exists=true)
Definition: repository.cc:49
void OnProcessMetainfo(const upload::SpoolerResult &result)
Definition: repository.cc:537
void CreateSpoolArea()
std::string meta_info_
Definition: repository.h:151
void PushHistory()
Definition: repository.cc:355
publish::SyncUnion * sync_union_
Definition: repository.h:388
void Check()
void Transaction()
void OnUploadManifest(const upload::SpoolerResult &result)
Definition: repository.cc:545
Settings settings_
Definition: repository.h:264
signature::SignatureManager * signature_mgr_
Definition: repository.h:140
void UpdateMetaInfo()
Definition: repository.cc:847
void DownloadRootObjects(const std::string &url, const std::string &fqrn, const std::string &tmp_dir)
Definition: repository.cc:133
const signature::SignatureManager * signature_mgr() const
Definition: repository.h:121
virtual ~Publisher()
void WipeScratchArea()
EMountpointAlterations
Definition: repository.h:207
string default
Definition: cvmfs_inject.py:25
ServerLockFile is_publishing_
Definition: repository.h:371
void Sync()
Definition: repository.cc:773
void InitSpoolArea()
Definition: repository.cc:571
void PushManifest()
Definition: repository.cc:383
catalog::SimpleCatalogManager * simple_catalog_mgr_
Definition: repository.h:145
void EditTags(const std::vector< history::History::Tag > &add_tags, const std::vector< std::string > &rm_tags)
void Snapshot()
history::SqliteHistory * history_
Definition: repository.h:149
void Resign()
Definition: repository.cc:845
void Publish()
void ClearScratch()
UniquePtr< Session > session_
Definition: repository.h:380
std::string token_path() const
Definition: repository.h:261
manifest::Manifest * manifest_
Definition: repository.h:148
void OnProcessHistory(const upload::SpoolerResult &result)
Definition: repository.cc:529
upload::Spooler * spooler_files_
Definition: repository.h:383
const whitelist::Whitelist * whitelist() const
Definition: repository.h:124
void MarkReplicatible(bool value)
Definition: repository.cc:830
class __attribute__((visibility("default"))) Replica Replica(const SettingsReplica &settings)
Definition: repository.cc:857
ServerFlagFile in_transaction_
Definition: repository.h:370
whitelist::Whitelist * whitelist_
Definition: repository.h:146
void GarbageCollect()
const ServerFlagFile & in_transaction() const
Definition: repository.h:318
void Migrate()
std::string meta_info() const
Definition: repository.h:128
SyncMediator * sync_mediator_
Definition: repository.h:387
void ExportKeychain()
Definition: repository.cc:488
int llvl_
Definition: repository.h:369
const upload::Spooler * spooler_files() const
Definition: repository.h:321
void SetRootHash(const shash::Any &hash)
const ServerLockFile & is_publishing() const
Definition: repository.h:319
Publisher(const SettingsPublisher &settings, const bool exists=true)
Definition: repository.cc:594
virtual ~Repository()
Definition: repository.cc:103
const upload::Spooler * spooler_catalogs() const
Definition: repository.h:322
void ConstructSpoolers()
Definition: repository.cc:242
void Rollback()
void CreateKeychain()
Definition: repository.cc:270
void PushWhitelist()
Definition: repository.cc:442
void Diff(const std::string &from, const std::string &to, DiffListener *diff_listener)
bool has_lease() const
Definition: repository.h:260
void CheckTagName(const std::string &name)
static const unsigned kRequiredLayoutRevision
Definition: repository.h:278
SyncParameters * sync_parameters_
Definition: repository.h:386
class static __attribute__((visibility("default"))) Repository std::string GetFqrnFromUrl(const std::string &url)
Definition: repository.cc:222
std::string service_endpoint
Definition: repository.h:234