fix: remove PruneOrphanedMessages to preserve history within MAX_HISTORY
All checks were successful
check / check (push) Successful in 2m22s
All checks were successful
check / check (push) Successful in 2m22s
PruneOrphanedMessages deleted messages that lost their client_queues references after PruneOldQueueEntries ran, even when those messages were within the MAX_HISTORY limit. This made MAX_HISTORY meaningless for low-traffic channels. RotateChannelMessages already caps messages per target. Queue pruning handles client_queues growth. Orphan cleanup is redundant. Closes #40
This commit is contained in:
@@ -1789,8 +1789,7 @@ skew issues) and simpler than UUIDs (integer comparison vs. string comparison).
|
||||
### Data Lifecycle
|
||||
|
||||
- **Messages**: Rotated per `MAX_HISTORY` — oldest messages beyond the limit
|
||||
are pruned periodically per target (channel or DM). Orphaned messages (no
|
||||
longer referenced by any client queue) are also removed.
|
||||
are pruned periodically per target (channel or DM).
|
||||
- **Queue entries**: Pruned automatically when older than `QUEUE_MAX_AGE`
|
||||
(default 48h).
|
||||
- **Channels**: Deleted when the last member leaves (ephemeral).
|
||||
|
||||
@@ -1118,28 +1118,6 @@ func (database *Database) PruneOldQueueEntries(
|
||||
return deleted, nil
|
||||
}
|
||||
|
||||
// PruneOrphanedMessages deletes messages that are no
|
||||
// longer referenced by any client_queues row and returns
|
||||
// the number of rows removed.
|
||||
func (database *Database) PruneOrphanedMessages(
|
||||
ctx context.Context,
|
||||
) (int64, error) {
|
||||
res, err := database.conn.ExecContext(ctx,
|
||||
`DELETE FROM messages WHERE id NOT IN
|
||||
(SELECT DISTINCT message_id
|
||||
FROM client_queues)`,
|
||||
)
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf(
|
||||
"prune orphaned messages: %w", err,
|
||||
)
|
||||
}
|
||||
|
||||
deleted, _ := res.RowsAffected()
|
||||
|
||||
return deleted, nil
|
||||
}
|
||||
|
||||
// RotateChannelMessages enforces MAX_HISTORY per channel
|
||||
// by deleting the oldest messages beyond the limit for
|
||||
// each msg_to target. Returns the total number of rows
|
||||
|
||||
@@ -245,18 +245,4 @@ func (hdlr *Handlers) pruneQueuesAndMessages(
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
orphaned, err := hdlr.params.Database.
|
||||
PruneOrphanedMessages(ctx)
|
||||
if err != nil {
|
||||
hdlr.log.Error(
|
||||
"orphan message cleanup failed",
|
||||
"error", err,
|
||||
)
|
||||
} else if orphaned > 0 {
|
||||
hdlr.log.Info(
|
||||
"pruned orphaned messages",
|
||||
"deleted", orphaned,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user