OmniSciDB  c1a53651b2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TableArchiver Class Reference

#include <TableArchiver.h>

+ Collaboration diagram for TableArchiver:

Public Member Functions

 TableArchiver (Catalog_Namespace::Catalog *cat)
 
void dumpTable (const TableDescriptor *td, const std::string &archive_path, const std::string &compression)
 
void restoreTable (const Catalog_Namespace::SessionInfo &session, const std::string &table_name, const std::string &archive_path, const std::string &compression, const TableArchiverS3Options &s3_options)
 

Private Member Functions

void restoreTable (const Catalog_Namespace::SessionInfo &session, const TableDescriptor *td, const std::string &archive_path, const std::string &compression)
 

Private Attributes

Catalog_Namespace::Catalogcat_
 

Detailed Description

Definition at line 32 of file TableArchiver.h.

Constructor & Destructor Documentation

TableArchiver::TableArchiver ( Catalog_Namespace::Catalog cat)
inline

Definition at line 34 of file TableArchiver.h.

34 : cat_(cat){};
Catalog_Namespace::Catalog * cat_
Definition: TableArchiver.h:52

Member Function Documentation

void TableArchiver::dumpTable ( const TableDescriptor td,
const std::string &  archive_path,
const std::string &  compression 
)

Definition at line 335 of file TableArchiver.cpp.

References anonymous_namespace{TableArchiver.cpp}::abs_path(), cat_, Catalog_Namespace::DBMetadata::dbId, Data_Namespace::DISK_LEVEL, Catalog_Namespace::Catalog::dumpSchema(), ddl_utils::EXPORT, nvtx_helpers::anonymous_namespace{nvtx_helpers.cpp}::filename(), heavyai::fopen(), g_cluster, get_quoted_string(), Catalog_Namespace::Catalog::getAllColumnMetadataForTable(), Catalog_Namespace::Catalog::getColumnDictDirectory(), Catalog_Namespace::Catalog::getCurrentDB(), Catalog_Namespace::Catalog::getDataMgr(), Data_Namespace::DataMgr::getGlobalFileMgr(), Catalog_Namespace::Catalog::getTableDataDirectories(), Catalog_Namespace::Catalog::getTableDictDirectories(), Catalog_Namespace::Catalog::getTableEpoch(), TableDescriptor::is_system_table, TableDescriptor::isView, join(), TableDescriptor::persistenceLevel, run, anonymous_namespace{TableArchiver.cpp}::simple_file_closer, table_epoch_filename, table_oldinfo_filename, table_schema_filename, TableDescriptor::tableId, TableDescriptor::tableName, to_string(), shared::transform(), and ddl_utils::validate_allowed_file_path().

Referenced by Parser::DumpTableStmt::execute().

337  {
338  if (td->is_system_table) {
339  throw std::runtime_error("Dumping a system table is not supported.");
340  }
343  if (g_cluster) {
344  throw std::runtime_error("DUMP/RESTORE is not supported yet on distributed setup.");
345  }
346  if (boost::filesystem::exists(archive_path)) {
347  throw std::runtime_error("Archive " + archive_path + " already exists.");
348  }
350  throw std::runtime_error("Dumping view or temporary table is not supported.");
351  }
352  // create a unique uuid for this table dump
353  std::string uuid = boost::uuids::to_string(boost::uuids::random_generator()());
354 
355  // collect paths of files to archive
356  const auto global_file_mgr = cat_->getDataMgr().getGlobalFileMgr();
357  std::vector<std::string> file_paths;
358  auto file_writer = [&file_paths, uuid](const std::string& file_name,
359  const std::string& file_type,
360  const std::string& file_data) {
361  std::unique_ptr<FILE, decltype(simple_file_closer)> fp(
362  std::fopen(file_name.c_str(), "w"), simple_file_closer);
363  if (!fp) {
364  throw std::runtime_error("Failed to create " + file_type + " file '" + file_name +
365  "': " + std::strerror(errno));
366  }
367  if (std::fwrite(file_data.data(), 1, file_data.size(), fp.get()) < file_data.size()) {
368  throw std::runtime_error("Failed to write " + file_type + " file '" + file_name +
369  "': " + std::strerror(errno));
370  }
371  file_paths.push_back(uuid / std::filesystem::path(file_name).filename());
372  };
373 
374  const auto file_mgr_dir = std::filesystem::path(abs_path(global_file_mgr));
375  const auto uuid_dir = file_mgr_dir / uuid;
376 
377  if (!std::filesystem::create_directory(uuid_dir)) {
378  throw std::runtime_error("Failed to create work directory '" + uuid_dir.string() +
379  "' while dumping table.");
380  }
381 
382  ScopeGuard cleanup_guard = [&] {
383  if (std::filesystem::exists(uuid_dir)) {
384  std::filesystem::remove_all(uuid_dir);
385  }
386  };
387 
388  const auto table_name = td->tableName;
389  {
390  // - gen schema file
391  const auto schema_str = cat_->dumpSchema(td);
392  file_writer(uuid_dir / table_schema_filename, "table schema", schema_str);
393  // - gen column-old-info file
394  const auto cds = cat_->getAllColumnMetadataForTable(td->tableId, true, true, true);
395  std::vector<std::string> column_oldinfo;
396  std::transform(cds.begin(),
397  cds.end(),
398  std::back_inserter(column_oldinfo),
399  [&](const auto cd) -> std::string {
400  return cd->columnName + ":" + std::to_string(cd->columnId) + ":" +
402  });
403  const auto column_oldinfo_str = boost::algorithm::join(column_oldinfo, " ");
404  file_writer(uuid_dir / table_oldinfo_filename, "table old info", column_oldinfo_str);
405  // - gen table epoch
406  const auto epoch = cat_->getTableEpoch(cat_->getCurrentDB().dbId, td->tableId);
407  file_writer(uuid_dir / table_epoch_filename, "table epoch", std::to_string(epoch));
408  // - collect table data file paths ...
409  const auto data_file_dirs = cat_->getTableDataDirectories(td);
410  file_paths.insert(file_paths.end(), data_file_dirs.begin(), data_file_dirs.end());
411  // - collect table dict file paths ...
412  const auto dict_file_dirs = cat_->getTableDictDirectories(td);
413  file_paths.insert(file_paths.end(), dict_file_dirs.begin(), dict_file_dirs.end());
414  // tar takes time. release cat lock to yield the cat to concurrent CREATE statements.
415  }
416  // run tar to archive the files ... this may take a while !!
417  run("tar " + compression + " --transform=s|" + uuid +
418  std::filesystem::path::preferred_separator + "|| -cvf " +
419  get_quoted_string(archive_path) + " " + boost::algorithm::join(file_paths, " "),
420  file_mgr_dir);
421 }
std::string getColumnDictDirectory(const ColumnDescriptor *cd, bool file_name_only=true) const
Definition: Catalog.cpp:5051
static constexpr char const * table_schema_filename
std::string tableName
std::string abs_path(const File_Namespace::GlobalFileMgr *global_file_mgr)
Data_Namespace::DataMgr & getDataMgr() const
Definition: Catalog.h:249
std::string join(T const &container, std::string const &delim)
static constexpr char const * table_oldinfo_filename
int32_t getTableEpoch(const int32_t db_id, const int32_t table_id) const
Definition: Catalog.cpp:3387
std::vector< std::string > getTableDataDirectories(const TableDescriptor *td) const
Definition: Catalog.cpp:5037
std::string to_string(char const *&&v)
std::string get_quoted_string(const std::string &filename, char quote, char escape)
Quote a string while escaping any existing quotes in the string.
const DBMetadata & getCurrentDB() const
Definition: Catalog.h:248
::FILE * fopen(const char *filename, const char *mode)
Definition: heavyai_fs.cpp:74
OUTPUT transform(INPUT const &input, FUNC const &func)
Definition: misc.h:320
File_Namespace::GlobalFileMgr * getGlobalFileMgr() const
Definition: DataMgr.cpp:606
void validate_allowed_file_path(const std::string &file_path, const DataTransferType data_transfer_type, const bool allow_wildcards)
Definition: DdlUtils.cpp:785
std::vector< std::string > getTableDictDirectories(const TableDescriptor *td) const
Definition: Catalog.cpp:5072
std::list< const ColumnDescriptor * > getAllColumnMetadataForTable(const int tableId, const bool fetchSystemColumns, const bool fetchVirtualColumns, const bool fetchPhysicalColumns) const
Returns a list of pointers to constant ColumnDescriptor structs for all the columns from a particular...
Definition: Catalog.cpp:2267
Data_Namespace::MemoryLevel persistenceLevel
static constexpr char const * table_epoch_filename
bool g_cluster
static bool run
std::string dumpSchema(const TableDescriptor *td) const
Definition: Catalog.cpp:5103
Catalog_Namespace::Catalog * cat_
Definition: TableArchiver.h:52

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void TableArchiver::restoreTable ( const Catalog_Namespace::SessionInfo session,
const std::string &  table_name,
const std::string &  archive_path,
const std::string &  compression,
const TableArchiverS3Options s3_options 
)

Definition at line 670 of file TableArchiver.cpp.

References cat_, CHECK, Parser::create_stmt_for_query(), anonymous_namespace{TableArchiver.cpp}::get_table_schema(), Catalog_Namespace::Catalog::getMetadataForTable(), and shared::is_s3_uri().

Referenced by Parser::RestoreTableStmt::execute().

674  {
675  auto local_archive_path = archive_path;
676 #ifdef HAVE_AWS_S3
677  const auto restore_dir_path = get_restore_dir_path();
678  ScopeGuard archive_cleanup_guard = [&archive_path, &restore_dir_path] {
679  if (shared::is_s3_uri(archive_path) && std::filesystem::exists(restore_dir_path)) {
680  std::filesystem::remove_all(restore_dir_path);
681  }
682  };
683  if (shared::is_s3_uri(archive_path)) {
684  local_archive_path = download_s3_file(archive_path, s3_options, restore_dir_path);
685  }
686 #endif
687 
688  // replace table name and drop foreign dict references
689  const auto schema_str = get_table_schema(local_archive_path, table_name, compression);
690  std::unique_ptr<Parser::Stmt> stmt = Parser::create_stmt_for_query(schema_str, session);
691  const auto create_table_stmt = dynamic_cast<Parser::CreateTableStmt*>(stmt.get());
692  CHECK(create_table_stmt);
693  create_table_stmt->execute(session, false /*read-only*/);
694 
695  try {
696  restoreTable(
697  session, cat_->getMetadataForTable(table_name), local_archive_path, compression);
698  } catch (...) {
699  const auto schema_str = "DROP TABLE IF EXISTS " + table_name + ";";
700  std::unique_ptr<Parser::Stmt> stmt =
701  Parser::create_stmt_for_query(schema_str, session);
702  const auto drop_table_stmt = dynamic_cast<Parser::DropTableStmt*>(stmt.get());
703  CHECK(drop_table_stmt);
704  drop_table_stmt->execute(session, false /*read-only*/);
705 
706  throw;
707  }
708 }
std::string get_table_schema(const std::string &archive_path, const std::string &table, const std::string &compression)
bool is_s3_uri(const std::string &file_path)
#define CHECK(condition)
Definition: Logger.h:291
const TableDescriptor * getMetadataForTable(const std::string &tableName, const bool populateFragmenter=true) const
Returns a pointer to a const TableDescriptor struct matching the provided tableName.
void restoreTable(const Catalog_Namespace::SessionInfo &session, const std::string &table_name, const std::string &archive_path, const std::string &compression, const TableArchiverS3Options &s3_options)
std::unique_ptr< Parser::Stmt > create_stmt_for_query(const std::string &queryStr, const Catalog_Namespace::SessionInfo &session_info)
Catalog_Namespace::Catalog * cat_
Definition: TableArchiver.h:52

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void TableArchiver::restoreTable ( const Catalog_Namespace::SessionInfo session,
const TableDescriptor td,
const std::string &  archive_path,
const std::string &  compression 
)
private

Definition at line 424 of file TableArchiver.cpp.

References anonymous_namespace{Utm.h}::a, anonymous_namespace{TableArchiver.cpp}::abs_path(), anonymous_namespace{TableArchiver.cpp}::adjust_altered_table_files(), cat_, CHECK, Parser::create_stmt_for_query(), Catalog_Namespace::DBMetadata::dbId, Data_Namespace::DISK_LEVEL, measure< TimeT >::execution(), g_cluster, g_test_rollback_dump_restore, get_quoted_string(), anonymous_namespace{TableArchiver.cpp}::get_table_schema(), Catalog_Namespace::Catalog::getAllColumnMetadataForTable(), Catalog_Namespace::Catalog::getColumnDictDirectory(), Catalog_Namespace::Catalog::getCurrentDB(), Catalog_Namespace::Catalog::getDataMgr(), Data_Namespace::DataMgr::getGlobalFileMgr(), lockmgr::TableLockMgrImpl< TableSchemaLockMgr >::getReadLockForTable(), Catalog_Namespace::Catalog::getTableDataDirectories(), Catalog_Namespace::Catalog::getTableDictDirectories(), lockmgr::TableLockMgrImpl< T >::getWriteLockForTable(), TableDescriptor::hasDeletedCol, ddl_utils::IMPORT, TableDescriptor::isView, join(), TableDescriptor::nShards, TableDescriptor::persistenceLevel, anonymous_namespace{TableArchiver.cpp}::rename_table_directories(), run, Catalog_Namespace::Catalog::setTableEpoch(), anonymous_namespace{TableArchiver.cpp}::simple_file_cat(), split(), table_epoch_filename, table_oldinfo_filename, TableDescriptor::tableId, TableDescriptor::tableName, to_string(), shared::transform(), ddl_utils::validate_allowed_file_path(), and VLOG.

427  {
430  if (g_cluster) {
431  throw std::runtime_error("DUMP/RESTORE is not supported yet on distributed setup.");
432  }
433  if (!boost::filesystem::exists(archive_path)) {
434  throw std::runtime_error("Archive " + archive_path + " does not exist.");
435  }
437  throw std::runtime_error("Restoring view or temporary table is not supported.");
438  }
439  // Obtain table schema read lock to prevent modification of the schema during
440  // restoration
441  const auto table_read_lock =
443  // prevent concurrent inserts into table during restoration
444  const auto insert_data_lock =
446 
447  // untar takes time. no grab of cat lock to yield to concurrent CREATE stmts.
448  const auto global_file_mgr = cat_->getDataMgr().getGlobalFileMgr();
449 
450  // create a unique uuid for this table restore
451  std::string uuid = boost::uuids::to_string(boost::uuids::random_generator()());
452 
453  const auto uuid_dir = std::filesystem::path(abs_path(global_file_mgr)) / uuid;
454 
455  if (!std::filesystem::create_directory(uuid_dir)) {
456  throw std::runtime_error("Failed to create work directory '" + uuid_dir.string() +
457  "' while restoring table.");
458  }
459 
460  ScopeGuard cleanup_guard = [&] {
461  if (std::filesystem::exists(uuid_dir)) {
462  std::filesystem::remove_all(uuid_dir);
463  }
464  };
465 
466  // dirs where src files are untarred and dst files are backed up
467  constexpr static const auto temp_data_basename = "_data";
468  constexpr static const auto temp_back_basename = "_back";
469  const auto temp_data_dir = uuid_dir / temp_data_basename;
470  const auto temp_back_dir = uuid_dir / temp_back_basename;
471 
472  // extract & parse schema
473  const auto schema_str = get_table_schema(archive_path, td->tableName, compression);
474  std::unique_ptr<Parser::Stmt> stmt = Parser::create_stmt_for_query(schema_str, session);
475  const auto create_table_stmt = dynamic_cast<Parser::CreateTableStmt*>(stmt.get());
476  CHECK(create_table_stmt);
477 
478  // verify compatibility between source and destination schemas
479  TableDescriptor src_td;
480  std::list<ColumnDescriptor> src_columns;
481  std::vector<Parser::SharedDictionaryDef> shared_dict_defs;
482  create_table_stmt->executeDryRun(session, src_td, src_columns, shared_dict_defs);
483  // - sanity check table-level compatibility
484  if (src_td.hasDeletedCol != td->hasDeletedCol) {
485  // TODO: allow the case, in which src data enables vacuum while
486  // dst doesn't, by simply discarding src $deleted column data.
487  throw std::runtime_error("Incompatible table VACCUM option");
488  }
489  if (src_td.nShards != td->nShards) {
490  // TODO: allow different shard numbers if they have a "GCD",
491  // by splitting/merging src data files before drop into dst.
492  throw std::runtime_error("Unmatched number of table shards");
493  }
494  // - sanity check column-level compatibility (based on column names)
495  const auto dst_columns =
496  cat_->getAllColumnMetadataForTable(td->tableId, false, false, false);
497  if (dst_columns.size() != src_columns.size()) {
498  throw std::runtime_error("Unmatched number of table columns");
499  }
500  for (const auto& [src_cd, dst_cd] : boost::combine(src_columns, dst_columns)) {
501  if (src_cd.columnType.get_type_name() != dst_cd->columnType.get_type_name() ||
502  src_cd.columnType.get_compression_name() !=
503  dst_cd->columnType.get_compression_name()) {
504  throw std::runtime_error("Incompatible types on column " + src_cd.columnName);
505  }
506  }
507  // extract src table column ids (ALL columns incl. system/virtual/phy geo cols)
508  const auto all_src_oldinfo_str =
509  simple_file_cat(archive_path, table_oldinfo_filename, compression);
510  std::vector<std::string> src_oldinfo_strs;
511  boost::algorithm::split(src_oldinfo_strs,
512  all_src_oldinfo_str,
513  boost::is_any_of(" "),
514  boost::token_compress_on);
515  auto all_dst_columns =
516  cat_->getAllColumnMetadataForTable(td->tableId, true, true, true);
517  if (src_oldinfo_strs.size() != all_dst_columns.size()) {
518  throw std::runtime_error("Source table has a unmatched number of columns: " +
519  std::to_string(src_oldinfo_strs.size()) + " vs " +
520  std::to_string(all_dst_columns.size()));
521  }
522  // build a map of src column ids and dst column ids, just in case src table has been
523  // ALTERed before and chunk keys of src table needs to be adjusted accordingly.
524  // note: this map is used only for the case of migrating a table and not for restoring
525  // a table. When restoring a table, the two tables must have the same column ids.
526  //
527  // also build a map of src dict paths and dst dict paths for relocating src dicts
528  std::unordered_map<int, int> column_ids_map;
529  std::unordered_map<std::string, std::string> dict_paths_map;
530  // sort inputs of transform in lexical order of column names for correct mappings
531  std::list<std::vector<std::string>> src_oldinfo_tokens;
533  src_oldinfo_strs.begin(),
534  src_oldinfo_strs.end(),
535  std::back_inserter(src_oldinfo_tokens),
536  [](const auto& src_oldinfo_str) -> auto {
537  std::vector<std::string> tokens;
539  tokens, src_oldinfo_str, boost::is_any_of(":"), boost::token_compress_on);
540  return tokens;
541  });
542  src_oldinfo_tokens.sort(
543  [](const auto& lhs, const auto& rhs) { return lhs[0].compare(rhs[0]) < 0; });
544  all_dst_columns.sort(
545  [](auto a, auto b) { return a->columnName.compare(b->columnName) < 0; });
546  // transform inputs into the maps
547  std::transform(src_oldinfo_tokens.begin(),
548  src_oldinfo_tokens.end(),
549  all_dst_columns.begin(),
550  std::inserter(column_ids_map, column_ids_map.end()),
551  [&](const auto& tokens, const auto& cd) -> std::pair<int, int> {
552  VLOG(3) << boost::algorithm::join(tokens, ":") << " ==> "
553  << cd->columnName << ":" << cd->columnId;
554  dict_paths_map[tokens[2]] = cat_->getColumnDictDirectory(cd);
555  return {boost::lexical_cast<int>(tokens[1]), cd->columnId};
556  });
557  bool was_table_altered = false;
558  std::for_each(column_ids_map.begin(), column_ids_map.end(), [&](auto& it) {
559  was_table_altered = was_table_altered || it.first != it.second;
560  });
561  VLOG(3) << "was_table_altered = " << was_table_altered;
562  // extract all data files to a temp dir. will swap with dst table dir after all set,
563  // otherwise will corrupt table in case any bad thing happens in the middle.
564  run("rm -rf " + temp_data_dir.string());
565  run("mkdir -p " + temp_data_dir.string());
566  run("tar " + compression + " -xvf " + get_quoted_string(archive_path), temp_data_dir);
567 
568  // if table was ever altered after it was created, update column ids in chunk headers.
569  if (was_table_altered) {
570  const auto epoch = boost::lexical_cast<int32_t>(
571  simple_file_cat(archive_path, table_epoch_filename, compression));
572  const auto time_ms = measure<>::execution(
573  [&]() { adjust_altered_table_files(epoch, temp_data_dir, column_ids_map); });
574  VLOG(3) << "adjust_altered_table_files: " << time_ms << " ms";
575  }
576  // finally,,, swap table data/dict dirs!
577  const auto data_file_dirs = cat_->getTableDataDirectories(td);
578  const auto dict_file_dirs = cat_->getTableDictDirectories(td);
579  // move current target dirs, if exists, to backup dir
580  std::vector<std::string> both_file_dirs;
581  std::merge(data_file_dirs.begin(),
582  data_file_dirs.end(),
583  dict_file_dirs.begin(),
584  dict_file_dirs.end(),
585  std::back_inserter(both_file_dirs));
586  bool backup_completed = false;
587  try {
588  run("rm -rf " + temp_back_dir.string());
589  run("mkdir -p " + temp_back_dir.string());
590  for (const auto& dir : both_file_dirs) {
591  const auto dir_full_path = abs_path(global_file_mgr) + "/" + dir;
592  if (boost::filesystem::is_directory(dir_full_path)) {
593  run("mv " + dir_full_path + " " + temp_back_dir.string());
594  }
595  }
596  backup_completed = true;
597  // Move table directories from temp dir to main data directory.
598  rename_table_directories(global_file_mgr, temp_data_dir, data_file_dirs, "table_");
599  // Move dictionaries from temp dir to main dir.
600  for (const auto& dit : dict_paths_map) {
601  if (!dit.first.empty() && !dit.second.empty()) {
602  const auto src_dict_path = temp_data_dir.string() + "/" + dit.first;
603  const auto dst_dict_path = abs_path(global_file_mgr) + "/" + dit.second;
604  run("mv " + src_dict_path + " " + dst_dict_path);
605  }
606  }
607  // throw if sanity test forces a rollback
609  throw std::runtime_error("lol!");
610  }
611  } catch (...) {
612  // once backup is completed, whatever in abs_path(global_file_mgr) is the "src"
613  // dirs that are to be rolled back and discarded
614  if (backup_completed) {
615  run("rm -rf " + boost::algorithm::join(both_file_dirs, " "),
616  abs_path(global_file_mgr));
617  }
618  // complete rollback by recovering original "dst" table dirs from backup dir
619  boost::filesystem::path base_path(temp_back_dir);
620  boost::filesystem::directory_iterator end_it;
621  for (boost::filesystem::directory_iterator fit(base_path); fit != end_it; ++fit) {
622  run("mv " + fit->path().string() + " .", abs_path(global_file_mgr));
623  }
624  throw;
625  }
626  // set for reloading table from the restored/migrated files
627  const auto epoch = simple_file_cat(archive_path, table_epoch_filename, compression);
629  cat_->getCurrentDB().dbId, td->tableId, boost::lexical_cast<int>(epoch));
630 }
std::string get_table_schema(const std::string &archive_path, const std::string &table, const std::string &compression)
std::string getColumnDictDirectory(const ColumnDescriptor *cd, bool file_name_only=true) const
Definition: Catalog.cpp:5051
std::string tableName
static TimeT::rep execution(F func, Args &&...args)
Definition: sample.cpp:29
std::string abs_path(const File_Namespace::GlobalFileMgr *global_file_mgr)
Data_Namespace::DataMgr & getDataMgr() const
Definition: Catalog.h:249
static WriteLock getWriteLockForTable(const Catalog_Namespace::Catalog &cat, const std::string &table_name)
Definition: LockMgrImpl.h:225
std::string join(T const &container, std::string const &delim)
static constexpr char const * table_oldinfo_filename
std::vector< std::string > getTableDataDirectories(const TableDescriptor *td) const
Definition: Catalog.cpp:5037
std::string to_string(char const *&&v)
std::vector< std::string > split(std::string_view str, std::string_view delim, std::optional< size_t > maxsplit)
split apart a string into a vector of substrings
constexpr double a
Definition: Utm.h:32
std::string get_quoted_string(const std::string &filename, char quote, char escape)
Quote a string while escaping any existing quotes in the string.
const DBMetadata & getCurrentDB() const
Definition: Catalog.h:248
void rename_table_directories(const File_Namespace::GlobalFileMgr *global_file_mgr, const std::string &temp_data_dir, const std::vector< std::string > &target_paths, const std::string &name_prefix)
OUTPUT transform(INPUT const &input, FUNC const &func)
Definition: misc.h:320
File_Namespace::GlobalFileMgr * getGlobalFileMgr() const
Definition: DataMgr.cpp:606
void validate_allowed_file_path(const std::string &file_path, const DataTransferType data_transfer_type, const bool allow_wildcards)
Definition: DdlUtils.cpp:785
void setTableEpoch(const int db_id, const int table_id, const int new_epoch)
Definition: Catalog.cpp:3455
std::vector< std::string > getTableDictDirectories(const TableDescriptor *td) const
Definition: Catalog.cpp:5072
static ReadLock getReadLockForTable(Catalog_Namespace::Catalog &cat, const std::string &table_name)
Definition: LockMgrImpl.h:238
std::list< const ColumnDescriptor * > getAllColumnMetadataForTable(const int tableId, const bool fetchSystemColumns, const bool fetchVirtualColumns, const bool fetchPhysicalColumns) const
Returns a list of pointers to constant ColumnDescriptor structs for all the columns from a particular...
Definition: Catalog.cpp:2267
Data_Namespace::MemoryLevel persistenceLevel
void adjust_altered_table_files(const int32_t table_epoch, const std::string &temp_data_dir, const std::unordered_map< int, int > &column_ids_map)
static constexpr char const * table_epoch_filename
#define CHECK(condition)
Definition: Logger.h:291
bool g_cluster
static bool run
std::string simple_file_cat(const std::string &archive_path, const std::string &file_name, const std::string &compression)
std::unique_ptr< Parser::Stmt > create_stmt_for_query(const std::string &queryStr, const Catalog_Namespace::SessionInfo &session_info)
#define VLOG(n)
Definition: Logger.h:387
bool g_test_rollback_dump_restore
Catalog_Namespace::Catalog * cat_
Definition: TableArchiver.h:52

+ Here is the call graph for this function:

Member Data Documentation

Catalog_Namespace::Catalog* TableArchiver::cat_
private

Definition at line 52 of file TableArchiver.h.

Referenced by dumpTable(), and restoreTable().


The documentation for this class was generated from the following files: