LogRecordSequence Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Reprezentuje sekwencję rekordów przechowywaną w obiekcie LogStore.
public ref class LogRecordSequence sealed : IDisposable, System::IO::Log::IRecordSequence
public sealed class LogRecordSequence : IDisposable, System.IO.Log.IRecordSequence
type LogRecordSequence = class
interface IRecordSequence
interface IDisposable
Public NotInheritable Class LogRecordSequence
Implements IDisposable, IRecordSequence
- Dziedziczenie
-
LogRecordSequence
- Implementuje
Przykłady
W tym przykładzie LogRecordSequence pokazano, jak używać klasy :
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.IO.Log;
namespace MyLogRecordSequence
{
public class MyLog
{
string logName = "test.log";
string logContainer = "MyExtent0";
int containerSize = 32 * 1024;
LogRecordSequence sequence = null;
bool delete = true;
// These are used in the TailPinned event handler.
public static LogRecordSequence MySequence = null;
public static bool AdvanceBase = true;
public MyLog()
{
// Create a LogRecordSequence.
sequence = new LogRecordSequence(this.logName,
FileMode.CreateNew,
FileAccess.ReadWrite,
FileShare.None);
// At least one container/extent must be added for Log Record Sequence.
sequence.LogStore.Extents.Add(this.logContainer, this.containerSize);
MySequence = sequence;
}
public void AddExtents()
{
// Add two additional extents. The extents are
// of the same size as the first extent.
sequence.LogStore.Extents.Add("MyExtent1");
sequence.LogStore.Extents.Add("MyExtent2");
}
public void EnumerateExtents()
{
LogStore store = sequence.LogStore;
Console.WriteLine("Enumerating Log Extents...");
Console.WriteLine(" Extent Count: {0} extents", store.Extents.Count);
Console.WriteLine(" Extents Are...");
foreach (LogExtent extent in store.Extents)
{
Console.WriteLine(" {0} ({1}, {2})",
Path.GetFileName(extent.Path),
extent.Size,
extent.State);
}
Console.WriteLine(" Free Extents: {0} Free", store.Extents.FreeCount);
}
public void SetLogPolicy()
{
Console.WriteLine();
Console.WriteLine("Setting current log policy...");
// SET LOG POLICY
LogPolicy policy = sequence.LogStore.Policy;
// Set AutoGrow policy. This enables the log to automatically grow
// when the existing extents are full. New extents are added until
// we reach the MaximumExtentCount extents.
// AutoGrow policy is supported only in Windows Vista and not available in R2.
//policy.AutoGrow = true;
// Set the Growth Rate in terms of extents. This policy specifies
// "how much" the log should grow.
policy.GrowthRate = new PolicyUnit(2, PolicyUnitType.Extents);
// Set the AutoShrink policy. This enables the log to automatically
// shrink if the available free space exceeds the shrink percentage.
// AutoGrow/shrink policy is supported only in Windows Vista and not available in R2.
//policy.AutoShrinkPercentage = new PolicyUnit(30, PolicyUnitType.Percentage);
// Set the PinnedTailThreshold policy.
// A tail pinned event is triggered when there is no
// log space available and log space may be freed by advancing the base.
// The user must handle the tail pinned event by advancing the base of the log.
// If the user is not able to move the base of the log, the user should report with exception in
// the tail pinned handler.
// PinnedTailThreashold policy dictates the amount of space that the TailPinned event requests
// for advancing the base of the log. The amount of space can be in percentage or in terms of bytes
// which is rounded off to the nearest containers in CLFS. The default is 35 percent.
policy.PinnedTailThreshold = new PolicyUnit(10, PolicyUnitType.Percentage);
// Set the maximum extents the log can have.
policy.MaximumExtentCount = 6;
// Set the minimum extents the log can have.
policy.MinimumExtentCount = 2;
// Set the prefix for new containers that are added.
// when AutoGrow is enabled.
//policy.NewExtentPrefix = "MyLogPrefix";
// Set the suffix number for new containers that are added.
// when AutoGrow is enabled.
policy.NextExtentSuffix = 3;
// Commit the log policy.
policy.Commit();
// Refresh updates the IO.Log policy properties with current log policy
// set in the log.
policy.Refresh();
// LOG POLICY END
//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Setting up IO.Log provided capabilities...
//
// SET RETRY APPEND
// IO.Log provides a mechanism similar to AutoGrow.
// If the existing log is full and an append fails, setting RetryAppend
// invokes the CLFS policy engine to add new extents and re-tries
// record appends. If MaximumExtent count has been reached,
// a SequenceFullException is thrown.
//
sequence.RetryAppend = true;
// RETRY APPEND END
// REGISTER FOR TAILPINNED EVENT NOTIFICATIONS
// Register for TailPinned Event by passing in an event handler.
// An event is raised when the log full condition is reached.
// The user should either advance the base sequence number to the
// nearest valid sequence number recommended in the tail pinned event or
// report a failure that it is not able to advance the base sequence
// number.
//
sequence.TailPinned += new EventHandler<TailPinnedEventArgs>(HandleTailPinned);
Console.WriteLine("Done...");
}
public void ShowLogPolicy()
{
Console.WriteLine();
Console.WriteLine("Showing current log policy...");
LogPolicy policy = sequence.LogStore.Policy;
Console.WriteLine(" Minimum extent count: {0}", policy.MinimumExtentCount);
Console.WriteLine(" Maximum extent count: {0}", policy.MaximumExtentCount);
Console.WriteLine(" Growth rate: {0}", policy.GrowthRate);
Console.WriteLine(" Pinned tail threshold: {0}", policy.PinnedTailThreshold);
Console.WriteLine(" Auto shrink percent: {0}", policy.AutoShrinkPercentage);
Console.WriteLine(" Auto grow enabled: {0}", policy.AutoGrow);
Console.WriteLine(" New extent prefix: {0}", policy.NewExtentPrefix);
Console.WriteLine(" Next extent suffix: {0}", policy.NextExtentSuffix);
}
// Append records. Appending three records.
public void AppendRecords()
{
Console.WriteLine("Appending Log Records...");
SequenceNumber previous = SequenceNumber.Invalid;
previous = sequence.Append(CreateData("Hello World!"), SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush);
previous = sequence.Append(CreateData("This is my first Logging App"), SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush);
previous = sequence.Append(CreateData("Using LogRecordSequence..."), SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush);
Console.WriteLine("Done...");
}
// Read the records added to the log.
public void ReadRecords()
{
Encoding enc = Encoding.Unicode;
Console.WriteLine();
Console.WriteLine("Reading Log Records...");
try
{
foreach (LogRecord record in this.sequence.ReadLogRecords(this.sequence.BaseSequenceNumber, LogRecordEnumeratorType.Next))
{
byte[] data = new byte[record.Data.Length];
record.Data.Read(data, 0, (int)record.Data.Length);
string mystr = enc.GetString(data);
Console.WriteLine(" {0}", mystr);
}
}
catch (Exception e)
{
Console.WriteLine("Exception {0} {1}", e.GetType(), e.Message);
}
Console.WriteLine();
}
public void FillLog()
{
bool append = true;
while (append)
{
try
{
sequence.Append(CreateData(16 * 1024), SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush);
}
catch (SequenceFullException)
{
Console.WriteLine("Log is Full...");
append = false;
}
}
}
// Dispose the record sequence and delete the log file.
public void Cleanup()
{
// Dispose the sequence
sequence.Dispose();
// Delete the log file.
if (delete)
{
try
{
// This deletes the base log file and all the extents associated with the log.
LogStore.Delete(this.logName);
}
catch (Exception e)
{
Console.WriteLine("Exception {0} {1}", e.GetType(), e.Message);
}
}
}
// Converts the given data to an Array of ArraySegment<byte>
public static IList<ArraySegment<byte>> CreateData(string str)
{
Encoding enc = Encoding.Unicode;
byte[] array = enc.GetBytes(str);
ArraySegment<byte>[] segments = new ArraySegment<byte>[1];
segments[0] = new ArraySegment<byte>(array);
return Array.AsReadOnly<ArraySegment<byte>>(segments);
}
public static IList<ArraySegment<byte>> CreateData(int size)
{
byte[] array = new byte[size];
Random rnd = new Random();
rnd.NextBytes(array);
ArraySegment<byte>[] segments = new ArraySegment<byte>[1];
segments[0] = new ArraySegment<byte>(array);
return Array.AsReadOnly<ArraySegment<byte>>(segments);
}
public static SequenceNumber GetAdvanceBaseSeqNumber(SequenceNumber recTargetSeqNum)
{
SequenceNumber targetSequenceNumber = SequenceNumber.Invalid;
Console.WriteLine("Getting actual target sequence number...");
//
// Implement the logic for returning a valid sequence number closer to
// recommended target sequence number.
//
return targetSequenceNumber;
}
public static void HandleTailPinned(object arg, TailPinnedEventArgs tailPinnedEventArgs)
{
Console.WriteLine("TailPinned has fired");
// Based on the implementation of a logging application, the log base can be moved
// to free up more log space and if it is not possible to move the
// base, the application should report by throwing an exception.
if(MyLog.AdvanceBase)
{
try
{
// TailPnnedEventArgs has the recommended sequence number and its generated
// based on PinnedTailThreshold policy.
// This does not map to an actual sequence number in the record sequence
// but an approximation and potentially frees up the threshold % log space
// when the log base is advanced to a valid sequence number closer to the
// recommended sequence number.
// The user should use this sequence number to locate a closest valid sequence
// number to advance the base of the log.
SequenceNumber recommendedTargetSeqNum = tailPinnedEventArgs.TargetSequenceNumber;
// Get the actual Target sequence number.
SequenceNumber actualTargetSeqNum = MyLog.GetAdvanceBaseSeqNumber(recommendedTargetSeqNum);
MySequence.AdvanceBaseSequenceNumber(actualTargetSeqNum);
}
catch (Exception e)
{
Console.WriteLine("Exception thrown {0} {1}", e.GetType(), e.Message);
}
}
else
{
// Report back Error if under some conditions the log cannot
// advance the base sequence number.
Console.WriteLine("Reporting Error! Unable to move the base sequence number!");
throw new IOException();
}
}
}
class LogSample
{
static void Main(string[] args)
{
// Create log record sequence.
MyLog log = new MyLog();
// Add additional extents.
log.AddExtents();
// Enumerate the current log extents.
log.EnumerateExtents();
// Set log policies and register for TailPinned event notifications.
log.SetLogPolicy();
log.ShowLogPolicy();
// Append a few records and read the appended records.
log.AppendRecords();
log.ReadRecords();
// Fill the Log to trigger log growth...and subsequent TailPinned notifications.
log.FillLog();
log.EnumerateExtents();
log.Cleanup();
}
}
}
Imports System.IO
Imports System.Collections.Generic
Imports System.Text
Imports System.IO.Log
Namespace MyLogRecordSequence
Public Class MyLog
Private logName As String = "test.log"
Private logContainer As String = "MyExtent0"
Private containerSize As Integer = 32 * 1024
Private sequence As LogRecordSequence = Nothing
Private delete As Boolean = True
' These are used in the TailPinned event handler.
Public Shared MySequence As LogRecordSequence = Nothing
Public Shared AdvanceBase As Boolean = True
Public Sub New()
' Create a LogRecordSequence.
sequence = New LogRecordSequence(Me.logName, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None)
' At least one container/extent must be added for Log Record Sequence.
sequence.LogStore.Extents.Add(Me.logContainer, Me.containerSize)
MySequence = sequence
End Sub
Public Sub AddExtents()
' Add two additional extents. The extents are
' of the same size as the first extent.
sequence.LogStore.Extents.Add("MyExtent1")
sequence.LogStore.Extents.Add("MyExtent2")
End Sub
Public Sub EnumerateExtents()
Dim store As LogStore = sequence.LogStore
Console.WriteLine("Enumerating Log Extents...")
Console.WriteLine(" Extent Count: {0} extents", store.Extents.Count)
Console.WriteLine(" Extents Are...")
For Each extent In store.Extents
Console.WriteLine(" {0} ({1}, {2})", Path.GetFileName(extent.Path), extent.Size, extent.State)
Next extent
Console.WriteLine(" Free Extents: {0} Free", store.Extents.FreeCount)
End Sub
Public Sub SetLogPolicy()
Console.WriteLine()
Console.WriteLine("Setting current log policy...")
' SET LOG POLICY
Dim policy As LogPolicy = sequence.LogStore.Policy
' Set AutoGrow policy. This enables the log to automatically grow
' when the existing extents are full. New extents are added until
' we reach the MaximumExtentCount extents.
' AutoGrow policy is supported only in Windows Vista and not available in R2.
'policy.AutoGrow = true;
' Set the Growth Rate in terms of extents. This policy specifies
' "how much" the log should grow.
policy.GrowthRate = New PolicyUnit(2, PolicyUnitType.Extents)
' Set the AutoShrink policy. This enables the log to automatically
' shrink if the available free space exceeds the shrink percentage.
' AutoGrow/shrink policy is supported only in Windows Vista and not available in R2.
'policy.AutoShrinkPercentage = new PolicyUnit(30, PolicyUnitType.Percentage);
' Set the PinnedTailThreshold policy.
' A tail pinned event is triggered when there is no
' log space available and log space may be freed by advancing the base.
' The user must handle the tail pinned event by advancing the base of the log.
' If the user is not able to move the base of the log, the user should report with exception in
' the tail pinned handler.
' PinnedTailThreashold policy dictates the amount of space that the TailPinned event requests
' for advancing the base of the log. The amount of space can be in percentage or in terms of bytes
' which is rounded off to the nearest containers in CLFS. The default is 35 percent.
policy.PinnedTailThreshold = New PolicyUnit(10, PolicyUnitType.Percentage)
' Set the maximum extents the log can have.
policy.MaximumExtentCount = 6
' Set the minimum extents the log can have.
policy.MinimumExtentCount = 2
' Set the prefix for new containers that are added.
' when AutoGrow is enabled.
'policy.NewExtentPrefix = "MyLogPrefix";
' Set the suffix number for new containers that are added.
' when AutoGrow is enabled.
policy.NextExtentSuffix = 3
' Commit the log policy.
policy.Commit()
' Refresh updates the IO.Log policy properties with current log policy
' set in the log.
policy.Refresh()
' LOG POLICY END
'
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' Setting up IO.Log provided capabilities...
'
' SET RETRY APPEND
' IO.Log provides a mechanism similar to AutoGrow.
' If the existing log is full and an append fails, setting RetryAppend
' invokes the CLFS policy engine to add new extents and re-tries
' record appends. If MaximumExtent count has been reached,
' a SequenceFullException is thrown.
'
sequence.RetryAppend = True
' RETRY APPEND END
' REGISTER FOR TAILPINNED EVENT NOTIFICATIONS
' Register for TailPinned Event by passing in an event handler.
' An event is raised when the log full condition is reached.
' The user should either advance the base sequence number to the
' nearest valid sequence number recommended in the tail pinned event or
' report a failure that it is not able to advance the base sequence
' number.
'
AddHandler sequence.TailPinned, AddressOf HandleTailPinned
Console.WriteLine("Done...")
End Sub
Public Sub ShowLogPolicy()
Console.WriteLine()
Console.WriteLine("Showing current log policy...")
Dim policy As LogPolicy = sequence.LogStore.Policy
Console.WriteLine(" Minimum extent count: {0}", policy.MinimumExtentCount)
Console.WriteLine(" Maximum extent count: {0}", policy.MaximumExtentCount)
Console.WriteLine(" Growth rate: {0}", policy.GrowthRate)
Console.WriteLine(" Pinned tail threshold: {0}", policy.PinnedTailThreshold)
Console.WriteLine(" Auto shrink percent: {0}", policy.AutoShrinkPercentage)
Console.WriteLine(" Auto grow enabled: {0}", policy.AutoGrow)
Console.WriteLine(" New extent prefix: {0}", policy.NewExtentPrefix)
Console.WriteLine(" Next extent suffix: {0}", policy.NextExtentSuffix)
End Sub
' Append records. Appending three records.
Public Sub AppendRecords()
Console.WriteLine("Appending Log Records...")
Dim previous As SequenceNumber = SequenceNumber.Invalid
previous = sequence.Append(CreateData("Hello World!"), SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush)
previous = sequence.Append(CreateData("This is my first Logging App"), SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush)
previous = sequence.Append(CreateData("Using LogRecordSequence..."), SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush)
Console.WriteLine("Done...")
End Sub
' Read the records added to the log.
Public Sub ReadRecords()
Dim enc As Encoding = Encoding.Unicode
Console.WriteLine()
Console.WriteLine("Reading Log Records...")
Try
For Each record As LogRecord In Me.sequence.ReadLogRecords(Me.sequence.BaseSequenceNumber, LogRecordEnumeratorType.Next)
Dim data(record.Data.Length - 1) As Byte
record.Data.Read(data, 0, CInt(Fix(record.Data.Length)))
Dim mystr As String = enc.GetString(data)
Console.WriteLine(" {0}", mystr)
Next record
Catch e As Exception
Console.WriteLine("Exception {0} {1}", e.GetType(), e.Message)
End Try
Console.WriteLine()
End Sub
Public Sub FillLog()
Dim append As Boolean = True
Do While append
Try
sequence.Append(CreateData(16 * 1024), SequenceNumber.Invalid, SequenceNumber.Invalid, RecordAppendOptions.ForceFlush)
Catch e1 As SequenceFullException
Console.WriteLine("Log is Full...")
append = False
End Try
Loop
End Sub
' Dispose the record sequence and delete the log file.
Public Sub Cleanup()
' Dispose the sequence
sequence.Dispose()
' Delete the log file.
If delete Then
Try
' This deletes the base log file and all the extents associated with the log.
LogStore.Delete(Me.logName)
Catch e As Exception
Console.WriteLine("Exception {0} {1}", e.GetType(), e.Message)
End Try
End If
End Sub
' Converts the given data to an Array of ArraySegment<byte>
Public Shared Function CreateData(ByVal str As String) As IList(Of ArraySegment(Of Byte))
Dim enc As Encoding = Encoding.Unicode
Dim array() As Byte = enc.GetBytes(str)
Dim segments(0) As ArraySegment(Of Byte)
segments(0) = New ArraySegment(Of Byte)(array)
Return System.Array.AsReadOnly(Of ArraySegment(Of Byte))(segments)
End Function
Public Shared Function CreateData(ByVal size As Integer) As IList(Of ArraySegment(Of Byte))
Dim array(size - 1) As Byte
Dim rand As New Random()
rand.NextBytes(array)
Dim segments(0) As ArraySegment(Of Byte)
segments(0) = New ArraySegment(Of Byte)(array)
Return System.Array.AsReadOnly(Of ArraySegment(Of Byte))(segments)
End Function
Public Shared Function GetAdvanceBaseSeqNumber(ByVal recTargetSeqNum As SequenceNumber) As SequenceNumber
Dim targetSequenceNumber As SequenceNumber = SequenceNumber.Invalid
Console.WriteLine("Getting actual target sequence number...")
'
' Implement the logic for returning a valid sequence number closer to
' recommended target sequence number.
'
Return targetSequenceNumber
End Function
Public Shared Sub HandleTailPinned(ByVal arg As Object, ByVal tailPinnedEventArgs As TailPinnedEventArgs)
Console.WriteLine("TailPinned has fired")
' Based on the implementation of a logging application, the log base can be moved
' to free up more log space and if it is not possible to move the
' base, the application should report by throwing an exception.
If MyLog.AdvanceBase Then
Try
' TailPnnedEventArgs has the recommended sequence number and its generated
' based on PinnedTailThreshold policy.
' This does not map to an actual sequence number in the record sequence
' but an approximation and potentially frees up the threshold % log space
' when the log base is advanced to a valid sequence number closer to the
' recommended sequence number.
' The user should use this sequence number to locate a closest valid sequence
' number to advance the base of the log.
Dim recommendedTargetSeqNum As SequenceNumber = tailPinnedEventArgs.TargetSequenceNumber
' Get the actual Target sequence number.
Dim actualTargetSeqNum As SequenceNumber = MyLog.GetAdvanceBaseSeqNumber(recommendedTargetSeqNum)
MySequence.AdvanceBaseSequenceNumber(actualTargetSeqNum)
Catch e As Exception
Console.WriteLine("Exception thrown {0} {1}", e.GetType(), e.Message)
End Try
Else
' Report back Error if under some conditions the log cannot
' advance the base sequence number.
Console.WriteLine("Reporting Error! Unable to move the base sequence number!")
Throw New IOException()
End If
End Sub
End Class
Friend Class LogSample
Shared Sub Main(ByVal args() As String)
' Create log record sequence.
Dim log As New MyLog()
' Add additional extents.
log.AddExtents()
' Enumerate the current log extents.
log.EnumerateExtents()
' Set log policies and register for TailPinned event notifications.
log.SetLogPolicy()
log.ShowLogPolicy()
' Append a few records and read the appended records.
log.AppendRecords()
log.ReadRecords()
' Fill the Log to trigger log growth...and subsequent TailPinned notifications.
log.FillLog()
log.EnumerateExtents()
log.Cleanup()
End Sub
End Class
End Namespace
Uwagi
Klasa LogRecordSequence udostępnia implementację interfejsu sekwencji rekordów na podstawie dziennika wspólnego systemu plików dziennika (CLFS). Oprócz standardowych funkcji zorientowanych na rekordy zapewnia model zasad umożliwiający uniknięcie pełnych warunków rejestrowania i multipleksowanie klientów w tym samym pliku fizycznym. Współdziała ona z LogStore klasą, która zapewnia interfejs umożliwiający bezpośrednie manipulowanie plikiem dziennika CLFS i zarządzaniem nim. Relacja między klasą LogStore a LogRecordSequence klasą jest podobna do relacji między plikiem dysku a obiektem FileStream . Plik dysku zapewnia konkretny magazyn i ma atrybuty, takie jak długość i czas ostatniego dostępu; FileStream podczas gdy obiekt udostępnia widok pliku, który może służyć do odczytywania z niego i zapisywania w nim. LogStore Podobnie klasa ma atrybuty, takie jak zasady i kolekcja zakresów dysków, a LogRecordSequence klasa zapewnia mechanizm zorientowany na rekordy do odczytywania i zapisywania danych.
Konstruktory
LogRecordSequence(LogStore) |
Inicjuje LogRecordSequence nowe wystąpienie klasy z określonym magazynem dzienników. |
LogRecordSequence(LogStore, Int32, Int32) |
Inicjuje LogRecordSequence nowe wystąpienie klasy z określonym magazynem dzienników, rozmiarem buforu dla każdego rekordu i numerem buforu. |
LogRecordSequence(String, FileMode) |
Inicjuje nowe wystąpienie LogRecordSequence klasy z określoną ścieżką do magazynu dzienników i trybu dostępu. |
LogRecordSequence(String, FileMode, FileAccess) |
Inicjuje nowe wystąpienie LogRecordSequence klasy z określoną ścieżką do magazynu dzienników oraz trybami dostępu i udostępniania. |
LogRecordSequence(String, FileMode, FileAccess, FileShare) |
Inicjuje nowe wystąpienie LogRecordSequence klasy z określoną ścieżką do magazynu dzienników i trybu dostępu. |
LogRecordSequence(String, FileMode, FileAccess, FileShare, Int32, Int32) |
Inicjuje nowe wystąpienie LogRecordSequence klasy z określoną ścieżką do magazynu dzienników, uprawnieniami do plików, trybami dostępu i udostępniania oraz rozmiarem buforu i liczbą rekordów. |
LogRecordSequence(String, FileMode, FileAccess, FileShare, Int32, Int32, FileSecurity) |
Inicjuje nowe wystąpienie klasy LogRecordSequence. |
Właściwości
BaseSequenceNumber |
Pobiera numer sekwencji pierwszego prawidłowego rekordu w bieżącym LogRecordSequencerekordzie . |
LastSequenceNumber |
Pobiera numer sekwencji, który jest większy niż ostatni dołączony rekord. |
LogStore |
Pobiera element LogStore zawierający dane dla tej sekwencji rekordów. Tej metody nie można dziedziczyć. |
MaximumRecordLength |
Pobiera maksymalny rozmiar rekordu, który można dodać do tej sekwencji rekordów. |
ReservedBytes |
Pobiera całkowitą liczbę bajtów, które zostały zarezerwowane. |
RestartSequenceNumber |
Pobiera numer sekwencji obszaru ponownego uruchamiania znajdującego się najbliżej końca dziennika. |
RetryAppend |
Pobiera lub ustawia wartość wskazującą, czy dołączania są automatycznie ponawiane, jeśli dziennik jest pełny. |
Metody
AdvanceBaseSequenceNumber(SequenceNumber) |
Przenosi podstawowy numer sekwencji dziennika do przodu. Tej metody nie można dziedziczyć. |
Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
Zapisuje rekord dziennika w pliku LogRecordSequence. Tej metody nie można dziedziczyć. |
Append(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Dołącza rekord dziennika do IRecordSequenceelementu , używając wcześniej zarezerwowanego miejsca w sekwencji. Tej metody nie można dziedziczyć. |
Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions) |
Dołącza rekord dziennika do elementu IRecordSequence. Tej metody nie można dziedziczyć. |
Append(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection) |
Dołącza rekord dziennika do IRecordSequenceelementu , używając wcześniej zarezerwowanego miejsca w sekwencji. Tej metody nie można dziedziczyć. |
BeginAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, AsyncCallback, Object) |
Rozpoczyna asynchroniczną operację dołączania. Tej metody nie można dziedziczyć. |
BeginAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, AsyncCallback, Object) |
Rozpoczyna asynchroniczną operację dołączania. Tej metody nie można dziedziczyć. |
BeginAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, AsyncCallback, Object) |
Rozpoczyna asynchroniczną operację dołączania. Tej metody nie można dziedziczyć. |
BeginAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, AsyncCallback, Object) |
Rozpoczyna asynchroniczną operację dołączania. Tej metody nie można dziedziczyć. |
BeginFlush(SequenceNumber, AsyncCallback, Object) |
Rozpoczyna operację asynchronicznego opróżniania, używając wcześniej zarezerwowanego miejsca w sekwencji. Tej metody nie można dziedziczyć. |
BeginReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[], AsyncCallback, Object) |
Rozpoczyna operację rezerw asynchronicznej i dołączania. Tej metody nie można dziedziczyć. |
BeginReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[], AsyncCallback, Object) |
Rozpoczyna operację rezerw asynchronicznej i dołączania. Tej metody nie można dziedziczyć. |
BeginWriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection, AsyncCallback, Object) |
Rozpoczyna asynchroniczną operację zapisu obszaru ponownego uruchamiania przy użyciu miejsca zarezerwowanego wcześniej w sekwencji. Tej metody nie można dziedziczyć. |
BeginWriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber, ReservationCollection, AsyncCallback, Object) |
Rozpoczyna asynchroniczną operację zapisu obszaru ponownego uruchamiania przy użyciu miejsca zarezerwowanego wcześniej w sekwencji. Tej metody nie można dziedziczyć. |
CreateReservationCollection() |
Tworzy nowy adres ReservationCollection. Tej metody nie można dziedziczyć. |
Dispose() |
Zwalnia zasoby używane przez składnik. |
EndAppend(IAsyncResult) |
Kończy operację dołączania asynchronicznego. Tej metody nie można dziedziczyć. |
EndFlush(IAsyncResult) |
Kończy operację asynchronicznego opróżniania. Tej metody nie można dziedziczyć. |
EndReserveAndAppend(IAsyncResult) |
Kończy operację rezerwy asynchronicznej i dołączania. Tej metody nie można dziedziczyć. |
EndWriteRestartArea(IAsyncResult) |
Kończy asynchroniczną operację zapisu obszaru ponownego uruchamiania. Tej metody nie można dziedziczyć. |
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
Flush() |
Gwarantuje, że wszystkie dołączone rekordy zostały zapisane. Tej metody nie można dziedziczyć. |
Flush(SequenceNumber) |
Gwarantuje, że wszystkie dołączone rekordy do i w tym rekord z określonym numerem sekwencji zostały trwale zapisane. Tej metody nie można dziedziczyć. |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
ReadLogRecords(SequenceNumber, LogRecordEnumeratorType) |
Zwraca wyliczaną kolekcję rekordów w sekwencji. Tej metody nie można dziedziczyć. |
ReadRestartAreas() |
Zwraca wyliczalną kolekcję obszarów ponownego uruchamiania w sekwencji. Tej metody nie można dziedziczyć. |
ReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[]) |
Automatycznie tworzy pojedynczą rezerwację i dołącza rekord do sekwencji. Tej metody nie można dziedziczyć. |
ReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[]) |
Automatycznie tworzy pojedynczą rezerwację i dołącza rekord do sekwencji. Tej metody nie można dziedziczyć. |
SetLastRecord(SequenceNumber) |
Ustawia ostatni rekord w obiekcie LogRecordSequence. |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
WriteRestartArea(ArraySegment<Byte>) |
Zapisuje obszar ponownego uruchamiania w obiekcie LogRecordSequence. Tej metody nie można dziedziczyć. |
WriteRestartArea(ArraySegment<Byte>, SequenceNumber) |
Zapisuje obszar ponownego uruchamiania w obiekcie LogRecordSequence i aktualizuje podstawowy numer sekwencji. Tej metody nie można dziedziczyć. |
WriteRestartArea(ArraySegment<Byte>, SequenceNumber, ReservationCollection) |
Zapisuje obszar ponownego uruchamiania do LogRecordSequence strefy przy użyciu rezerwacji i aktualizuje numer sekwencji podstawowej. Tej metody nie można dziedziczyć. |
WriteRestartArea(IList<ArraySegment<Byte>>) |
Zapisuje obszar ponownego uruchamiania w obiekcie LogRecordSequence. Tej metody nie można dziedziczyć. |
WriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber) |
Zapisuje obszar ponownego uruchamiania w obiekcie LogRecordSequence i aktualizuje podstawowy numer sekwencji. Tej metody nie można dziedziczyć. |
WriteRestartArea(IList<ArraySegment<Byte>>, SequenceNumber, ReservationCollection) |
Zapisuje obszar ponownego uruchamiania do LogRecordSequence strefy przy użyciu rezerwacji i aktualizuje numer sekwencji podstawowej. Tej metody nie można dziedziczyć. |
Zdarzenia
TailPinned |
Sygnalizuje potrzebę przeniesienia ogona sekwencji. |