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 y lee desde un registro del Sistema de archivos de registro común (CLFS). Es posible que un solo flujo tenga varios clientes. Cada cliente tendría su propia estructura LOG_FILE_OBJECT , que representa una instancia abierta de la secuencia.
Tenga en cuenta 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, los flujos y las áreas de marshalling del 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:<nombre del registro>::<nombre de la secuencia>" donde <el nombre> del registro es una ruta de acceso válida en el sistema de archivos subyacente y <el nombre> de la secuencia es el nombre que ha elegido dar 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 de cliente 2, llame a ClfsCreateLogFile para obtener un puntero a una estructura de LOG_FILE_OBJECT. Establezca el parámetro puszLogFileName en una cadena con el formato "log:<nombre de registro>::<nombre de secuencia>" donde <nombre de registro> es el mismo nombre de ruta de acceso que usó para el cliente 1, y <nombre de secuencia> es el nombre que ha elegido asignar a la secuencia que usará el cliente 2. Por ejemplo, podría configurar puszLogFileName a "log:c:\ClfsLogs\myLog::Stream2".
Pase el puntero de uno de los LOG_FILE_OBJECT que obtuvo de ClfsCreateLogFile a ClfsAddLogContainer para crear un contenedor (extensión física contigua) en un almacenamiento estable que guardará registros de log. 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á como almacenamiento estable para los registros de registro escritos 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 una zona de gestión que el cliente 1 puede usar para leer y escribir registros de sucesos. Especifique el tamaño de los bloques de E/S de registro que usará la zona de agrupamiento estableciendo el parámetro cbMarshallingBuffer. Hay varios otros parámetros que puedes usar para establecer diversas propiedades del área de marshalling.
Si el cliente 1 necesita áreas de agrupamiento adicionales, pase de nuevo el mismo puntero LOG_FILE_OBJECT a ClfsCreateMarshallingArea, una vez por cada área de agrupamiento 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 marshalling que el cliente 2 pueda usar para leer y escribir registros de log. Especifique el tamaño de los bloques de E/S de registro estableciendo el parámetro cbMarshallingBuffer que usará el área de ensamblado.
Nota Hay varios otros parámetros que puede utilizar para configurar diversas propiedades del área de marshalling.
Si el cliente 2 necesita áreas de agrupamiento adicionales, pase de nuevo el mismo puntero LOG_FILE_OBJECT a ClfsCreateMarshallingArea, una vez por cada área de agrupamiento adicional que necesite el cliente 2.
Ahora que los clientes 1 y 2 tienen una LOG_FILE_OBJECT y una o varias áreas de marshalling, pueden escribir registros en sus propios flujos (mediante las áreas de marshalling asociadas a esos flujos) llamando 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 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, incluidos los flujos 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 han avanzado más allá de los registros almacenados en ese contenedor.