Что такое ошибка 251

Icon Ex Номер ошибки: Ошибка 251
Название ошибки: Norton Error 251
Описание ошибки: Ошибка 251: Возникла ошибка в приложении Norton AntiVirus. Приложение будет закрыто. Приносим извинения за неудобства.
Разработчик: Symantec
Программное обеспечение: Norton AntiVirus
Относится к: Windows XP, Vista, 7, 8, 10, 11

Основы «Norton Error 251»

Люди часто предпочитают ссылаться на «Norton Error 251» как на «ошибку времени выполнения», также известную как программная ошибка. Когда дело доходит до Norton AntiVirus, инженеры программного обеспечения используют арсенал инструментов, чтобы попытаться сорвать эти ошибки как можно лучше. К сожалению, многие ошибки могут быть пропущены, что приводит к проблемам, таким как те, с ошибкой 251.

Некоторые пользователи могут столкнуться с сообщением «Norton Error 251» при использовании Norton AntiVirus. Когда это происходит, конечные пользователи могут сообщить Symantec о наличии ошибок «Norton Error 251». Затем Symantec исправляет эти дефектные записи кода и сделает обновление доступным для загрузки. Чтобы исправить такие ошибки 251 ошибки, устанавливаемое обновление программного обеспечения будет выпущено от поставщика программного обеспечения.

Как триггеры Runtime Error 251 и что это такое?

Проблема с исходным кодом Norton AntiVirus приведет к этому «Norton Error 251», чаще всего на этапе запуска. Причины сбоев обработки можно отличить, классифицируя ошибки 251 следующим образом:.

Ошибка 251 Crash — Ошибка 251 остановит компьютер от выполнения обычной программной операции. Когда Norton AntiVirus не может обеспечить достаточный вывод для данного ввода или действительно не знает, что выводить, он часто путает систему таким образом.

Утечка памяти «Norton Error 251» — этот тип утечки памяти приводит к тому, что Norton AntiVirus продолжает использовать растущие объемы памяти, снижая общую производительность системы. Потенциальные триггеры могут быть «бесконечным циклом», или когда программа выполняет «цикл» или повторение снова и снова.

Ошибка 251 Logic Error — Логическая ошибка вызывает неправильный вывод, даже если пользователь дал действительные входные данные. Это может произойти, когда исходный код Symantec имеет уязвимость в отношении передачи данных.

В большинстве случаев проблемы с файлами Norton Error 251 связаны с отсутствием или повреждением файла связанного Norton AntiVirus вредоносным ПО или вирусом. Как правило, самый лучший и простой способ устранения ошибок, связанных с файлами Symantec, является замена файлов. Если ошибка Norton Error 251 возникла в результате его удаления по причине заражения вредоносным ПО, мы рекомендуем запустить сканирование реестра, чтобы очистить все недействительные ссылки на пути к файлам, созданные вредоносной программой.

Распространенные проблемы Norton Error 251

Norton Error 251 Проблемы, связанные с Norton AntiVirus:

  • «Ошибка приложения Norton Error 251.»
  • «Norton Error 251 не является приложением Win32.»
  • «Norton Error 251 должен быть закрыт. «
  • «Файл Norton Error 251 не найден.»
  • «Отсутствует файл Norton Error 251.»
  • «Ошибка запуска программы: Norton Error 251.»
  • «Файл Norton Error 251 не запущен.»
  • «Ошибка Norton Error 251. «
  • «Неверный путь к приложению: Norton Error 251.»

Эти сообщения об ошибках Symantec могут появляться во время установки программы, в то время как программа, связанная с Norton Error 251 (например, Norton AntiVirus) работает, во время запуска или завершения работы Windows, или даже во время установки операционной системы Windows. Выделение при возникновении ошибок Norton Error 251 имеет первостепенное значение для поиска причины проблем Norton AntiVirus и сообщения о них вSymantec за помощью.

Причины проблем Norton Error 251

Заражение вредоносными программами, недопустимые записи реестра Norton AntiVirus или отсутствующие или поврежденные файлы Norton Error 251 могут создать эти ошибки Norton Error 251.

Более конкретно, данные ошибки Norton Error 251 могут быть вызваны следующими причинами:

  • Недопустимая (поврежденная) запись реестра Norton Error 251.
  • Вирус или вредоносное ПО, повреждающее Norton Error 251.
  • Norton Error 251 злонамеренно или ошибочно удален другим программным обеспечением (кроме Norton AntiVirus).
  • Другое программное приложение, конфликтующее с Norton Error 251.
  • Norton AntiVirus/Norton Error 251 поврежден от неполной загрузки или установки.

Продукт Solvusoft

Загрузка
WinThruster 2023 — Проверьте свой компьютер на наличие ошибок.

Совместима с Windows 2000, XP, Vista, 7, 8, 10 и 11

Установить необязательные продукты — WinThruster (Solvusoft) | Лицензия | Политика защиты личных сведений | Условия | Удаление


Andreykas

Участник
Участник
Сообщения: 50
Зарегистрирован: 14 янв 2021 18:19
Последний визит: 26 дек 2022 22:11
Изменить репутацию:
Репутация:
Голосов: 1
Откуда: Нижний Новгород

Mimaki jv33-160. Error 251

Всем доброго времени суток! 
Столкнулся с такой проблемой как при печати вылазит ошибка 251! 
Сантиметров 20-30 печатает, потом каретка уходит на парковку и спрыскивает краску очень долго, после выдаёт ошибку. Ни на одну кнопку не реагирует, приходится выключать тумблером. 
После включения все работает, но может опять вылезти чуть ли не сразу, может пару роликов отпечатать и без проблем. 
Гугл как и Яндекс молчит(((
Может кто подсказать куда лезть и где смотреть??
Прошивка 6.4.

Вложения
635DE99A-27F6-4811-A6A0-1FDE625DA283.jpeg
(2.81 МБ) 0 скачиваний



AndreyT.

Старожил
Старожил
Сообщения: 1522
Зарегистрирован: 17 авг 2012 11:38
Последний визит: 28 май 2023 10:25
Изменить репутацию:
Репутация:
Голосов: 57
Откуда: Москва

Re: Mimaki jv33-160. Error 251

Сообщение AndreyT. » 15 дек 2022 13:58

AndreykasОшибка памяти материнки. FROM. Нужно перепрошить плоттер.



Andreykas

Участник
Участник
Сообщения: 50
Зарегистрирован: 14 янв 2021 18:19
Последний визит: 26 дек 2022 22:11
Изменить репутацию:
Репутация:
Голосов: 1
Откуда: Нижний Новгород

Re: Mimaki jv33-160. Error 251

Сообщение Andreykas » 16 дек 2022 18:05

AndreyT. писал(а): (→) AndreykasОшибка памяти материнки. FROM. Нужно перепрошить плоттер.

Спасибо большое!



Вернуться в «Принтеры MIMAKI»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость

На чтение 5 мин Просмотров 3.4к.

Рассмотрим подробнее

  1. Техническое описание и расшифровка ошибки P0251
  2. Симптомы неисправности
  3. Причины возникновения ошибки
  4. Как устранить или сбросить код неисправности P0251
  5. Диагностика и решение проблем
  6. Проверка датчика и проводов
  7. На каких автомобилях чаще встречается данная проблема
  8. Видео

Код ошибки P0251 звучит как «неисправность управления насосом дозирования топлива «A» (кулачок/ротор/инжектор)». Часто, в программах, работающих со сканером OBD-2, название может иметь английское написание «Injection Pump Fuel Metering Control «A» Malfunction (Cam/Rotor/Injector)».

Техническое описание и расшифровка ошибки P0251

Код неисправности OBD-II P0251 является общим, который определяется как неисправность управления насосом дозирования топлива «A». Устанавливается, когда модуль управления трансмиссией (PCM) обнаруживает неисправность в цепях сигнала обратной связи.

Код ошибки P0251 – неисправность управления насосом дозирования топлива "A" (кулачок/ротор/инжектор)

Неверные характеристики обнаружены между датчиком управления дозированием топлива, приводом количества топлива. А также другими датчиками, которые участвуют в определении давления и объема топлива.

Во всех дизельных системах впрыска Common Rail используется «электронный привод управления подачей топлива». Для измерения количества топлива, которое допускается в насосную камеру дизельного топливного насоса высокого давления.

Таким образом определяется объем и давление топлива, которое в конечном итоге поступает в топливную рейку. Однако давление в топливной рейке должно контролироваться в очень узком диапазоне.

Для этих целей в большинстве случаев используется датчик давления с переменным сопротивлением для передачи фактического давления в PCM. Делается это для того, чтобы обеспечить соответствие фактического давления в топливной рейке расчетному.

В полнофункциональной системе подачи топлива датчик давления преобразует давление топлива в напряжение сигнала. Которое PCM использует для расчета ширины импульса форсунки и времени впрыска. Чтобы обеспечить впрыск нужного количества топлива в цилиндры при любых условиях эксплуатации.

Таким образом, напряжения сигналов исполнительного механизма электронного управления подачей топлива и датчика управления дозированием топлива должны совпадать. Чтобы PCM мог рассчитать соответствующую стратегию подачи топлива для обеспечения эффективной работы двигателя при любых оборотах и нагрузках.

Код неисправности P0251 связанный с насосом дозирования топлива «A» может быть установлен из-за механических или электрических проблем. К механическим можно отнести проблемы системы EVAP, а к электрическим, неисправность цепи датчика FRP.

Симптомы неисправности

Основным симптомом появления ошибки P0251 для водителя является подсветка MIL (индикатор неисправности). Также его называют Check engine или просто «горит чек».

Также они могут проявляться как:

  1. Загорится контрольная лампа «Check engine» на панели управления (код будет записан в память как неисправность).
  2. Также могут присутствовать другие связанные коды неисправностей.
  3. Может наблюдаться потеря мощности.
  4. Двигатель может работать неустойчиво.
  5. Повышенный расход топлива.

Степень серьезности кода неисправности P0251 зависит от причин его появления и может варьироваться от средней до тяжелой. Но в любом случае ошибку нельзя игнорировать, рекомендуется исправить ее как можно скорее.

Причины возникновения ошибки

Код P0251 может означать, что произошла одна или несколько следующих проблем:

  • Неисправен датчик положения топливной рейки (FRP).
  • Неисправный привод количества подачи топлива (FQA).
  • Повреждены, сожжены, закорочены, отсоединены, корродированы провода или разъемы.
  • Иногда причиной является неисправный модуль PCM.

Как устранить или сбросить код неисправности P0251

Некоторые предлагаемые шаги для устранения неполадок и исправления кода ошибки P0251:

  1. Считайте все сохраненные данные и коды ошибок с помощью сканера OBD-II.
  2. Очистите коды ошибок с памяти компьютера и проведите тест-драйв автомобиля, чтобы выяснить, появляется ли ошибка P0251 снова.
  3. Проверьте работу датчика положения топливной рейки (FRP).
  4. Протестируйте привод количества подачи топлива (FQA).
  5. Осмотрите разъемы и проводку на наличие повреждений, ослабления и коррозии.

Диагностика и решение проблем

Перед началом диагностики кода P0251 проверьте бюллетени технического обслуживания (TSB) для вашего автомобиля. Проблема может быть известной с известным исправлением, выпущенным производителем, что поможет сэкономить время и деньги.

Далее, найдите датчик положения топливной рейки (FRP) на вашем автомобиле. Он обычно располагается возле насоса впрыска, прикрепленного болтами к двигателю.

Визуально осмотрите разъем и проводку, ищите царапины, потертости, оголенные провода, подгоревшие места или оплавленный пластик. Разберите разъем и внимательно осмотрите клеммы внутри разъема.

При необходимости очистки клемм используйте очиститель электрических контактов и щетку с пластмассовой щетиной. Дайте им высохнуть и нанесите электрическую смазку на места соприкосновения.

С помощью сканера OBD-2, удалите из памяти диагностические коды неисправностей и посмотрите, вернется ли данная неисправность. При ее отсутствии, скорее всего, проблема была в соединениях.

Проверка датчика и проводов

Если код P0251 возвращается, необходимо проверить датчик FRP и связанные с ним цепи. При выключенном зажигании отсоедините электрический разъем на датчике FRP.

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

Поверните ключ в замке зажигания, без запуска двигателя, вольтметр должен показывать 12 или 5 вольт. Если это не так, то проблема может быть с проводами питания или заземления, либо связана с неисправностью PCM.

Для проверки PCM, необходимо протестировать сигнальный провод. Отсоединив разъем, переместите красный провод вольтметра с клеммы провода питания на клемму сигнального провода. Вольтметр должен показывать 5 вольт, при их отсутствии, отремонтируйте сигнальный провод или замените PCM.

Если все проверки пройдены, но вы продолжаете получать ошибку P0251, скорее всего проблема кроется в неисправном датчике FRP. Датчик можно проверить при помощи омметра и если он неисправен, заменить на новый.

На каких автомобилях чаще встречается данная проблема

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

  • BAW
  • BMW
  • Chevrolet (Шевроле Сильверадо, Trucks)
  • Dodge (Додж Рам)
  • Ford (Форд Коннект, Мондео, Транзит, Фиеста)
  • GMC
  • Hyundai
  • Iveco (Ивеко Дейли)
  • Jaguar (Ягуар X-Type)
  • Land Rover (Ленд Ровер Рендж Ровер, Фрилендер)
  • LDV Maxus
  • Mercedes (Мерседес Спринтер)
  • Mitsubishi (Митсубиси Фусо)
  • Opel (Опель Астра)
  • Peugeot (Пежо Боксер)
  • Volkswagen
  • Volvo

С кодом неисправности Р0251 иногда можно встретить и другие ошибки. Наиболее часто встречаются следующие: P0190, P0193, P0237, P0238, P0272, P0341, P0370, P0380, P0404, P0490, P0651, P0652, P1102, P1211, P1216, P2266, P2269, P2338, P2509, C1123, C1312.

Видео

Ошибка P0251 — Дозатор топлива “A”, ротор / кулачок / форсунка — неисправность электрической цепи

Определение кода ошибки P0251

Ошибка P0251 указывает на неисправность электрической цепи дозатора топлива “А” (ротор/кулачок/форсунка).

Что означает ошибка P0251

Ошибка P0251 является общим кодом ошибки, который указывает на неисправность одного или нескольких из следующих компонентов:

  • Оптический датчик*
  • Датчик положения коленчатого вала
  • Датчик положения педали акселератора
  • Датчик температуры впускного воздуха

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

*Как правило, только автомобили с дизельными двигателями имеют оптический датчик. Оптический датчик предназначен для подсчета количества импульсов, поступающих с ротора (диска) топливного насоса высокого давления. Появление ошибки P0251 в автомобиле с дизельным двигателем обычно указывает на то, что оптический датчик отправляет ошибочные показания на модуль управления двигателем (ECM). Если ваш автомобиль не имеет оптического датчика, то данная ошибка указывает на неисправность датчика положения коленчатого вала, датчика положения педали акселератора и/или датчика температуры впускного воздуха.

Причины возникновения ошибки P0251

  • Загрязнение (плохое состояние) топлива или использование неправильного типа топлива
  • Загрязнение или неисправность оптического датчика
  • Засорение топливного насоса, топливного фильтра или топливной форсунки
  • Неисправность датчика температуры впускного воздуха, датчика положения коленчатого вала и/или датчика положения педали акселератора
  • Неисправность привода управления подачей топлива
  • Неисправность модуля управления двигателем (ECM)
  • Повреждение топливной форсунки
  • Короткое замыкание на массу или бортовую сеть электрических проводов, относящихся к датчику температуры впускного воздуха, датчику положения коленчатого вала или датчику положения педали акселератора
  • Коррозия или повреждение разъема датчика температуры впускного воздуха, датчика положения коленчатого вала, датчика положения педали акселератора, топливной форсунки или соответствующих проводов

Каковы симптомы ошибки P0251?

  • Проблемы с запуском двигателя (автомобиль может заводиться с трудом или вовсе не заводиться)
  • Появление дыма из выхлопной трубы
  • Заглохание двигателя
  • Пропуски зажигания в цилиндрах двигателя на холостом ходу

Как механик диагностирует ошибку P0251?

При диагностировании данной ошибки механик выполнит следующее:

  • Считает все сохраненные данные и коды ошибок с помощью сканера OBD-II
  • Просмотрит данные оптического датчика, датчика положения коленчатого вала, датчика положения педали акселератора и датчика температуры впускного воздуха в режиме реального времени
  • Проверит напряжение и сопротивление* оптического датчика, датчика положения коленчатого вала, датчика положения педали акселератора и датчика температуры впускного воздуха
  • Проверит состояние топлива
  • Проверит давление топливного насоса

* Напряжение и сопротивление каждого компонента должны соответствовать значениям, указанным в технических условиях производителя, которые могут различаться в зависимости от марки и модели автомобиля.

Общие ошибки при диагностировании кода P0251

Наиболее распространенной ошибкой при диагностировании кода P0251 является пренебрежение проверкой оптического датчика, датчика положения коленчатого вала, датчик положения педали акселератора и датчик температуры впускного воздуха. Часто проблема заключается в неисправности одного или нескольких из вышеуказанных компонентов.

Насколько серьезной является ошибка P0251?

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

Какой ремонт может исправить ошибку P0251?

  • Замена неисправного датчика положения коленчатого вала
  • Замена неисправного датчика положения педали акселератора
  • Замена неисправного датчика температуры впускного воздуха
  • Замена неисправного оптического датчика
  • Очистка загрязненного оптического датчика
  • Очистка топливной системы от углеродистых отложений или мусора
  • Замена засоренной топливной форсунки
  • Замена неисправного топливного насоса
  • Замена неисправных свечей накаливания (только в автомобилях с дизельным двигателем)
  • Замена неисправных свечей зажигания
  • Ремонт или замена изношенных или поврежденных проводов датчика температуры впускного воздуха
  • Ремонт или замена оборванных или закороченных на массу или бортовую сеть проводов датчика температуры впускного воздуха
  • Ремонт или замена оборванных или закороченных на массу или бортовую сеть проводов датчика положения педали акселератора
  • Ремонт или замена оборванных или закороченных на массу или бортовую сеть проводов датчика положения коленчатого вала
  • Замена неисправного модуля управления двигателем (ECM)
  • Ремонт или замена оборванных или закороченных на массу или бортовую сеть проводов оптического датчика

Дополнительные комментарии для устранения ошибки P0251

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

Нужна помощь с кодом ошибки P0251?

Компания — CarChek, предлагает услугу — выездная компьютерная диагностика, специалисты нашей компании приедут к вам домой или в офис, чтобы диагностировать и выявлять проблемы вашего автомобиля. Узнайте стоимость и запишитесь на выездную компьютерную диагностику или свяжитесь с консультантом по телефону +7(499)394-47-89

Похожие статьи

#mongodb #spring-data-mongodb

#mongodb #spring-data-mongodb

Вопрос:

Столкнулся с этим исключением Mongo при запросе документа в транзакции только с определенным идентификатором (все остальные идентификаторы в порядке):

 Exception occured: org.springframework.data.mongodb.MongoTransactionException: 
Query failed with error code 251 and error message 
'Given transaction number 1 does not match any in-progress transactions. The active transaction number is -1' on server mongo-1:27017; 
nested exception is com.mongodb.MongoQueryException: 
Query failed with error code 251 and error message 
'Given transaction number 1 does not match any in-progress transactions. The active transaction number is -1' on server mongo-1:27017 
at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:136) 
at org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:2902) 
at org.springframework.data.mongodb.core.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:2810) 
at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:2555) 
at org.springframework.data.mongodb.core.ExecutableFindOperationSupport$ExecutableFindSupport.doFind(ExecutableFindOperationSupport.java:216) 
at org.springframework.data.mongodb.core.ExecutableFindOperationSupport$ExecutableFindSupport.oneValue(ExecutableFindOperationSupport.java:128) 
at org.springframework.data.mongodb.repository.query.AbstractMongoQuery.lambda$getExecution$4(AbstractMongoQuery.java:153) 
at org.springframework.data.mongodb.repository.query.AbstractMongoQuery.doExecute(AbstractMongoQuery.java:126) 
at org.springframework.data.mongodb.repository.query.AbstractMongoQuery.execute(AbstractMongoQuery.java:101) 
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:618) 
  

MongoDB является разделенным кластером, и аналогичное действие выполняется для полностью аналогичного кластера (в другой тестовой среде), но исключения не возникает.

Другая информация, это исключение всегда после исключения сокета MongoDB, как показано ниже:

 Got socket exception on connection [connectionId{localValue:9, serverValue:11760}] to mongo-1:27017. All connections to mongo-1:27017 will be closed.
  

Ответ №1:

У нас была аналогичная проблема в нашем проекте: некоторые тесты завершались неудачно с 251 «Заданный номер транзакции * не соответствует ни одной текущей транзакции». Мы написали тест для воспроизведения проблемы, а затем отладили его. Я на 90% уверен, что мы нашли проблему.

Итак, гипотеза заключается в следующем:
когда мы используем транзакции spring mongo, фактическая транзакция запускается при отправке первого запроса в базу данных (неважно, какой запрос — запрос, обновление и т. Д.). Итак, Когда первый запрос отправляется параллельно с любыми другими запросами, но не былудалось завершить до них, и они думают, что транзакция запущена (но это не так), тогда мы видим, что возникает эта ошибка. «Транзакция x 1 не существует. Последняя транзакция — x». К такому выводу привела следующая последовательность журналов (мы включили журналы трассировки во время выполнения теста):

  • 2021-07-15 12:56:41.331 ОТЛАДКА 4900 — [Test worker] org.mongodb.driver.protocol.command : Отправка команды ‘{«find»: «items», «filter»: {«_id»: «d1»}, «limit»: 1, «$db»: «…», …, «txnNumber»: 1, «StartTransaction»: true, «autocommit»: false, …}’ с идентификатором запроса 23 к базе данных … при подключении …
  • 2021-07-15 12:56:41.334 ОТЛАДКА 4900 — [Test worker] org.mongodb.driver.protocol.command : Отправка команды ‘{«найти»: «элементы», «фильтр»: {«_id»: «d2»}, «limit»: 1, «$db»: «…», …, «txnNumber»: 1, «autocommit»: false, …}’ с идентификатором запроса 24 к базе данных … при подключении …
  • 2021-07-15 12:56:41.337 DEBUG 4900 — [ntLoopGroup-3-6] org.mongodb.driver.protocol.command : выполнение команды с идентификатором запроса 24 не удалось успешно завершить …
    com.mongodb.MongoCommandException: сбой команды с ошибкой 251 (NoSuchTransaction): «Задан номер транзакции 1не соответствует никаким текущим транзакциям. Номер активной транзакции равен -1′ на сервере …
  • 2021-07-15 12:56:41.379 ОТЛАДКА 4900 — [ntLoopGroup-3-8] org.mongodb.driver.protocol.command : выполнение команды с идентификатором запроса 23 успешно завершено …

Обратите внимание, что в первом журнале у нас есть «StartTransaction»: true, а во втором — нет. Тем не менее, второй запрос завершился первым, поэтому произошла ошибка. Эта ошибка также возникает, если второй запрос запускается между запуском первого запроса и выполнением первого запроса, например: первый запрос запускается, второй запрос запускается, первый запрос завершается, второй запрос завершается.

Тестовый код (на kotlin):

Обслуживание:

 @Service
class TestService {

    @Autowired private lateinit var itemRepository: ItemRepository

    @Transactional
    fun parallelQuery(): Mono<Void> {
        return Flux.fromIterable(listOf("d1", "d2"))
            .flatMap {
                itemRepository.findById(it)
            }
            .then()
    }
}
  

Сам тест:

 internal class MonoZipTest: BaseTest() {
    @Autowired private lateinit var testService: TestService

    @Test
    fun test() {

        val mono =
            Flux.fromIterable(1..1000)
                .flatMap {
                    testService.parallelQuery()
                }
                .then()

        StepVerifier.create(mono)
            .expectError(MongoTransactionException::class.java)
            .verify()
    }
}
  

Вывод: убедитесь, что первый запрос к mongodb в транзакции не выполняется параллельно с любым другим запросом в этой транзакции.

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

1. Вау. Это был ответ. У меня была такая же проблема в mongoose. Выполнение первого запроса не параллельно, а остальных параллельно решило проблему. github.com/Automattic/mongoose/issues/11115

Ответ №2:

Небольшая оговорка: это неправильный ответ, поскольку я не уверен, что это может помочь оригинальному постеру; кроме того, у меня нет правильного объяснения этого эффекта. Я просто хотел, чтобы люди знали об этом эффекте; обычно я бы использовал для этого комментарий, но он слишком длинный для комментария. Я публикую это в надежде, что это может помочь кому-то решить их проблему.

Недавно мы видели подобное исключение:

 Caused by: com.mongodb.MongoQueryException: Query failed with error code 251 and error message 'Given transaction number 198 does not match any in-progress transactions. The active transaction number is 197' on server aaa.bbb.ccc:27017
    at com.mongodb.operation.FindOperation$3.onResult(FindOperation.java:822)
  

Я не могу показать код, поэтому я попытаюсь объяснить, что он делает.

В нереактивной настройке это было бы так:

 X = getX()
Y = saveAndReturnY()
pair = (X, Y)
processPair(pair)
  

Эта логика была реализована, и она работала нормально (я не показываю рабочую версию кода, это не имеет значения). Этот код выполнялся при транзакции.

Затем я переработал этот код, чтобы упростить его. В итоге это выглядело так:

 getX() // Mono<X>
    .zipWith(saveAndReturnY()) // Mono<Tuple<X, Y>>
    .flatMap(this::processPair)
  

И с этим кодом мы наблюдали исключение выше. Это происходило не в 100% случаев, что-то вроде 50/50: иногда это происходило, иногда нет. Это происходило только в MongoDB Atlas. Наши интеграционные тесты с использованием MongoDB той же версии (4.2.9), работающие в контейнере Docker (через testcontainers), работали нормально, и нам так и не удалось воспроизвести проблему там.

Короче говоря: оказалось, что если мы заменим zipWith() на zipWhen() , проблема исчезнет:

 getX() // Mono<X>
    .zipWhen(x -> saveAndReturnY()) // Mono<Tuple<X, Y>>
    .flatMap(this::processPair)
  

Разница в том, что с помощью подписки происходит одновременно с обоими монетами, объединенными вместе, то есть с и , поэтому они выполняются «параллельно». zipWith() Mono<X> Mono<Y> Но для zipWhen() , они выполняются строго последовательно: сначала вы X выходите Mono<X> , затем подписываетесь Mono<Y> . В исходном коде (до рефакторинга) он работал таким же (последовательным или, вероятно, лучше сказать, причинным) способом.

Я не уверен, почему это произошло для нас, мы все еще расследуем. Возможно, есть какая-то проблема, которая только что возникла из-за этого параллелизма. Или в транзакциях MongoDB есть что-то, чего я не понимаю (пока), что приводит к возникновению таких исключений при запуске параллелизма.

В любом случае, в нашем случае устранение параллелизма решило проблему. Попробуйте проанализировать свой код и посмотреть, есть ли какие-либо операторы, подобные Mono.zipWith() или Flux.flatMap() которые подписываются на более чем один Publisher , вызывая такой эффект «параллелизма».

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

1. Спасибо за это объяснение, которое мне тоже помогло. Повышающий голос заслужен наверняка

Ответ №3:

Понравилась статья? Поделить с друзьями:
  • Что такое ошибка 23 на терминале оплаты
  • Что такое ошибка 142
  • Что такое ошибка 133
  • Что такое ошибка 1305
  • Что такое ошибка 130