Нижеследующие примеры показывают данные и перемещения блока серверных сообщений (SMB), поскольку уступающие блокировки создаются и прерываются.
Обратите внимание! на то, что то, что клиенты могут кэшировать атрибуты данных так же как данные файла. Также обратите внимание! на то, что эти примеры основаны на ситуациях, где приложения - клиенты запрашивают уступающие блокировки из удаленных серверов. Эти процессы автоматически инициализируются сетевым редиректором и удаленным сервером - нет никакого прямого использования приложением - клиентом или прикладными программами. Процессы, описанные этими примерами, могут быть обобщенными в ситуации, где локальные приложения - клиенты непосредственно не запрашивают уступающие блокировки из локальной файловой системы, за исключением того, что не вызывается никакой обмен данными через сеть. |
Нижеследующая диаграмма показывает представление сетевого трафика уступающей блокировки уровня 1 файла. Стрелки указывают направление перемещения данных, если они есть.
Событие |
Клиент X |
Сервер |
Клиент Y |
---|---|---|---|
1 | Открывает файл, запрашивает блокировку уровня 1 ==> | ||
2 | <== Предоставление уступающей блокировки уровня 1 | ||
3 | Выполняет чтение, запись и другие операции ==> | ||
4 | <== Запросы на открытие файлы | ||
5 | <== Прерывает уступающую блокировку | ||
6 | Сброс данных опережающего чтения | ||
7 | Записи данных ==> | ||
8 | Отправляет сообщение "закрыто" или "сделано" ==> | ||
9 | Одобряет операцию открытия ==> | ||
10 | Выполняет чтение, запись и другие операции ==> | <== Выполняет чтение, запись и другие операции |
В событии 1 клиент X открывает файл и в режиме операции открытия, запрашивает уступающую блокировку файла уровня 1. В событии 2 сервер предоставляет блокировку уровня 1, потому что ни у какого другого клиента нет открытого файла. Клиент продолжает обращаться к файлу в обычной манере в событии 3.
В событии 4, клиент Y пытается открыть файл и запрашивает уступающую блокировку. Сервер видит, что у клиента X есть открытый файл. Сервер игнорирует запрос Y-ка до тех пор, пока клиент X не сбросит на диск любую запись данных и не прекратит свою работу чтения из кэша для файла.
Сервер заставляет клиента X сделать операцию очистки, отправляя X-у сообщение блока серверных сообщений (SMB), прерывающее уступающую блокировку, это событие 5. Клиент X "молча" освобождается от любых данных опережающего чтения; другими словами, этот процесс не создает сетевого трафика. В событии 7, клиент X читает любую кэшированную запись данных на сервере. Когда клиент X заканчивает запись кэшированных данных на сервер, то он отправляет на сервер сообщение или "закрыто" или "сделано", это событие 8.
После того, как сервер получит уведомление, что клиент X закончил сбрасывание на диск своей записи в кэш на сервер или закрыл файл, тогда сервер может открыть файл для клиента Y, в событии 9. Поскольку у сервера теперь имеется два клиента с тем же самым открытым файлом, то он не предоставляет уступающую блокировку ни тому, ни другому. Оба клиента продолжают читать данные из файла, а один или никто не может писать в файл.
Нижеследующая диаграмма показывает представление сетевого трафика пакетной уступающей блокировки. Стрелки указывают направление перемещения данных, если они есть.
Событие |
Клиент X |
Сервер |
Клиент Y |
---|---|---|---|
1 | Открывает файл, запрашивает пакетную блокировку ==> | ||
2 | <== Предоставляет пакетную уступающую блокировку | ||
3 | Читает файл ==> | ||
4 | <== Отправляет данные | ||
5 | Закрывает файл | ||
6 | Открывает файл | ||
7 | Поиски данных | ||
8 | Чтение данных ==> | ||
9 | <== Отправляет данные | ||
10 | Закрывает файл | ||
11 | <== Открывает файл | ||
12 | <== Прерывает уступающую блокировку | ||
13 | Закрывает файл ==> | ||
14 | Одобряет операцию открытия ==> | ||
15 | <== Выполняет чтение, запись и другие операции |
В пакетной уступающей блокировке клиент X открывает файл, событие 1, а сервер предоставляет клиенту X пакетную блокировку в событии 2. Клиент X делает попытку прочитать данные, событие 3, которому сервер отвечает данными, событие 4.
Событие 5 показывает, что пакетная уступающая блокировка в работе. Приложение у Клиента 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 закрывает файл. Сетевой редиректор клиента отказывается от кэшированных данных. Сервер закрывает файл.