Skip to content

Clarify RDI snapshot modes and missed deletes - #4238

Open
ZdravkoDonev-redis wants to merge 6 commits into
mainfrom
docs/rdi-snapshot-modes-and-missed-deletes
Open

ZdravkoDonev-redis wants to merge 6 commits into
mainfrom
docs/rdi-snapshot-modes-and-missed-deletes

Conversation

@ZdravkoDonev-redis

@ZdravkoDonev-redis ZdravkoDonev-redis commented Oct 9, 2026 •

Copy link
Copy Markdown
Collaborator

When a saved source log position expires, when_needed can take a new snapshot and resume collection while leaving deleted rows in Redis. The current docs do not explain this gap or the connector differences between snapshot modes.

This change compares all six listed modes for Debezium sources and adds a shared Mermaid timeline to the latest and v1.19.1 configuration guides. It updates the configuration references, deployment/reset guidance, troubleshooting, multiple-source guidance, and Cloud pages. Reset and target cleanup remain separate. The embed shortcode now enables Mermaid rendering in the parent page.

The Cloud FAQ includes a six-event timeline with colored markers and alternating labels on wide screens. It switches to a vertical timeline when the content area is narrow. The diagram uses semantic HTML and CSS, with no JavaScript dependency.

The Architecture guarantee remains unchanged, with an open product-review note about expired history and missed deletes.

Validation:

  • Verified connector semantics against the bundled Debezium 3.5 baseline, including PostgreSQL no_data.
  • Focused Hugo 0.143.1 build passed without warnings.
  • YAML examples validate for all six modes; added links and anchors pass.
  • Latest and v1.19.1 sequence diagrams render at desktop and 390 px widths without horizontal overflow.
  • FAQ timeline checked at 1440, 1280, 768, 390, and 320 px widths: all six events remain readable, text is at least 14 px, and the page has no horizontal overflow.

Companion schema-description PR: https://github.com/RedisLabs/redis-data-integration/pull/2886

Context: Slack discussion.


Note

Low Risk
Documentation-only changes that clarify existing CDC behavior; no runtime or configuration schema changes in this repo.

Overview
Documents Debezium snapshot.mode for RDI CDC sources and the stale-target risk when source log history expires before the collector resumes.

Adds shared embeds (rdi-snapshot-modes.md, rdi-snapshot-gap.md) with a mode comparison table, Debezium 3.5 connector notes, and a Mermaid missed-delete timeline. Pipeline config gains a Choose a snapshot mode section; architecture adds a note that at-least-once delivery does not cover replay of expired history.

Reset / start / stop wording is corrected: redis-di reset clears saved positions without changing snapshot.mode or flushing Redis; recovery behavior depends on the configured mode. New troubleshooting covers unavailable source log history; multiple-source and Redis Cloud (define, FAQ, view-edit) pages are aligned.

The embed-md shortcode now propagates hasMermaid so embedded diagrams render on parent pages. Config reference text for snapshot.mode is expanded and linked to the new guide.

Reviewed by Cursor Bugbot for commit d87ebb8. Bugbot is set up for automated code reviews on this repo. Configure here.

@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Staging links:
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/embeds/rdi-snapshot-modes
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/integrate/redis-data-integration/1.19.1/architecture/
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/integrate/redis-data-integration/1.19.1/data-pipelines/deploy/
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/integrate/redis-data-integration/1.19.1/data-pipelines/pipeline-config
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/integrate/redis-data-integration/1.19.1/data-pipelines/pipeline-config/
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/integrate/redis-data-integration/1.19.1/reference/cli/redis-di-reset/
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/integrate/redis-data-integration/1.19.1/reference/config-yaml-reference/
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/integrate/redis-data-integration/1.19.1/troubleshooting/
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/integrate/redis-data-integration/architecture/
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/integrate/redis-data-integration/data-pipelines/deploy/
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/integrate/redis-data-integration/data-pipelines/multiple-sources/
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/integrate/redis-data-integration/data-pipelines/pipeline-config
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/integrate/redis-data-integration/data-pipelines/pipeline-config/
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/integrate/redis-data-integration/reference/cli/redis-di-reset/
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/integrate/redis-data-integration/reference/config-yaml-reference/
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/integrate/redis-data-integration/troubleshooting/
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/operate/rc/rdi/define/
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/operate/rc/rdi/faq/
https://redis.io/docs/staging/docs/rdi-snapshot-modes-and-missed-deletes/operate/rc/rdi/view-edit/

@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

🧠 Redis Memory

Found 9 related items from repository history:

Memory updated at d87ebb8

Comment thread content/integrate/redis-data-integration/1.19.1/architecture/_index.md Outdated
Comment thread content/integrate/redis-data-integration/1.19.1/data-pipelines/pipeline-config.md Outdated
Comment thread content/integrate/redis-data-integration/architecture/_index.md Outdated
Comment thread content/integrate/redis-data-integration/reference/config-yaml-reference.md Outdated

@andy-stark-redis andy-stark-redis left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some suggestions (mainly adding the word "mode" after always, initial, etc) and I'd prefer not to use that new shortcode unless you really feel it's necessary. Otherwise looks good, so I'll approve to avoid holding you up.

Comment thread content/embeds/rdi-snapshot-modes.md Outdated
Comment thread content/embeds/rdi-snapshot-modes.md Outdated
Comment thread content/integrate/redis-data-integration/1.19.1/troubleshooting.md Outdated
Comment thread content/integrate/redis-data-integration/data-pipelines/deploy.md Outdated
Comment thread content/integrate/redis-data-integration/data-pipelines/multiple-sources.md Outdated
Comment thread content/operate/rc/rdi/define.md Outdated
Comment thread content/operate/rc/rdi/define.md Outdated
Comment thread content/operate/rc/rdi/faq.md Outdated
Comment thread content/operate/rc/rdi/faq.md Outdated
Comment thread content/operate/rc/rdi/view-edit.md Outdated
Comment thread content/operate/rc/rdi/view-edit.md Outdated
Comment thread content/embeds/rdi-snapshot-modes.md Outdated
Comment thread content/embeds/rdi-snapshot-modes.md
Comment thread content/embeds/rdi-snapshot-modes.md
Comment thread content/embeds/rdi-snapshot-modes.md
| `initial` (default) | Snapshot when no offset exists, then stream changes. | Resume after a completed snapshot if the position is valid. No automatic snapshot recovery for unavailable log history. | Snapshot, then stream changes. |
| `when_needed` | Snapshot when no offset exists, then stream changes. | Resume if the position is valid. Snapshot again if the connector detects an unavailable position. | Snapshot, then stream changes. |
| `always` | Snapshot on every collector start, then stream changes. | Take a new snapshot even if the position is valid. | Snapshot, then stream changes. |
| `initial_only` | Take an initial snapshot without streaming subsequent changes. | Restart an interrupted initial snapshot; do not capture subsequent changes after it completes. | Snapshot without ongoing change capture. |

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It may be worth noting that using initial_only will cause the collector to enter a crash loop upon completion, causing the source to appear as "not connected" in monitoring.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why would initial_only cause a crash loop on its own?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With initial_only Debezium performs the snapshot, stores the offset at which the snapshot is made, and then shuts down. K8s will restart the pods after it exits, causing it to start again, see that snapshot has been completed and shutdown again, this way entering a loop starting, checking and shutting down.

Comment thread content/integrate/redis-data-integration/1.19.1/troubleshooting.md
Comment thread content/integrate/redis-data-integration/troubleshooting.md Outdated
Stopping one source pauses data capture from that source without stopping the other sources. When you start a source again, its behavior depends on the source type:

- Debezium sources follow their [snapshot mode](/content/integrate/redis-data-integration/data-pipelines/pipeline-config.md#choose-a-snapshot-mode) and the availability of their saved position.
- Snowflake sources use RIOT-X and Snowflake Streams. They resume from the saved stream offset when the stream retains the required changes. If the retention window expires while the source is stopped, changes can be lost. Set `clearOffset: true` to restart from the current state.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not familiar with this clearOffset: true. Where and how do you set it? Does restart from the current state mean "snapshot and start" or "continue CDC from now and ignore missed events"

| `initial` (default) | Snapshot when no offset exists, then stream changes. | Resume after a completed snapshot if the position is valid. No automatic snapshot recovery for unavailable log history. | Snapshot, then stream changes. |
| `when_needed` | Snapshot when no offset exists, then stream changes. | Resume if the position is valid. Snapshot again if the connector detects an unavailable position. | Snapshot, then stream changes. |
| `always` | Snapshot on every collector start, then stream changes. | Take a new snapshot even if the position is valid. | Snapshot, then stream changes. |
| `initial_only` | Take an initial snapshot without streaming subsequent changes. | Restart an interrupted initial snapshot; do not capture subsequent changes after it completes. | Snapshot without ongoing change capture. |

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With initial_only Debezium performs the snapshot, stores the offset at which the snapshot is made, and then shuts down. K8s will restart the pods after it exits, causing it to start again, see that snapshot has been completed and shutdown again, this way entering a loop starting, checking and shutting down.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants