#mysql #node.js #aws-lambda #amazon-rds #connection-pooling
#mysql #node.js #aws-lambda #amazon-rds #объединение в пул соединений
Вопрос:
Я пытаюсь обновить таблицу и установить несколько значений столбцов, но запрос работает в половине случаев.
Я действительно сбит с толку, потому что я не понимаю, почему, поскольку результаты запроса на обновление указывают, что количество измененных строк равно 1 (как и ожидалось).
Я использую пул соединений для обработки своего соединения, поскольку я нахожусь в бессерверной среде (AWS Lambda RDS).
Сам код таков :
async function mySQLConnectionPool() {
await provideConnectionInfo()
let pool = mysql.createPool({
connectionLimit: 20,
host: mySQLHost,
user: mySQLUser,
password: mySQLPassword,
database: mySQLDatabase
}
)
return pool;
}
api.post('/database-manager/gitlab-webhook', async (gitlabRequest, gitlabResponse) => {
if (connectionPool == null) {
connectionPool = await mySQLConnectionPool();
}
console.log("receiving messages from gitlab webhook")
await getPipelineIdsAndJobIds();
for (let index in pipelineAndJobIds) {
pipelineId = pipelineAndJobIds[index].pipeline_id;
jobId = pipelineAndJobIds[index].job_id
if (gitlabRequest.body["object_attributes"].id == pipelineId amp;amp; gitlabRequest.body["object_attributes"].status == 'success') {
config = {
method: 'GET',
url: `https://gitlab.com/api/v4/projects/${PROJECT_ID_CREATE}/jobs/${jobId}/trace`,
headers: {
"PRIVATE-TOKEN": PRIVATE_TOKEN
}
}
//Get Job Logs using Job Id
await axios(config)
.then(
(getJobLogsRequest) => {
let jobLog = JSON.stringify(getJobLogsRequest.data)
const regex = new RegExp('.*instance-link = (.*.com:[0-9]{4}).*');
ec2InstanceLink = jobLog.match(regex)[1]
}
)
console.log(`ec2InstanceLink : ${ec2InstanceLink}`)
connectionPool.getConnection(function (err, connection) {
let query = "UPDATE ec2_request SET ?, request_status = 'Finished' WHERE pipeline_id = ?"
connection.query(query, [{instance_link: ec2InstanceLink}, pipelineId], function (err, result) {
if (err) {
throw err
connection.release();
} else {
connection.release();
console.log("EC2 link provided")
}
}
)
}
)
}
}
})
result
Результат connection
обратного вызова подтверждает измененную строку :
OkPacket {
fieldCount: 0,
affectedRows: 1,
insertId: 0,
serverStatus: 34,
warningCount: 0,
message: '(Rows matched: 1 Changed: 1 Warnings: 0',
protocol41: true,
changedRows: 1
}
Если кто-то увидит ошибку в моем коде, я был бы благодарен, потому что эта ошибка сводит меня с ума. Я подумал, что, возможно, один из параметров может быть нулевым, но оказывается, что все они инициализированы.
Заранее большое спасибо.
Комментарии:
1.
affectedRows: 1
означает, что строка была обновлена2. @aRvi да, но в таблице sql это не так
3. проверьте подключение к базе данных, в котором оно обновляется, возможно, вы проверяете неправильную базу данных или среду
4. База данных не меняется, хотя это странная часть. Одна и та же база данных и одна и та же таблица каждый раз, я добавил код ConnectionPool в сообщение.