Bagikan melalui


Contoh Kunci Oportunistik

Contoh berikut menunjukkan pergerakan data dan pesan SMB saat kunci oportunistik dibuat dan rusak. Perhatikan bahwa klien dapat menyimpan data atribut file serta data file.

Perhatikan juga bahwa contoh-contoh ini didasarkan pada situasi di mana aplikasi klien meminta kunci oportunistik dari server jarak jauh. Proses ini secara otomatis dimulai oleh pengalih jaringan dan server jarak jauh—tidak ada keterlibatan langsung oleh aplikasi atau aplikasi klien. Proses yang dijelaskan oleh contoh-contoh ini dapat digeneralisasi ke dalam situasi di mana aplikasi klien lokal secara langsung meminta kunci oportunistik dari sistem file lokal, dengan pengecualian bahwa tidak ada pertukaran data melalui jaringan yang terlibat.

Kunci Oportunistik Tingkat 1

Diagram berikut menunjukkan tampilan lalu lintas jaringan dari kunci oportunistik tingkat 1 pada file. Panah menunjukkan arah pergerakan data, jika ada.

Kejadian Klien X Server Klien Y
1 Membuka file, meminta kunci tingkat 1 ==>
2 <== Memberikan kunci oportunistik tingkat 1
3 Melakukan operasi baca, tulis, dan operasi lainnya ==>
4 <== Permintaan untuk membuka file
5 <== Memutus kunci oportunistik
6 Membuang data read-ahead
7 Menulis data ==>
8 Mengirim pesan "close" atau "done" ==>
9 Operasi buka okes ==>
10 Melakukan operasi baca, tulis, dan operasi lainnya ==> <== Melakukan operasi baca, tulis, dan lainnya

 

Dalam peristiwa 1, klien X membuka file dan sebagai bagian dari operasi terbuka meminta kunci oportunistik tingkat 1 pada file. Dalam peristiwa 2, server memberikan kunci tingkat 1 karena tidak ada klien lain yang membuka file. Klien melanjutkan untuk mengakses file dengan cara yang biasa jika 3.

Dalam peristiwa 4, klien Y mencoba membuka file dan meminta kunci oportunistik. Server melihat bahwa klien X membuka file. Server mengabaikan permintaan Y saat klien X menghapus data tulis apa pun dan meninggalkan cache baca untuk file.

Server memaksa X untuk membersihkan dengan mengirim ke X pesan SMB yang merusak kunci oportunistik, peristiwa 5. Klien X "diam-diam" membuang data read-ahead; dengan kata lain, proses ini tidak menghasilkan lalu lintas jaringan. Jika 7, klien X menulis data tulis cache apa pun ke server. Ketika klien X selesai menulis data yang di-cache ke server, klien X mengirimkan pesan "tutup" atau "selesai" ke server, peristiwa 8.

Setelah server diberi tahu bahwa klien X selesai membersihkan cache tulisnya ke server atau telah menutup file, maka server dapat membuka file untuk klien Y, jika 9. Karena server sekarang memiliki dua klien dengan file yang sama terbuka, server memberikan kunci oportunistik ke keduanya. Kedua klien melanjutkan untuk membaca dari file, dan satu atau tidak sama sekali menulis ke file.

Kunci Oportunistik Batch

Diagram berikut menunjukkan tampilan lalu lintas jaringan dari kunci oportunistik batch. Panah menunjukkan arah pergerakan data, jika ada.

Kejadian Klien X Server Klien Y
1 Membuka file, meminta kunci batch ==>
2 <== Memberikan kunci oportunistik batch
3 Membaca file ==>
4 <== Mengirim data
5 Menutup file
6 Membuka file
7 Mencari data
8 Membaca data ==>
9 <== Mengirim data
10 Menutup file
11 <== Membuka file
12 <== Memutus kunci oportunistik
13 Menutup file ==>
14 Operasi buka okes ==>
15 <== Melakukan operasi baca, tulis, dan lainnya

 

Dalam kunci oportunistik batch, klien X membuka file, peristiwa 1, dan server memberi klien X kunci batch di peristiwa 2. Klien X mencoba membaca data, peristiwa 3, tempat server merespons dengan data, peristiwa 4.

Peristiwa 5 menunjukkan kunci oportunistik batch di tempat kerja. Aplikasi di Client X menutup file. Namun, pengalih jaringan memfilter operasi penutupan dan tidak mengirimkan pesan dekat, sehingga melakukan penutupan "senyap". Pengalih jaringan dapat melakukan ini karena klien X memiliki kepemilikan satu-satunya file. Kemudian, pada peristiwa 6, aplikasi membuka kembali file. Sekali lagi, tidak ada aliran data di seluruh jaringan. Sejauh yang dikhawatirkan server, klien ini telah membuka file sejak peristiwa 2.

Peristiwa 7, 8, dan 9 menunjukkan perjalanan lalu lintas jaringan yang biasa. Jika 10, penutupan senyap lain terjadi.

Dalam peristiwa 11, klien Y mencoba membuka file. Tampilan server dari file adalah bahwa klien X membukanya, meskipun aplikasi pada klien X telah menutupnya. Oleh karena itu, server mengirim pesan yang merusak kunci oportunistik ke klien X. Klien X sekarang mengirim pesan penutupan di seluruh jaringan, peristiwa 13. Peristiwa 14 mengikuti saat server membuka file untuk klien Y. Aplikasi pada klien X telah menutup file, sehingga tidak ada lagi transfer ke atau dari server untuk file tersebut. Klien Y memulai transfer data seperti biasa jika 15.

Antara waktu klien X diberikan kunci pada file pada peristiwa 2 dan penutupan akhir pada peristiwa 13, data file apa pun yang telah di-cache klien valid, terlepas dari aplikasi intervensi operasi terbuka dan tutup. Namun, setelah kunci oportunistik rusak, data yang di-cache tidak dapat dianggap valid.

Filter Kunci Oportunistik

Diagram berikut menunjukkan tampilan lalu lintas jaringan dari kunci oportunistik filter. Panah menunjukkan arah pergerakan data, jika ada.

Kejadian Klien X Server Klien Y
1 Membuka file tanpa hak akses ==>
2 <== Membuka file
3 Permintaan filter lock==>
4 <== Memberikan kunci
5 Membuka file untuk membaca ==>
6 <== Membuka kembali file
7 Membaca data menggunakan handel baca ==>
8 <== Mengirim data
9 <== Mengirim data
10 <== Mengirim data
11 <== Membuka file
12 Membuka file ==>
13 <== Permintaan kunci filter
14 Menolak kunci filter==>
15 <== Membaca data
16 Mengirim data ==>
17 Membaca (cache) data
18 Menutup file ==>
19 <== Menutup file

 

Dalam kunci oportunistik filter, klien X membuka file, peristiwa 1, dan server merespons di peristiwa 2. Klien kemudian meminta kunci oportunistik filter di peristiwa 3, diikuti oleh server yang memberikan kunci oportunistik pada peristiwa 4. Klien X kemudian membuka file lagi untuk dibaca di peristiwa 5, di mana server merespons jika 6. Klien kemudian mencoba membaca data, di mana server merespons dengan data, peristiwa 8.

Peristiwa 9 menunjukkan kunci oportunistik filter di tempat kerja. Server membaca di depan klien dan mengirim data melalui jaringan meskipun klien belum memintanya. Klien menyimpan data dalam cache. Jika 10, server juga mengantisipasi permintaan data di masa mendatang dan mengirim bagian lain dari file agar klien dapat melakukan cache.

Jika 11 dan 12, klien lain, Y, membuka file. Klien Y juga meminta kunci oportunistik filter. Pada peristiwa 14, server menolaknya. Dalam peristiwa 15, klien Y meminta data, yang dikirim server dalam peristiwa 16. Tidak satu pun dari ini mempengaruhi klien X. Kapan saja, klien lain dapat membuka file ini untuk akses baca. Tidak ada klien lain yang memengaruhi kunci filter klien X.

Peristiwa 17 menunjukkan klien X membaca data. Namun, karena server telah mengirim data dan klien telah menyimpannya dalam cache, tidak ada lalu lintas yang melintasi jaringan.

Dalam contoh ini, klien X tidak pernah mencoba membaca semua data dalam file, sehingga read-ahead yang ditunjukkan oleh peristiwa 9 dan 10 "terbuang sia-sia"; artinya, data tidak pernah benar-benar digunakan. Ini adalah kerugian yang dapat diterima karena read-ahead telah meningkatkan aplikasi.

Dalam peristiwa 18, klien X menutup file. Pengalih jaringan klien meninggalkan data yang di-cache. Server menutup file.