OmniSciDB  a5dc49c757
 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 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 90 of file ForeignTableRefreshScheduler.cpp.

References has_refreshed_table_.

90  {
91  return has_refreshed_table_;
92 }
bool foreign_storage::ForeignTableRefreshScheduler::isRunning ( )
static

Definition at line 86 of file ForeignTableRefreshScheduler.cpp.

References is_scheduler_running_.

86  {
87  return is_scheduler_running_;
88 }
void foreign_storage::ForeignTableRefreshScheduler::resetHasRefreshedTable ( )
static

Definition at line 94 of file ForeignTableRefreshScheduler.cpp.

References has_refreshed_table_.

94  {
95  has_refreshed_table_ = false;
96 }
void foreign_storage::ForeignTableRefreshScheduler::setWaitDuration ( int64_t  duration_in_seconds)
static

Definition at line 82 of file ForeignTableRefreshScheduler.cpp.

References thread_wait_duration_.

82  {
83  thread_wait_duration_ = std::chrono::seconds{duration_in_seconds};
84 }
void foreign_storage::ForeignTableRefreshScheduler::start ( std::atomic< bool > &  is_program_running)
static

Definition at line 27 of file ForeignTableRefreshScheduler.cpp.

References logger::ERROR, has_refreshed_table_, Catalog_Namespace::SysCatalog::instance(), 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().

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

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

References is_scheduler_running_, scheduler_thread_, and wait_condition_.

Referenced by startHeavyDBServer().

74  {
76  is_scheduler_running_ = false;
77  wait_condition_.notify_one();
78  scheduler_thread_.join();
79  }
80 }

+ 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 41 of file ForeignTableRefreshScheduler.h.

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

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

Definition at line 38 of file ForeignTableRefreshScheduler.h.

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

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

Definition at line 40 of file ForeignTableRefreshScheduler.h.

Referenced by start(), and stop().

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

Definition at line 39 of file ForeignTableRefreshScheduler.h.

Referenced by setWaitDuration(), and start().

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

Definition at line 43 of file ForeignTableRefreshScheduler.h.

Referenced by start(), and stop().

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

Definition at line 42 of file ForeignTableRefreshScheduler.h.

Referenced by start().


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