Открытые члены | |
reverse_loader_t (const std::string &physic_name, oess_1::uint_t page_size, const trace_file_number_set_t &all_traces, std::ostream *verbose_stream=0) | |
Инициализирующий конструктор. | |
void | reduce_traces_set (const trace_file_number_set_t &nonactual_traces) |
существующих trace-файлов. | |
virtual bool | next (const oess_1::char_t *&image, oess_1::uint_t &image_size, trace_file_number_set_t &used_traces) |
Прочитать очередную транзакцию. | |
Закрытые члены | |
void | try_open_next_file () |
Попробовать открыть очередной trace-файл. | |
void | find_trx () |
Найти очередную транзакцию. | |
void | reinit_search () |
Переинициализировать переменные для начала нового поиска. | |
void | find_first_trx_page () |
Найти первую страницу транзакции. | |
void | pop_up_trx () |
Поднять всю транзакцию. | |
void | pop_up_and_check_page () |
Поднять очередную страницу хранилища и проверить ее целостность. | |
void | go_to_next_page () |
Переход к следущей странице в trace-файле. | |
void | go_to_next_page_no_throw_at_end () |
Переход к следующей странице без исключения в конце trace. | |
bool | is_all_trx_loaded () const |
Проверка того, что вся транзакция загружена в m_image. | |
void | check_trx_integrity () const |
Проверка корректности содержимого m_image. | |
bool | is_current_trx_page () const |
текущей транзакции. | |
void | store_page_data () |
Сохранить данные из текущей страницы в m_image. | |
oess_1::uint_t | page_size () const |
Возвратить размер одной страницы trace-файла. | |
Закрытые данные | |
std::string | m_physic_name |
Физическое имя БД с которой нужно работать. | |
oess_1::uint_t | m_page_size |
Размер страницы trace-файла. | |
std::ostream * | m_verbose_stream |
выполнения обратного просмотра. | |
trace_file_number_set_t | m_all_traces |
часть trace-stream. | |
bool | m_is_current_file_open |
Признак того, что текущий файл открыт. | |
trace_file_number_t | m_current_file_number |
Номер текущего trace-файла. | |
oess_1::uint_t | m_current_file_page |
Номер текущей страницы в trace-файле. | |
std::vector< oess_1::char_t > | m_current_file_content |
Информация, которая оносится к текущей транзакции. | |
std::vector< oess_1::char_t > | m_image |
Буфер, в котором накапливается образ транзакции. | |
oess_1::uint_t | m_chain_page_ordinal |
Порядковый номер текущей страницы в цепочке. | |
oess_1::uint_t | m_image_len |
Длина образа транзакции. | |
oess_1::uint_t | m_image_checksum |
Контрольная сумма образа транзакции. | |
trace_file_number_set_t | m_used_traces |
Информация, которая актуальна только для текущей страницы. | |
oess_1::uint_t | m_current_ordinal |
Порядковый номер страницы в транзакции. | |
oess_1::uint_t | m_current_count |
Общее количество страниц в транзакции. | |
oess_1::uint_t | m_current_image_len |
Длина образа транзакции. | |
oess_1::uint_t | m_current_image_checksum |
Контрольная сумма образа транзакции. |
reverse_loader_t | ( | const std::string & | physic_name, | |
oess_1::uint_t | page_size, | |||
const trace_file_number_set_t & | all_traces, | |||
std::ostream * | verbose_stream = 0 | |||
) |
Инициализирующий конструктор.
physic_name | Физическое имя БД с которой нужно работать. |
page_size | Размер страницы trace-файла в байтах. |
all_traces | Множество номеров существующих trace-файлов. |
verbose_stream | Необязательны поток вывода информации о ходе выполнения обратного просмотра. |
void check_trx_integrity | ( | ) | const [private] |
Проверка корректности содержимого m_image.
Проверяются размеры и контрольные суммы.
broken_trx_t,если | образ транзакции в m_image не корректен. |
void find_first_trx_page | ( | ) | [private] |
Найти первую страницу транзакции.
Если первая страница найдена, то инициализируются все атрибуты, относящиеся к текущей транзакции.
Содержимое первой страницы транзакции поднимается в m_image.
Возврат из функции происходит только, если найдено начало очередной транзакции. В проивном случае из функции происходит по исключению.
void find_trx | ( | ) | [private] |
Найти очередную транзакцию.
Если транзакция найдена, то все ее значение, включая image_type, находится в m_image.
void go_to_next_page | ( | ) | [private] |
Переход к следущей странице в trace-файле.
Увеличивается значение m_trx_current с учетом возможного завершения текущего файла. Если текущий файл исчерпан, но есть следующий trace-файл, то осуществляется переход к следующему trace-файлу.
При исчерпании всех trace-файлов порождается исключение end_of_trace_ex_t.
void go_to_next_page_no_throw_at_end | ( | ) | [private] |
Переход к следующей странице без исключения в конце trace.
Если в go_to_next_page обнаруживается конец всего trace-потока, то исключение end_of_trace_ex_t не порождается.
bool next | ( | const oess_1::char_t *& | image, | |
oess_1::uint_t & | image_size, | |||
trace_file_number_set_t & | used_traces | |||
) | [virtual] |
Прочитать очередную транзакцию.
При первом вызове пытается прочитать последнюю существующую транзакцию из trace-файла. При следующем вызове -- предпоследнюю и т.д., пока не будет достигнуто начало trace-stream.
image | Приемник указателя на образ транзакции. |
image_size | Приемник размера транзакции. |
used_traces | Приемник номеров trace-файлов из которых была извлечена актуальная информация. Фактически, это номера trace-файлов, в которых находился образ транзакции. |
void pop_up_and_check_page | ( | ) | [private] |
Поднять очередную страницу хранилища и проверить ее целостность.
trace_file::broken_page_ex_t,если | страница имеет меньший размер или у нее не совпадает контрольная сумма. |
void pop_up_trx | ( | ) | [private] |
Поднять всю транзакцию.
Должна вызываться после успешного возврата из find_first_trx_page().
Возврат из функции происходит по извлечении всех страниц транзакции, либо по исключению при возникновении ошибок.
void reduce_traces_set | ( | const trace_file_number_set_t & | nonactual_traces | ) |
существующих trace-файлов.
После того, как метод next() будет вызван в первый раз и будет найдена последняя транзакция, появится возможность определить, какие trace-файлы являются неактуальными (с учетом существующих snapshot-ов). Если построить такой список неактуальных trace-файлов удается, то нет смысла их обрабатывать. Поэтому, построенный список передается в данный метод, для того, чтобы модифицировать текущее значение m_all_traces.
nonactual_traces | Множество неактуальных trace-файлов, которые не нуждаются в обработке. Может быть пустым, что означает, что должны обрабатываться все trace-файлы. |
void store_page_data | ( | ) | [private] |
Сохранить данные из текущей страницы в m_image.
Поскольку эти данные попадают в транзакцию, то номер текущего файла помещается в m_used_traces.
void try_open_next_file | ( | ) | [private] |
Попробовать открыть очередной trace-файл.
Перебирает множество m_all_traces в обратном порядке и пробует открыть очередной файл. После каждой попытке соответствующий номер trace-файла из m_all_traces удаляется.
Отсутствующие файлы просто пропускаются (без попрождения исключений), а их номера вычеркиваются из m_all_traces.
Номер первого успешно открытого файла помещается в m_current_file_number.
Если множество m_all_traces оказывается пустым, то порождается исключение end_of_trace_ex_t.
Если файл успешно открывается, то все его содержимое загружается в m_current_file_content.
trace_file_number_set_t m_all_traces [private] |
часть trace-stream.
В самом начале это множество имеет значение параметра all_traces конструктора. Затем, по мере продвижения по trace-stream из него изымаются номера уже обработанных файлов. В результате, это множество должно оказаться пустым.
oess_1::uint_t m_chain_page_ordinal [private] |
Порядковый номер текущей страницы в цепочке.
Устанавливается при нахождении первой страницы очередной транзакции, затем уменьшается на 1 при переходе к следующей странице.
Отличается от m_current_ordinal тем, что m_current_ordinal содерживает порядковый номер, извлеченный из m_current_page. А значение m_chain_page_ordinal вычисляется самим классом reverse_loader_t.
std::vector< oess_1::char_t > m_current_file_content [private] |
Содержимое текущего файла.
Содержит актуальное значение только, если m_is_current_file_open == true.
trace_file_number_t m_current_file_number [private] |
Номер текущего trace-файла.
Содержит актуальное значение только, если m_is_current_file_open == true.
oess_1::uint_t m_current_file_page [private] |
Номер текущей страницы в trace-файле.
Содержит актуальное значение только, если m_is_current_file_open == true.
std::vector< oess_1::char_t > m_image [private] |
Буфер, в котором накапливается образ транзакции.
Размер этого буфера устанавливается в нужное значение при обнаружении первой страницы транзакции (точнее, когда при обратном просмотре будет обнаружена последняя страница образа транзакции).
oess_1::uint_t m_image_checksum [private] |
Контрольная сумма образа транзакции.
Содержит корректное значение только после того, как будет найдена первая страница очередной транзакции.
oess_1::uint_t m_image_len [private] |
Длина образа транзакции.
Содержит корректное значение только после того, как будет найдена первая страница очередной транзакции.
trace_file_number_set_t m_used_traces [private] |
Множество номеров trace-файлов, из которых информация попала в образ текущей транзакции.
Переинициализируется при обнаружении очередной транзакции.