fix: fix deadlock
This commit is contained in:
parent
e07e79ae2f
commit
2f853017ee
@ -918,6 +918,15 @@ export async function startApi(): Promise<{ app: FastifyInstance; io: Server }>
|
|||||||
// Start transaction to ensure consistency
|
// Start transaction to ensure consistency
|
||||||
const result = await db.$transaction(async (tx) => {
|
const result = await db.$transaction(async (tx) => {
|
||||||
|
|
||||||
|
// Get user for update (lock account first to prevent deadlocks)
|
||||||
|
const user = await tx.account.findUnique({
|
||||||
|
where: { id: userId }
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!user) {
|
||||||
|
throw new Error('User not found');
|
||||||
|
}
|
||||||
|
|
||||||
// Verify session belongs to user and lock it
|
// Verify session belongs to user and lock it
|
||||||
const session = await tx.session.findFirst({
|
const session = await tx.session.findFirst({
|
||||||
where: {
|
where: {
|
||||||
@ -930,15 +939,6 @@ export async function startApi(): Promise<{ app: FastifyInstance; io: Server }>
|
|||||||
throw new Error('Session not found');
|
throw new Error('Session not found');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get user for update
|
|
||||||
const user = await tx.account.findUnique({
|
|
||||||
where: { id: userId }
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!user) {
|
|
||||||
throw new Error('User not found');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get next sequence numbers
|
// Get next sequence numbers
|
||||||
const msgSeq = session.seq + 1;
|
const msgSeq = session.seq + 1;
|
||||||
const updSeq = user.seq + 1;
|
const updSeq = user.seq + 1;
|
||||||
@ -1038,6 +1038,15 @@ export async function startApi(): Promise<{ app: FastifyInstance; io: Server }>
|
|||||||
|
|
||||||
// Start transaction to ensure consistency
|
// Start transaction to ensure consistency
|
||||||
const result = await db.$transaction(async (tx) => {
|
const result = await db.$transaction(async (tx) => {
|
||||||
|
// Get user for update (lock account first to prevent deadlocks)
|
||||||
|
const user = await tx.account.findUnique({
|
||||||
|
where: { id: userId }
|
||||||
|
});
|
||||||
|
if (!user) {
|
||||||
|
callback({ result: 'error' });
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
// Verify session belongs to user and lock it
|
// Verify session belongs to user and lock it
|
||||||
const session = await tx.session.findFirst({
|
const session = await tx.session.findFirst({
|
||||||
where: {
|
where: {
|
||||||
@ -1045,10 +1054,7 @@ export async function startApi(): Promise<{ app: FastifyInstance; io: Server }>
|
|||||||
accountId: userId
|
accountId: userId
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const user = await tx.account.findUnique({
|
if (!session) {
|
||||||
where: { id: userId }
|
|
||||||
});
|
|
||||||
if (!user || !session) {
|
|
||||||
callback({ result: 'error' });
|
callback({ result: 'error' });
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -1128,6 +1134,15 @@ export async function startApi(): Promise<{ app: FastifyInstance; io: Server }>
|
|||||||
|
|
||||||
// Start transaction to ensure consistency
|
// Start transaction to ensure consistency
|
||||||
const result = await db.$transaction(async (tx) => {
|
const result = await db.$transaction(async (tx) => {
|
||||||
|
// Get user for update (lock account first to prevent deadlocks)
|
||||||
|
const user = await tx.account.findUnique({
|
||||||
|
where: { id: userId }
|
||||||
|
});
|
||||||
|
if (!user) {
|
||||||
|
callback({ result: 'error' });
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
// Verify session belongs to user and lock it
|
// Verify session belongs to user and lock it
|
||||||
const session = await tx.session.findFirst({
|
const session = await tx.session.findFirst({
|
||||||
where: {
|
where: {
|
||||||
@ -1135,10 +1150,7 @@ export async function startApi(): Promise<{ app: FastifyInstance; io: Server }>
|
|||||||
accountId: userId
|
accountId: userId
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const user = await tx.account.findUnique({
|
if (!session) {
|
||||||
where: { id: userId }
|
|
||||||
});
|
|
||||||
if (!user || !session) {
|
|
||||||
callback({ result: 'error' });
|
callback({ result: 'error' });
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user