Класс std_chain_storage_t

#include <std_chain_storage.hpp>

Граф наследования:std_chain_storage_t:

chain_storage_t Полный список членов класса

Подробное описание

Штатная реализация интерфейса chain_storage_t.

Начиная с:
v.1.4.0


Открытые члены

 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_tget_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_tm_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_tm_cache
 Кэш основного файла.
std::auto_ptr< dirty_page_storage_tm_dirty_pages
 Хранилище грязных страниц транзакции.
std::auto_ptr< page_accessor_tm_page_accessor
 транзакций.
std::auto_ptr< header_processor_tm_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]

Создать цепочку.

Возвращает:
идентификатор созданной цепочки.

Замещает chain_storage_t.

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]

Записать значение очередного блока в нужную страницу хранилища.

Возвращает:
количество байт в from после записи очередного блока.
Аргументы:
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]

Логическая длина файла.

Во время проведения транзакции, когда физически страницы в основной файл не вытесняются, логическая длина не совпадает с физической длиной файла.

После подтверждения или отката транзакции логическая длина должна быть равна физической длине файла.


Объявления и описания членов классов находятся в файлах:
Документация по ObjESSty. Последние изменения: Fri Oct 13 18:35:38 2006. Создано системой  doxygen 1.4.7
Hosted by uCoz