Files
s3/s3-rdma-sidecar/FUTURE-WORK-TODO.md
zeekay 8f5d0b9333 rebrand: rename weed→s3, strip all SeaweedFS/weed branding → Hanzo S3
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.
2026-06-21 19:58:27 -07:00

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 UcxRdmaContext struct
  • Add UCX FFI bindings for Rust
  • Handle UCX initialization and cleanup
  • Add feature flag: real-ucx vs mock

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

  1. Add UCX dependencies to Rust:

    [dependencies]
    ucx-sys = "0.1"  # UCX FFI bindings
    
  2. Create UCX wrapper module:

    touch rdma-engine/src/ucx.rs
    
  3. 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

  1. Install UCX library:

    # Ubuntu/Debian
    sudo apt-get install libucx-dev
    
    # CentOS/RHEL  
    sudo yum install ucx-devel
    
  2. Update Cargo.toml features:

    [features]
    default = ["mock"]
    mock = []
    real-ucx = ["ucx-sys"]
    

Step 3: Testing Strategy

  1. Add hardware detection tests
  2. Create UCX initialization tests
  3. Implement gradual feature migration
  4. 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

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!