Skip to content

Commit 7eafcee

Browse files
Add timeout for database save operations to prevent hanging
1 parent 4c3e43e commit 7eafcee

1 file changed

Lines changed: 15 additions & 2 deletions

File tree

routes/create/services/questionStreamingService.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,14 @@ class QuestionStreamingService {
189189
message: 'Saving question to database...'
190190
});
191191

192-
savedQuestion = await newQuestion.save();
192+
// Add timeout for database save operation
193+
const DB_SAVE_TIMEOUT = 30000; // 30 seconds
194+
const savePromise = newQuestion.save();
195+
const timeoutPromise = new Promise((_, reject) =>
196+
setTimeout(() => reject(new Error('Database save timeout after 30s')), DB_SAVE_TIMEOUT)
197+
);
198+
199+
savedQuestion = await Promise.race([savePromise, timeoutPromise]);
193200
console.log(`[${questionId}] Question saved: ${savedQuestion._id}`);
194201
sseService.streamQuestionProgress(sessionId, questionId, {
195202
status: 'db-saved',
@@ -210,7 +217,13 @@ class QuestionStreamingService {
210217
message: 'Adding question to quiz...'
211218
});
212219

213-
await quiz.addQuestion(savedQuestion._id);
220+
// Add timeout for addQuestion operation
221+
const addPromise = quiz.addQuestion(savedQuestion._id);
222+
const addTimeoutPromise = new Promise((_, reject) =>
223+
setTimeout(() => reject(new Error('Add to quiz timeout after 30s')), DB_SAVE_TIMEOUT)
224+
);
225+
226+
await Promise.race([addPromise, addTimeoutPromise]);
214227
console.log(`[${questionId}] Question added to quiz successfully`);
215228
sseService.streamQuestionProgress(sessionId, questionId, {
216229
status: 'added-to-quiz',

0 commit comments

Comments
 (0)