#include <std_file_committer.hpp>
Граф наследования:std_file_committer_t:
В методе initialize() создает новый файл нужного размера с нулевым содержимым. Если существует актуальный snapshot, то первоначальное содержимое временного файла берется из актуального snapshot-а и только отсутствующие в snapshot-е страницы заполняются нулевыми значениями.
В методе finalize() переименовывает получившийся файл под именем основного файла БД.
Если вызова finalize() не было (т.е. восстановление завершилось неудачно), то удаляет временный файл в деструкторе.
Метод is_insufficient_trace_info_allowed() возвращает true, если при восстановлении был задействован актуальный snapshot-файл.
Открытые члены | |
std_file_committer_t (const std::string &physic_name) | |
Инициализирующий конструктор. | |
const std::string & | physic_name () const |
Получить физической имя БД с которой ведется работа. | |
void | set_result_file_name (const std::string &file_name) |
обратного воспроизведения. | |
Реализация унаследованных методов. | |
virtual void | detect_nonactual_traces (trace_file_number_set_t &traces) |
virtual void | initialize (oess_1::uint_t total_page_count, oess_1::uint_t page_size, oess_1::uint_t block_size) |
virtual void | finalize () |
virtual void | store_block (oess_1::uint_t ordinal, oess_1::uint_t block_index, const std::string &block_value) |
virtual bool | is_insufficient_trace_info_allowed () const |
Закрытые члены | |
std::string | make_tmp_file_name (const std::string &physic_name) |
восстанавливаемого значения. | |
Закрытые данные | |
std::string | m_physic_name |
Физическое имя восстанавливаемой БД. | |
std::auto_ptr< snapshot_collection_t > | m_snapshots |
Коллекция snapshot-ов, которая относиться к данной БД. | |
oess_1::file::file_t | m_file |
Файл для сохранения значения БД. | |
bool | m_is_file_exists |
Признак того, что файл должен быть уничтожен в деструкторе. | |
oess_1::uint_t | m_page_size |
Размер одной страницы основного файла в байтах. | |
std::vector< oess_1::char_t > | m_io_buf |
Буфер для ввода/вывода в методе store_block. | |
std::string | m_result_file_name |
успешного завершения процедуры обратного воспроизведения. |
std_file_committer_t | ( | const std::string & | physic_name | ) |
Инициализирующий конструктор.
physic_name | Физическое имя восстанавливаемой БД. |
void detect_nonactual_traces | ( | trace_file_number_set_t & | traces | ) | [virtual] |
Вызывается объектом trace_stream_t перед методом initialize() для того, чтобы определить точное множество trace-файлов для обратного воспроизведения. Если для БД поддерживались snapshot-ы, то часть trace-файлов можно будет проигнорировать т.к. их содержимое уже есть в snapshot-е. Но trace_stream_t не знает про существование snapshot-ов и о том, нужны ли они данному committer-у. Поэтому выбор конкретного подмножества trace-файлов для воспроизведения перекладывается на committer. Для этого trace_stream_t обращается к методу detect_nonactual_traces() и передает все множество найденых trace-файлов. Committer должен вычеркнуть из этого множества все trace-файлы, которые являются актуальными. В результате должно быть получено множество не актуальных trace-файлов, который безопасно могут быть проигнорированны. Если же все trace-файлы являются актуальными, то в итоге должно получиться пустое множество.
trace_stream_t передает в traces не все множество trace-файлов, а только те trace-файлы, актуальность который trace_stream_t не может проверить самостоятельно. Так, trace_stream_t точно знает номера trace-файлов, в которых содержится самая последняя транзакция (таких файлов может быть несколько). Поэтому на вход detect_nonactual_traces() может быть подано пустое множество.
Замещает committer_t.
Переопределяется в snapshot_file_committer_t.
void finalize | ( | ) | [virtual] |
Вызывается объектом trace_stream_t после завершения успешного восстановления БД.
Замещает committer_t.
void initialize | ( | oess_1::uint_t | total_page_count, | |
oess_1::uint_t | page_size, | |||
oess_1::uint_t | block_size | |||
) | [virtual] |
bool is_insufficient_trace_info_allowed | ( | ) | const [virtual] |
Должен возвращать true, если ситуация, когда в актуальном можестве trace-файлов (возвращаемом методом reduce_traces_set()) допускается отсутствие полной информации о содержимом БД. Например, если для восстановления БД кроме trace-файлов используются еще и snapshot-ы, то части trace-файлов (которые были сохранены в snapshot-е) может просто не быть. В этом случае процедура обратного восспроизведения определит, что восстановочной информации недостаточно (т.к. она не знает про существование snapshot-ов). trace_stream_t вызовет данный метод и, если метод, возвратит false, то trace_stream_t породит исключение о недостаточности восстановочной информации. Если же данный метод возвратит true, то процедура обратного воспроизведения будет считаться успешно завершенной.
Замещает committer_t.
std::string make_tmp_file_name | ( | const std::string & | physic_name | ) | [private] |
восстанавливаемого значения.
physic_name | Физическое имя восстанавливаемой БД. |
void store_block | ( | oess_1::uint_t | ordinal, | |
oess_1::uint_t | block_index, | |||
const std::string & | block_value | |||
) | [virtual] |
Вызвается объектом trace_stream_t при необходимости сохранения значения фрагмента страницы в восстанавливаемом основном файле.
Размер блока задается в методе initialize().
Замещает committer_t.
bool m_is_file_exists [private] |
Признак того, что файл должен быть уничтожен в деструкторе.
Выставляется в initialize(), если файл был успешно открыт.
Сбрасывается в finalize(), если файл был успешно переименован.
oess_1::uint_t m_page_size [private] |
Размер одной страницы основного файла в байтах.
Выставляется в initialize().
std::string m_result_file_name [private] |
успешного завершения процедуры обратного воспроизведения.
По умолчанию имеет значение имени основного файла БД.