LogRecordSequence.ReserveAndAppend Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Автоматически делает одно резервирование и добавляет запись в последовательность.
Перегрузки
ReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[]) |
Автоматически делает одно резервирование и добавляет запись в последовательность. Этот метод не может быть унаследован. |
ReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[]) |
Автоматически делает одно резервирование и добавляет запись в последовательность. Этот метод не может быть унаследован. |
ReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[])
Автоматически делает одно резервирование и добавляет запись в последовательность. Этот метод не может быть унаследован.
public:
virtual System::IO::Log::SequenceNumber ReserveAndAppend(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ data, System::IO::Log::SequenceNumber userRecord, System::IO::Log::SequenceNumber previousRecord, System::IO::Log::RecordAppendOptions recordAppendOptions, System::IO::Log::ReservationCollection ^ reservationCollection, ... cli::array <long> ^ reservations);
public System.IO.Log.SequenceNumber ReserveAndAppend (System.Collections.Generic.IList<ArraySegment<byte>> data, System.IO.Log.SequenceNumber userRecord, System.IO.Log.SequenceNumber previousRecord, System.IO.Log.RecordAppendOptions recordAppendOptions, System.IO.Log.ReservationCollection reservationCollection, params long[] reservations);
abstract member ReserveAndAppend : System.Collections.Generic.IList<ArraySegment<byte>> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions * System.IO.Log.ReservationCollection * int64[] -> System.IO.Log.SequenceNumber
override this.ReserveAndAppend : System.Collections.Generic.IList<ArraySegment<byte>> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions * System.IO.Log.ReservationCollection * int64[] -> System.IO.Log.SequenceNumber
Public Function ReserveAndAppend (data As IList(Of ArraySegment(Of Byte)), userRecord As SequenceNumber, previousRecord As SequenceNumber, recordAppendOptions As RecordAppendOptions, reservationCollection As ReservationCollection, ParamArray reservations As Long()) As SequenceNumber
Параметры
- data
- IList<ArraySegment<Byte>>
Список фрагментов массива байтов, которые будут сцеплены и добавлены в качестве записи.
- userRecord
- SequenceNumber
Порядковый номер следующей записи в порядке, заданном пользователем.
- previousRecord
- SequenceNumber
Порядковый номер следующей записи в обратном порядке.
- recordAppendOptions
- RecordAppendOptions
Допустимое значение объекта RecordAppendOptions, задающего, как должны записываться данные.
- reservationCollection
- ReservationCollection
Коллекция резервирования, в которой требуется сделать резервирования.
- reservations
- Int64[]
Размер необходимого резервирования (в байтах).
Возвращаемое значение
Порядковый номер добавленной в журнал записи.
Реализации
Исключения
Один или несколько аргументов являются недопустимыми.
При добавлении записи произошла ошибка ввода-вывода.
Последовательности записей не удалось выделить достаточно свободного пространства для новой записи или выполнить резервирование.
Метод был вызван после удаления последовательности.
Один или несколько аргументов имеют значение null
.
Значение параметраuserRecord
или previousRecord
не лежит между основным и последним порядковыми номерами этой последовательности.
Невозможно выполнить операцию, поскольку последовательность записей была открыта с доступом только для чтения.
Недостаточно памяти, чтобы продолжить выполнение программы.
Доступ к заданной последовательности журнала запрещен операционной системой.
В data
не удается найти резервирование, достаточное для размещения параметра reservations
.
Комментарии
Данные, содержащиеся в параметре data
, будут сцеплены в единый массив байтов для добавления в качестве записи. Однако не делается допущение об обратном разделении данных на фрагменты массива при чтении записи.
Заданные резервирования добавляются в предоставленную коллекцию резервирования при помощи атомарной операции добавления записи. Если выполнить добавление не удается, место не резервируется.
Обычно этот метод может завершить работу до того, как запись будет записана. Чтобы запись точно была записана, либо укажите флаг ForceFlush с помощью параметра recordAppendOptions
, либо вызовите метод Flush.
Применяется к
ReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[])
Автоматически делает одно резервирование и добавляет запись в последовательность. Этот метод не может быть унаследован.
public:
virtual System::IO::Log::SequenceNumber ReserveAndAppend(ArraySegment<System::Byte> data, System::IO::Log::SequenceNumber nextUndoRecord, System::IO::Log::SequenceNumber previousRecord, System::IO::Log::RecordAppendOptions recordAppendOptions, System::IO::Log::ReservationCollection ^ reservationCollection, ... cli::array <long> ^ reservations);
public System.IO.Log.SequenceNumber ReserveAndAppend (ArraySegment<byte> data, System.IO.Log.SequenceNumber nextUndoRecord, System.IO.Log.SequenceNumber previousRecord, System.IO.Log.RecordAppendOptions recordAppendOptions, System.IO.Log.ReservationCollection reservationCollection, params long[] reservations);
abstract member ReserveAndAppend : ArraySegment<byte> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions * System.IO.Log.ReservationCollection * int64[] -> System.IO.Log.SequenceNumber
override this.ReserveAndAppend : ArraySegment<byte> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions * System.IO.Log.ReservationCollection * int64[] -> System.IO.Log.SequenceNumber
Public Function ReserveAndAppend (data As ArraySegment(Of Byte), nextUndoRecord As SequenceNumber, previousRecord As SequenceNumber, recordAppendOptions As RecordAppendOptions, reservationCollection As ReservationCollection, ParamArray reservations As Long()) As SequenceNumber
Параметры
- data
- ArraySegment<Byte>
Список фрагментов массива байтов, которые будут сцеплены и добавлены в качестве записи.
- nextUndoRecord
- SequenceNumber
Порядковый номер следующей записи в порядке, заданном пользователем.
- previousRecord
- SequenceNumber
Порядковый номер следующей записи в обратном порядке.
- recordAppendOptions
- RecordAppendOptions
Допустимое значение объекта RecordAppendOptions, задающего, как должны записываться данные.
- reservationCollection
- ReservationCollection
Объект ReservationCollection, содержащий коллекцию, в которой создается резервирование.
- reservations
- Int64[]
Размер необходимого резервирования (в байтах).
Возвращаемое значение
Порядковый номер добавленной в журнал записи.
Реализации
Исключения
Значение параметра nextUndoRecord
или previousRecord
не является допустимым для этой последовательности.
-или-
Невозможно добавить параметр data
, так как его размеры превышают максимальный размер записи.
-или-
Параметр reservations
не был создан этой последовательностью записи.
Один или несколько аргументов имеют значение null
.
Значение параметраnextUndoRecord
или previousRecord
не лежит между основным и последним порядковыми номерами этой последовательности.
Не удалось выполнить запрос, так как возникла неожиданная ошибка ввода-вывода.
-или-
Выполнить запрос невозможно из-за ошибки устройства ввода-вывода.
Невозможно выполнить операцию, поскольку последовательность записей была открыта с доступом только для чтения.
Метод был вызван после удаления последовательности.
Недостаточно памяти, чтобы продолжить выполнение программы.
Последовательность записей заполнена.
Доступ к заданной последовательности журнала запрещен операционной системой.
В data
не удается найти резервирование, достаточное для размещения параметра reservations
.
Примеры
В следующем примере показано, как использовать этот метод для создания резервирований. Обратите внимание, что эта задача может быть выполнена только при использовании класса LogRecordSequence, основанного на CLFS.
ReservationCollection reservations = recordSequence.CreateReservationCollection();
long[] lengthOfUndoRecords = new long[] { 1000 };
recordSequence.ReserveAndAppend(recordData,
userSqn,
previousSqn,
RecordSequenceAppendOptions.None,
reservations,
lengthOfUndoRecords);
recordSequence.Append(undoRecordData, // If necessary …
userSqn,
previousSqn,
RecordSequenceAppendOptions.ForceFlush,
reservations);
Комментарии
Данные, содержащиеся в параметре data
, будут сцеплены в единый массив байтов для добавления в качестве записи. Однако не делается допущение об обратном разделении данных на фрагменты массива при чтении записи.
Заданные резервирования добавляются в предоставленную коллекцию резервирования при помощи атомарной операции добавления записи. Если выполнить добавление не удается, место не резервируется.
Обычно этот метод может завершить работу до того, как запись будет записана. Чтобы запись точно была записана, либо укажите флаг ForceFlush с помощью параметра recordAppendOptions
, либо вызовите метод Flush.