OmniSciDB  471d68cefb
 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 98 of file ForeignTableRefreshScheduler.cpp.

References has_refreshed_table_.

98  {
99  return has_refreshed_table_;
100 }
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 = mapd_unique_lock<mapd_shared_mutex>(
30 }
static void invalidateCaches()
static std::shared_ptr< MutexType > getMutex(const LockType lockType, const KeyType &key)
Definition: LegacyLockMgr.h:51

+ 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 94 of file ForeignTableRefreshScheduler.cpp.

References is_scheduler_running_.

94  {
95  return is_scheduler_running_;
96 }
void foreign_storage::ForeignTableRefreshScheduler::resetHasRefreshedTable ( )
static

Definition at line 102 of file ForeignTableRefreshScheduler.cpp.

References has_refreshed_table_.

102  {
103  has_refreshed_table_ = false;
104 }
void foreign_storage::ForeignTableRefreshScheduler::setWaitDuration ( int64_t  duration_in_seconds)
static

Definition at line 90 of file ForeignTableRefreshScheduler.cpp.

References thread_wait_duration_.

90  {
91  thread_wait_duration_ = std::chrono::seconds{duration_in_seconds};
92 }
void foreign_storage::ForeignTableRefreshScheduler::start ( std::atomic< bool > &  is_program_running)
static

Definition at line 32 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 startMapdServer().

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

+ 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 82 of file ForeignTableRefreshScheduler.cpp.

References is_scheduler_running_, scheduler_thread_, and wait_condition_.

Referenced by startMapdServer().

82  {
84  is_scheduler_running_ = false;
85  wait_condition_.notify_one();
86  scheduler_thread_.join();
87  }
88 }

+ 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: