вторник, 18 ноября 2025 г.

Как яндекс диск сдох при одновременном перемещении папки

Ладно, ладно, не сдох! Локально сломался 👀

Это я просто под эмоциями до сих пор от этого случая 👿 А ведь при такой программе (которая позволяет хранить файлы и работать с ними разным людям) этот кейс должен быть в составе основных проверок. Но обо всем по порядку.

Мне нужна была картинка из книги. Я их обычно беру из папки «Катя и эмоции», куда мы с художницей в своё время нарезали персонажей из книги:


И так как делалось это всё в рамках первой книги, то и картинки эти до сих пор там лежат. Так что я открываю яндекс-диск, папку с книгами, а там... Первой книги нет 😕

Знаете, сразу такой мороз по коже — куда делась книга?? Как так вообще, это ж облако! Я же не трогала, я не могу её просто взять и потерять, правда же, правда?? Конечно, сама книга давно закончена и мне не супер-нужны исходники текста, но ведь там и картинки все!

Открыла веб-версию яндекса и читаю там:

Виктория переместил папку «1. Книга для новичков» в папку «0. Статьи»

Ага, Вика (художница) просто случайно её подвинула... Ну и ладно! Зашла в «0. Статьи» и сделала move через правую кнопку мыши — вернула книгу туда, где она была раньше. И Вике написала, мол, смотри, я всё вернула.

Но тут что-то пошло не так... Оказалось, Вика её тоже вернула!

- Это у меня рука дрогнула в боковым меню😭 Но она должна была вернуться на место.

- Ну я её вернула)

- Хм. Я ее тоже вернула, видимо только у себя. У меня она не успела перекинуться.

- А, ну видимо поэтому и у меня не успела, правда теперь я хз что делать, видимо ждать синхронизации у обеих

- У тебя сейчас папка на месте?

Проверяю: да, папка на месте, но есть ошибка синхронизации:


Дальше мы попробовали стандартные действия типа:

  • перезапустить яндекс-диск пару раз (фиг там)
  • почистить его корзину (хотя это то тут при чем??) и снова перезапустить...
Не-а! Папка не синхронизируется, пишет ошибку. Причем когда я перезапускала диск у себя, у Вики эта папка начинала дублироваться, вот она мне что скинула:

- У меня это выглядит так, причем все с цифрами пустые:


Воу! Весело...

Вика стала предлагать ещё варианты, но я предложила дождаться ответа от техподдержки, а то вдруг мы только хуже сделаем.

Общение с техподдержкой было прекрасным. У меня основная почта на гмейл, я написала оттуда, описала ситуацию:

- Есть тяжелая папка (8 гб), подвинул один человек, параллельно (первая синхронизация ещё не закончилась) второй сделал то же самое. Казалось бы, итог одинаковый, синхронизировались и всё должно заработать...

Я надеялась, что кейс стандартный и у поддержки будет ответ. Но нет, у нас уточнили версии программы (4.5 у меня, 3.2 у Вики), попросили снять логи и прислать им, а потом прислали великолепное письмо:

Здравствуйте, Ольга!

Мы можем сообщить информацию об аккаунте только его владельцу.

Чтобы мы смогли помочь, пожалуйста, свяжитесь с нами через Яндекс Почту аккаунта, в котором наблюдается проблема при синхронизации. Для связи подойдут адреса с доменами @yandex.ru, @ya.ru или с красивым доменом из платного тарифа.

В сообщении укажите номер вашего обращения: ...


Серьезно??  Владельцу?? То есть логи у меня забирать можно и "без проверки владелец-нет", а ответ как ошибку починить, это с яндекса напишите? И что ещё за информация об аккаунте? На кой мне информация об аккаунте, вы мне шаги исправления синхронизации дайте, и всё!

Пришлось написать с яндекс-почты, и было это 12 ноября. Они лишь сказали "если есть что добавить, давайте, передам в техотдел" и испарились.

Мы с Викой обсуждали возможные правки — она сохранила себе на комп локально эту папку и предлагала перезалить. Но, так как исходный владелец папки — я, лучше это сделать мне. Попробовала скопировать эту папку прямо в яндексе, но облом:


Так что в итоге спустя несколько дней тишины от поддержки Вика положила свою локальную папку с постфиксом «-1»: «1. Книга для новичков-1», а старую папку (которая выдавала ошибку синхронизации) удалила. И вот, наконец! После перезапуска диска настала красота, всё зеленое:


Ура!


Как можно было найти эту ошибку на этапе тестирования

Исходно имеем основную фичу программы диска: возможность совместного редактирования файлов.

Это значит, что надо проверить, как отрабатывает синхронизация в случае параллельного использования:

  • Внесли изменения в файл параллельно: одинаковые / разные.
  • Потрогали сам файл, и тут вариантики:
    • Переместили в одно и то же новое место / в разные — один файл или несколько (класс эквивалентности «один-много»), то есть папку сразу
    • Один переместил, второй удалил — аналогично, один файл / папку.

При перемещении надо как раз проверять, когда первый поток уже отработал, но сихронизация ещё не закончилась, когда выполняем второе действие. Проверять на пустом файлике смысла нет, он переместится и синхронизируется моментально. Поэтому для такой проверки нужно взять тяжелый файл, или папку на несколько Гб.

То есть если выписать в виде мини-чеклиста:

Файл

- Есть ворд-файл. Один человек внес правки, синхронизировал. Второй откатил их (вернул в предыдущее состояние)

- Есть ворд-файл небольшого веса. Один человек внес правки, ещё не синхронизировал. Второй тоже внес правки те же самые. Потом оба сохраняют (один успеет синхронизировать раньше второго)

- Есть ворд-файл небольшого веса. Один человек внес правки, ещё не синхронизировал. Второй тоже внес правки, но другие. Потом оба сохраняют (один успеет синхронизировать раньше второго)

- Есть тяжелый ворд-файл и медленный интернет. Один человек внес правки, начал синхронизацию. Пока она не закончилась, второй внес те же правки.

 - Есть тяжелый ворд-файл и медленный интернет. Один человек внес правки, начал синхронизацию. Пока она не закончилась, второй внес другие правки.

 - Есть тяжелый ворд-файл и медленный интернет. Один человек снес файл, начал синхронизацию. Пока она не закончилась, второй внес правки в файл.


Папка

- Есть тяжелая папка (8 гб), подвинул один человек, параллельно (первая синхронизация ещё не закончилась) второй сделал то же самое.

- Есть тяжелая папка (8 гб), подвинул один человек, параллельно (первая синхронизация ещё не закончилась) второй подвинул в другое место.

- Есть тяжелая папка (8 гб), один удалил, параллельно (первая синхронизация ещё не закончилась) второй подвинул.


Исследовательские туры, которые бы могли помочь найти проблему:


Выводы

Если ваше приложение умеет работать «в параллель», это обязательно нужно проверить! Особенно одновременную работу с одной и той же сущностью. Пробуйте:

  • Делать одинаковые действия в параллель / разные.
  • Одним действием изменять, вторым удалять.

И пусть баги совсместного использования ловите вы, а не пользователи =)


PS — добавила пост в:

Комментариев нет:

Отправить комментарий