OmniSciDB  c0231cc57d
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
foreign_storage::ForeignTableRefreshScheduler Class Reference

#include <ForeignTableRefreshScheduler.h>

Static Public Member Functions

static void start (std::atomic< bool > &is_program_running)
 
static void stop ()
 
static void setWaitDuration (int64_t duration_in_seconds)
 
static bool isRunning ()
 
static bool hasRefreshedTable ()
 
static void resetHasRefreshedTable ()
 

Static Private Member Functions

static void invalidateQueryEngineCaches ()
 

Static Private Attributes

static std::atomic< bool > is_scheduler_running_ {false}
 
static std::chrono::seconds thread_wait_duration_ {60}
 
static std::thread scheduler_thread_
 
static std::atomic< bool > has_refreshed_table_ {false}
 
static std::mutex wait_mutex_
 
static std::condition_variable wait_condition_
 

Detailed Description

Definition at line 26 of file ForeignTableRefreshScheduler.h.

Member Function Documentation

bool foreign_storage::ForeignTableRefreshScheduler::hasRefreshedTable ( )
static

Definition at line 101 of file ForeignTableRefreshScheduler.cpp.

References has_refreshed_table_.

101  {
102  return has_refreshed_table_;
103 }
void foreign_storage::ForeignTableRefreshScheduler::invalidateQueryEngineCaches ( )
staticprivate

Definition at line 25 of file ForeignTableRefreshScheduler.cpp.

References legacylockmgr::ExecutorOuterLock, legacylockmgr::LockMgr< MutexType, KeyType >::getMutex(), and CacheInvalidator< CACHE_HOLDING_TYPES >::invalidateCaches().

Referenced by start().

25  {
26  auto execute_write_lock =
30  // todo (yoonmin): support per-table invalidation
33 }
static std::shared_ptr< WrapperType< MutexType > > getMutex(const LockType lockType, const KeyType &key)
static void invalidateCaches()
std::unique_lock< T > unique_lock

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

bool foreign_storage::ForeignTableRefreshScheduler::isRunning ( )
static

Definition at line 97 of file ForeignTableRefreshScheduler.cpp.

References is_scheduler_running_.

97  {
98  return is_scheduler_running_;
99 }
void foreign_storage::ForeignTableRefreshScheduler::resetHasRefreshedTable ( )
static

Definition at line 105 of file ForeignTableRefreshScheduler.cpp.

References has_refreshed_table_.

105  {
106  has_refreshed_table_ = false;
107 }
void foreign_storage::ForeignTableRefreshScheduler::setWaitDuration ( int64_t  duration_in_seconds)
static

Definition at line 93 of file ForeignTableRefreshScheduler.cpp.

References thread_wait_duration_.

93  {
94  thread_wait_duration_ = std::chrono::seconds{duration_in_seconds};
95 }
void foreign_storage::ForeignTableRefreshScheduler::start ( std::atomic< bool > &  is_program_running)
static

Definition at line 35 of file ForeignTableRefreshScheduler.cpp.

References logger::ERROR, has_refreshed_table_, Catalog_Namespace::SysCatalog::instance(), invalidateQueryEngineCaches(), is_scheduler_running_, LOG, foreign_storage::refresh_foreign_table(), scheduler_thread_, run_benchmark_import::tables, thread_wait_duration_, wait_condition_, and wait_mutex_.

Referenced by startHeavyDBServer().

35  {
36  if (is_program_running && !is_scheduler_running_) {
37  is_scheduler_running_ = true;
38  scheduler_thread_ = std::thread([&is_program_running]() {
39  while (is_program_running && is_scheduler_running_) {
40  auto& sys_catalog = Catalog_Namespace::SysCatalog::instance();
41  // Exit if scheduler has been stopped asynchronously
42  if (!is_program_running || !is_scheduler_running_) {
43  return;
44  }
45  bool at_least_one_table_refreshed = false;
46  for (const auto& catalog : sys_catalog.getCatalogsForAllDbs()) {
47  // Exit if scheduler has been stopped asynchronously
48  if (!is_program_running || !is_scheduler_running_) {
49  return;
50  }
51  auto tables = catalog->getAllForeignTablesForRefresh();
52  for (auto table : tables) {
53  // Exit if scheduler has been stopped asynchronously
54  if (!is_program_running || !is_scheduler_running_) {
55  return;
56  }
57  try {
58  refresh_foreign_table(*catalog, table->tableName, false);
59  } catch (std::runtime_error& e) {
60  LOG(ERROR) << "Scheduled refresh for table \"" << table->tableName
61  << "\" resulted in an error. " << e.what();
62  }
63  has_refreshed_table_ = true;
64  at_least_one_table_refreshed = true;
65  }
66  }
67  if (at_least_one_table_refreshed) {
69  }
70  // Exit if scheduler has been stopped asynchronously
71  if (!is_program_running || !is_scheduler_running_) {
72  return;
73  }
74 
75  // A condition variable is used here (instead of a sleep call)
76  // in order to allow for thread wake-up, even in the middle
77  // of a wait interval.
78  std::unique_lock<std::mutex> wait_lock(wait_mutex_);
79  wait_condition_.wait_for(wait_lock, thread_wait_duration_);
80  }
81  });
82  }
83 }
#define LOG(tag)
Definition: Logger.h:216
void refresh_foreign_table(Catalog_Namespace::Catalog &catalog, const std::string &table_name, const bool evict_cached_entries)
static SysCatalog & instance()
Definition: SysCatalog.h:341

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void foreign_storage::ForeignTableRefreshScheduler::stop ( )
static

Definition at line 85 of file ForeignTableRefreshScheduler.cpp.

References is_scheduler_running_, scheduler_thread_, and wait_condition_.

Referenced by startHeavyDBServer().

85  {
87  is_scheduler_running_ = false;
88  wait_condition_.notify_one();
89  scheduler_thread_.join();
90  }
91 }

+ Here is the caller graph for this function:

Member Data Documentation

std::atomic< bool > foreign_storage::ForeignTableRefreshScheduler::has_refreshed_table_ {false}
staticprivate

Definition at line 42 of file ForeignTableRefreshScheduler.h.

Referenced by hasRefreshedTable(), resetHasRefreshedTable(), and start().

std::atomic< bool > foreign_storage::ForeignTableRefreshScheduler::is_scheduler_running_ {false}
staticprivate

Definition at line 39 of file ForeignTableRefreshScheduler.h.

Referenced by isRunning(), start(), and stop().

std::thread foreign_storage::ForeignTableRefreshScheduler::scheduler_thread_
staticprivate

Definition at line 41 of file ForeignTableRefreshScheduler.h.

Referenced by start(), and stop().

std::chrono::seconds foreign_storage::ForeignTableRefreshScheduler::thread_wait_duration_ {60}
staticprivate

Definition at line 40 of file ForeignTableRefreshScheduler.h.

Referenced by setWaitDuration(), and start().

std::condition_variable foreign_storage::ForeignTableRefreshScheduler::wait_condition_
staticprivate

Definition at line 44 of file ForeignTableRefreshScheduler.h.

Referenced by start(), and stop().

std::mutex foreign_storage::ForeignTableRefreshScheduler::wait_mutex_
staticprivate

Definition at line 43 of file ForeignTableRefreshScheduler.h.

Referenced by start().


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