Full internal rename — build-verified, every module green (root + s3-rdma-sidecar
+ telemetry/server + all test modules):
- Dirs: weed/→s3/ (main tree); cmd/weed-{db,sql}→cmd/s3-{db,sql};
seaweed-volume→s3-volume; seaweedfs-rdma-sidecar→s3-rdma-sidecar;
s3/mount/weedfs_*.go→s3fs_*.go (~113 path renames).
- Imports: github.com/hanzoai/s3/weed/ → /s3/ across 1700+ files.
- gRPC proto services Seaweed/SeaweedFiler/SeaweedMessaging/... → Hanzo*
(8 services) via full protoc regeneration (correct descriptors, no sed-corruption).
- Brand SeaweedFS/Seaweed/seaweed → Hanzo/hanzo; internal X-Seaweedfs-* headers
→ X-Hanzo-*; .seaweedfs config dir → .s3.
- CLI is `s3`: go install github.com/hanzoai/s3/s3@latest | make install | Docker.
install.sh rewritten as a Hanzo S3 installer.
- External forks github.com/seaweedfs/{raft,go-fuse,goexif,cockroachdb-parser}
kept verbatim — immutable third-party module paths; NOTICE retained.
Residual (cosmetic, non-build): kafka loadtest test-proto package com.seaweedfs.loadtest.
8.8 KiB
Hanzo RDMA Sidecar - Future Work TODO
🎯 Current Status (✅ COMPLETED)
Phase 1: Architecture & Integration - DONE
- ✅ Complete Go ↔ Rust IPC Pipeline: Unix sockets + MessagePack
- ✅ Hanzo Integration: Mount client with RDMA acceleration
- ✅ Docker Orchestration: Multi-service setup with proper networking
- ✅ Error Handling: Robust fallback and recovery mechanisms
- ✅ Performance Optimizations: Zero-copy page cache + connection pooling
- ✅ Code Quality: All GitHub PR review comments addressed
- ✅ Testing Framework: Integration tests and benchmarking tools
Phase 2: Mock Implementation - DONE
- ✅ Mock RDMA Engine: Complete Rust implementation for development
- ✅ Pattern Data Generation: Predictable test data for validation
- ✅ Simulated Performance: Realistic latency and throughput modeling
- ✅ Development Environment: Full testing without hardware requirements
🚀 PHASE 3: REAL RDMA IMPLEMENTATION
3.1 Hardware Abstraction Layer 🔴 HIGH PRIORITY
Replace Mock RDMA Context
File: rdma-engine/src/rdma.rs
Current:
RdmaContextImpl::Mock(MockRdmaContext::new(config).await?)
TODO:
// Enable UCX feature and implement
RdmaContextImpl::Ucx(UcxRdmaContext::new(config).await?)
Tasks:
- Implement
UcxRdmaContextstruct - Add UCX FFI bindings for Rust
- Handle UCX initialization and cleanup
- Add feature flag:
real-ucxvsmock
Real Memory Management
File: rdma-engine/src/rdma.rs lines 245-270
Current: Fake memory regions in vector
TODO:
- Integrate with UCX memory registration APIs
- Implement HugePage support for large transfers
- Add memory region caching for performance
- Handle registration/deregistration errors
Actual RDMA Operations
File: rdma-engine/src/rdma.rs lines 273-335
Current: Pattern data + artificial latency
TODO:
- Replace
post_read()with real UCX RDMA operations - Implement
post_write()with actual memory transfers - Add completion polling from hardware queues
- Handle partial transfers and retries
3.2 Data Path Replacement 🟡 MEDIUM PRIORITY
Real Data Transfer
File: pkg/rdma/client.go lines 420-442
Current:
// MOCK: Pattern generation
mockData[i] = byte(i % 256)
TODO:
// Get actual data from RDMA buffer
realData := getRdmaBufferContents(startResp.LocalAddr, startResp.TransferSize)
validateDataIntegrity(realData, completeResp.ServerCrc)
Tasks:
- Remove mock data generation
- Access actual RDMA transferred data
- Implement CRC validation:
completeResp.ServerCrc - Add data integrity error handling
Hardware Device Detection
File: rdma-engine/src/rdma.rs lines 222-233
Current: Hardcoded Mellanox device info
TODO:
- Enumerate real RDMA devices using UCX
- Query actual device capabilities
- Handle multiple device scenarios
- Add device selection logic
3.3 Performance Optimization 🟢 LOW PRIORITY
Memory Registration Caching
TODO:
- Implement MR (Memory Region) cache
- Add LRU eviction for memory pressure
- Optimize for frequently accessed regions
- Monitor cache hit rates
Advanced RDMA Features
TODO:
- Implement RDMA Write operations
- Add Immediate Data support
- Implement RDMA Write with Immediate
- Add Atomic operations (if needed)
Multi-Transport Support
TODO:
- Leverage UCX's automatic transport selection
- Add InfiniBand support
- Add RoCE (RDMA over Converged Ethernet) support
- Implement TCP fallback via UCX
🔧 PHASE 4: PRODUCTION HARDENING
4.1 Error Handling & Recovery
- Add RDMA-specific error codes
- Implement connection recovery
- Add retry logic for transient failures
- Handle device hot-plug scenarios
4.2 Monitoring & Observability
- Add RDMA-specific metrics (bandwidth, latency, errors)
- Implement tracing for RDMA operations
- Add health checks for RDMA devices
- Create performance dashboards
4.3 Configuration & Tuning
- Add RDMA-specific configuration options
- Implement auto-tuning based on workload
- Add support for multiple RDMA ports
- Create deployment guides for different hardware
📋 IMMEDIATE NEXT STEPS
Step 1: UCX Integration Setup
-
Add UCX dependencies to Rust:
[dependencies] ucx-sys = "0.1" # UCX FFI bindings -
Create UCX wrapper module:
touch rdma-engine/src/ucx.rs -
Implement basic UCX context:
pub struct UcxRdmaContext { context: *mut ucx_sys::ucp_context_h, worker: *mut ucx_sys::ucp_worker_h, }
Step 2: Development Environment
-
Install UCX library:
# Ubuntu/Debian sudo apt-get install libucx-dev # CentOS/RHEL sudo yum install ucx-devel -
Update Cargo.toml features:
[features] default = ["mock"] mock = [] real-ucx = ["ucx-sys"]
Step 3: Testing Strategy
- Add hardware detection tests
- Create UCX initialization tests
- Implement gradual feature migration
- Maintain mock fallback for CI/CD
🏗️ ARCHITECTURE NOTES
Current Working Components
- ✅ Go Sidecar: Production-ready HTTP API
- ✅ IPC Layer: Robust Unix socket + MessagePack
- ✅ Hanzo Integration: Complete mount client integration
- ✅ Docker Setup: Multi-service orchestration
- ✅ Error Handling: Comprehensive fallback mechanisms
Mock vs Real Boundary
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Hanzo │────▶│ Go Sidecar │────▶│ Rust Engine │
│ (REAL) │ │ (REAL) │ │ (MOCK) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ RDMA Hardware │
│ (TO IMPLEMENT) │
└─────────────────┘
Performance Expectations
- Current Mock: ~403 ops/sec, 2.48ms latency
- Target Real: ~4000 ops/sec, 250μs latency (UCX optimized)
- Bandwidth Goal: 25-100 Gbps (depending on hardware)
📚 REFERENCE MATERIALS
UCX Documentation
- GitHub: https://github.com/openucx/ucx
- API Reference: https://openucx.readthedocs.io/
- Rust Bindings: https://crates.io/crates/ucx-sys
RDMA Programming
- InfiniBand Architecture: Volume 1 Specification
- RoCE Standards: IBTA Annex A17
- Performance Tuning: UCX Performance Guide
Hanzo Integration
- File ID Format:
s3/storage/needle/file_id.go - Volume Server:
s3/server/volume_server_handlers_read.go - Mount Client:
s3/mount/filehandle_read.go
⚠️ IMPORTANT NOTES
Breaking Changes to Avoid
- Keep IPC Protocol Stable: Don't change MessagePack format
- Maintain HTTP API: Existing endpoints must remain compatible
- Preserve Configuration: Environment variables should work unchanged
Testing Requirements
- Hardware Tests: Require actual RDMA NICs
- CI/CD Compatibility: Must fallback to mock for automated testing
- Performance Benchmarks: Compare mock vs real performance
Security Considerations
- Memory Protection: Ensure RDMA regions are properly isolated
- Access Control: Validate remote memory access permissions
- Data Validation: Always verify CRC checksums
🎯 SUCCESS CRITERIA
Phase 3 Complete When:
- Real RDMA data transfers working
- Hardware device detection functional
- Performance exceeds mock implementation
- All integration tests passing with real hardware
Phase 4 Complete When:
- Production deployment successful
- Monitoring and alerting operational
- Performance targets achieved
- Error handling validated under load
📅 Last Updated: December 2024
👤 Contact: Resume from s3-rdma-sidecar/ directory
🏷️ Version: v1.0 (Mock Implementation Complete)
🚀 Ready to resume: All infrastructure is in place, just need to replace the mock RDMA layer with UCX integration!