Interruzione di blocchi opportunistici

L'interruzione di un blocco opportunistico è il processo di riduzione del blocco di un client in un file in modo che un altro client possa aprire il file, con o senza un blocco opportunistico. Quando l'altro client richiede l'operazione di apertura, il server ritarda l'operazione di apertura e invia una notifica al client che mantiene il blocco opportunistico.

Il client che contiene il blocco esegue quindi azioni appropriate per il tipo di blocco, ad esempio abbandonando i buffer di lettura, chiudendo il file e così via. Solo quando il client che contiene il blocco opportunistico notifica al server che viene eseguito esegue l'apertura del file per il client che richiede l'operazione di apertura. Tuttavia, quando un blocco di livello 2 viene interrotto, il server segnala al client che è stato interrotto ma non attende alcun riconoscimento, perché non sono presenti dati memorizzati nella cache da scaricare nel server.

Nel riconoscere un'interruzione di qualsiasi blocco esclusivo (filtro, livello 1 o batch), il titolare di un blocco interrotto non può richiedere un altro blocco esclusivo. Può degradare un blocco esclusivo a un blocco di livello 2 o nessun blocco. Il titolare rilascia in genere il blocco e chiude il file quando sta per chiudere comunque il file.

Le applicazioni ricevono una notifica che indica che un blocco opportunistico viene interrotto utilizzando il membro hEvent della struttura OVERLAPPED associata al file in cui viene interrotto il blocco. Le applicazioni possono anche usare funzioni come GetOverlappedResult e HasOverlappedIoCompleted.