Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При записи записи в поток Common Log File System (CLFS) запись помещается в блок ввода-вывода журнала (в области маршаллинга) в переменную память. Периодически среда CLFS сбрасывает блоки журналов ввода-вывода из области маршаллинга в стабильное хранилище, например диск. На стабильном устройстве хранения журнал состоит из набора контейнеров, каждый из которых является непрерывной степенью на физическом носителе. Коллекция контейнеров, формающих стабильное хранилище для потока, называется журналом или физическим журналом.
На следующем рисунке показан контейнер.
На предыдущем рисунке показан контейнер, содержащий три блока ввода-вывода журнала. Первый блок ввода-вывода журнала содержит три записи, второй содержит пять записей, а третий содержит две записи. Как показано на рисунке, начало каждого блока ввода-вывода журнала всегда соответствует началу сектора на стабильном носителе. Размер блоков ввода-вывода журнала на стабильном хранилище может различаться.
CLFS использует набор из трех чисел для поиска записи в журнале.
Идентификатор контейнера определяет контейнер, содержащий запись.
Смещение блока указывает на байтовое смещение в контейнере от начала блока ввода-вывода журнала, в котором хранится запись.
Номер последовательности записи определяет запись в блоке ввода-вывода журнала.
Номер последовательности журнала (LSN) записи журнала CLFS фактически содержит эти три фрагмента информации: идентификатор контейнера, смещение блока и номер последовательности записей. Однако LSN, предоставленные клиентам журналов, содержат идентификаторы логических контейнеров , которые CLFS должны сопоставляться с идентификаторами физических контейнеров, прежде чем получить доступ к записям в стабильном хранилище.
CLFS использует логические идентификаторы контейнеров для предоставления клиентам представления о том, что записи журналов записываются в последовательную цепочку контейнеров, когда на самом деле физические контейнеры перерабатываются.
Предположим, что журнал содержит три контейнера, а один клиент записывает записи CLFS в журнал. В следующем сценарии показано, как можно переработать контейнер.
Клиент записывает достаточно записей журнала для заполнения всех трех контейнеров.
Клиент устанавливает базу журналов (вызывая ClfsAdvanceLogBase или ClfsWriteRestartArea) на одну из записей в контейнере 2. При этом клиент говорит, что он больше не нуждается в записях в контейнере 1.
Клиент записывает другую запись в журнал и возвращает LSN только что написанной записи. Идентификатор логического контейнера в этой LSN равен 4. Когда записи сбрасываются в стабильное хранилище, записи, которые клиент видит в логическом контейнере 4, поступают в физический контейнер 1.
На следующем рисунке показан сценарий; в нем показано, как последовательность клиента логических контейнеров сопоставляется с физическими контейнерами в стабильном хранилище.
Идентификатор логического контейнера, смещение блока и номер последовательности записей хранятся в LSN, чтобы LSN для определенного потока всегда формировали строго увеличивающуюся последовательность. LSN (с идентификатором логического контейнера) записи журнала, записанной в поток, всегда больше, чем LSN записей журналов, ранее записанных в тот же поток. LSN служат двойной целью: (1) они предоставляют клиентам потока упорядоченную последовательность идентификаторов записей, и (2) они предоставляют CLFS расположение записей в стабильном хранилище.
Используя LSN записи, вы можете извлечь идентификатор логического контейнера, смещение блока и номер последовательности записи с помощью вызова следующих функций.
Идентификатор логического контейнера — это 32-разрядное число, поэтому есть 2^32 возможные идентификаторы логических контейнеров, и они находятся в диапазоне 0x0 через 0xFFFFFFFF. Поток может иметь не более 2^32 логических контейнеров.
Смещение блока хранится в 23 битах LSN, но ClfsLsnBlockOffset возвращает 32-разрядное число, которое соответствует размеру сектора стабильного носителя хранилища. Смещение блока всегда кратно 512. Кроме того, смещение блока соответствует размеру сектора устойчивого носителя. Например, если размер сектора равен 1024 байтам, смещение блока составляет несколько 1024.
Номер последовательности записи — это 9-битное число, поэтому существует 2^9 (512) возможных номеров последовательности записи, и они находятся в диапазоне от 0x0 до 0x1FF. Блок ввода-вывода журнала может содержать не более 512 записей.
Если включена проверка подлинности файлов CLFS, CLFS создает файлы транзакций с расширением CNPF вместе с файлами базового журнала (BLF) и контейнерами. Если файл журнала не закрыт, файл транзакции содержит данные, необходимые для CLFS для восстановления файла журнала.