Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 February 27

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
node-clinic
источник

AK

Anton Kovalenko in NodeUA - JavaScript and Node.js in Ukraine
Всім привіт. Маю питання по AWS lambda.
Зіткнувся з проблемою пов”язаною з такою штукою - context.callbackWaitsForEmptyEventLoop = false (лямбда повертає респонз до того, як івент-луп опустіє). До того ,як цього флагу не було, реквест відпрацьовував по 4 секунди, але після того як я його додав - 600ms. Здавалось, шо це добре, але в мене таке враження шо деякі колбеки(напрклад звернення до БД) просто втрачаються. Може хтось мав схожу проблему ?))
источник

RS

Roman Sachenko in NodeUA - JavaScript and Node.js in Ukraine
Было такое, и да, была проблема именно с БД соединением. Даже пул опустошался. Сейчас попробую найти код, вспомнить в чем дело и напишу.
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Пользовать async хэндлер пробовали?
источник

AK

Anton Kovalenko in NodeUA - JavaScript and Node.js in Ukraine
Alexander
Пользовать async хэндлер пробовали?
да, він і є async
источник

MD

Mikhail Demidoff in NodeUA - JavaScript and Node.js in Ukraine
я так полагаю, Александр не про async а именно про асинк хендлер
источник

RS

Roman Sachenko in NodeUA - JavaScript and Node.js in Ukraine
В общем, проблема была. PgSQL + Sequalize. Последний оставлял в event loop'е операции. Понятия не имею какие, не разбирался тогда, но он заставлял цикл работать дальше. Потому поставил на false. Чтоб дожидаться только момента, когда отработает основная функция.

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

RS

Roman Sachenko in NodeUA - JavaScript and Node.js in Ukraine
И да, я тогда много источников находил, где писали 'ставь false и не парься'.
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Mikhail Demidoff
я так полагаю, Александр не про async а именно про асинк хендлер
Именно. Если все запросы к базе, сервисам авейтить, то все будет гарантированно сохраняться. А в ивентлупе могут висеть всякие таймеры, кипалайвы.
источник

AK

Anton Kovalenko in NodeUA - JavaScript and Node.js in Ukraine
Alexander
Именно. Если все запросы к базе, сервисам авейтить, то все будет гарантированно сохраняться. А в ивентлупе могут висеть всякие таймеры, кипалайвы.
так от цікавинка в тому, шо я їх авейчу)
источник

RS

Roman Sachenko in NodeUA - JavaScript and Node.js in Ukraine
Alexander
Именно. Если все запросы к базе, сервисам авейтить, то все будет гарантированно сохраняться. А в ивентлупе могут висеть всякие таймеры, кипалайвы.
Не думаю, что проблема в отсутствии await'ов. Я тоже только так и писал.
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Roman Sachenko
Не думаю, что проблема в отсутствии await'ов. Я тоже только так и писал.
Там хендлер с колбеками и хендлер асинхронный чутка по разному работают
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Anton Kovalenko
так от цікавинка в тому, шо я їх авейчу)
Тогда в теории все должно быть ок. Скажите с чем конкретно проблема, с какой базой или с какими запросами.
источник

AK

Anton Kovalenko in NodeUA - JavaScript and Node.js in Ukraine
послідовність роботи лямбди така - прийняти реквест, звернутиьс до бази,  повернути відповідь. Хендлер є промісом(async) і звернення до БД я авейчу, але в мене таке враження шо він його пропускає якимось чином. База постгерс, але це наврдчи має якесь значення)
источник

AK

Anton Kovalenko in NodeUA - JavaScript and Node.js in Ukraine
@m03geek а якшо не авейтати, то в теорії він може втратити якісь колбеки?
источник

AK

Anton Kovalenko in NodeUA - JavaScript and Node.js in Ukraine
в теорії вони ж мають всі виконатись.
Ще один момент, реквести які вибирають шось з БД працюють норм, а оцей глюк спостерігається для кверей, які нічого не повертають
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Anton Kovalenko
@m03geek а якшо не авейтати, то в теорії він може втратити якісь колбеки?
Есть различные драйверы, которые например могут буферизировать. Как пимер есть такой логгер pino. Он буферизирует вывод. Если не вызвать flush, то оно может потеряться. С драйверами БД - может быть то же самое
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Почитайте доку драйвера, который используете для постгреса и нет ли у него какой-то буферизации.
Может быть еще нюансы, если постгрес ранится в кластере, может не все ноды успевают затянуть себе изменения и следующий запрос идет к другой реплике
источник

AK

Anton Kovalenko in NodeUA - JavaScript and Node.js in Ukraine
Всім дякую за поради і підказки, буду розбтратись)
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Можете просто поднять отдельную лямбду и послать из скрипта несколько запросов подряд, которые будут грубо говоря в базу писать цифру по порядку.
источник