Dela via


Opportunistiska låsexempel

I följande exempel visas data- och SMB-meddelanderörelser när opportunistiska lås skapas och bryts. Observera att klienter kan cachelagrat både filattributdata och fildata.

Observera också att dessa exempel baseras på situationer där klientprogram begär opportunistiska lås från fjärrservrar. De här processerna initieras automatiskt av nätverksomdirigeringen och fjärrservern – klientprogrammet eller programmen deltar inte direkt. De processer som beskrivs i de här exemplen kan generaliseras i situationer där lokala klientprogram direkt begär opportunistiska lås från det lokala filsystemet, med undantag för att inget utbyte av data över nätverket ingår.

Opportunistiskt lås på nivå 1

Följande diagram visar en nätverkstrafikvy över ett opportunistiskt lås på nivå 1 på en fil. Pilarna anger om det finns någon riktning för dataförflyttning.

Händelse Klient X Server Klient Y
1 Öppnar fil, begär nivå 1-lås ==>
2 <== Beviljar opportunistiskt lås på nivå 1
3 Utför läs-, skriv- och andra åtgärder ==>
4 <== Begäranden om att öppna filen
5 <== Bryter opportunistiskt lås
6 Tar bort inläsningsdata
7 Skriver data ==>
8 Skickar meddelandet "close" eller "done" ==>
9 Ok öppen åtgärd ==>
10 Utför läs-, skriv- och andra åtgärder ==> <== Utför läs-, skriv- och andra åtgärder

 

I händelse av 1 öppnar klient X en fil och som en del av den öppna åtgärden begärs ett opportunistiskt lås på nivå 1 på filen. I händelse av 2 beviljar servern nivå 1-låset eftersom ingen annan klient har filen öppen. Klienten fortsätter att komma åt filen på vanligt sätt i händelse 3.

I händelse av 4 försöker klient Y öppna filen och begär ett opportunistiskt lås. Servern ser att klienten X har filen öppen. Servern ignorerar Y:s begäran medan klient X rensar skrivdata och överger sin läscachen för filen.

Servern tvingar X att rensa genom att skicka ett SMB-meddelande till X som bryter det opportunistiska låset, händelse 5. Client X "tyst" tar bort alla framåtlästande data. Med andra ord genererar den här processen ingen nätverkstrafik. I händelse av 7 skriver klient X cachelagrade skrivdata till servern. När klient X är klar med att skriva cachelagrade data till servern skickar klient X antingen ett "close" eller ett "done"-meddelande till servern, händelse 8.

När servern har meddelats att klient X är klar med att rensa sin skrivcachen till servern eller har stängt filen kan servern öppna filen för klient Y, i händelse av 9. Eftersom servern nu har två klienter med samma fil öppen, ger den ett opportunistiskt lås till ingen av dem. Båda klienterna fortsätter att läsa från filen och en eller inget skrivningar till filen.

Batch opportunistiskt lås

Följande diagram visar en nätverkstrafikvy över ett batch-opportunistiskt lås. Pilarna anger om det finns någon riktning för dataförflyttning.

Händelse Klient X Server Klient Y
1 Öppnar fil, begär batchlås ==>
2 <== Beviljar batch-opportunistiskt lås
3 Läser filen ==>
4 <== Skickar data
5 Stänger fil
6 Öppnar fil
7 Söker efter data
8 Läser data ==>
9 <== Skickar data
10 Stänger fil
11 <== Öppnar fil
12 <== Bryter opportunistiskt lås
13 Stänger filen ==>
14 Ok öppen åtgärd ==>
15 <== Utför läs-, skriv- och andra åtgärder

 

I batchens opportunistiska lås öppnar klient X en fil, händelse 1, och servern ger klienten X ett batchlås i händelse 2. Client X försöker läsa data, händelse 3, som servern svarar på med data, händelse 4.

Händelse 5 visar batchens opportunistiska lås på jobbet. Programmet på Klient X stänger filen. Nätverksomdirigeringsorn filtrerar dock ut stängningsåtgärden och skickar inte ett nära meddelande, vilket utför en "tyst" stängning. Nätverksomdirigeraren kan göra detta eftersom klient X har ensamt ägarskap för filen. Senare, i händelse av 6, öppnar programmet filen igen. Återigen flödar inga data över nätverket. När det gäller servern har den här klienten haft filen öppen sedan händelse 2.

Händelser 7, 8 och 9 visar den vanliga kursen för nätverkstrafik. I händelse av 10 inträffar ytterligare en tyst stängning.

I händelse av 11 försöker klient Y öppna filen. Serverns vy över filen är att klienten X har den öppen, även om programmet på klient X har stängt den. Därför skickar servern ett meddelande som bryter det opportunistiska låset till klient X. Klient X skickar nu det nära meddelandet i nätverket, händelse 13. Händelse 14 följer när servern öppnar filen för klient Y. Programmet på klient X har stängt filen, så det gör inga fler överföringar till eller från servern för filen. Klient Y påbörjar dataöverföringar som vanligt i händelse av 15.

Mellan den tid då klienten X beviljas låset på filen i händelse 2 och den sista stängningen vid händelse 13, är alla fildata som klienten har cachelagrat giltiga, trots att det mellanliggande programmet öppnas och stängs. Men när det opportunistiska låset har brutits kan cachelagrade data inte anses vara giltiga.

Filtrera opportunistiskt lås

Följande diagram visar en nätverkstrafikvy över ett opportunistiskt filterlås. Pilarna anger om det finns någon riktning för dataförflyttning.

Händelse Klient X Server Klient Y
1 Öppnar fil utan åtkomstbehörighet ==>
2 <== Öppnar filen
3 Begär filterlås==>
4 <== Beviljar lås
5 Öppnar filen för att läsa ==>
6 <== Öppnar filen igen
7 Läser data med hjälp av läshandtaget ==>
8 <== Skickar data
9 <== Skickar data
10 <== Skickar data
11 <== Öppnar filen
12 Öppnar filen ==>
13 <== Begär filterlås
14 Nekar filterlås==>
15 <== Läser data
16 Skickar data ==>
17 Läser (cachelagrade) data
18 Stänger filen ==>
19 <== Stänger fil

 

I det opportunistiska filterlåset öppnar klient X en fil, händelse 1, och servern svarar i händelse 2. Klienten begär sedan ett opportunistiskt filterlås i händelse 3, följt av att servern beviljar det opportunistiska låset i händelse 4. Klient X öppnar sedan filen igen för läsning i händelse 5, som servern svarar på i händelse 6. Klienten försöker sedan läsa data som servern svarar på med data, händelse 8.

Händelse 9 visar det opportunistiska filterlåset på jobbet. Servern läser före klienten och skickar data över nätverket trots att klienten inte har begärt det. Klienten cachelagrar data. I händelse av 10 förväntar sig servern också en framtida begäran om data och skickar en annan del av filen som klienten ska cachelagrar.

I händelse av 11 och 12 öppnar en annan klient, Y, filen. Klient Y begär också ett opportunistiskt filterlås. I händelse av 14 nekar servern det. I händelse av 15 begär klient Y data, som servern skickar i händelse 16. Inget av detta påverkar klient X. När som helst kan en annan klient öppna den här filen för läsåtkomst. Ingen annan klient påverkar klient X:s filterlås.

Händelse 17 visar klient X-läsdata. Men eftersom servern redan har skickat data och klienten har cachelagrat dem passerar ingen trafik nätverket.

I det här exemplet försöker klient X aldrig läsa alla data i filen, så den framåtläsning som anges av händelserna 9 och 10 är "bortkastad". Data används alltså aldrig. Detta är en acceptabel förlust eftersom läsningen framåt har påskyndat programmet.

I händelse av 18 stänger klient X filen. Klientens nätverksomdirigering överger cachelagrade data. Servern stänger filen.