#include <std_chain_storage.hpp>
Граф наследования:std_chain_storage_t:
Открытые члены | |
std_chain_storage_t (const std::string &physic_name, const std::string &main_file_name, const std::string &work_file_name, const config_t &config, bool is_read_only, bool is_auto_repair_enabled) | |
Реализация унаследованных методов. | |
virtual void | trx_start () |
Начать транзакцию. | |
virtual void | trx_commit () |
Зафиксировать текущую транзакцию. | |
virtual void | trx_rollback () |
Откатить текущую транзакцию. | |
virtual chain_id_t | chain_create (oess_1::io::istream_t &from, oess_1::uint_t length) |
Создать цепочку. | |
virtual void | chain_destroy (const chain_id_t &chain) |
Уничтожить цепочку. | |
virtual void | chain_load (const chain_id_t &chain, oess_1::io::ostream_t &to, oess_1::uint_t max_length) |
Загрузить цепочку в память. | |
virtual void | chain_update (const chain_id_t &chain, oess_1::io::istream_t &from, oess_1::uint_t length) |
Перезаписать значение цепочки. | |
Закрытые члены | |
void | cleanup () |
void | try_open_main_file (bool is_repair_enabled) |
void | try_recover_main_file () |
void | try_open_existing_main_file () |
void | initialize_open_storage () |
void | ensure_trx_started () |
void | make_transaction_log () |
void | commit_transaction_to_main_file () |
chain_id_t | write_chain (page_accessor_t &page_accessor, header_processor_t &header_processor, const chain_id_t &head, oess_1::io::istream_t &from, oess_1::uint_t length) |
void | deallocate_chain (page_accessor_t &page_accessor, header_processor_t &header_processor, const chain_id_t &head) |
void | load_chain (page_accessor_t &page_accessor, header_processor_t &header_processor, const chain_id_t &head, oess_1::io::ostream_t &to, oess_1::uint_t length) |
oess_1::uint_t | write_block (page_accessor_t &page_accessor, const chain_id_t &block, oess_1::io::istream_t &from, oess_1::uint_t length) |
oess_1::uint_t | load_block (page_accessor_t &page_accessor, const chain_id_t &block, oess_1::io::ostream_t &to, oess_1::uint_t length) |
header_processor_t & | get_header_processor () |
Низкоуровневые двойники public-методов. | |
void | lo_trx_commit () |
Выполнить фиксацию транзакции. | |
void | lo_trx_rollback () |
Выполнить откат транзакции. | |
chain_id_t | lo_chain_create (oess_1::io::istream_t &from, oess_1::uint_t length) |
Создать новую цепочку и сохранить в нее значение объекта. | |
void | lo_chain_destroy (const chain_id_t &head) |
Удалить существующую цепочку. | |
void | lo_chain_load (const chain_id_t &chain, oess_1::io::ostream_t &to, oess_1::uint_t max_length) |
Загрузить значение цепочки. | |
void | lo_chain_update (const chain_id_t &chain, oess_1::io::istream_t &from, oess_1::uint_t length) |
Обновить значение цепочки. | |
Закрытые данные | |
const std::string | m_physic_name |
Физическое имя БД, с которой происходит работа. | |
const std::string | m_main_file_name |
Имя основного файла БД. | |
const std::string | m_work_file_name |
Игнорируется, если БД открывается в режиме read-only. | |
const config_t | m_config |
Конфигурация для работы. | |
page_index_calculator_t | m_calculator |
Параметры хранилища. | |
bool | m_is_read_only |
true, если БД открывается в режиме read-only. | |
bool | m_is_ok |
true, если с БД все нормально. | |
bool | m_is_trx |
true, если транзакция начата. | |
std::auto_ptr< oess_1::db::storage::trx::trace_stream_t > | m_trace_stream |
trace-stream для этого хранилища. | |
oess_1::file::file_t | m_main_file |
oess_1::uint_t | m_main_file_logic_length |
std::auto_ptr< cache_t > | m_cache |
Кэш основного файла. | |
std::auto_ptr< dirty_page_storage_t > | m_dirty_pages |
Хранилище грязных страниц транзакции. | |
std::auto_ptr< page_accessor_t > | m_page_accessor |
транзакций. | |
std::auto_ptr< header_processor_t > | m_header_processor |
всего хранилища. |
std_chain_storage_t | ( | const std::string & | physic_name, | |
const std::string & | main_file_name, | |||
const std::string & | work_file_name, | |||
const config_t & | config, | |||
bool | is_read_only, | |||
bool | is_auto_repair_enabled | |||
) |
Инициализирующий конструктор.
Предпринимает попытку открытия БД.
physic_name | Физическое имя БД, с которой происходит работа. |
main_file_name | Имя основного файла БД. |
work_file_name | Имя для основного файла БД на время работы. Игнорируется, если БД открывается в режиме read-only. |
config | Конфигурация для работы. |
is_read_only | true, если БД открывается в режиме read-only. |
is_auto_repair_enabled | Нужно ли пытаться восстанавливать БД, если обнаруживается, что она повреждена. |
chain_id_t chain_create | ( | oess_1::io::istream_t & | from, | |
oess_1::uint_t | length | |||
) | [virtual] |
void chain_load | ( | const chain_id_t & | chain, | |
oess_1::io::ostream_t & | to, | |||
oess_1::uint_t | max_length | |||
) | [virtual] |
Загрузить цепочку в память.
Если цепочка короче max_length, то в to помещается все значение цепочки. В противном случае в to загружается max_length байт.
Замещает chain_storage_t.
void chain_update | ( | const chain_id_t & | chain, | |
oess_1::io::istream_t & | from, | |||
oess_1::uint_t | length | |||
) | [virtual] |
Перезаписать значение цепочки.
Если новое значение цепоки длинее/короче старого значения, то цепочка в хранилище автоматически будет расширена/усечена.
Замещает chain_storage_t.
void cleanup | ( | ) | [private] |
Выполнение полной очистки ресурсов без выпуска наружу исключений (перехватываются только производные от std::exception исключения).
Значение атрибута m_is_ok не изменяется.
void commit_transaction_to_main_file | ( | ) | [private] |
Вытолкнуть все содержимое из m_dirty_pages в основной файл БД.
После завершения этого метода логическая длина файла должна совпадать с физической длиной.
void deallocate_chain | ( | page_accessor_t & | page_accessor, | |
header_processor_t & | header_processor, | |||
const chain_id_t & | head | |||
) | [private] |
Освободить цепочку.
void ensure_trx_started | ( | ) | [private] |
Породить логическое исключение, если нет начатой транзакции.
header_processor_t & get_header_processor | ( | ) | [private] |
Получить объект header_processor, который необходим для выполнения очередного действия.
void initialize_open_storage | ( | ) | [private] |
Выполнить дополнительную инициализацию объекта после того, как trace-stream и основной файлы открыты.
oess_1::uint_t load_block | ( | page_accessor_t & | page_accessor, | |
const chain_id_t & | block, | |||
oess_1::io::ostream_t & | to, | |||
oess_1::uint_t | length | |||
) | [private] |
Прочитать значение очередного блока из нужной страницы.
block | Идентификатор блока, значение которого должно быть прочитано. |
to | Приемник значения блока. |
length | Осталось прочитать. |
void load_chain | ( | page_accessor_t & | page_accessor, | |
header_processor_t & | header_processor, | |||
const chain_id_t & | head, | |||
oess_1::io::ostream_t & | to, | |||
oess_1::uint_t | length | |||
) | [private] |
Загрузить значение цепочки, но не более length байт.
to | Приемник значения объекта. |
length | Максимальная длина объекта. |
void make_transaction_log | ( | ) | [private] |
Вытолкнуть все содержимое из m_dirty_pages в журнал транзакции.
void trx_commit | ( | ) | [virtual] |
Зафиксировать текущую транзакцию.
oess_1::logic_ex_t | если нет текущей транзакции. |
Замещает chain_storage_t.
void trx_rollback | ( | ) | [virtual] |
Откатить текущую транзакцию.
oess_1::logic_ex_t | если нет текущей транзакции. |
Замещает chain_storage_t.
void trx_start | ( | ) | [virtual] |
Начать транзакцию.
oess_1::logic_ex_t | если транзакция уже начата или хранилище открыто в режиме read-only. |
Замещает chain_storage_t.
void try_open_existing_main_file | ( | ) | [private] |
Попробовать открыть существующий основной файл. Если хранилище открывается в режиме read-write, то основной файл сначала переименовывается в unclear-файл, затем открывается unclear-файл.
В режиме read-only сразу открывается основной файл под своим исходным именем.
void try_open_main_file | ( | bool | is_repair_enabled | ) | [private] |
Попробовать открыть основной файл.
Если основного файла нет, а хранилище открывается в режиме read-write и восстановление возможно, то инициирует восстановление основного файла.
void try_recover_main_file | ( | ) | [private] |
Попробовать восстановить основной файл по trace-stream.
Файл восстанавливается сразу в unclear-файл.
oess_1::uint_t write_block | ( | page_accessor_t & | page_accessor, | |
const chain_id_t & | block, | |||
oess_1::io::istream_t & | from, | |||
oess_1::uint_t | length | |||
) | [private] |
Записать значение очередного блока в нужную страницу хранилища.
block | Идентификатор блока, значение которого должно быть изменено. |
from | Отсюда нужно брать новое значение для блока. |
length | Общее количество байт в from. |
chain_id_t write_chain | ( | page_accessor_t & | page_accessor, | |
header_processor_t & | header_processor, | |||
const chain_id_t & | head, | |||
oess_1::io::istream_t & | from, | |||
oess_1::uint_t | length | |||
) | [private] |
Создать/записать/перезаписать цепочку.
Если head == invalid_chain_id, то производит создание новой цепочки и возвращает ее идентификатор.
Если head != invalid_chain_id, то производит перезапись уже существующей цепочки. При необходимости осуществляет либо расширение цепочки (если новый размер объекта больше предыдущего), либо усечение. При усечении оставшаяся неиспользованной часть цепочки освобождается.
from | Новое значение объекта. |
length | Новая длина объекта. |
std::auto_ptr< header_processor_t > m_header_processor [private] |
всего хранилища.
Создается при первом обращении к нему. Уничтожается при первом откате транзакции.
bool m_is_ok [private] |
true, если с БД все нормально.
Если этот атрибут содержит true и БД открыта в режиме read-write, то в деструкторе происходит переименование рабочего файла в исходное имя.
oess_1::file::file_t m_main_file [private] |
Открытый основной файл хранилища.
oess_1::uint_t m_main_file_logic_length [private] |
Логическая длина файла.
Во время проведения транзакции, когда физически страницы в основной файл не вытесняются, логическая длина не совпадает с физической длиной файла.
После подтверждения или отката транзакции логическая длина должна быть равна физической длине файла.