Condividi tramite


Controllo stato buffering

RDBSS fornisce un gestore di buffering, un meccanismo per fornire la coesistenza della cache distribuita in combinazione con i vari mini-reindirizzamenti di rete. Questo servizio è incapsulato nella gestione buffering in SERVIZI Desktop remoto che elabora le richieste per modificare lo stato di buffering. La gestione buffering in SERVIZI Desktop remoto tiene traccia e avvia le azioni su tutte le richieste di stato di buffering delle modifiche generate dai vari mini redirector di rete e da RDBSS.

Esistono diversi componenti comuni nell'implementazione della coesistenza della cache in un mini-redirector di rete tipico:

  • Modifiche per creare e aprire routine di file.

    In questo percorso viene determinato il tipo di richiesta di buffering e viene effettuata la richiesta appropriata al server. Al ritorno dal mini-redirector di rete e possibilmente dal server, lo stato di buffering associato al cluster di failover viene aggiornato in base al risultato della chiamata di creazione o apertura.

  • Modifiche per ricevere un codice di indicazione per gestire le notifiche di stato del buffer delle modifiche dal server.

    Se viene rilevata una richiesta di questo tipo, è necessario attivare il meccanismo locale per coordinare gli stati di buffering.

  • Meccanismo per modificare lo stato di buffering implementato come parte di RDBSS. Qualsiasi richiesta di stato di memorizzazione nel buffer delle modifiche deve identificare la struttura SRV_OPEN a cui si applica la richiesta.

La quantità di lavoro di calcolo interessata nell'identificazione della struttura SRV_OPEN dipende dal protocollo e dai dettagli del mini-redirector di rete. Nel protocollo SMB i blocchi opportunistici (oplock) forniscono l'infrastruttura necessaria per la coerenza della cache. Nell'implementazione del protocollo SMB in Windows vengono usate le API ID multiplex fornite da RDBSS. Il server ottiene la selezione dell'ID multiplex usato per identificare un file aperto nel server. Gli ID multiplex sono relativi alla NET_ROOT (condivisione) in cui vengono aperti. Di conseguenza, ogni richiesta di stato del buffer delle modifiche viene identificata da due chiavi: NetRootKey e SrvOpenKey, che devono essere convertite rispettivamente nella struttura appropriata NET_ROOT e SRV_OPEN. Per offrire una migliore integrazione con il meccanismo di acquisizione/rilascio delle risorse e per evitare la duplicazione di questo sforzo nei vari mini redirector di rete, RDBSS fornisce questo servizio.

Esistono due routine fornite in SERVIZI Desktop remoto per indicare le modifiche dello stato di buffering alle strutture SRV_OPEN:

Si noti che le associazioni chiave sono irreversibili e dureranno la durata della struttura di SRV_OPEN associata.

I mini-reindirizzamenti di rete che necessitano di un meccanismo ausiliario per stabilire il mapping da ID multiplex alla struttura SRV_OPEN possono usare RxIndicateChangeOfBufferingState, mentre i mini-reindirizzamenti di rete che non richiedono questa assistenza possono usare RxIndicateChangeOfBufferingStateForSrvOpen.

Gestione buffering in SERVIZI Desktop remoto elabora queste richieste in fasi diverse. Gestisce le richieste ricevute dai vari mini-redirector di rete sottostanti in uno dei diversi elenchi.

  • L'elenco Dispatcher contiene tutte le richieste per le quali non è stato stabilito il mapping appropriato a una struttura di SRV_OPEN.

  • L'elenco gestore contiene tutte le richieste per le quali è stato stabilito il mapping appropriato, ma non è ancora stato elaborato.

  • LastChanceHandlerList contiene tutte le richieste per le quali l'elaborazione iniziale non è riuscita. Ciò si verifica in genere quando il cluster di failover è stato acquisito in modalità condivisa al momento della ricezione della richiesta di stato del buffer delle modifiche. In questi casi, la richiesta di interruzione del blocco può essere elaborata solo da un thread di lavoro ritardato.

L'elaborazione delle richieste di stato del buffer delle modifiche in un driver mini-redirector di rete è legata al protocollo di acquisizione e rilascio fcb. Ciò consente di garantire tempi di turnaround più brevi.

RDBSS fornisce le routine seguenti per gestire lo stato di buffering che può essere usato dai driver del mini-redirector di rete:

Routine Descrizione

RxChangeBufferingState

Questa routine viene chiamata per elaborare una richiesta di modifica dello stato del buffering.

RxIndicateChangeOfBufferingState

Questa routine viene chiamata per registrare una richiesta di modifica dello stato del buffering (un'indicazione di interruzione di blocco, ad esempio) per l'elaborazione successiva.

RxIndicateChangeOfBufferingStateForSrvOpen

Questa routine viene chiamata per registrare una richiesta di modifica dello stato del buffering (un'indicazione di interruzione di blocco, ad esempio) per l'elaborazione successiva.