Feature hashrate distribution#71
Conversation
- Introduced a new `Config` struct for loading configuration from a file. - Updated `main.rs` to parse command-line arguments and load configuration. - Enhanced `ProxyState` to manage multiple upstream connections with connection status tracking. - Modified `Router` to support round-robin selection of upstreams and connection management. - Added new dependencies: `serde` and `toml` for configuration handling.
…ulti-upstream support
…used variables and streamline function signatures
- Removed deprecated methods and fields related to round-robin upstream selection in ProxyState and Router. - Introduced MultiUpstreamManager to handle multiple upstream connections concurrently. - Updated Router to utilize MultiUpstreamManager for managing upstream connections and sending messages. - Enhanced error handling and logging throughout the upstream connection process. - Added methods for retrieving connection statistics and managing upstream states. - Improved code organization and readability by separating concerns into the new MultiUpstreamManager module.
…iled connection stats, and improve hashrate reporting
…for equal distribution
… update configuration handling and validation
- Added support for multiple upstream pools with different authentication keys. - Introduced latency-based selection for upstream pools. - Updated `new_with_keys` and `new_multi` methods to handle custom distribution. - Implemented `select_best_pools` and `select_best_pools_for_distribution` for optimal pool selection based on latency. - Enhanced logging with additional tracing for better debugging. refactor(multi_upstream_manager): Streamline upstream connection management - Simplified upstream connection handling and removed unnecessary fields. - Updated connection logic to maintain connections based on hashrate distribution. - Improved error handling and logging for upstream connection attempts. fix(config): Introduce comprehensive configuration management - Added a new configuration structure to handle command-line arguments, environment variables, and configuration files. - Implemented parsing for hashrate and socket addresses with error handling. - Ensured backward compatibility with existing configuration setups. chore(translator): Adjust module visibility and clean up imports - Changed visibility of proxy and upstream modules to private. - Cleaned up unnecessary imports and ensured consistent formatting. style(share_accounter): Ensure consistent formatting - Added missing newline at the end of the file for consistency.
…nnection stats logging
- Added optional hashrate_distribution configuration in config.toml - Implemented three operational modes: 1. Latency-based selection (default when no distribution specified) 2. Hashrate distribution (when percentages provided in config) 3. Single upstream (when only one pool configured) - Enhanced Configuration struct with wants_hashrate_distribution() method - Added multi-upstream router with percentage-based hashrate allocation - Improved router initialization and upstream connection management - Added detailed monitoring and reporting for multi-upstream mode - Fixed pool address parsing and configuration loading from TOML - Enhanced logging with connection stats and allocation percentages - Added comprehensive error handling and fallback mechanisms Breaking changes: None (backward compatible) New features: hashrate_distribution config option, multi-upstream routing Fixes: Pool address configuration parsing, test mode pool selection
- Resolved conflicts in config.rs, main.rs, router/mod.rs and other files - Preserved hashrate distribution functionality with three operational modes: 1. Hashrate distribution mode (custom percentages from config) 2. Latency-based selection mode (multiple pools, selects best) 3. Single upstream mode (single pool configuration) - Updated dependencies and imports from master branch - Enhanced monitoring with detailed connection stats and network verification - Added comprehensive logging with emojis for better readability - Improved error handling and state management - Clean separation between multi-upstream and single upstream logic
- Remove unused aggregated_receiver field from Router struct - Clean up unused imports and methods - Fix clippy warnings for better code quality - Remove dead code after initialize_proxy calls
…ess handling and latency selection
…across multiple files
|
Hey @bansalayush247
|
There was a problem hiding this comment.
no need to commit the config file
|
|
||
|
|
||
| /// Set the downstream hashrate to be distributed among upstreams | ||
| pub fn set_downstream_hashrate(hashrate: f32) { |
There was a problem hiding this comment.
This should probably go in config.rs.
There was a problem hiding this comment.
@Priceless-P These functions manage runtime state via PROXY_STATE mutex, not static config. They follow the same pattern as other state functions like update_pool_state(). Config should stay immutable - this is for dynamic hashrate updates during operation.
There was a problem hiding this comment.
PROXY_STATE should remain specifically for keeping track state of the proxy, up or down. Setting and getting hashrates as well as upstream connections does not have anything to do with the state of the proxy.
There was a problem hiding this comment.
maybe a new file in the router directory will be more appropriate
…logic in proxy and router
- Implement MultiUpstreamManager for load balancing across multiple pools - Add hashrate distribution configuration with percentage-based routing - Support both latency-based pool ranking and custom distribution - Add JDC bridge for Template Provider integration - Clean up verbose logging and remove unused code - Fix all clippy warnings and optimize performance - Add comprehensive API endpoints for monitoring pool stats - Support graceful failover and connection monitoring Features: - Multi-pool hashrate distribution (e.g., 30%/70% split) - Automatic latency-based pool ranking - Share routing based on configured percentages - Pool health monitoring and reconnection - API server for real-time statistics - Compatible with existing single-upstream mode
…nsalayush247/demand-cli into feature-hashrate-distribution
…nd downstream hashrate
|
why closed? @bansalayush247 |
|
I have closed it to raise a new, fresh PR. I made some mistakes in this one, so I created a completely new branch and committed the required changes. link for new PR:#100 |
🎯 Pull Request: Optional Hashrate Distribution with Multi-Upstream Support
PR Title:
📋 Summary
This PR introduces optional hashrate distribution functionality that allows users to distribute mining hashrate across multiple upstream pools with custom percentages. The implementation provides three distinct operational modes while maintaining full backward compatibility.
✨ Key Features



🔧 Three Operational Modes:
📊 Hashrate Distribution Mode - Custom percentage allocation across multiple pools
⚡ Latency-Based Selection Mode - Automatic best pool selection based on latency testing
🎯 Single Upstream Mode - Traditional single pool operation
🛠️ Core Functionality:
✅ Optional Configuration: hashrate_distribution = [70.0, 30.0] in config.toml
✅ Multi-Upstream Router: Intelligent routing with percentage-based allocation
✅ Real-time Monitoring: Comprehensive stats and network connection verification
✅ Robust Error Handling: Validation, fallbacks, and recovery mechanisms
✅ Professional Logging: Clear mode indicators with emoji-enhanced readability
✅ Backward Compatible: Zero breaking changes to existing functionality
📸 Screenshots - Three Operational Modes
Mode 1: Hashrate Distribution (70% + 30%)
Custom percentage allocation across multiple pools with real-time monitoring
Mode 2: Latency-Based Selection
Automatic best pool selection based on latency testing
Mode 3: Single Upstream
Traditional single pool operation (backward compatibility)
📋 Files Changed
Core Implementation:
config.rs - Configuration parsing and validation
main.rs - Mode detection and initialization logic
mod.rs - Enhanced routing with multi-upstream support
multi_upstream_manager.rs - New multi-upstream management
config.toml - Example configuration with hashrate distribution
✅ Checklist
Code Quality: All clippy warnings resolved
Testing: Comprehensive testing across all modes
Documentation: Clear configuration examples and usage
Backward Compatibility: Zero breaking changes verified
Error Handling: Robust validation and recovery mechanisms
🎯 Review Focus Areas
Configuration Logic - Validation and parsing in config.rs
Multi-Upstream Management - Core distribution logic in multi_upstream_manager.rs
Mode Detection - Router initialization and mode switching in main.rs
Error Handling - Edge cases and recovery mechanisms
User Experience - Configuration simplicity and logging clarity
🎉 Summary
This PR delivers a production-ready hashrate distribution system that provides users with flexible pool management options while maintaining the reliability and performance of the existing codebase. The implementation follows best practices for configuration management, error handling, and user experience.