# "Resume of change stream was not possible, as the resume point may no longer be in the oplog"
The resume token you stored references an oplog entry that has rolled off. The oplog is a capped window; when your consumer was down longer than the window, the token is dead.
## Confirm
Check how long the consumer was down versus the oplog window (Atlas Metrics, or `rs.printReplicationInfo()` equivalent). If downtime exceeds the window, this error is expected, not a bug.
## Fix
1. Restart the stream from `startAtOperationTime` set to now, accepting the gap, and backfill the missed range from a snapshot or an audit log if you have one.
2. Or do a full re-sync of the affected state and start fresh.
3. Prevent recurrence: persist the resume token after every batch (not every hour), alert on consumer lag, and size the cluster tier so the oplog window comfortably exceeds your worst-case downtime.
## Verify
The new stream runs, tokens persist per batch, and a simulated consumer restart resumes cleanly from the stored token.