Make configuration values injectable rather than hardcoded
Add config structs with sensible defaults for tunable parameters: - JetStreamConfig for stream retention (1 year) and replica count (1) - HashRingConfig for virtual nodes per physical node (150) - ShardConfig for shard count (1024) and replication factor (1) Each component gets a new WithConfig constructor that accepts custom configuration, while the original constructors continue to work with defaults. Zero values in configs fall back to defaults for backward compatibility. Closes #38 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit was merged in pull request #43.
This commit is contained in:
@@ -33,8 +33,26 @@ type ShardManager struct {
|
||||
replication int
|
||||
}
|
||||
|
||||
// NewShardManager creates a new shard manager
|
||||
// NewShardManager creates a new shard manager with default configuration
|
||||
func NewShardManager(shardCount, replication int) *ShardManager {
|
||||
return NewShardManagerWithConfig(ShardConfig{
|
||||
ShardCount: shardCount,
|
||||
ReplicationFactor: replication,
|
||||
})
|
||||
}
|
||||
|
||||
// NewShardManagerWithConfig creates a new shard manager with custom configuration
|
||||
func NewShardManagerWithConfig(config ShardConfig) *ShardManager {
|
||||
// Apply defaults for zero values
|
||||
shardCount := config.ShardCount
|
||||
if shardCount == 0 {
|
||||
shardCount = DefaultNumShards
|
||||
}
|
||||
replication := config.ReplicationFactor
|
||||
if replication == 0 {
|
||||
replication = 1
|
||||
}
|
||||
|
||||
return &ShardManager{
|
||||
shardCount: shardCount,
|
||||
shardMap: &ShardMap{Shards: make(map[int][]string), Nodes: make(map[string]NodeInfo)},
|
||||
@@ -149,6 +167,15 @@ func (sm *ShardManager) GetActorsInShard(shardID int, nodeID string, vmRegistry
|
||||
return actors
|
||||
}
|
||||
|
||||
// GetShardCount returns the total number of shards
|
||||
func (sm *ShardManager) GetShardCount() int {
|
||||
return sm.shardCount
|
||||
}
|
||||
|
||||
// GetReplicationFactor returns the replication factor
|
||||
func (sm *ShardManager) GetReplicationFactor() int {
|
||||
return sm.replication
|
||||
}
|
||||
|
||||
// ConsistentHashPlacement implements PlacementStrategy using consistent hashing
|
||||
type ConsistentHashPlacement struct{}
|
||||
@@ -185,4 +212,4 @@ func (chp *ConsistentHashPlacement) RebalanceShards(currentMap *ShardMap, nodes
|
||||
// This is a simplified implementation
|
||||
// In practice, this would implement sophisticated rebalancing logic
|
||||
return currentMap, nil
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user