libfoedus-core
FOEDUS Core Library
foedus::log::MetaLogger Class Referencefinal

A log writer for metadata operation. More...

Detailed Description

A log writer for metadata operation.

This logger instance is created only in the master engine.

Definition at line 45 of file meta_logger_impl.hpp.

#include <meta_logger_impl.hpp>

Inheritance diagram for foedus::log::MetaLogger:
Collaboration diagram for foedus::log::MetaLogger:

Public Member Functions

 MetaLogger (Engine *engine)
 
ErrorStack initialize_once () override
 
ErrorStack uninitialize_once () override
 
 MetaLogger ()=delete
 
 MetaLogger (const MetaLogger &other)=delete
 
MetaLoggeroperator= (const MetaLogger &other)=delete
 
- Public Member Functions inherited from foedus::DefaultInitializable
 DefaultInitializable ()
 
virtual ~DefaultInitializable ()
 
 DefaultInitializable (const DefaultInitializable &)=delete
 
DefaultInitializableoperator= (const DefaultInitializable &)=delete
 
ErrorStack initialize () override final
 Typical implementation of Initializable::initialize() that provides initialize-once semantics. More...
 
ErrorStack uninitialize () override final
 Typical implementation of Initializable::uninitialize() that provides uninitialize-once semantics. More...
 
bool is_initialized () const override final
 Returns whether the object has been already initialized or not. More...
 
- Public Member Functions inherited from foedus::Initializable
virtual ~Initializable ()
 

Friends

std::ostream & operator<< (std::ostream &o, const MetaLogger &v)
 

Constructor & Destructor Documentation

foedus::log::MetaLogger::MetaLogger ( Engine engine)
inlineexplicit

Definition at line 47 of file meta_logger_impl.hpp.

47 : engine_(engine), control_block_(nullptr) {}
foedus::log::MetaLogger::MetaLogger ( )
delete
foedus::log::MetaLogger::MetaLogger ( const MetaLogger other)
delete

Member Function Documentation

ErrorStack foedus::log::MetaLogger::initialize_once ( )
overridevirtual

Implements foedus::DefaultInitializable.

Definition at line 36 of file meta_logger_impl.cpp.

References ASSERT_ND, CHECK_ERROR, foedus::log::LogOptions::construct_meta_log_path(), foedus::fs::create_directories(), foedus::log::LogOptions::emulation_, foedus::fs::exists(), foedus::fs::DirectIoFile::get_current_offset(), foedus::soc::SharedMemoryRepo::get_global_memory_anchors(), foedus::savepoint::SavepointManager::get_meta_logger_offsets(), foedus::Engine::get_options(), foedus::savepoint::SavepointManager::get_saved_durable_epoch(), foedus::Engine::get_savepoint_manager(), foedus::soc::SocManager::get_shared_memory_repo(), foedus::Engine::get_soc_manager(), foedus::log::MetaLogControlBlock::initialize(), foedus::Engine::is_master(), foedus::kRetOk, foedus::EngineOptions::log_, foedus::soc::GlobalMemoryAnchors::meta_logger_memory_, foedus::fs::DirectIoFile::open(), and WRAP_ERROR_CODE.

36  {
37  ASSERT_ND(engine_->is_master());
38  control_block_ = engine_->get_soc_manager()->get_shared_memory_repo()
40  control_block_->initialize();
41  std::memset(control_block_->buffer_, 0, sizeof(control_block_->buffer_));
42 
43  fs::Path path(engine_->get_options().log_.construct_meta_log_path());
44  if (!fs::exists(path.parent_path())) {
45  fs::create_directories(path.parent_path());
46  }
47 
49  &control_block_->oldest_offset_,
50  &control_block_->durable_offset_);
51 
52  // Open log file
53  current_file_ = new fs::DirectIoFile(path, engine_->get_options().log_.emulation_);
54  WRAP_ERROR_CODE(current_file_->open(true, true, true, true));
55  CHECK_ERROR(truncate_non_durable(engine_->get_savepoint_manager()->get_saved_durable_epoch()));
56  ASSERT_ND(control_block_->durable_offset_ == current_file_->get_current_offset());
57 
58  stop_requested_ = false;
59  logger_thread_ = std::move(std::thread(&MetaLogger::meta_logger_main, this));
60  return kRetOk;
61 }
GlobalMemoryAnchors * get_global_memory_anchors()
ErrorCode open(bool read, bool write, bool append, bool create)
Tries to open the file for the specified volume.
uint64_t get_current_offset() const
log::MetaLogControlBlock * meta_logger_memory_
Tiny memory for metadata logger.
const EngineOptions & get_options() const
Definition: engine.cpp:39
bool is_master() const
Returns if this engine object is a master instance.
Definition: engine.cpp:68
savepoint::SavepointManager * get_savepoint_manager() const
See Savepoint Manager.
Definition: engine.cpp:53
bool create_directories(const Path &p, bool sync=false)
Recursive mkdir (mkdirs).
Definition: filesystem.cpp:89
bool exists(const Path &p)
Returns if the file exists.
Definition: filesystem.hpp:128
std::string construct_meta_log_path() const
metadata log file is placed in node-0/logger-0 folder
Definition: log_options.cpp:51
#define CHECK_ERROR(x)
This macro calls x and checks its returned value.
foedus::fs::DeviceEmulationOptions emulation_
Settings to emulate slower logging device.
const ErrorStack kRetOk
Normal return value for no-error case.
soc::SocManager * get_soc_manager() const
See SOC and IPC.
Definition: engine.cpp:59
void get_meta_logger_offsets(uint64_t *oldest_offset, uint64_t *durable_offset) const
Returns the saved information of metadata logger in lateset savepoint.
#define ASSERT_ND(x)
A warning-free wrapper macro of assert() that has no performance effect in release mode even when 'x'...
Definition: assert_nd.hpp:72
#define WRAP_ERROR_CODE(x)
Same as CHECK_ERROR(x) except it receives only an error code, thus more efficient.
SharedMemoryRepo * get_shared_memory_repo()
Returns the shared memories maintained across SOCs.
Definition: soc_manager.cpp:38

Here is the call graph for this function:

MetaLogger& foedus::log::MetaLogger::operator= ( const MetaLogger other)
delete
ErrorStack foedus::log::MetaLogger::uninitialize_once ( )
overridevirtual

Implements foedus::DefaultInitializable.

Definition at line 164 of file meta_logger_impl.cpp.

References ASSERT_ND, foedus::fs::DirectIoFile::close(), foedus::Engine::is_master(), foedus::kRetOk, foedus::log::MetaLogControlBlock::logger_wakeup_, foedus::soc::SharedPolling::signal(), and foedus::log::MetaLogControlBlock::uninitialize().

164  {
165  ASSERT_ND(engine_->is_master());
166  if (logger_thread_.joinable()) {
167  {
168  stop_requested_ = true;
169  control_block_->logger_wakeup_.signal();
170  }
171  logger_thread_.join();
172  }
173  control_block_->uninitialize();
174  if (current_file_) {
175  current_file_->close();
176  delete current_file_;
177  current_file_ = nullptr;
178  }
179  return kRetOk;
180 }
soc::SharedPolling logger_wakeup_
the logger sleeps on this variable
bool close()
Close the file if not yet closed.
bool is_master() const
Returns if this engine object is a master instance.
Definition: engine.cpp:68
const ErrorStack kRetOk
Normal return value for no-error case.
#define ASSERT_ND(x)
A warning-free wrapper macro of assert() that has no performance effect in release mode even when 'x'...
Definition: assert_nd.hpp:72
void signal()
Signal it to let waiters exit.

Here is the call graph for this function:

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  o,
const MetaLogger v 
)
friend

Definition at line 228 of file meta_logger_impl.cpp.

228  {
229  o << "<MetaLogger>"
230  << "<current_file_>";
231  if (v.current_file_) {
232  o << *v.current_file_;
233  } else {
234  o << "nullptr";
235  }
236  o << "</current_file_>"
237  << "</MetaLogger>";
238  return o;
239 }

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