«… Эта история начинается довольно банально. Она начинается с дома».
Дуглас Адамс, «Автостопом по галактике»
Целью было, с одной стороны, разделить системы по доменам, с другой — сэкономить ресурсы, оптимизировав работу выделенного компонента.
Опущу часть про разработку и синтетические тесты. Интересное началось в момент, когда я подключил систему к продакшн-трафику в дебаговом режиме.
Скучный спойлер: после решения проблемы мы добавили механику трекинга числа попыток обработки и пропуска сообщений после n попыток.
Пришлось погрузиться в расследование.
Написав немного кода, затаился и принялся ждать.
Однако это не наш случай, так что пора вернуться назад — в момент, где мне удалось получить стейт сообщения вызывающего ошибку.
apt-get install build-essential gdb lcov pkg-config \libbz2-dev libffi-dev libgdbm-dev libgdbm-compat-dev liblzma-dev \libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev \lzma lzma-dev tk-dev uuid-dev zlib1g-dev -ywget -c https://www.python.org/ftp/python/3.10.13/Python-3.10.13.tar.xztar -Jxvf Python-3.10.13.tar.xzmkdir Python-3.10.13/build && cd Python-3.10.13/build../configure --with-pydebug --without-pymallocmake EXTRA_CFLAGS="-DPYMALLOC_DEBUG -DPy_REF_DEBUG"ln -s ./python /usr/local/bin/python-debugcd /apppython-debug -m ensurepip --upgradepython-debug -m pip install poetry==1.8.1python-debug -m poetry installgdb --args python-debug lib/jobs/scoring_worker.py
Как оказалось, проблема возникает при определенной комбинации предобработанных текстов опорного сообщения и одного из кандидатов.