Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Версия от ZZZConsulting #248

Open
wants to merge 70 commits into
base: develop2
Choose a base branch
from

Conversation

ZZZConsulting
Copy link
Contributor

Год назад я счел, что изменений слишком много, не стал делать Merge Request, хотелось чтобы немного отлежалось.
За год в моих сценариях эта версия с небольшими правками отработала нормально.
Было обнаружено (далеко не сразу), что удаление перестало работать - исправлено.
В кэше могут возникать фантомы. Победить полностью не удалось. Возникают даже при операциях самого сервиса, без внешних действий.
Так же по истории изменений файлов улучшено отслеживание внешних действий чтобы вовремя сбросить кэш и перечитать данные с сервера.
Вероятно, большую часть кода можно забирать в основной проект с необходимыми корректировками.

yar229 and others added 30 commits July 20, 2023 21:13
…рить код). И устранение ошибок, когда клиент отключился досрочно.
…ытка была удачной, будет ясно позже.
…'Uri.EscapeUriString can corrupt the Uri string in some cases или WebRequest.Create is obsolete
1) Принцип иерархии разрушается, теперь это более логический концепт, чем архитектурный базис – где нужно, иерархия есть, где не нужно – ее нет. И потому, Folder больше не является носителем иерархии с коллекциями Folders и Files.
Выделяется 3 архитектурных уровня – методы выборки с серверов – cloud и его кеш – LocalStore и его разновидности. Передача данных о файлах и папках между ними делается через Entry, который может быть типа File, Folder или Link. Чтобы Entry мог передавать содержимое папки, у него есть Descendants типа ImmutableList, что подчеркивает, что этот список не для хранения и изменения информации, а только для передачи с архитектурного уровня на уровень. Descendants заполняется методами чтения с сервера и очищается методами кеша, ровно для того, чтобы не было соблазна воспользоваться этим списком как хранилищем данных, т.к. он только для передачи. Только на уровне LocalStore Descendants играет роль хранилища, т.к. иного места для хранения коллекции там нет, а переделывать сильно еще и этот уровень резонов нет.
2) Кеш полностью переделан, теперь это не многоуровневая структура через Folder, а единый словарь, где все подвешено за FullPath, то есть URL к entry. Поддерживается многопоточность и проверки активных операций на сервере (для протокола YadWebV2). При операциях удаления, создания, перемещения и др. кеш папки не сбрасывается чтобы не перечитывать папки с десятками тысяч записей.
3) Для YadWebV2 содержимое папок с тысячами записей читается несколькими потоками одновременно – почти на порядок сократилось время при десятках тысячах файлов в папке.
4) На одновременное подключение к серверу введено ограничение через SemaphoreSlim, управляется параметром maxconnetions. Введена блокировка на одновременное параллельное чтение содержимое папки с сервера с одинаковым path – читает только один, остальные пользуются результатом.
5) Множественные правки типа authent -> authenticator, creds -> credentials чтобы уменьшить количество предупреждений от Spell Checker’а. Некоторые другие стилистические причесывания кода.
6) YadWebV2: После операции удаления ожидание делается не перед чтением, а сразу после операции удаления. В ожидании завершения операции вместо счетчика сделан таймаут.
1) Отпала необходимость держать 2 экземпляра сервиса под каждое облако – целевое облако и протокол (включая аутентификацию через браузер) задаются в строке логина, из-за чего синтаксис строки логина изменился.
2) Параметр командной строки protocol сохранен, но он не является определяющим, является только подсказкой, если по другим признакам определение не произошло.
Облако определяется по домену учетной записи, протокол – либо WebM1Bin, который не deprecated, либо один из YadWeb/YadWebV2 по другим признакам.
1) Заменой ClientId на cloud-win восстановлена работа с Mail.Ru. За счет обновленного кеширования работа с облаком ускорилась.
2) Если явно не задано в параметром программы для Mail.Ru используется протокол WebM1Bin.
3) Использование аутентификации через браузер теперь не отдельный протокол, а часть Credentials - ! перед email логина запрещает аутентификацию браузером, ? требует аутентификацию браузером. Если знака нет, но пароль совпадает с паролем подключения к BrowserAuthenticator, используется аутентификация через браузер.
4) Протокол YadWebV2 объединен в YadWeb. Отличие в способе аутентификации, в ожидании завершения операции после операции, а не перед чтением директории, параллельном чтении больших директорий и других «фишках».
5) "Экземпляр облака под учетную запись создается при первом обращении. После прекращения обращений через настраиваемое время удаляется из памяти.
… таким образом mail.ru из кода, работающего с yandex.ru. Плюс небольшая полировка кода, в основном для Mail.Ru.
…на при сохранении кеша куки при аутентификации через браузер.
…тода продолжает происходить, не смотря на Dispose всего окружения. Минимизация исключений и немного полировки.
…на ClientId = "cloud-win", сильно мало вероятно, что кто-то из пользователей продолжает использовать логин и пароль в виде параметров.
… подтверждение кодом из email или СМС,

  после этого обычно начинались танцы с бубном. Теперь бубен встроен.
  Если не установлен запрет использования браузера для аутентификации (запрет по знаку `!` перед логином),
  делается вход через BrowserAuthenticator, пароль для подключения к BrowserAuthenticator берется из `wdmrc.config`.
  Если сервер Яндекса оказался удовлетворен, то потом все работает только с логином и паролем.
* Эмулятор WebDAV с запросом к BrowserAuthenticator теперь передает заданные в `wdmrc.config` заголовки user-agent и sec-ch-ua,
  позволяя BrowserAuthenticator полностью не отличаться от браузера, что уменьшает вероятность позже серверу захотеть повторное
  подтверждение по коду из email или СМС.
…ад. Из-за него пришлось добавить новую (V2) версию операций.

2) Значительно переработало кеширование. В частности, после удаления файла из папки, кеш папки не сбрасывается и нет необходимости загружать с сервера все тысячи entry большой папки, затрачивая по минуте после операции с каждым файлом. Обратной стороной стало хранение в кеше фантомов.
3) Улучшена проверка внешних операций на Диске, которые идут мимо данного сервиса. Используются счетчики журнала операций Диска. При обнаружении действий, которые прошли мимо данного сервиса, кеш полностью сбрасывается.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants