Skip to content

chore(indexing): remove core indexing#415

Merged
yordis merged 1 commit into
masterfrom
yordis/chore-remove-core-indexing
Jul 1, 2026
Merged

chore(indexing): remove core indexing#415
yordis merged 1 commit into
masterfrom
yordis/chore-remove-core-indexing

Conversation

@yordis

@yordis yordis commented Jul 1, 2026

Copy link
Copy Markdown
Member
  • We decided to abandon this inside the core node and make it an external service.

@cursor

cursor Bot commented Jul 1, 2026

Copy link
Copy Markdown

PR Summary

Medium Risk
Large deletion in core storage/subscription paths; behavior change for any code that relied on in-node indexing or plugin-provided virtual readers, though the PR intent is to move indexing external.

Overview
Removes the entire in-core indexing feature from EventStore.Core (components, checkpoint/definition stores, subscription pipeline, in-memory index virtual streams) and deletes the associated XUnit coverage.

Node startup no longer collects IVirtualStreamReader instances from plugable components: ClusterVNode.Create drops the additionalVirtualStreamReaders parameter, and ClusterVNodeHostedService stops passing readers from IVirtualStreamReaderProvider. The storage reader’s composite virtual reader is limited to built-in gossip and node-state streams.

Virtual stream API is simplified: IVirtualStreamReader no longer exposes GetLastIndexedPosition, IVirtualStreamReaderProvider and its extension are removed, and SubscriptionsService uses a constant -1 for last indexed position on virtual streams instead of delegating to readers.

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

@coderabbitai

coderabbitai Bot commented Jul 1, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@yordis, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 48 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 7d663cc9-c20e-4947-a442-6d9b65345a55

📥 Commits

Reviewing files that changed from the base of the PR and between b5700d4 and c369153.

📒 Files selected for processing (43)
  • src/EventStore.ClusterNode/ClusterVNodeHostedService.cs
  • src/EventStore.Core.Tests/Services/Storage/when_cancelling_storage_reader_worker.cs
  • src/EventStore.Core.XUnit.Tests/Services/Storage/InMemory/VirtualStreamReaderProviderTests.cs
  • src/EventStore.Core.XUnit.Tests/Services/Storage/InMemory/VirtualStreamReaderTests.cs
  • src/EventStore.Core.XUnit.Tests/Services/Storage/Indexing/AllStreamsIndexingEventSourceFactoryTests.cs
  • src/EventStore.Core.XUnit.Tests/Services/Storage/Indexing/InMemoryIndexCheckpointStoreTests.cs
  • src/EventStore.Core.XUnit.Tests/Services/Storage/Indexing/InMemoryIndexDefinitionStoreTests.cs
  • src/EventStore.Core.XUnit.Tests/Services/Storage/Indexing/InMemoryIndexVirtualStreamReaderTests.cs
  • src/EventStore.Core.XUnit.Tests/Services/Storage/Indexing/IndexCheckpointCommitTrackerTests.cs
  • src/EventStore.Core.XUnit.Tests/Services/Storage/Indexing/IndexCheckpointTests.cs
  • src/EventStore.Core.XUnit.Tests/Services/Storage/Indexing/IndexCheckpointWriterTests.cs
  • src/EventStore.Core.XUnit.Tests/Services/Storage/Indexing/IndexDefinitionTests.cs
  • src/EventStore.Core.XUnit.Tests/Services/Storage/Indexing/IndexNameTests.cs
  • src/EventStore.Core.XUnit.Tests/Services/Storage/Indexing/IndexStreamIdTests.cs
  • src/EventStore.Core.XUnit.Tests/Services/Storage/Indexing/IndexVirtualStreamReaderTests.cs
  • src/EventStore.Core.XUnit.Tests/Services/Storage/Indexing/IndexingComponentHostTests.cs
  • src/EventStore.Core.XUnit.Tests/Services/Storage/Indexing/IndexingServiceTests.cs
  • src/EventStore.Core.XUnit.Tests/Services/Storage/Indexing/IndexingSubscriptionOptionsTests.cs
  • src/EventStore.Core.XUnit.Tests/Services/Storage/Indexing/IndexingSubscriptionTests.cs
  • src/EventStore.Core/ClusterVNode.cs
  • src/EventStore.Core/Services/Storage/InMemory/IVirtualStreamReader.cs
  • src/EventStore.Core/Services/Storage/InMemory/IVirtualStreamReaderProvider.cs
  • src/EventStore.Core/Services/Storage/InMemory/SingleEventInMemoryStream.cs
  • src/EventStore.Core/Services/Storage/InMemory/VirtualStreamReader.cs
  • src/EventStore.Core/Services/Storage/Indexing/IIndexCheckpointStore.cs
  • src/EventStore.Core/Services/Storage/Indexing/IIndexDefinitionStore.cs
  • src/EventStore.Core/Services/Storage/Indexing/IIndexingComponent.cs
  • src/EventStore.Core/Services/Storage/Indexing/IIndexingEventSource.cs
  • src/EventStore.Core/Services/Storage/Indexing/InMemoryIndexCheckpointStore.cs
  • src/EventStore.Core/Services/Storage/Indexing/InMemoryIndexDefinitionStore.cs
  • src/EventStore.Core/Services/Storage/Indexing/InMemoryIndexEventBuffer.cs
  • src/EventStore.Core/Services/Storage/Indexing/InMemoryIndexVirtualStreamReader.cs
  • src/EventStore.Core/Services/Storage/Indexing/IndexCheckpoint.cs
  • src/EventStore.Core/Services/Storage/Indexing/IndexCheckpointCommitTracker.cs
  • src/EventStore.Core/Services/Storage/Indexing/IndexCheckpointWriter.cs
  • src/EventStore.Core/Services/Storage/Indexing/IndexDefinition.cs
  • src/EventStore.Core/Services/Storage/Indexing/IndexName.cs
  • src/EventStore.Core/Services/Storage/Indexing/IndexStreamId.cs
  • src/EventStore.Core/Services/Storage/Indexing/IndexVirtualStreamReader.cs
  • src/EventStore.Core/Services/Storage/Indexing/IndexingComponentHost.cs
  • src/EventStore.Core/Services/Storage/Indexing/IndexingService.cs
  • src/EventStore.Core/Services/Storage/Indexing/IndexingSubscription.cs
  • src/EventStore.Core/Services/SubscriptionsService.cs

Walkthrough

This PR removes the entire in-memory indexing feature, including checkpoint stores, definition stores, event buffers, virtual stream readers, indexing service/subscription/host classes, and their associated tests and interfaces. It also removes the additionalVirtualStreamReaders plugin hook from ClusterVNode and related wiring.

Changes

Virtual Stream Reader Plugin Hook Removal

Layer / File(s) Summary
Remove additionalVirtualStreamReaders wiring
src/EventStore.Core/ClusterVNode.cs, src/EventStore.ClusterNode/ClusterVNodeHostedService.cs
The additionalVirtualStreamReaders parameter is removed from ClusterVNode.Create and the ClusterVNode constructor; the virtual stream reader list now only includes built-in gossip and node status streams, and the call site no longer passes plugin-provided readers.

Indexing Subsystem Removal

Layer / File(s) Summary
Core indexing types and stores
src/EventStore.Core/Services/Storage/Indexing/IndexDefinition.cs, IndexName.cs, IndexStreamId.cs, IndexCheckpoint.cs, IIndexDefinitionStore.cs, IIndexCheckpointStore.cs, InMemoryIndexDefinitionStore.cs, InMemoryIndexCheckpointStore.cs, tests .../*
Deletes value types (IndexDefinition, IndexName, IndexStreamId, IndexCheckpoint) and their store interfaces/implementations along with all validation and round-trip tests.
Checkpoint commit tracking and writer
IndexCheckpointCommitTracker.cs, IndexCheckpointWriter.cs, tests .../*
Removes the batching/commit tracker and writer classes that coordinated checkpoint persistence, plus their concurrency and retry tests.
Event buffer and virtual stream readers
InMemoryIndexEventBuffer.cs, InMemoryIndexVirtualStreamReader.cs, IndexVirtualStreamReader.cs, tests .../*
Removes the in-memory event buffer, base and concrete virtual stream reader classes used to expose indexed streams, plus their pagination and validation tests.
Indexing service, subscription, host, and event source
IndexingService.cs, IndexingSubscription.cs, IndexingComponentHost.cs, IIndexingComponent.cs, IIndexingEventSource.cs, IVirtualStreamReaderProvider.cs, tests .../*
Removes the service/subscription lifecycle classes, the component host that registered indexing services and aggregated virtual stream readers, related interfaces, and the provider extension method, together with all corresponding test suites.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

Poem

A burrow once full of index and store,
now swept clean down to the floor.
No checkpoints to track, no buffers to keep,
just gossip and node-status streams, lean and neat.
Hop on, little node — travel light once more! 🐇✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: removing core indexing from the node.
Description check ✅ Passed The description is directly related and explains moving indexing out of the core node.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch yordis/chore-remove-core-indexing

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
@yordis yordis force-pushed the yordis/chore-remove-core-indexing branch from b5700d4 to c369153 Compare July 1, 2026 03:05
@yordis yordis merged commit 0f8c8a6 into master Jul 1, 2026
21 checks passed
@yordis yordis deleted the yordis/chore-remove-core-indexing branch July 1, 2026 03:27
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.

1 participant