5 #ifndef CVMFS_SWISSKNIFE_MIGRATE_H_
6 #define CVMFS_SWISSKNIFE_MIGRATE_H_
28 class WritableCatalog;
31 namespace swissknife {
60 this->push_back(statistics);
112 template<
class DerivedT>
121 temporary_directory(temporary_directory),
122 collect_catalog_statistics(collect_catalog_statistics) {}
170 temporary_directory, collect_catalog_statistics)
171 , fix_nested_catalog_transitions(fix_nested_catalog_transitions)
172 , analyze_file_linkcounts(analyze_file_linkcounts)
239 temporary_directory, collect_catalog_statistics)
241 , gid_map(gid_map) { }
254 template <
class MapT>
256 const std::string &column)
const;
316 virtual std::string
GetName()
const {
return "migrate"; }
318 return "CernVM-FS catalog repository migration \n"
319 "This command migrates the whole catalog structure of a given repository";
331 template <
class ObjectFetcherT>
333 ObjectFetcherT *object_fetcher)
343 retval = object_fetcher->FetchHistory(
352 const bool generate_full_catalog_tree =
true;
353 params.
no_close = generate_full_catalog_tree;
358 if (manual_root_hash.
IsNull())
360 return traversal.
Traverse(manual_root_hash);
370 const std::string &message);
372 template <
class MigratorT>
374 typename MigratorT::worker_context *context);
376 template <
class MigratorT>
381 bool ReadPersona(
const std::string &uid,
const std::string &gid);
383 const std::string &gid_map_path,
385 GidMap *gid_map)
const;
423 #endif // CVMFS_SWISSKNIFE_MIGRATE_H_
catalog::Catalog const * root_catalog_
const std::string temporary_directory_
StopWatch migration_stopwatch_
void ConvertCatalogsRecursively(PendingCatalog *catalog, MigratorT *migrator)
void operator()(const expected_data &data)
#define LogCvmfs(source, mask,...)
bool UpdateCatalogMetadata(PendingCatalog *data) const
PendingCatalog(const catalog::Catalog *old_catalog=NULL)
bool AnalyzeFileLinkcounts(PendingCatalog *data) const
UniquePtr< upload::Spooler > spooler_
CallbackPtr RegisterListener(typename BoundClosure< CatalogTraversalData< ObjectFetcherT::CatalogTN >, DelegateT, ClosureDataT >::CallbackMethod method, DelegateT *delegate, ClosureDataT data)
PendingCatalogMap pending_catalogs_
static const unsigned kSchemaRevision
bool ReadPersonaMaps(const std::string &uid_map_path, const std::string &gid_map_path, UidMap *uid_map, GidMap *gid_map) const
std::string nested_catalog_marker_tmp_path_
catalog::WritableCatalog * new_catalog
bool MigrateFileMetadata(PendingCatalog *data) const
bool UpdateCatalogSchema(PendingCatalog *data) const
const bool fix_nested_catalog_transitions_
void Insert(const CatalogStatistics &statistics)
bool FindRootEntryInformation(PendingCatalog *data) const
const catalog::Catalog * old_catalog
bool StartDatabaseTransaction(PendingCatalog *data) const
bool LoadCatalogs(const shash::Any &manual_root_hash, ObjectFetcherT *object_fetcher)
void AnalyzeCatalogStatistics() const
ChownMigrationWorker(const worker_context *context)
bool FixNestedCatalogTransitionPoints(PendingCatalog *data) const
MigrationWorker_217(const worker_context *context)
virtual std::string GetName() const
std::vector< Parameter > ParameterList
void CreateNestedCatalogMarkerDirent(const shash::Any &content_hash)
atomic_int32 catalogs_processed_
void UploadCallback(const upload::SpoolerResult &result)
CommandMigrate::PendingCatalog * returned_data
static void FixNestedCatalogTransitionPoint(const catalog::DirectoryEntry &nested_root, catalog::DirectoryEntry *mountpoint)
ObjectFetcherT * object_fetcher
virtual ParameterList GetParams() const
bool RunMigration(PendingCatalog *data) const
shash::Any new_catalog_hash
PendingCatalogList nested_catalogs
void PrintStatusMessage(const PendingCatalog *catalog, const shash::Any &content_hash, const std::string &message)
worker_context(const std::string &temporary_directory, const bool collect_catalog_statistics, const bool fix_nested_catalog_transitions, const bool analyze_file_linkcounts, const uid_t uid, const gid_t gid)
bool RemoveDanglingNestedMountpoints(PendingCatalog *data) const
static catalog::DirectoryEntry nested_catalog_marker_
bool AttachOldCatalogDatabase(PendingCatalog *data) const
CommandMigrate::PendingCatalog * expected_data
bool ReadPersona(const std::string &uid, const std::string &gid)
const std::string root_path() const
bool MigrateNestedCatalogMountPoints(PendingCatalog *data) const
shash::Any GetOldContentHash() const
void CatalogCallback(const CatalogTraversalData< catalog::WritableCatalog > &data)
const std::string gid_map_statement_
const std::string uid_map_statement_
UniquePtr< history::SqliteHistory > history_upstream_
bool ConfigureSQLite() const
unsigned int hardlink_group_count
virtual ~AbstractMigrationWorker()
bool CommitDatabaseTransaction(PendingCatalog *data) const
const bool collect_catalog_statistics
worker_context(const std::string &temporary_directory, const bool collect_catalog_statistics, const UidMap &uid_map, const GidMap &gid_map)
bool GenerateCatalogStatistics(PendingCatalog *data) const
StopWatch catalog_loading_stopwatch_
unsigned int file_descriptor_limit_
bool CheckDatabaseSchemaCompatibility(PendingCatalog *data) const
void UploadHistoryClosure(const upload::SpoolerResult &result, Future< shash::Any > *hash)
Future< catalog::DirectoryEntry > root_entry
unsigned GetModifiedRowCount() const
std::string GenerateMappingStatement(const MapT &map, const std::string &column) const
const bool collect_catalog_statistics_
bool RepairStatisticsCounters(PendingCatalog *data) const
bool CheckDatabaseSchemaCompatibility(PendingCatalog *data) const
bool RunMigration(PendingCatalog *data) const
std::vector< PendingCatalog * > PendingCatalogList
unsigned int catalog_count_
BulkhashRemovalMigrationWorker(const worker_context *context)
std::string temporary_directory_
bool StartDatabaseTransaction(PendingCatalog *data) const
bool DetachOldCatalogDatabase(PendingCatalog *data) const
bool ApplyPersonaMappings(PendingCatalog *data) const
AbstractMigrationWorker(const worker_context *context)
bool CommitDatabaseTransaction(PendingCatalog *data) const
static const catalog::DirectoryEntry & GetNestedCatalogMarkerDirent()
StatsMigrationWorker(const worker_context *context)
bool RunMigration(PendingCatalog *data) const
PathString mountpoint() const
bool CheckDatabaseSchemaCompatibility(PendingCatalog *data) const
const std::string temporary_directory
bool GenerateNestedCatalogMarkerChunk()
bool BreakUpHardlinks(PendingCatalog *data) const
Future< bool > was_updated
virtual std::string GetDescription() const
Future< catalog::DeltaCounters > nested_statistics
bool CollectAndAggregateStatistics(PendingCatalog *data) const
bool Traverse(const TraversalType type=Base::kBreadthFirst)
worker_context(const std::string &temporary_directory, const bool collect_catalog_statistics)
bool GenerateNewStatisticsCounters(PendingCatalog *data) const
bool CommitDatabaseTransaction(PendingCatalog *data) const
bool RunMigration(PendingCatalog *data) const
bool has_committed_new_revision_
std::string ToString() const
bool RemoveRedundantBulkHashes(PendingCatalog *data) const
int Main(const ArgumentList &args)
std::map< char, SharedPtr< std::string > > ArgumentList
HardlinkRemovalMigrationWorker(const worker_context *context)
virtual ~PendingCatalog()
MigrationWorker_20x(const worker_context *context)
UniquePtr< manifest::Manifest > manifest_upstream_
bool UpdateUndoTags(PendingCatalog *root_catalog, unsigned revision, time_t timestamp, shash::Any *history_hash)
bool CleanupNestedCatalogs(PendingCatalog *data) const
bool UpdateNestedCatalogReferences(PendingCatalog *data) const
bool CreateNewEmptyCatalog(PendingCatalog *data) const
CatalogStatisticsList catalog_statistics_list_
const CatalogDatabase & database() const
unsigned int aggregated_linkcounts
bool CheckDatabaseSchemaCompatibility(PendingCatalog *data) const
CatalogStatistics statistics
const bool analyze_file_linkcounts
bool StartDatabaseTransaction(PendingCatalog *data) const
const bool fix_nested_catalog_transitions
bool CheckDatabaseSchemaCompatibility(PendingCatalog *data) const
const bool analyze_file_linkcounts_
void MigrationCallback(PendingCatalog *const &data)
StopWatch migration_stopwatch_
bool RunMigration(PendingCatalog *data) const
bool RaiseFileDescriptorLimit() const
catalog::WritableCatalog * GetWritable(const catalog::Catalog *catalog) const
bool RunMigration(PendingCatalog *data) const
bool DoMigrationAndCommit(const std::string &manifest_path, typename MigratorT::worker_context *context)
bool RunMigration(PendingCatalog *data) const
static const float kSchema