Вход • Регистрация

Импорт заблокирован другим пользователем

  • 06 мая 2022 г.
  • Добрый день.
    Использую штатный функционал cms по импорту товаров через загрузку файла по ссылке http://***/service/express/client/?key=****&cat=**&url=http://****/fr/data.csv.

    После загрузки возникла следующая ошибка
    Импорт заблокирован другим пользователем. Дождитесь окончания. Просто перезагрузите страницу через некоторое время. Если к тому моменту импорт будет разблокирован, Вы сможете продолжить работу. Если длительное время блокировка не снимается и Вы уверены, что другие пользователи или cron не инициировали импорт, то, возможно, во время выполнения процесса произошла ошибка, которая препятствовала снятию блокировки процесса. В таком случае Вы можете принудительно снять блокировку.
    Сейчас пробую импортировать файл через загрузку, сталкиваюсь с такой же проблемой

    Попытка снять блокировку принудительно ни к чему не приводит.

    Еще если пройти по ссылке, которая формирует загрузку сайта получаю следующее.

    Ошибка загрузки файла импорта
    Array([errors] => Array([file] => busy))

    Кто ни будь сталкивался с подобной проблемой? Поддержка передала вопрос профильному специалисту, но прошло уже больше недели и тишина.
  • 18 июля 2022 г. , редакция: 18 июля 2022 г.
  • та же самая ошибка, как исправить непонятно
  • 6 февраля
  • Присоединяюсь.
    Подвисло и кнопка принудительный сброс не помогает.
    Коллеги, помогите, что делать ?)
    • 8 февраля
    • В базе данных, скорее всего, запись осталась
      • 6 марта
      • Цитата
        В базе данных, скорее всего, запись осталась

        Можете подсказать подробнее, что делать ?
        т.к. блокировка срабатывает практически после каждого импорта по ссылке... и непонятно, как от этого избавится
        видео прикрепляю
        https://youtu.be/mktnhR5xT8w
        • 7 марта
        • На видео не понятно под кем и с какими правами вделаете эти манипуляции...
          - Под Админом сайта - итог такой-же ?
          • 7 марта
          • Да. Админ
            • 7 марта
            • В БД попробуйте почистить таблицу
              • 11 марта
              • Виталий (DIAFAN.CMS)
                Так изначально не понятно было - что Cron перекрывает или пользователь
                - Вы уж начните сразу с первого вопроса отвечать))))
              • 11 марта
              • Виталий (DIAFAN.CMS)
                - А Это и не первый вопрос))
              • 11 марта
              • Я, кстати, сам невнимательно прочитал сначала, импорт блокирует именно запуск по ссылке.
                Цитата
                Ошибка загрузки файла импорта
                Array([errors] => Array([file] => busy))

                И если там это, то он пытается запустить импорт, ставит блок, пытается получить файл по ссылке, не получает его, уходит в ошибку и блок остается.
                Ну надо смотреть доступность файла поставщика. Может на их сервере какой-то фаервол блочит обращение к нему
              • 11 марта
              • раз в сутки Cron запускает импорты файла csv по ссылке. Файл лежит в той же папке где и CMS.
                Фаервол ничего не блочит.
    • 11 марта
    • В базе флаг снимите вручную, делов-то
      Не помню точно, или прямо в таблице импорта флаг, или в таблице config
      Завтра могу глянуть точно
      • 11 марта
      • Посмотрите пожалуйста если получается, где флажок снимать.
  • 9 марта
  • Может у Вас весит задание в Cron (с ошибкой) с обновлением цен? (после загрузки или изменения цены или установки скидки....)
    - правда я не уверен что оно может блокировать.... но ХЗ....

    А какая версия PHP и MySQL,?

    я самым первым делом проверил бы локально.....
    Поднял бы сайт из текущего бэкапа и протестировал бы.....
    - если всё ОК - загрузите Бэкап обратно.....
    • 10 марта , редакция: 10 марта
    • Задание в Cron есть. Но оно срабатывает 1 раз в сутки.
      Раньше блокировало, но кнопка снять блокировку помогала. А сейчас, как видно в видео выше, не помогает.

      php 7.3.3.3
      Версия сервера: 10.3.38-MariaDB
      • 10 марта , редакция: 10 марта
      • Цитата
        Раньше блокировало, но кнопка снять блокировку помогала. А сейчас, как видно в видео выше, не помогает.

        Больше чем предложить на крайняк - понизить PHP до 7.2 - у меня по крону знаний и механизма, как работает снятие блокировки в diafan = Нет

        по сути: если удалить задания у Крон и всё будет работать === это дело в Настройке КРОН задания или Не работающей кнопки снятия блокировки....

  • 12 марта
  • Так, ну смотрите.
    Флаг проверки блокировки импорта, это -
    Код
    if($this->diafan->_service->busy())

    Эта функция сидит в inc импорта
    /modules/service/service.inc.php
    Код
    /**
    * Возвращает, если не передано значение,
    * устанавливает, если передано TRUE,
    * или снимает, если передано FALSE, блокировку процесса.
    * При установки/снятия блокировки процесса возвращает TRUE в случае успеха.
    * Снять блокировку может только установивший ее процесс. Условие игнорируется, если вторым пораметром передано TRUE.
    *
    * @return mixed
    */
    public function busy()
    {
    $args = func_get_args();
    if( empty($args) )
    {
    return ! (! $this->busy_proc_uid || $this->busy_proc_uid == $this->proc_uid);
    }
    if(empty($args[1]) && $this->busy_proc_uid && $this->busy_proc_uid != $this->proc_uid)
    {
    return false;
    }

    Сам маркер сидит в busy_proc_uid, который хранится в кеше
    Код
    case 'busy_proc_uid': // маркер блокировки процесса
    $cache_meta = array("name" => $name, "prefix" => "inc");
    $value = $this->diafan->_cache->get($cache_meta, 'service', CACHE_GLOBAL);
    $this->cache["var"][$name] = $value ?: false;
    break;


    Что нам тут интересно. Это выделенное жирным в busy()
    Цитата
    Снять блокировку может только установивший ее процесс

    и, соответственно, условие
    Код
    && $this->busy_proc_uid != $this->proc_uid


    Если блок установила ссылка, пользователь из админки её не снимет. Соответственно, под свою ответственность, эту условие можно убрать и тогда блок сможет снимать кто угодно. Но может оно и правильно, так как это условие сильно перестраховывается от ситуаций, когда на сайте мегамаркета много разных импортов и чтобы не сломать таблицу товаров при каких-нибудь непрерывных импортах из разных источников.

    Пробуйте убрать это условие и снять блок, посмотреть, снимется ли и будет ли экспорт/импорт. Далее можно уже смотреть условия установки этого блока. По идее, при экспорте можно не проверять блок вообще.

    Но вообще, нужно обратить внимание на
    Цитата
    Ошибка загрузки файла импорта
    Array([errors] => Array([file] => busy))

    Нужно с этим разобраться, почему импорт не может загрузить файл. Может там права не те. Или путь какой-нибудь кривой. Или имя с кирилицей или пробелом.

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум