[Server] Cleanup Task: Expired Temp Segments #34

Closed
opened 2026-05-24 11:56:11 -04:00 by zgaetano · 0 comments
Owner

Overview

Implement scheduled task to clean up expired temporary hi-res segments (24-hour TTL).

Tasks

  • Create services/mam-api/src/tasks/cleanupTempSegments.js
  • Implement hourly cron job (node-cron)
  • Query expired segments from database
  • Delete S3 objects for expired segments
  • Delete database records
  • Add logging for cleanup operations
  • Register task in mam-api startup
  • Test cleanup logic

Implementation Details

// Run every hour
cron.schedule('0 * * * *', async () => {
  const expired = await pool.query(
    'SELECT * FROM temp_segments WHERE expires_at < NOW()'
  );
  
  for (const segment of expired.rows) {
    // Delete from S3
    await deleteObject(segment.s3_key);
    
    // Delete from database
    await pool.query('DELETE FROM temp_segments WHERE id = $1', [segment.id]);
  }
});

S3 Lifecycle Policy

Configure S3 bucket lifecycle rule:

  • Prefix: temp-segments/
  • Expiration: 1 day
  • Backup to database cleanup

Files

  • services/mam-api/src/tasks/cleanupTempSegments.js
  • services/mam-api/src/index.js (register task)

Testing

  • Test with expired segments
  • Verify S3 deletion
  • Verify database cleanup
  • Test error handling (S3 failures)

Estimated Time

4 hours

## Overview Implement scheduled task to clean up expired temporary hi-res segments (24-hour TTL). ## Tasks - [ ] Create `services/mam-api/src/tasks/cleanupTempSegments.js` - [ ] Implement hourly cron job (node-cron) - [ ] Query expired segments from database - [ ] Delete S3 objects for expired segments - [ ] Delete database records - [ ] Add logging for cleanup operations - [ ] Register task in mam-api startup - [ ] Test cleanup logic ## Implementation Details ```javascript // Run every hour cron.schedule('0 * * * *', async () => { const expired = await pool.query( 'SELECT * FROM temp_segments WHERE expires_at < NOW()' ); for (const segment of expired.rows) { // Delete from S3 await deleteObject(segment.s3_key); // Delete from database await pool.query('DELETE FROM temp_segments WHERE id = $1', [segment.id]); } }); ``` ## S3 Lifecycle Policy Configure S3 bucket lifecycle rule: - Prefix: `temp-segments/` - Expiration: 1 day - Backup to database cleanup ## Files - `services/mam-api/src/tasks/cleanupTempSegments.js` - `services/mam-api/src/index.js` (register task) ## Testing - [ ] Test with expired segments - [ ] Verify S3 deletion - [ ] Verify database cleanup - [ ] Test error handling (S3 failures) ## Estimated Time 4 hours
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: WildDragonLLC/dragonflight#34
No description provided.