loopbackio / loopbackio/loopback-datasource-juggler
concurrent transaction throw deadlock error
Nessuno ha ancora preso questa issue.
- Lingua principale
- JavaScript
- Stelle
- 282
- Fork
- 366
- Merge medio
- 17h 4m
- PR unite (30g)
- 10
Descrizione
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
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con il codice della transazione nell’issue e riproduci il carico di lavoro segnalato usando due istanze pm2, MySQL e la concorrenza JMeter indicata. Verifica se la transazione viene eseguita con commit o rollback in modo coerente su ogni percorso; il lavoro è completato quando viene identificata la causa del deadlock oppure viene confermato che il codice dell’applicazione non è responsabile.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- javascript, mysql
- Ambito
- backend, database
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 25/100