-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Labels
Description
Complete AZ Affinity and ReadFrom Strategy Support in ConfigurationOptions
Overview
This issue tracks the completion of AZ (Availability Zone) Affinity and ReadFrom strategy support in the C# Valkey GLIDE client. While the underlying infrastructure exists in ConnectionConfiguration.cs
with the ReadFrom
struct and ReadFromStrategy
enum, the parsing and serialization logic in ConfigurationOptions.cs
is incomplete.
Problem Statement
Currently, the C# client has:
- ✅ Complete
ReadFrom
struct andReadFromStrategy
enum inConnectionConfiguration.cs
- ✅ Proper FFI marshaling support for ReadFrom configurations
- ✅ ConnectionMultiplexer mapping from ConfigurationOptions to ClientConfigurationBuilder
- ❌ Missing connection string parsing for
readFrom
andaz
parameters - ❌ Missing serialization support in
ConfigurationOptions.ToString()
- ❌ Incomplete validation for ReadFrom configurations
This prevents users from configuring AZ affinity through connection strings or programmatically through ConfigurationOptions.
Expected Behavior
Connection String Support
// Should work - AZ affinity strategies
var config = ConfigurationOptions.Parse("server=localhost,readFrom=AzAffinity,az=us-east-1a");
var config = ConfigurationOptions.Parse("server=localhost,readFrom=AzAffinityReplicasAndPrimary,az=eu-west-1b");
// Should work - Non-AZ strategies
var config = ConfigurationOptions.Parse("server=localhost,readFrom=Primary");
var config = ConfigurationOptions.Parse("server=localhost,readFrom=PreferReplica");
Programmatic Configuration
var config = new ConfigurationOptions();
config.ReadFrom = new ReadFrom(ReadFromStrategy.AzAffinity, "us-east-1a");
config.ReadFrom = new ReadFrom(ReadFromStrategy.Primary);
Serialization Support
var config = new ConfigurationOptions { ReadFrom = new ReadFrom(ReadFromStrategy.AzAffinity, "us-east-1a") };
var connectionString = config.ToString(); // Should include "readFrom=AzAffinity,az=us-east-1a"
Implementation Requirements
1. Connection String Parsing
- Add
readFrom
parameter parsing inConfigurationOptions.DoParse()
- Add
az
parameter parsing inConfigurationOptions.DoParse()
- Implement
ParseReadFromStrategy()
method to convert string to enum - Add validation for ReadFrom/AZ parameter combinations
- Support case-insensitive parsing
2. Serialization Support
- Extend
ConfigurationOptions.ToString()
to include ReadFrom values - Implement
FormatReadFrom()
method for string conversion - Ensure backward compatibility with existing ToString format
- Support round-trip parsing (Parse → ToString → Parse)
3. Validation and Error Handling
- Validate AZ is required for AZ affinity strategies
- Validate AZ is not provided for non-AZ strategies
- Provide clear error messages for invalid combinations
- Handle null/empty AZ values appropriately
4. Testing
- Unit tests for connection string parsing
- Unit tests for serialization/deserialization
- Unit tests for validation scenarios
- Integration tests for end-to-end configuration flow
- Backward compatibility tests
Supported ReadFrom Strategies
Strategy | AZ Required | Description |
---|---|---|
Primary |
No | Always read from primary nodes |
PreferReplica |
No | Prefer replica nodes, fallback to primary |
AzAffinity |
Yes | Prefer replicas in same AZ, fallback to other replicas/primary |
AzAffinityReplicasAndPrimary |
Yes | Prefer nodes (replicas + primary) in same AZ, fallback to any node |
Current Code Status
The following components are already implemented:
ReadFrom
struct inConnectionConfiguration.cs
✅ReadFromStrategy
enum with all strategies ✅- FFI marshaling support ✅
- ConnectionMultiplexer mapping ✅
Missing components:
- ConfigurationOptions parsing logic ❌
- ConfigurationOptions serialization logic ❌
- Comprehensive validation ❌
- Unit tests ❌
Acceptance Criteria
- Connection strings with ReadFrom parameters parse correctly
- All ReadFromStrategy values are supported
- AZ validation works for all strategy combinations
- ToString() includes ReadFrom configuration
- Round-trip parsing works (Parse → ToString → Parse)
- Comprehensive error messages for invalid configurations
- Backward compatibility maintained
- Full test coverage for all scenarios
Related Files
sources/Valkey.Glide/Abstract/ConfigurationOptions.cs
- Main implementation neededsources/Valkey.Glide/Abstract/ConnectionMultiplexer.cs
- Verify mapping workssources/Valkey.Glide/ConnectionConfiguration.cs
- Existing ReadFrom infrastructuretests/Valkey.Glide.UnitTests/
- Add comprehensive tests
Labels
enhancement
c#
configuration
az-affinity