Локальный запуск функций SLS для модульных тестов приводит к тому, что пул соединений Mysql «Слишком много соединений» - PullRequest
0 голосов
/ 02 октября 2018

Я относительно новичок в Serverless и выполняю свою функцию локально для использования с моими тестами Jest.Используя Node-Mysql, я создаю пул соединений, вызывая mysql.createPool, а затем впоследствии вызываю pool.query каждый раз, когда мне нужно выполнить запрос.Я работаю в предположении, что pool.query на самом деле является ярлыком для вызова pool.getConnection, connection.query и, наконец, connection.release.Таким образом, подключения снова становятся доступными после завершения обработки запроса.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю свои модульные тесты, все они запускаются в первый раз, но если они запускаются во второй раз, они терпят неудачу из-зана 'Ошибка: ER_CON_COUNT_ERROR: слишком много соединений'.

У нас не возникает та же проблема, когда функция размещена в AWS Lambda.

Кто-нибудь испытывал что-либо подобное или кто-нибудьЕсть ли какие-либо предлагаемые обходные пути, чтобы смягчить это как локальную проблему?

1 Ответ

0 голосов
/ 02 октября 2018

Вам нужно позвонить pool.end, чтобы закрыть все подключения пула на вашем конце.В противном случае соединение открыто до тех пор, пока сервер MySql не закроет их.

С узла-mysql readme :

Когда вы закончите использовать пул, у вас естьзавершить все подключения, или цикл событий Node.js будет оставаться активным до тех пор, пока сервер MySQL не закроет подключения.

Это, скорее всего, не произойдет в производственном процессе, поскольку AWS Lambda пытается повторно использоватьсреды выполнения, поэтому на практике только несколько выполнений создают новый пул и открывают новые соединения.

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