共用方式為


商機鎖定範例

下列範例顯示資料與 SMB 訊息移動,因為作業鎖定已建立和中斷。 請注意,用戶端可以快取檔案屬性資料和檔案資料。

另請注意,這些範例是以用戶端應用程式向遠端伺服器要求機會鎖定的情況為基礎。 這些程式是由網路重新導向器和遠端伺服器自動起始,用戶端應用程式或應用程式不會直接介入。 這些範例所述的程式可一般化為本機用戶端應用程式直接向本機檔案系統要求機會鎖定的情況,但例外狀況是,不需透過網路交換資料。

層級 1 Opportunistic 鎖定

下圖顯示檔案上層級 1 商機鎖定的網路流量檢視。 箭號表示資料移動的方向,如果有的話。

事件 用戶端 X 伺服器 用戶端 Y
1 開啟檔案,要求層級 1 鎖定 ==>
2 <== 授與層級 1 的機率鎖定
3 執行讀取、寫入和其他作業 ==>
4 <== 開啟檔案的要求
5 <== 中斷機會鎖定
6 捨棄預先讀取資料
7 寫入資料 ==>
8 傳送 「close」 或 「done」 訊息 ==>
9 確定開啟作業 ==>
10 執行讀取、寫入和其他作業 ==> <== 執行讀取、寫入和其他作業

 

在事件 1 中,用戶端 X 會開啟檔案,並在開啟作業中要求檔案上層級 1 的機率鎖定。 在事件 2 中,伺服器會授與層級 1 鎖定,因為沒有其他用戶端開啟檔案。 用戶端會以事件 3 的一般方式繼續存取檔案。

在事件 4 中,用戶端 Y 會嘗試開啟檔案並要求機會鎖定。 伺服器看到用戶端 X 已開啟檔案。 當用戶端 X 排清任何寫入資料並放棄檔案的讀取快取時,伺服器會忽略 Y 的要求。

伺服器會強制 X 清除,方法是傳送至 X SMB 訊息,以中斷商機鎖定事件 5。 用戶端 X 會「以無訊息方式」捨棄任何預先讀取的資料;換句話說,此程式不會產生任何網路流量。 在事件 7 中,用戶端 X 會將任何快取的寫入資料寫入伺服器。 當用戶端 X 將快取的資料寫入伺服器時,用戶端 X 會將「關閉」或「完成」訊息傳送至伺服器,事件 8。

當伺服器收到通知之後,用戶端 X 會在事件 9 中清除其寫入快取或關閉檔案之後,伺服器就可以開啟用戶端 Y 的檔案。 因為伺服器現在有兩個用戶端開啟相同的檔案,所以不會授與機會鎖定。 這兩個用戶端都會繼續從檔案讀取,一個或兩者都不會寫入檔案。

Batch Opportunistic Lock

下圖顯示批次商機鎖定的網路流量檢視。 箭號表示資料移動的方向,如果有的話。

事件 用戶端 X 伺服器 用戶端 Y
1 開啟檔案,要求批次鎖定 ==>
2 <== 授與批次機會鎖定
3 讀取檔案 ==>
4 <== 傳送資料
5 關閉檔案
6 開啟檔案
7 搜尋資料
8 讀取資料 ==>
9 <== 傳送資料
10 關閉檔案
11 <== 開啟檔案
12 <== 中斷機會鎖定
13 關閉檔案 ==>
14 確定開啟作業 ==>
15 <== 執行讀取、寫入和其他作業

 

在批次機會鎖定中,用戶端 X 會開啟檔案、事件 1,而伺服器會在事件 2 中授與用戶端 X 批次鎖定。 用戶端 X 會嘗試讀取伺服器以資料回應的資料事件 3 事件 4。

事件 5 顯示工作中的批次機會鎖定。 Client X 上的應用程式會關閉檔案。 不過,網路重新導向器會篩選出關閉作業,而不會傳輸關閉訊息,因此會執行「無訊息」關閉。 網路重新導向器可以這麼做,因為用戶端 X 擁有檔案的唯一擁有權。 稍後,在事件 6 中,應用程式會重新開啟檔案。 同樣地,網路上沒有資料流程。 就伺服器而言,此用戶端自事件 2 以來已開啟檔案。

事件 7、8 和 9 會顯示網路流量的一般程式。 在事件 10 中,會發生另一個無訊息關閉。

在事件 11 中,用戶端 Y 會嘗試開啟檔案。 伺服器的檔案檢視是用戶端 X 已開啟,即使用戶端 X 上的應用程式已關閉它也一樣。 因此,伺服器會將中斷機會鎖定的訊息傳送給用戶端 X。用戶端 X 現在會透過網路事件 13 傳送關閉訊息。 事件 14 如下,因為伺服器會開啟用戶端 Y 的檔案。用戶端 X 上的應用程式已關閉檔案,因此不會再傳輸該檔案的伺服器。 用戶端 Y 會在事件 15 中如往常般開始資料傳輸。

在用戶端 X 在事件 2 和事件 13 的最後一次關閉期間,用戶端快取的任何檔案資料都是有效的,同時在插入應用程式開啟和關閉作業的情況下,授與檔案的鎖定。 不過,在商機鎖定中斷之後,快取的資料無法視為有效。

篩選不透明鎖定

下圖顯示篩選機率鎖定的網路流量檢視。 箭號表示資料移動的方向,如果有的話。

事件 用戶端 X 伺服器 用戶端 Y
1 開啟沒有存取權限的檔案 ==>
2 <== 開啟檔案
3 要求篩選鎖定==>
4 <== 授與鎖定
5 開啟讀取 == 的檔案>
6 <== 重新開啟檔案
7 使用讀取控制碼 == 讀取資料>
8 <== 傳送資料
9 <== 傳送資料
10 <== 傳送資料
11 <== 開啟檔案
12 開啟檔案 ==>
13 <== 要求篩選鎖定
14 拒絕篩選鎖定==>
15 <== 讀取資料
16 傳送資料 ==>
17 讀取 (快取) 資料
18 關閉檔案 ==>
19 <== 關閉檔案

 

在篩選機率鎖定中,用戶端 X 會開啟檔案、事件 1,而伺服器會在事件 2 中回應。 接著,用戶端會在事件 3 中要求篩選機率鎖定,接著在事件 4 中授與商機鎖定的伺服器。 用戶端 X 接著會再次開啟檔案,以在事件 5 中讀取,伺服器會在事件 6 中回應該檔案。 然後,用戶端會嘗試讀取伺服器以資料回應的資料,事件 8。

事件 9 顯示工作的篩選機率鎖定。 伺服器會在用戶端之前讀取,並透過網路傳送資料,即使用戶端尚未要求資料也一樣。 用戶端會快取資料。 在事件 10 中,伺服器也會預期未來的資料要求,並傳送另一個檔案部分供用戶端快取。

在事件 11 和 12 中,另一個用戶端 Y 會開啟檔案。 用戶端 Y 也會要求篩選機率鎖定。 在事件 14 中,伺服器會拒絕它。 在事件 15 中,用戶端 Y 會要求伺服器在事件 16 中傳送的資料。 這不會影響用戶端 X。任何時間,另一個用戶端都可以開啟此檔案以供讀取存取。 其他用戶端不會影響用戶端 X 的篩選鎖定。

事件 17 顯示用戶端 X 讀取資料。 不過,由於伺服器已經傳送資料,且用戶端已快取資料,因此不會有流量通過網路。

在此範例中,用戶端 X 永遠不會嘗試讀取檔案中的所有資料,因此事件 9 和 10 表示的預先讀取會「浪費」;也就是說,永遠不會實際使用資料。 這是可接受的遺失,因為預先讀取已加速應用程式。

在事件 18 中,用戶端 X 會關閉檔案。 用戶端的網路重新導向器會放棄快取的資料。 伺服器會關閉檔案。