#include <std_file_committer.hpp>
Граф наследования:unclear_file_committer_t:
В методе detect_nonactual_traces() просто оставляет traces неизменным. Ведь trace_stream_t не передает в traces номера реально актуальных файлов (содержащих последнюю транзакцию). А все остальные trace-файлы будут считаться неактульными.
В методе initialize() доводит "грязный" файл до нужного размера. Здесь есть важная особенность: если единственный trace-файл был поврежден и не содержит ни одной транзакции, то cчитается, что сбой произошел во время фиксации последней транзакции в trace-файле, но ничего в основной файл из транзакции еще не попало. В этом случае содержимое trace-файла можно проигнорироват. Но особеность в том, что нельзя определить общий объем основного файла БД. В этом случае в параметре total_page_count будет передано значение 0 и "грязный" файл сохраняет свой текущий размер.
В методе finalize() переименовывает получившийся файл под именем основного файла БД.
Если вызова finalize() не было (т.е. восстановление завершилось неудачно), то ничего не делает.
Метод is_insufficient_trace_info_allowed() всегда возвращает true.
Открытые члены | |
unclear_file_committer_t (const std::string &physic_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 | m_physic_name |
Физическое имя восстанавливаемой БД. | |
oess_1::file::file_t | m_file |
"Грязный" файл БД. Открывается в конструкторе. | |
oess_1::uint_t | m_page_size |
Размер одной страницы основного файла в байтах. | |
std::vector< oess_1::char_t > | m_io_buf |
Буфер для ввода/вывода в методе store_block. |
unclear_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.
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] |
Замещает committer_t.
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.
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.
oess_1::uint_t m_page_size [private] |
Размер одной страницы основного файла в байтах.
Выставляется в initialize().