Skip to content

Conversation

@alexeyzimarev
Copy link
Contributor

@alexeyzimarev alexeyzimarev commented Nov 15, 2025

User description

  • Rename EventStore projects to KurrentDB
  • Use KurrentDB client

PR Type

Enhancement


Description

  • Migrate EventStore projects to KurrentDB with updated client

  • Rename classes from EsdbEventStore to KurrentDBEventStore

  • Update namespaces from Eventuous.EventStore to Eventuous.KurrentDB

  • Replace EventStore.Client with KurrentDB.Client package

  • Refactor stream state handling and logging implementation


Diagram Walkthrough

flowchart LR
  A["EventStore.Client"] -->|"Replace with"| B["KurrentDB.Client"]
  C["Eventuous.EventStore"] -->|"Rename to"| D["Eventuous.KurrentDB"]
  E["EsdbEventStore"] -->|"Rename to"| F["KurrentDBEventStore"]
  G["EventStoreProducer"] -->|"Rename to"| H["KurrentDbProducer"]
  I["EventStoreClientSettings"] -->|"Replace with"| J["KurrentDBClientSettings"]
Loading

File Walkthrough

Relevant files
Enhancement
23 files
KurrentDBEventStore.cs
Migrate to KurrentDB client and refactor event store         
+87/-49 
PersistentSubscriptionBase.cs
Update to KurrentDB client and rename properties                 
+21/-20 
AllStreamSubscription.cs
Update namespaces and client references to KurrentDB         
+11/-11 
Registrations.cs
Update imports and service registration to KurrentDB         
+60/-58 
AllPersistentSubscription.cs
Update to KurrentDB client and parameter naming                   
+17/-17 
StreamSubscription.cs
Update namespaces and client references to KurrentDB         
+8/-8     
StreamPersistentSubscription.cs
Update to KurrentDB client and parameter naming                   
+19/-19 
KurrentDbProducer.cs
Rename EventStoreProducer to KurrentDbProducer                     
+13/-13 
EventStoreCatchUpSubscriptionBase.cs
Update namespaces and client property naming                         
+6/-6     
StoreFixture.cs
Update test fixture to use KurrentDB client                           
+6/-6     
StreamPersistentPublishAndSubscribeManyTests.cs
Update test imports and client instantiation                         
+8/-8     
Program.cs
Update to KurrentDB client settings and instantiation       
+4/-4     
IntegrationFixture.cs
Update to KurrentDB client for MongoDB tests                         
+5/-5     
CatchUpSubscriptionFixture.cs
Update fixture to use KurrentDB client                                     
+8/-8     
Registrations.cs
Update imports and service registration to KurrentDB         
+7/-7     
Payments.cs
Update producer options to KurrentDbProduceOptions             
+6/-6     
KurrentDbExtensions.cs
Rename extensions class and update to KurrentDB types       
+6/-6     
StreamRevisionExtensions.cs
Update stream revision conversion to KurrentDB types         
+4/-4     
KurrentDbProduceOptions.cs
Rename produce options class to KurrentDbProduceOptions   
+3/-3     
AllStreamSubscriptionMeasure.cs
Create new diagnostic measure class for KurrentDB               
+12/-0   
BaseSubscriptionMeasure.cs
Update base measure class to use KurrentDB client               
+3/-3     
StreamSubscriptionMeasure.cs
Update measure class to use KurrentDB client                         
+4/-4     
Constants.cs
Update namespace to KurrentDB                                                       
+1/-1     
Dependencies
2 files
Eventuous.KurrentDb.csproj
Update project dependencies to KurrentDB.Client                   
+4/-6     
Directory.Packages.props
Add KurrentDB.Client package version                                         
+1/-0     
Configuration changes
2 files
Directory.Build.props
Update root variable from EsdbRoot to KurrentDbRoot           
+1/-1     
Eventuous.slnx
Update solution structure and folder organization               
+91/-91 
Additional files
47 files
Bookings.Payments.csproj +1/-1     
Bookings.csproj +1/-1     
Eventuous.EventStore.csproj.DotSettings +0/-2     
README.md +0/-8     
AllStreamSubscriptionMeasure.cs +0/-12   
CombinedStore.cs +4/-4     
ConnectorAndArchive.cs +4/-4     
ElasticPlayground.csproj +2/-2     
OnlyArchive.cs +4/-4     
docker-compose.yml [link]   
README.md +8/-0     
ConsumePipeExtensions.cs +1/-1     
EsdbMappings.cs +1/-1     
AllPersistentSubscriptionOptions.cs +1/-1     
AllStreamSubscriptionOptions.cs +1/-1     
CatchUpSubscriptionOptions.cs +1/-1     
EventStoreSubscriptionOptions.cs +1/-1     
EventStoreSubscriptionWithCheckpointOptions.cs +1/-1     
PersistentSubscriptionOptions.cs +1/-1     
StreamPersistentSubscriptionOptions.cs +1/-1     
StreamSubscriptionOptions.cs +1/-1     
AppServiceTests.cs +1/-1     
Eventuous.Tests.KurrentDb.csproj +2/-2     
DomainFixture.cs +1/-1     
EsdbContainer.cs +1/-1     
TestCheckpointStore.cs +1/-1     
Limiter.cs +2/-2     
MetricsFixture.cs +7/-7     
MetricsTests.cs +1/-1     
ProducerTracesTests.cs +2/-2     
RegistrationTests.cs +5/-5     
AggregateStoreTests.cs +1/-1     
EventStoreAggregateTests.cs +1/-1     
StoreTests.cs +1/-1     
TieredStoreTests.cs +1/-1     
CustomDependenciesTests.cs +5/-5     
LegacySubscriptionFixture.cs +4/-4     
PersistentSubscriptionFixture.cs +4/-4     
PublishAndSubscribeManyPartitionedTests.cs +2/-2     
PublishAndSubscribeManyTests.cs +2/-2     
PublishAndSubscribeOneTests.cs +2/-2     
StreamSubscriptionDeletedEventsTests.cs +3/-3     
StreamSubscriptionWithLinksTests.cs +5/-5     
SubscribeTests.cs +3/-3     
SubscriptionIgnoredMessagesTests.cs +4/-4     
Eventuous.Tests.Projections.MongoDB.csproj +1/-1     
ProjectionTestBase.cs +1/-1     

@qodo-free-for-open-source-projects
Copy link
Contributor

qodo-free-for-open-source-projects bot commented Nov 15, 2025

PR Compliance Guide 🔍

(Compliance updated until commit 637684d)

Below is a summary of compliance checks for this PR:

Security Compliance
Silent security logging

Description: The logger is initialized with NullLogger.Instance when null is provided, which silently
discards all logging output including potential security-relevant events like
authentication failures, unauthorized access attempts, or data integrity issues that could
indicate attacks.
KurrentDBEventStore.cs [84-84]

Referred Code
    _logger         = logger         ?? NullLogger<KurrentDBEventStore>.Instance;
}
Unvalidated connection string

Description: The connection string is retrieved directly from configuration without validation or
sanitization, potentially exposing credentials if the configuration source is compromised
or if the connection string contains sensitive authentication tokens that could be logged
or exposed through error messages.
Registrations.cs [30-30]

Referred Code
services.AddKurrentDBClient(configuration["EventStore:ConnectionString"]!);
services.AddEventStore<KurrentDBEventStore>();
Ticket Compliance
🎫 No ticket provided
  • Create ticket/issue
Codebase Duplication Compliance
🟢
No codebase code duplication found New Components Detected:
- AllStreamSubscriptionMeasure
Custom Compliance
🟢
Generic: Comprehensive Audit Trails

Objective: To create a detailed and reliable record of critical system actions for security analysis
and compliance.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Meaningful Naming and Self-Documenting Code

Objective: Ensure all identifiers clearly express their purpose and intent, making code
self-documenting

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Robust Error Handling and Edge Case Management

Objective: Ensure comprehensive error handling that provides meaningful context and graceful
degradation

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Error Handling

Objective: To prevent the leakage of sensitive system information through error messages while
providing sufficient detail for internal debugging.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Logging Practices

Objective: To ensure logs are useful for debugging and auditing without exposing sensitive
information like PII, PHI, or cardholder data.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Security-First Input Validation and Data Handling

Objective: Ensure all data inputs are validated, sanitized, and handled securely to prevent
vulnerabilities

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Compliance status legend 🟢 - Fully Compliant
🟡 - Partial Compliant
🔴 - Not Compliant
⚪ - Requires Further Human Verification
🏷️ - Compliance label

Previous compliance checks

Compliance check up to commit 436afb5
Security Compliance
Silent logging suppression

Description: The logger is initialized with NullLogger.Instance when null is provided, which silently
discards all logging output including potential security-relevant events like
authentication failures or unauthorized access attempts.
KurrentDBEventStore.cs [84-84]

Referred Code
    _logger         = logger         ?? NullLogger<KurrentDBEventStore>.Instance;
}
Ticket Compliance
🎫 No ticket provided

[Generating...]

Codebase Duplication Compliance
🟢
No codebase code duplication found New Components Detected:
- AllStreamSubscriptionMeasure
Custom Compliance
🟢
Generic: Comprehensive Audit Trails

Objective: To create a detailed and reliable record of critical system actions for security analysis
and compliance.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Meaningful Naming and Self-Documenting Code

Objective: Ensure all identifiers clearly express their purpose and intent, making code
self-documenting

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Robust Error Handling and Edge Case Management

Objective: Ensure comprehensive error handling that provides meaningful context and graceful
degradation

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Error Handling

Objective: To prevent the leakage of sensitive system information through error messages while
providing sufficient detail for internal debugging.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Logging Practices

Objective: To ensure logs are useful for debugging and auditing without exposing sensitive
information like PII, PHI, or cardholder data.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Security-First Input Validation and Data Handling

Objective: Ensure all data inputs are validated, sanitized, and handled securely to prevent
vulnerabilities

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

@qodo-free-for-open-source-projects
Copy link
Contributor

qodo-free-for-open-source-projects bot commented Nov 15, 2025

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
High-level
Consider a more gradual migration

Instead of replacing the EventStoreDB integration with KurrentDB via a
large-scale rename, introduce KurrentDB support in a new, separate package. This
allows for a safer, gradual migration path for users.

Examples:

src/KurrentDb/src/Eventuous.KurrentDb/KurrentDBEventStore.cs [13-62]
namespace Eventuous.KurrentDB;

/// <summary>
/// EventStoreDB implementation of <see cref="IEventStore"/>
/// </summary>
[Obsolete("Use KurrentDBEventStore instead")]
public class EsdbEventStore : KurrentDBEventStore {
    /// <summary>
    /// Initialize the event store with the given client
    /// </summary>

 ... (clipped 40 lines)
Eventuous.slnx [108-114]
    <Folder Name="/Kurrent/" />
    <Folder Name="/Kurrent/src/">
        <Project Path="src/KurrentDb/src/Eventuous.KurrentDB/Eventuous.KurrentDB.csproj" />
    </Folder>
    <Folder Name="/Kurrent/test/">
        <Project Path="src/KurrentDb/test/Eventuous.Tests.KurrentDB/Eventuous.Tests.KurrentDB.csproj" />
    </Folder>

Solution Walkthrough:

Before:

// Project structure is replaced
// - /src/EventStore/ (DELETED)
// + /src/KurrentDb/ (ADDED, as a rename)

// File: src/KurrentDb/src/Eventuous.KurrentDb/KurrentDBEventStore.cs
namespace Eventuous.KurrentDB;

public partial class KurrentDBEventStore : IEventStore { ... }

[Obsolete("Use KurrentDBEventStore instead")]
public class EsdbEventStore : KurrentDBEventStore { ... }

// File: samples/esdb/Bookings/Registrations.cs
using Eventuous.KurrentDB;
...
services.AddKurrentDBClient(...);
services.AddEventStore<KurrentDBEventStore>();

After:

// Project structure has both integrations
// - /src/EventStore/ (REMAINS)
// - /src/KurrentDb/ (ADDED, as a new, separate project)

// File: src/EventStore/src/Eventuous.EventStore/EsdbEventStore.cs
namespace Eventuous.EventStore;
public class EsdbEventStore : IEventStore { ... }

// File: src/KurrentDb/src/Eventuous.KurrentDb/KurrentDBEventStore.cs
namespace Eventuous.KurrentDB;
public class KurrentDBEventStore : IEventStore { ... }

// Users can choose which integration to use
// using Eventuous.EventStore;
// services.AddEventStore<EsdbEventStore>();
// -- OR --
using Eventuous.KurrentDB;
services.AddEventStore<KurrentDBEventStore>();

Suggestion importance[1-10]: 8

__

Why: The suggestion addresses a critical architectural and strategic issue with the PR's "big bang" migration approach, which has a significant impact on maintainability and user adoption.

Medium
  • Update

@qodo-free-for-open-source-projects
Copy link
Contributor

😔 An error occurred while trying to generate Jira ticket requirements.

@github-actions
Copy link

github-actions bot commented Nov 15, 2025

Test Results

 51 files  + 34   51 suites  +34   33m 8s ⏱️ + 22m 9s
279 tests + 10  279 ✅ + 10  0 💤 ±0  0 ❌ ±0 
840 runs  +560  840 ✅ +560  0 💤 ±0  0 ❌ ±0 

Results for commit 637684d. ± Comparison against base commit 0860615.

This pull request removes 51 and adds 61 tests. Note that renamed tests count towards both.
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(11/14/2025 1:16:40 PM +00:00)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(11/14/2025 1:16:40 PM)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(79a28ac9-6682-4c7f-ba81-61c299f4484e)
Eventuous.Tests.EventStore.AppServiceTests ‑ ProcessAnyForNew
Eventuous.Tests.EventStore.Metrics.MetricsTests ‑ ShouldMeasureSubscriptionGapCountBase_Esdb
Eventuous.Tests.EventStore.RegistrationTests ‑ ShouldHaveEventStoreClient
Eventuous.Tests.EventStore.RegistrationTests ‑ ShouldHaveNoOpStore
Eventuous.Tests.EventStore.RegistrationTests ‑ ShouldHaveProperId
Eventuous.Tests.EventStore.RegistrationTests ‑ ShouldResolveSubscription
Eventuous.Tests.EventStore.Store.AggregateStoreTests ‑ AppendedEventShouldBeTraced
…
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(11/15/2025 2:24:25 PM +00:00)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(11/15/2025 2:24:25 PM)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(11/15/2025 2:24:32 PM +00:00)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(11/15/2025 2:24:32 PM)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(11/15/2025 2:24:33 PM +00:00)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(11/15/2025 2:24:33 PM)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(c1be6e0d-6312-4d77-8c9e-4e62c585d4d2)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(caf55951-b45b-49cd-93fd-565c07293f1e)
Eventuous.Tests.Azure.ServiceBus.IsSerialisableByServiceBus ‑ Passes(cc83be03-1d45-45ab-a0ee-bdd2dd9a76ab)
Eventuous.Tests.KurrentDB.AppServiceTests ‑ ProcessAnyForNew
…

♻️ This comment has been updated with latest results.

@alexeyzimarev alexeyzimarev merged commit ed86ec4 into dev Nov 15, 2025
5 checks passed
@alexeyzimarev alexeyzimarev deleted the rename-to-kurrent branch November 15, 2025 14:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants