Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un registro multiplexado actúa como almacenamiento estable para varias secuencias. Un registro dedicado actúa como almacenamiento estable para una sola secuencia. En este tema se describen los registros multiplexados. Para obtener información sobre los registros dedicados, consulte Registros clFS dedicados.
Cada secuencia de un registro multiplexado proporciona a sus clientes la ilusión de que su flujo es todo el registro. Un cliente, en este contexto, es un controlador, un subproceso o alguna otra unidad de software que escribe en un registro de Common Log File System (CLFS). Es posible que una sola secuencia tenga varios clientes. Cada cliente tendría su propia estructura de LOG_FILE_OBJECT , que representa una instancia abierta de la secuencia.
Considere el caso de un registro multiplexado que tiene dos flujos, cada uno de los cuales tiene un cliente. Puede usar el procedimiento siguiente para crear el registro, las secuencias y las áreas de serialización de cliente.
En nombre del cliente 1, llame a ClfsCreateLogFile para obtener un puntero a una estructura LOG_FILE_OBJECT . Establezca el parámetro puszLogFileName en una cadena con el formato "log:log name>:<:<stream name>", donde <log name> es una ruta de acceso válida en el sistema de archivos subyacente y <stream name> es el nombre que ha elegido asignar a la secuencia que usará el cliente 1. Por ejemplo, podría establecer puszLogFileName en "log:c:\ClfsLogs\myLog::Stream1". En ese caso, CLFS crearía el archivo de registro base myLog.blf en el directorio c:\ClfsLogs y Stream1 sería el nombre de la secuencia usada por el cliente 1.
Nota Es la forma de la cadena pasada en puszLogFileName que determina si CLFS crea un registro dedicado o multiplexado. Si la cadena tiene dos puntos (::) después del nombre de la ruta de acceso, CLFS crea un registro multiplexado.
En nombre del cliente 2, llame a ClfsCreateLogFile para obtener un puntero a una estructura LOG_FILE_OBJECT . Establezca el parámetro puszLogFileName en una cadena con el formato "log:log name>:<:<stream name>", donde <log name> es el mismo nombre de ruta de acceso que usó para el cliente 1 y <stream name> es el nombre que ha elegido asignar a la secuencia que usará el cliente 2. Por ejemplo, podría establecer puszLogFileName en "log:c:\ClfsLogs\myLog::Stream2".
Pase uno de los punteros de LOG_FILE_OBJECT obtenidos de ClfsCreateLogFile a ClfsAddLogContainer para crear un contenedor (extensión física contigua) en un almacenamiento estable que contenga registros de registro. Especifique el tamaño del contenedor (que se redondeará hasta un múltiplo de 1 megabyte) estableciendo el parámetro pcbContainer . Establezca el parámetro puszContainerPath para especificar un nombre de ruta de acceso para el contenedor. El nombre de la ruta de acceso puede ser absoluto o relativo al directorio que contiene el archivo de registro base.
Puede crear contenedores adicionales para el registro llamando a ClfsAddLogContainer de nuevo. Tenga en cuenta que todos los contenedores de un registro determinado deben tener el mismo tamaño. Como alternativa a llamar a ClfsAddLogContainer varias veces, puede llamar a ClfsAddLogContainerSet para crear varios contenedores simultáneamente. Tenga en cuenta que el conjunto de contenedores servirá de almacenamiento estable para las entradas de registro escritas por el cliente 1 y el cliente 2.
Pase el puntero LOG_FILE_OBJECT que obtuvo en nombre del cliente 1 a ClfsCreateMarshallingArea para obtener un puntero a un área de serialización que el cliente 1 puede usar para leer y escribir registros de registro. Especifique el tamaño de los bloques de E/S de registro que usará el área de serialización estableciendo el parámetro cbMarshallingBuffer . Hay otros parámetros que puede usar para establecer varias propiedades del área de serialización.
Si el cliente 1 necesita áreas de serialización adicionales, pase de nuevo el mismo puntero LOG_FILE_OBJECT a ClfsCreateMarshallingArea , una vez para cada área de serialización adicional que necesite el cliente 1.
Pase el puntero LOG_FILE_OBJECT que obtuvo en nombre del cliente 2 a ClfsCreateMarshallingArea para obtener un área de serialización que el cliente 2 puede usar para leer y escribir registros de registro. Especifique el tamaño de los bloques de E/S de registro que usará el área de serialización estableciendo el parámetro cbMarshallingBuffer .
Nota Hay otros parámetros que puede usar para establecer varias propiedades del área de serialización.
Si el cliente 2 necesita áreas de serialización adicionales, pase de nuevo el mismo puntero LOG_FILE_OBJECT a ClfsCreateMarshallingArea , una vez para cada área de serialización adicional que necesite el cliente 2.
Ahora que los clientes 1 y 2 tienen una LOG_FILE_OBJECT y una o varias áreas de serialización, pueden escribir registros en sus propios flujos (por medio de las áreas de serialización asociadas a esas secuencias) mediante una llamada a las siguientes funciones.
ClfsReserveAndAppendLogAligned
Todos los registros escritos por los clientes 1 y 2 van al mismo registro; es decir, en el mismo conjunto de contenedores físicos en el almacenamiento estable. CLFS multiplexa los registros escritos por los dos clientes y realiza un seguimiento de los registros que pertenecen a cada secuencia.
A medida que el cliente 1 escribe registros en su secuencia, devuelve una secuencia creciente de números de secuencia de registro (LSN) que identifican esos registros. Del mismo modo, el cliente 2 obtiene su propia secuencia de LSN. Los LSN que pertenecen a una secuencia determinada se pueden comparar para determinar el orden en que se escribieron los registros correspondientes. Sin embargo, un LSN que pertenece a una secuencia no se puede comparar con un LSN que pertenece a otra secuencia.
CLFS mantiene un LSN base y un último LSN para cada secuencia, incluidas las secuencias que comparten un registro multiplexado. Cada secuencia tiene una parte activa que comienza con el registro al que apunta el LSN base y termina con el registro al que apunta el último LSN. Tenga en cuenta que un contenedor de un registro multiplexado en un almacenamiento estable no se puede reciclar hasta que los LSN base de todas las secuencias del registro hayan avanzado más allá de los registros almacenados en ese contenedor.