Ошибка [1.2.3435] Невалидный JSON: при сборке массива теряется разделитель между записями (многопоточность)

mustr

A-Parser Enterprise License
A-Parser Enterprise
Версия: A-Parser v1.2.3435-linux-x64 (обновление 22.06.2026, NextGen по умолчанию)
ОС: Ubuntu 24.04.4 LTS, ядро 6.8.0
Парсер: SE::Google:: Position, конфиг потоков «Mobile - 50» (50 потоков)

Симптом
После обновления до 1.2.3435 задачи, собирающие результат в JSON-массив стандартным приёмом «дамп в JSON», стали изредка выдавать невалидный JSON: между двумя соседними записями пропадает разделитель ,\n, объекты склеиваются (}{). Принимающий клиент не может распарсить файл.

Настройки результата
Код:
Результат до (prepend):  [
Формат результата:       [% IF notFirst; ",\n"; ELSE; notFirst = 1; END; p1.preset %]
Результат после (append): ]

Что получается на выходе (одна склейка на весь файл из 383 записей):
Код:
..."key":"сквозные ссылки купить"}{"success":1,"link":"none","domain":"blogun.ru","position":"0","key":"продвижение через соц сети"}...
Проверка валидатором падает ровно здесь: Expecting ',' delimiter. Между этими двумя записями нет ,\n, у всех остальных — есть.

Закономерность / воспроизведение
  • Плавающе: на одном прогоне 0 разрывов, на другом — ровно 1 (никогда больше). Один и тот же запрос в одном прогоне идёт с запятой, в другом — без, т.е. зависит от тайминга, а не от данных.
  • До обновления та же задача на 9393 запроса давала 0 разрывов; после обновления на 1.2.3435 — 1 разрыв на тех же 9393 записях.
  • Похоже на состояние гонки: общий флаг notFirst переходит из «не задано» в 1 ровно один раз, и в этот момент две записи успевают обе уйти в ветку ELSE (разделитель не пишется) — отсюда ровно одна склейка за прогон.

Предполагаемая причина
С обновлением сменилась модель исполнения (рядом с Perl-ядром aparser-core поднимается пул Node-воркеров aparser-node). Судя по всему, общий флаг notFirst в шаблоне результата перестал держаться атомарно при новой конкуренции, из-за чего теряется разделитель. На предыдущей версии этот же шаблон работал корректно — это регрессия.
 
Назад
Верх