-
Notifications
You must be signed in to change notification settings - Fork 367
Open
Labels
Description
pm2 start server with two instance ,
two instance connect one mysql server.
Component.queue = async (obj, appId, projectId, accessToken) => {
const Project = Component.app.models.project;
const Page = Component.app.models.page;
const tx = await Project.beginTransaction({
isolationLevel: Project.Transaction.REPEATABLE_READ
});
const options = { transaction: tx };
try {
const userId = accessToken.userId;
const { pageId, data = [] } = obj;
const project = await Project.findOne({
where: { id: projectId, appId, ownerId: userId }
}, options);
const info = await Project.updateAll(
{ id: projectId },
{ lastUpdate: new Date() },
options
);
let page = await Page.findById(pageId, options);
let pages = await Page.find({
where: { projectId }
}, options)
pages.forEach(page => {
if (page.uuid)
idMap[page.uuid] = page.id;
})
let components = await Component.find(
{
where: { projectId, pageId: page.id },
fields: ["id", "uuid"]
}, options
)
await Page.updateAll({ id: page.id }, { isNeedGenerate: true }, options);
await tx.commit();
return { success: true };
} catch (err) {
if (tx) {
await tx.rollback();
}
};
i use Jmeter test it , with 50 threads / sec, then throw error
but threads number small for example less than 10, they work well,
mysql deallock
error
so,did i write the code ok ? thanks
it seem miss commit or rollback while concurrent


