Класс unclear_file_committer_t

#include <std_file_committer.hpp>

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

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

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

Реализация committer_t, которая расчитана на восстановление только последней транзакции.

Начиная с:
v.1.4.0
Данная реализация предназначения для режима сохранения восстановочной информации oess_1::db::storage::trace_last. Поэтому она работает с "грязным" файлом БД и восстанавливает его значение.

В методе 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_tm_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]

Заметки:
Значение total_page_count может быть нулевым, это просто означает, что текущий размер "грязного" файла не должен изменяться.

Замещает 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().

Заметки:
Не гарантируется, что при воспроизведении trace-файла страницы будут отдаваться committer-у в порядке возрастания их номеров. Например, вместо 0-й страницы committer-у может быть передана страница 12034. Committer сам должен определить, что такой страницы еще нет и что нужно заполнить предшествующие 12033 страницы нулевыми значениями. Так же не гарантируется, что фрагменты будут восстанавливаться в порядке возрастания их индексов на странице.

Замещает committer_t.


Данные класса

oess_1::uint_t m_page_size [private]

Размер одной страницы основного файла в байтах.

Выставляется в initialize().


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