-
Notifications
You must be signed in to change notification settings - Fork 58
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
ZZZConsulting
wants to merge
70
commits into
yar229:develop2
Choose a base branch
from
ZZZConsulting:master-ZZZ
base: develop2
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…eleaseVersion) defined in Common.targets
…рить код). И устранение ошибок, когда клиент отключился досрочно.
…ытка была удачной, будет ясно позже.
…'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.
… таким образом 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
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Год назад я счел, что изменений слишком много, не стал делать Merge Request, хотелось чтобы немного отлежалось.
За год в моих сценариях эта версия с небольшими правками отработала нормально.
Было обнаружено (далеко не сразу), что удаление перестало работать - исправлено.
В кэше могут возникать фантомы. Победить полностью не удалось. Возникают даже при операциях самого сервиса, без внешних действий.
Так же по истории изменений файлов улучшено отслеживание внешних действий чтобы вовремя сбросить кэш и перечитать данные с сервера.
Вероятно, большую часть кода можно забирать в основной проект с необходимыми корректировками.