Граф наследования:chain_ostream_t:
Если при открытии текущего trace-файла выясняется, что его размер не кратен размеру страницы, то trace-файл автоматически выравнивается на границу страницы.
Для сохранения образа транзакции необходимо вызывать метод append.
// Значение контрольной суммы всей страницы. oess_1::uint_t m_checksum; // Порядковый номер этой страницы в образе всей транзакции. oess_1::uint_t m_chain_ordinal; // Общее количество страниц в образе транзакции. oess_1::uint_t m_chain_size; // Длина исходного образа транзакции в байтах. oess_1::uint_t m_image_len; // Контрольная сумма исходного образа. oess_1::uint_t m_image_checksum; oess_1::uint_t m_reserved[ 3 ];
Открытые члены | |
chain_ostream_t (const std::string &physic_name, trace_file_number_set_t &trace_file_numbers, oess_1::uint_t trace_file_page_size, oess_1::uint_t trace_file_size_limit, oess_1::uint_t trace_stream_buffered_pages) | |
Инициализирующий конструктор. | |
virtual void | append (const oess_1::char_t *image, oess_1::uint_t image_size) |
Защищенные члены | |
oess_1::uint_t | page_size () const |
Определить размер одной страницы. | |
void | open_file_to_append (oess_1::uint_t file_ordinal) |
Открыть файл для дописывания. | |
void | prepare_new_transaction (const oess_1::char_t *image, oess_1::uint_t image_size) |
Выполнить подготовку к сохранению новой транзакции. | |
void | push_out_current_page () |
Вытолкнуть текущую страницу в файл. | |
void | complete_current_page () |
Выполнят заполнение текущей страницы. | |
void | flush_buffered_pages () |
Запись буферизированных страниц на диск. | |
virtual void | switch_to_next_trace_file () |
Перейти к следующему trace-файлу. | |
void | start_new_page () |
Проинициализировать m_buf для новой страницы. | |
oess_1::uint_t | current_file_to_append () const |
для дописывания новой транзакции в конец trace-stream. | |
Реализация унаследованных методов. | |
virtual oess_1::char_t * | out_reserve (size_t item_count, size_t item_size, size_t &item_available) |
можно записывать данные. | |
virtual void | out_shift (size_t item_count, size_t item_size) |
Сдвинуть указатель. | |
Защищенные данные | |
std::string | m_physic_name |
Физическое имя БД, для которой используется trace-файл. | |
trace_file_number_set_t & | m_trace_file_numbers |
Не должно быть пустым. | |
oess_1::uint_t | m_trace_file_page_size |
Размер одной страницы trace-файла в байтах. | |
const oess_1::uint_t | m_trace_file_size_limit |
Максимальный размер одного trace-файла в байтах. | |
oess_1::file::file_t | m_file |
Текущий trace-файл, с которым идет работа. | |
std::vector< oess_1::char_t > | m_buf |
Образ текущей страницы. | |
oess_1::uint_t | m_buf_size |
Количество занятых байт в образе страницы. | |
oess_1::io::mem_buf_t | m_buffered_pages |
Буфер для промежуточного сохранения страниц перед записью. | |
Параметры транзакции. | |
Значения, которые остаются корректными и актуальными только во время работы метода append(). | |
oess_1::uint_t | m_image_len |
Длина образа транзакции. | |
oess_1::uint_t | m_image_checksum |
Контрольная сумма образа транзакции. | |
oess_1::uint_t | m_chain_page_ordinal |
Номер текущей страницы внутри транзакции. | |
oess_1::uint_t | m_chain_page_count |
Количество всех страниц trace-файла для образа транзакции. |
chain_ostream_t | ( | const std::string & | physic_name, | |
trace_file_number_set_t & | trace_file_numbers, | |||
oess_1::uint_t | trace_file_page_size, | |||
oess_1::uint_t | trace_file_size_limit, | |||
oess_1::uint_t | trace_stream_buffered_pages | |||
) |
Инициализирующий конструктор.
Сразу открывает текущий trace-файл и, если нужно, обеспечивает его выравнивание.
physic_name | Физическое имя БД, с которой происходит работа. |
trace_file_numbers | Множество номеров существующих trace-файлов. Не должно быть пустым. |
trace_file_page_size | Размер одной страницы trace-файла в байтах. |
trace_file_size_limit | Максимальная длина одного trace-файла в байтах. |
trace_stream_buffered_pages | Количество страниц, которые могут быть буферизированны в памяти перед записью на диск. |
void append | ( | const oess_1::char_t * | image, | |
oess_1::uint_t | image_size | |||
) | [virtual] |
Сохранить описание транзакции в файле.
Переопределяется в last_trx_only_chain_ostream_t.
void complete_current_page | ( | ) | [protected] |
Выполнят заполнение текущей страницы.
Выставляет поля заголовка и вычисляет checksum.
Увеличивает значение m_chain_page_ordinal на единицу.
oess_1::uint_t current_file_to_append | ( | ) | const [inline, protected] |
для дописывания новой транзакции в конец trace-stream.
void flush_buffered_pages | ( | ) | [protected] |
Запись буферизированных страниц на диск.
Если текущий trace-файл оказывается заполненым, то осуществляется автоматический переход к следующему файлу.
void open_file_to_append | ( | oess_1::uint_t | file_ordinal | ) | [protected] |
Открыть файл для дописывания.
Если размер открытого файла не кратен размеру страницы, то производит выравнивание путем дописывания в конец файла необходимого количества нулей.
file_ordinal | Порядковый номер trace-файла. |
oess_1::char_t * out_reserve | ( | size_t | item_count, | |
size_t | item_size, | |||
size_t & | item_available | |||
) | [protected, virtual] |
можно записывать данные.
Если нет достаточного объема данных для чтения хотя бы одного элемента, то должно порождаться исключение.
Замещает obinstream_t.
void out_shift | ( | size_t | item_count, | |
size_t | item_size | |||
) | [protected, virtual] |
Сдвинуть указатель.
Вызывается после успешной записи в буфер, указатель на который был возвращен методом out_reserve.
Замещает obinstream_t.
void prepare_new_transaction | ( | const oess_1::char_t * | image, | |
oess_1::uint_t | image_size | |||
) | [protected] |
Выполнить подготовку к сохранению новой транзакции.
Формирует значения полей m_image_len, m_image_checksum.
Вычисляет значение m_chain_page_ordinal.
Обнуляет m_chain_page_ordinal.
void push_out_current_page | ( | ) | [protected] |
Вытолкнуть текущую страницу в файл.
Заполняет m_buf заголовком и checksum, после чего записывает страницу в конец текущего trace-файла. Если же текущий trace-файл уже достиг максимального размера, то автоматически начинает новый trace-файл.
void start_new_page | ( | ) | [inline, protected] |
Проинициализировать m_buf для новой страницы.
Обнуляет m_buf и выставляет m_buf_size так, что страница содержит только заголовок и checksum.
void switch_to_next_trace_file | ( | ) | [protected, virtual] |
Перейти к следующему trace-файлу.
Объявлен виртуальным методом для того, чтобы дать возможность производным классам выполнить какие-то действия при переходе к следующему trace-файлу.
Переопределяется в last_trx_only_chain_ostream_t.
std::vector< oess_1::char_t > m_buf [protected] |
Образ текущей страницы.
В процессе формирования страницы не содержит заголовка. Заголовок добавляется только перед вытеснением страницы в файл.
oess_1::uint_t m_buf_size [protected] |
Количество занятых байт в образе страницы.
Учитывает так же поля checksum и header.