Improve video synchronization reliability and error handling
Update server/videoSync.ts to include database connectivity checks, batch processing for videos, and error counting to enhance the robustness of the video synchronization service. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 890577b1-c154-40a4-a177-a0c6d55320c3 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/8cc42625-c1f5-4e43-99bd-77f2c4dedee2/890577b1-c154-40a4-a177-a0c6d55320c3/heEm7CS
This commit is contained in:
parent
261472641d
commit
2a395fd12d
@ -76,9 +76,25 @@ class VideoSyncService {
|
|||||||
|
|
||||||
let insertedCount = 0;
|
let insertedCount = 0;
|
||||||
let updatedCount = 0;
|
let updatedCount = 0;
|
||||||
|
let errorCount = 0;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (const video of this.cache.videos) {
|
// First, test database connectivity
|
||||||
|
await db.execute(sql`SELECT 1`);
|
||||||
|
console.log('📡 Database connection verified');
|
||||||
|
|
||||||
|
// Process videos in smaller batches to avoid overwhelming the database
|
||||||
|
const batchSize = 10;
|
||||||
|
const totalBatches = Math.ceil(this.cache.videos.length / batchSize);
|
||||||
|
|
||||||
|
for (let batchIndex = 0; batchIndex < totalBatches; batchIndex++) {
|
||||||
|
const start = batchIndex * batchSize;
|
||||||
|
const end = Math.min(start + batchSize, this.cache.videos.length);
|
||||||
|
const batch = this.cache.videos.slice(start, end);
|
||||||
|
|
||||||
|
console.log(`📦 Processing batch ${batchIndex + 1}/${totalBatches} (videos ${start + 1}-${end})`);
|
||||||
|
|
||||||
|
for (const video of batch) {
|
||||||
try {
|
try {
|
||||||
// Check if video exists in database using raw SQL
|
// Check if video exists in database using raw SQL
|
||||||
const existingVideo = await db.execute(sql`SELECT id FROM videos WHERE id = ${video.id} LIMIT 1`);
|
const existingVideo = await db.execute(sql`SELECT id FROM videos WHERE id = ${video.id} LIMIT 1`);
|
||||||
@ -120,6 +136,14 @@ class VideoSyncService {
|
|||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`❌ Failed to sync video ${video.id}:`, error);
|
console.error(`❌ Failed to sync video ${video.id}:`, error);
|
||||||
|
errorCount++;
|
||||||
|
// Continue with other videos
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Small delay between batches to avoid overwhelming the database
|
||||||
|
if (batchIndex < totalBatches - 1) {
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 50));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,11 +151,13 @@ class VideoSyncService {
|
|||||||
console.log(`✅ Database sync completed in ${duration}ms:`);
|
console.log(`✅ Database sync completed in ${duration}ms:`);
|
||||||
console.log(` 📥 Inserted: ${insertedCount} new videos`);
|
console.log(` 📥 Inserted: ${insertedCount} new videos`);
|
||||||
console.log(` 🔄 Updated: ${updatedCount} existing videos`);
|
console.log(` 🔄 Updated: ${updatedCount} existing videos`);
|
||||||
|
console.log(` ❌ Errors: ${errorCount} videos`);
|
||||||
console.log(` 📊 Database total: ${insertedCount + updatedCount} videos`);
|
console.log(` 📊 Database total: ${insertedCount + updatedCount} videos`);
|
||||||
console.log(` 🎥 Cache total: ${this.cache.videos.length} videos`);
|
console.log(` 🎥 Cache total: ${this.cache.videos.length} videos`);
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('❌ Database sync failed:', error);
|
console.error('❌ Database sync failed:', error);
|
||||||
|
throw error; // Re-throw to be caught by timeout wrapper
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,11 +165,22 @@ class VideoSyncService {
|
|||||||
console.log('🔄 Initializing video sync service...');
|
console.log('🔄 Initializing video sync service...');
|
||||||
try {
|
try {
|
||||||
await this.syncVideos();
|
await this.syncVideos();
|
||||||
await this.syncVideosToDatabase();
|
|
||||||
|
// Add timeout protection for database sync
|
||||||
|
const syncTimeout = new Promise((_, reject) =>
|
||||||
|
setTimeout(() => reject(new Error('Database sync timeout after 30 seconds')), 30000)
|
||||||
|
);
|
||||||
|
|
||||||
|
await Promise.race([
|
||||||
|
this.syncVideosToDatabase(),
|
||||||
|
syncTimeout
|
||||||
|
]);
|
||||||
|
|
||||||
this.startPeriodicSync();
|
this.startPeriodicSync();
|
||||||
console.log('✅ Video sync service initialized successfully');
|
console.log('✅ Video sync service initialized successfully');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('❌ Failed to initialize video sync service:', error);
|
console.error('❌ Failed to initialize video sync service:', error);
|
||||||
|
console.log('⚠️ Continuing without database sync - app will still work with cached data');
|
||||||
// Continue without crashing the server
|
// Continue without crashing the server
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user