В силу специфики настройки расписания рано или поздно возникает ситуация, когда одновременно работает два обмена. Это приводит к потере таблицы b_xml_tree и обрушению обмена.
Чтобы выгрузка каталога могла работать в нескольких сеансах обмена одновременно (напомню, профиль обмена можно настроить так, что выгружаться будут только остатки, цены ... и с разным графиком) нужно обеспечить изоляцию сеансов на двух уровнях - файлы и БД (пресловутая таблица b_xml_tree).
Изоляция по файлам возможна, если воспользоваться параметром USE_TEMP_DIR компоненты bitrix:catalog.import.1c.
С изоляцией по БД ситуация запутана. С одной стороны есть API:
- \CIBlockXMLFile::StartSession
- \CIBlockXMLFile::EndSession
- \CIBlockXMLFile::GetSessionRoot
С другой стороны, в компоненте обмена оно не используется!!! Кстати, сходу и не найдешь где оно вообще используется.
В поддержке (обращение 2380113 "Поддержка паралелльных выгрузок каталога на сайт") мне сообщили:
В настоящий момент логика обмена такова, что изменить ее под несколько параллельных потоков выгрузки нельзя. |
Предлагаю переработать логику так, чтобы это было возможно. Предложение касается классического XML обмена. Но может затронуть (надеюсь, что нет) и REST обмен.