Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein multiplexiertes Log fungiert als stabiler Speicher für mehrere Datenströme. Ein dediziertes Protokoll dient als stabiler Speicher für einen einzelnen Datenstrom. In diesem Thema werden multiplexierte Protokolle besprochen. Informationen zu dedizierten Protokollen finden Sie unter dedizierte CLFS-Protokolle.
Jeder Datenstrom eines multiplexierten Logs vermittelt seinen Clients die Illusion, dass ihr Datenstrom das gesamte Log darstellt. Ein Client ist in diesem Kontext ein Treiber, ein Thread oder eine andere Softwareeinheit, die in ein ClFS-Protokoll (Common Log File System) schreibt und liest. Es ist möglich, dass ein einzelner Datenstrom mehrere Clients hat. Jeder Client hätte eine eigene LOG_FILE_OBJECT Struktur, die eine offene Instanz des Datenstroms darstellt.
Berücksichtigen Sie den Fall eines multiplexierten Logs, das zwei Streams hat, von denen jeder einen Client hat. Mit dem folgenden Verfahren können Sie das Protokoll, die Datenströme und die Client-Marshalling-Bereiche erstellen.
Rufen Sie im Auftrag von Client 1 ClfsCreateLogFile auf, um einen Zeiger auf eine LOG_FILE_OBJECT Struktur abzurufen. Legen Sie den puszLogFileName-Parameter auf eine Zeichenfolge des Formulars "log:log name>:<:<stream name" fest, wobei <der Protokollname>> ein gültiger Pfad im zugrunde liegenden Dateisystem ist, und <der Datenstromname ist der Name>, den Sie dem Datenstrom zuweisen möchten, der von Client 1 verwendet wird. Sie können beispielsweise "puszLogFileName " auf "log:c:\ClfsLogs\myLogs\myLog::Stream1" festlegen. In diesem Fall würde CLFS die Basisprotokolldatei myLog.blf im Verzeichnis c:\ClfsLogs erstellen, und Stream1 wäre der Name des von Client 1 verwendeten Datenstroms.
Anmerkung Die Form der Zeichenfolge, die in puszLogFileName übergeben wird, bestimmt, ob CLFS ein dediziertes oder multipliziertes Protokoll erstellt. Wenn die Zeichenfolge nach dem Pfadnamen einen Doppelpunkt (::) enthält, erstellt CLFS ein multiplexes Protokoll.
Rufen Sie im Auftrag von Client 2 ClfsCreateLogFile auf, um einen Zeiger auf eine LOG_FILE_OBJECT Struktur abzurufen. Legen Sie den puszLogFileName-Parameter auf eine Zeichenfolge der Form "log:<log name>::<stream name>" fest, wobei <log name> derselbe Pfadname ist, den Sie für Client 1 verwendet haben, und <stream name> der Name ist, den Sie dem Stream zuweisen möchten, der von Client 2 verwendet wird. Sie können beispielsweise puszLogFileName auf "log:c:\ClfsLogs\myLogs\myLog::Stream2" festlegen.
Übergeben Sie einen der LOG_FILE_OBJECT Zeiger, die Sie von ClfsCreateLogFile erhalten haben, an ClfsAddLogContainer , um einen Container (zusammenhängendes physisches Ausmaß) für stabilen Speicher zu erstellen, der Protokolldatensätze enthält. Geben Sie die Größe des Containers an (der auf ein Vielfaches von 1 Megabyte aufgerundet wird), indem Sie den pcbContainer-Parameter festlegen. Legen Sie den parameter puszContainerPath fest, um einen Pfadnamen für den Container anzugeben. Der Pfadname kann absolut oder relativ zum Verzeichnis sein, das die Basisprotokolldatei enthält.
Sie können zusätzliche Container für Ihr Protokoll erstellen, indem Sie "ClfsAddLogContainer " erneut aufrufen. Beachten Sie, dass alle Container für ein bestimmtes Protokoll dieselbe Größe aufweisen müssen. Als Alternative zum mehrfachen Aufrufen von ClfsAddLogContainer können Sie ClfsAddLogContainerSet aufrufen, um mehrere Container gleichzeitig zu erstellen. Beachten Sie, dass Ihre Gruppe von Containern als stabiler Speicher für Protokolldatensätze dient, die sowohl von Client 1 als auch von Client 2 geschrieben wurden.
Übergeben Sie den LOG_FILE_OBJECT Zeiger, den Sie im Auftrag von Client 1 erhalten haben, an ClfsCreateMarshallingArea , um einen Zeiger auf einen Marshallbereich abzurufen, den Client 1 zum Lesen und Schreiben von Protokolldatensätzen verwenden kann. Geben Sie die Größe der Protokoll-E/A-Blöcke an, die vom Marshalling-Bereich verwendet werden sollen, indem Sie den Parameter cbMarshallingBuffer festlegen. Es gibt mehrere andere Parameter, mit denen Sie verschiedene Eigenschaften des Marshallbereichs festlegen können.
Wenn Client 1 zusätzliche Marshallbereiche benötigt, übergeben Sie denselben LOG_FILE_OBJECT Zeiger erneut an ClfsCreateMarshallingArea , einmal für jeden zusätzlichen Marshalling-Bereich, den Client 1 benötigt.
Übergeben Sie den LOG_FILE_OBJECT-Zeiger, den Sie im Auftrag von Client 2 erhalten haben, an ClfsCreateMarshallingArea, um einen Marshalling-Bereich abzurufen, den Client 2 zum Lesen und Schreiben von Protokolldatensätzen verwenden kann. Geben Sie die Größe der Protokoll-E/A-Blöcke an, die vom Marshalling-Bereich verwendet werden sollen, indem Sie den Parameter cbMarshallingBuffer festlegen.
Anmerkung Es gibt mehrere weitere Parameter, mit denen Sie verschiedene Eigenschaften des Marshalling-Bereichs festlegen können.
Wenn Client 2 zusätzliche Marshallbereiche benötigt, übergeben Sie denselben LOG_FILE_OBJECT Zeiger erneut an ClfsCreateMarshallingArea , einmal für jeden zusätzlichen Marshalling-Bereich, den Client 2 benötigt.
Da Clients 1 und 2 nun über ein LOG_FILE_OBJECT und mindestens einen Marshalling-Bereich verfügen, können sie Datensätze in ihre eigenen Datenströme schreiben (über die Marshalling-Bereiche, die diesen Datenströmen zugeordnet sind), indem sie die folgenden Funktionen aufrufen.
ClfsReserveAndAppendLogAligned
Alle Protokolldatensätze, die von Clients 1 und 2 geschrieben wurden, gehen in dasselbe Protokoll; d. h. an den gleichen Satz physischer Container auf stabilem Speicher. CLFS multiplexiert die Protokolldaten, die von den beiden Clients geschrieben wurden, und verfolgt, welche Daten zu jedem Stream gehören.
Wenn Client 1 Datensätze in den Datenstrom schreibt, wird eine zunehmende Sequenz von Protokollsequenznummern (LSNs) abgerufen, die diese Datensätze identifizieren. Ebenso erhält Client 2 eine eigene Sequenz von LSNs. Die LSNs, die zu einem bestimmten Datenstrom gehören, können verglichen werden, um die Reihenfolge zu bestimmen, in der die entsprechenden Datensätze geschrieben wurden. Ein LSN, der zu einem Datenstrom gehört, kann jedoch nicht mit einem LSN verglichen werden, der zu einem anderen Datenstrom gehört.
CLFS verwaltet einen Basis-LSN und einen letzten LSN für jeden Datenstrom, einschließlich Datenströme, die ein multiplexed-Protokoll gemeinsam nutzen. Jeder Datenstrom weist einen aktiven Teil auf, der mit dem Datensatz beginnt, auf den der Basis-LSN verweist, und endet mit dem Datensatz, auf den der letzte LSN verweist. Beachten Sie, dass ein Container in einem Multiplexed-Protokoll im stabilen Speicher erst wiederverwendet werden kann, wenn die Basis-LSNs aller Datenströme des Protokolls über alle Datensätze hinausgehen, die in diesem Container gespeichert sind.