Класс reverse_loader_t

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

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

Класс для чтения транзакций из trace-stream в обратном порядке.

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


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

 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_tm_current_file_content
Информация, которая оносится к текущей транзакции.
std::vector< oess_1::char_tm_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.

Возвращает:
true, если транзакция найдена. false, если все trace-файлы были обработаны и нет больше транзакций.

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 указатель остается действительным до следующего вызова next() и до разрушения объекта reverse_loader_t.
Аргументы:
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-файлов, из которых информация попала в образ текущей транзакции.

Переинициализируется при обнаружении очередной транзакции.


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