Skip to content

The planΒ #4

@tristanpoland

Description

@tristanpoland

Epic: Implement GalleonFS Enterprise-Grade Distributed Storage System

🎯 Project Overview

GalleonFS is the core distributed storage service for the OmniCloud platform, designed to provide zettabyte-scale storage with enterprise-class performance, security, and reliability. This system will replace traditional storage solutions like Ceph with a modern, container-native architecture built in Rust, optimized specifically for Linux environments.

Key Objectives

  • Superior Performance: >10M IOPS per node, sub-100ΞΌs latency
  • Infinite Scale: Support for 10,000+ nodes and exabyte-scale deployments
  • Absurdly Large Volumes: Individual volumes spanning multiple devices and machines
  • Enterprise Security: Hardware-accelerated encryption, multi-tenancy, compliance
  • Zero Configuration: Self-discovering, self-configuring, self-healing
  • Container Native: Deep integration with OmniCloud orchestrator
  • Linux Optimized: Maximum performance using Linux-specific technologies

πŸ—οΈ Architecture Overview

Core Design Principles

  • Unified Codebase: Single Rust monorepo with feature flags for different components
  • Container-First: All services deployed as lightweight Docker containers
  • Linux-Optimized: io_uring, eBPF, SPDK, RDMA for maximum performance
  • Multi-Device Volumes: Volumes can span thousands of devices across hundreds of machines
  • Multi-Interface: Block, Object, File, and Container APIs from unified storage engine
  • ML-Optimized: Machine learning for placement, performance, and failure prediction

System Components

graph TB
    subgraph "Control Plane"
        CO[GalleonFS Coordinator]
        PE[Placement Engine] 
        MS[Metadata Store]
        VT[Volume Topology Manager]
    end
    
    subgraph "Data Plane - Node 1"
        SN1[Storage Node 1]
        DEV1["/dev/nvme0n1<br/>/dev/nvme1n1<br/>/dev/sda1"]
    end
    
    subgraph "Data Plane - Node 2"  
        SN2[Storage Node 2]
        DEV2["/dev/nvme0n1<br/>/dev/nvme1n1<br/>/dev/sdb1"]
    end
    
    subgraph "Data Plane - Node N"
        SNN[Storage Node N]
        DEVN["/dev/nvme0n1<br/>/dev/nvme1n1<br/>/dev/sdc1"]
    end
    
    subgraph "Management Plane"
        GW[Gateway/Proxy]
        MT[Metrics Service]
        CLI[CLI Tool]
    end
    
    subgraph "Volume Abstraction"
        VOL1["Volume-1 (50TB)<br/>Spans Node1+Node2<br/>12 devices total"]
        VOL2["Volume-2 (200TB)<br/>Spans Node1+Node2+Node3<br/>36 devices total"]
    end
    
    CO --> PE
    CO --> MS
    CO --> VT
    PE --> SN1
    PE --> SN2  
    PE --> SNN
    SN1 --> DEV1
    SN2 --> DEV2
    SNN --> DEVN
    
    VT --> VOL1
    VT --> VOL2
    VOL1 --> SN1
    VOL1 --> SN2
    VOL2 --> SN1
    VOL2 --> SN2
    VOL2 --> SNN
Loading

Multi-Device Volume Architecture

graph TD
    subgraph "Logical Volume 500TB"
        LV["Volume ID: vol-abc123"]
        LV --> VS["Volume Striper"]
        VS --> CL["Chunk Layout Manager"]
    end
    
    subgraph "Physical Distribution"
        CL --> N1["Node 1 - Chunks 0-99"]
        CL --> N2["Node 2 - Chunks 100-199"] 
        CL --> N3["Node 3 - Chunks 200-299"]
        CL --> N4["Node 4 - Chunks 300-399"]
    end
    
    subgraph "Node 1 Devices"
        N1 --> D1["/dev/nvme0n1 - Chunks 0-24"]
        N1 --> D2["/dev/nvme1n1 - Chunks 25-49"]
        N1 --> D3["/dev/nvme2n1 - Chunks 50-74"]
        N1 --> D4["/dev/nvme3n1 - Chunks 75-99"]
    end
    
    subgraph "Replication and Erasure Coding"
        REP["3x Replication + 4+2 Erasure Coding"]
        REP --> R1["Replica Set 1 - Nodes 1,2,3"]
        REP --> R2["Replica Set 2 - Nodes 2,3,4"]
        REP --> EC1["Erasure Code Set 1 - 4 data + 2 parity across 6 nodes"]
    end
Loading

πŸ“ Project Structure

galleonfs/
β”œβ”€β”€ Cargo.toml                    # Workspace configuration
β”œβ”€β”€ README.md                     # Project documentation
β”œβ”€β”€ LICENSE                       # MIT License
β”œβ”€β”€ .github/
β”‚   β”œβ”€β”€ workflows/
β”‚   β”‚   β”œβ”€β”€ ci.yml               # Continuous integration
β”‚   β”‚   β”œβ”€β”€ security.yml         # Security scanning
β”‚   β”‚   └── performance.yml      # Performance benchmarks
β”‚   └── ISSUE_TEMPLATE/
β”‚       β”œβ”€β”€ bug_report.md
β”‚       β”œβ”€β”€ feature_request.md
β”‚       └── performance_issue.md
β”œβ”€β”€ docker/                       # Docker build files
β”‚   β”œβ”€β”€ coordinator.dockerfile
β”‚   β”œβ”€β”€ storage-node.dockerfile
β”‚   β”œβ”€β”€ volume-agent.dockerfile
β”‚   β”œβ”€β”€ gateway.dockerfile
β”‚   β”œβ”€β”€ metrics.dockerfile
β”‚   └── docker-compose.yml       # Development environment
β”œβ”€β”€ crates/
β”‚   β”œβ”€β”€ galleon-common/          # Shared libraries and types
β”‚   β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”‚   β”œβ”€β”€ lib.rs
β”‚   β”‚   β”‚   β”œβ”€β”€ types.rs         # Common data structures
β”‚   β”‚   β”‚   β”œβ”€β”€ network.rs       # Network protocols  
β”‚   β”‚   β”‚   β”œβ”€β”€ crypto.rs        # Cryptographic functions
β”‚   β”‚   β”‚   β”œβ”€β”€ metrics.rs       # Metrics collection
β”‚   β”‚   β”‚   β”œβ”€β”€ error.rs         # Error handling
β”‚   β”‚   β”‚   β”œβ”€β”€ config.rs        # Configuration management
β”‚   β”‚   β”‚   β”œβ”€β”€ volume_topology.rs # Multi-device volume layout
β”‚   β”‚   β”‚   └── utils.rs         # Utility functions
β”‚   β”‚   β”œβ”€β”€ Cargo.toml
β”‚   β”‚   └── README.md
β”‚   β”œβ”€β”€ galleon-coordinator/     # Control plane service
β”‚   β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”‚   β”œβ”€β”€ main.rs
β”‚   β”‚   β”‚   β”œβ”€β”€ consensus.rs     # Raft implementation
β”‚   β”‚   β”‚   β”œβ”€β”€ placement.rs     # Multi-device placement algorithms
β”‚   β”‚   β”‚   β”œβ”€β”€ metadata.rs      # Metadata management
β”‚   β”‚   β”‚   β”œβ”€β”€ api.rs           # gRPC API server
β”‚   β”‚   β”‚   β”œβ”€β”€ cluster.rs       # Cluster management
β”‚   β”‚   β”‚   β”œβ”€β”€ health.rs        # Health monitoring
β”‚   β”‚   β”‚   β”œβ”€β”€ volume_manager.rs # Large volume management
β”‚   β”‚   β”‚   β”œβ”€β”€ topology.rs      # Device topology tracking
β”‚   β”‚   β”‚   └── migration.rs     # Data migration
β”‚   β”‚   β”œβ”€β”€ Cargo.toml
β”‚   β”‚   └── README.md
β”‚   β”œβ”€β”€ galleon-storage-node/    # Data plane service
β”‚   β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”‚   β”œβ”€β”€ main.rs
β”‚   β”‚   β”‚   β”œβ”€β”€ storage_engine.rs    # Block storage engine
β”‚   β”‚   β”‚   β”œβ”€β”€ device_manager.rs    # Multi-device raw management
β”‚   β”‚   β”‚   β”œβ”€β”€ chunk_manager.rs     # Volume chunk management
β”‚   β”‚   β”‚   β”œβ”€β”€ replication.rs       # Data replication
β”‚   β”‚   β”‚   β”œβ”€β”€ erasure_coding.rs    # Reed-Solomon coding
β”‚   β”‚   β”‚   β”œβ”€β”€ encryption.rs        # At-rest encryption
β”‚   β”‚   β”‚   β”œβ”€β”€ compression.rs       # Data compression
β”‚   β”‚   β”‚   β”œβ”€β”€ io_engine.rs         # io_uring high-performance I/O
β”‚   β”‚   β”‚   β”œβ”€β”€ block_allocator.rs   # Multi-device block allocation
β”‚   β”‚   β”‚   β”œβ”€β”€ consistency.rs       # Consistency management
β”‚   β”‚   β”‚   β”œβ”€β”€ striping.rs          # Data striping across devices
β”‚   β”‚   β”‚   β”œβ”€β”€ tiering.rs           # Hot/cold data management
β”‚   β”‚   β”‚   └── recovery.rs          # Data recovery
β”‚   β”‚   β”œβ”€β”€ Cargo.toml
β”‚   β”‚   └── README.md
β”‚   β”œβ”€β”€ galleon-volume-agent/    # Volume management service
β”‚   β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”‚   β”œβ”€β”€ main.rs
β”‚   β”‚   β”‚   β”œβ”€β”€ fuse_fs.rs       # FUSE filesystem
β”‚   β”‚   β”‚   β”œβ”€β”€ mount.rs         # Volume mounting
β”‚   β”‚   β”‚   β”œβ”€β”€ csi.rs           # CSI interface
β”‚   β”‚   β”‚   β”œβ”€β”€ security.rs      # Security enforcement
β”‚   β”‚   β”‚   β”œβ”€β”€ qos.rs           # Quality of service
β”‚   β”‚   β”‚   β”œβ”€β”€ snapshot.rs      # Multi-device snapshot management
β”‚   β”‚   β”‚   β”œβ”€β”€ large_volume.rs  # Large volume handling
β”‚   β”‚   β”‚   └── backup.rs        # Backup operations
β”‚   β”‚   β”œβ”€β”€ Cargo.toml
β”‚   β”‚   └── README.md
β”‚   β”œβ”€β”€ galleon-gateway/         # API gateway service
β”‚   β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”‚   β”œβ”€β”€ main.rs
β”‚   β”‚   β”‚   β”œβ”€β”€ s3_api.rs        # S3-compatible API
β”‚   β”‚   β”‚   β”œβ”€β”€ block_api.rs     # Native block API
β”‚   β”‚   β”‚   β”œβ”€β”€ grpc_api.rs      # gRPC API server
β”‚   β”‚   β”‚   β”œβ”€β”€ rest_api.rs      # REST API server
β”‚   β”‚   β”‚   β”œβ”€β”€ auth.rs          # Authentication
β”‚   β”‚   β”‚   β”œβ”€β”€ proxy.rs         # Load balancing
β”‚   β”‚   β”‚   β”œβ”€β”€ rate_limit.rs    # Rate limiting
β”‚   β”‚   β”‚   └── tenant.rs        # Multi-tenancy
β”‚   β”‚   β”œβ”€β”€ Cargo.toml
β”‚   β”‚   └── README.md
β”‚   β”œβ”€β”€ galleon-metrics/         # Observability service
β”‚   β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”‚   β”œβ”€β”€ main.rs
β”‚   β”‚   β”‚   β”œβ”€β”€ collector.rs     # Metrics collection
β”‚   β”‚   β”‚   β”œβ”€β”€ analytics.rs     # Performance analysis
β”‚   β”‚   β”‚   β”œβ”€β”€ alerting.rs      # Alert management
β”‚   β”‚   β”‚   β”œβ”€β”€ dashboard.rs     # Web UI
β”‚   β”‚   β”‚   β”œβ”€β”€ ml_optimizer.rs  # ML-based optimization
β”‚   β”‚   β”‚   β”œβ”€β”€ capacity.rs      # Capacity planning
β”‚   β”‚   β”‚   β”œβ”€β”€ volume_analytics.rs # Large volume analytics
β”‚   β”‚   β”‚   └── reporting.rs     # SLA reporting
β”‚   β”‚   β”œβ”€β”€ Cargo.toml
β”‚   β”‚   └── README.md
β”‚   └── galleon-cli/            # Command-line interface
β”‚       β”œβ”€β”€ src/
β”‚       β”‚   β”œβ”€β”€ main.rs
β”‚       β”‚   β”œβ”€β”€ commands/        # CLI commands
β”‚       β”‚   β”‚   β”œβ”€β”€ volume.rs    # Large volume operations
β”‚       β”‚   β”‚   β”œβ”€β”€ cluster.rs
β”‚       β”‚   β”‚   β”œβ”€β”€ storage.rs
β”‚       β”‚   β”‚   β”œβ”€β”€ device.rs    # Device management
β”‚       β”‚   β”‚   β”œβ”€β”€ backup.rs
β”‚       β”‚   β”‚   └── admin.rs
β”‚       β”‚   β”œβ”€β”€ client.rs        # API client
β”‚       β”‚   β”œβ”€β”€ config.rs        # Configuration management
β”‚       β”‚   └── output.rs        # Output formatting
β”‚       β”œβ”€β”€ Cargo.toml
β”‚       └── README.md
β”œβ”€β”€ proto/                       # Protocol buffer definitions
β”‚   β”œβ”€β”€ coordinator.proto
β”‚   β”œβ”€β”€ storage.proto
β”‚   β”œβ”€β”€ volume.proto
β”‚   β”œβ”€β”€ device.proto            # Device topology
β”‚   β”œβ”€β”€ chunk.proto             # Chunk management
β”‚   β”œβ”€β”€ replication.proto
β”‚   β”œβ”€β”€ metrics.proto
β”‚   └── gateway.proto
β”œβ”€β”€ tests/                       # Integration tests
β”‚   β”œβ”€β”€ integration/
β”‚   β”‚   β”œβ”€β”€ cluster_tests.rs
β”‚   β”‚   β”œβ”€β”€ performance_tests.rs
β”‚   β”‚   β”œβ”€β”€ failover_tests.rs
β”‚   β”‚   β”œβ”€β”€ consistency_tests.rs
β”‚   β”‚   β”œβ”€β”€ large_volume_tests.rs # Multi-device volume tests
β”‚   β”‚   β”œβ”€β”€ device_failure_tests.rs
β”‚   β”‚   β”œβ”€β”€ security_tests.rs
β”‚   β”‚   └── scalability_tests.rs
β”‚   β”œβ”€β”€ e2e/
β”‚   β”‚   β”œβ”€β”€ deployment_tests.rs
β”‚   β”‚   β”œβ”€β”€ upgrade_tests.rs
β”‚   β”‚   β”œβ”€β”€ multi_device_tests.rs
β”‚   β”‚   └── chaos_tests.rs
β”‚   └── benchmarks/
β”‚       β”œβ”€β”€ storage_benchmarks.rs
β”‚       β”œβ”€β”€ network_benchmarks.rs
β”‚       β”œβ”€β”€ large_volume_benchmarks.rs
β”‚       └── scaling_benchmarks.rs
β”œβ”€β”€ docs/                        # Documentation
β”‚   β”œβ”€β”€ architecture.md
β”‚   β”œβ”€β”€ deployment.md
β”‚   β”œβ”€β”€ api_reference.md
β”‚   β”œβ”€β”€ large_volumes.md        # Multi-device volume guide
β”‚   β”œβ”€β”€ performance_tuning.md
β”‚   β”œβ”€β”€ security_guide.md
β”‚   β”œβ”€β”€ troubleshooting.md
β”‚   └── development_guide.md
β”œβ”€β”€ scripts/                     # Deployment and maintenance scripts
β”‚   β”œβ”€β”€ deploy.sh
β”‚   β”œβ”€β”€ benchmark.py
β”‚   β”œβ”€β”€ health_check.py
β”‚   β”œβ”€β”€ backup_cluster.py
β”‚   β”œβ”€β”€ restore_cluster.py
β”‚   β”œβ”€β”€ device_management.py    # Device discovery and management
β”‚   └── chaos_testing.py
β”œβ”€β”€ kubernetes/                  # Kubernetes manifests (optional)
β”‚   β”œβ”€β”€ coordinator.yaml
β”‚   β”œβ”€β”€ storage-node.yaml
β”‚   β”œβ”€β”€ volume-agent.yaml
β”‚   β”œβ”€β”€ gateway.yaml
β”‚   β”œβ”€β”€ metrics.yaml
β”‚   └── rbac.yaml
└── examples/                    # Usage examples
    β”œβ”€β”€ basic_deployment/
    β”œβ”€β”€ high_availability/
    β”œβ”€β”€ multi_datacenter/
    β”œβ”€β”€ large_volumes/          # Large volume examples
    └── performance_optimized/

πŸ› οΈ Linux-Optimized Technology Stack

Core Dependencies (Cargo.toml)

[workspace]
members = [
    "crates/galleon-common",
    "crates/galleon-coordinator", 
    "crates/galleon-storage-node",
    "crates/galleon-volume-agent",
    "crates/galleon-gateway",
    "crates/galleon-metrics",
    "crates/galleon-cli"
]

[workspace.dependencies]
# Core async runtime
tokio = { version = "1.35", features = ["full", "tracing", "rt-multi-thread"] }
tokio-uring = "0.4"                    # Linux io_uring support
futures = "0.3"
async-trait = "0.1"

# High-performance Linux I/O
io-uring = "0.6"                       # Direct io_uring access
uring-sys = "0.6"                      # Low-level io_uring bindings
libc = "0.2"                           # System calls
nix = "0.27"                           # Unix APIs
mio = "0.8"                           # Event-driven I/O

# Linux-specific optimizations
libbpf-sys = "1.2"                     # eBPF integration
procfs = "0.16"                        # /proc filesystem access
sysinfo = "0.29"                       # System information
caps = "0.5"                           # Linux capabilities
systemd = "0.10"                       # systemd integration
cgroups-rs = "0.3"                     # cgroups management

# Networking and RPC
tonic = "0.10"                         # gRPC framework
prost = "0.12"                         # Protocol buffers
hyper = { version = "0.14", features = ["full"] }
tower = "0.4"                          # Service framework
tower-http = "0.4"                     # HTTP utilities
axum = "0.7"                          # Web framework
quinn = "0.10"                         # QUIC protocol for fast replication

# High-performance networking
rdma-sys = "0.1"                       # RDMA/InfiniBand support
dpdk-sys = "0.1"                       # DPDK userspace networking (if available)
socket2 = "0.5"                        # Advanced socket options

# Distributed systems
raft = "0.7"                           # Raft consensus
etcd-client = "0.12"                   # etcd integration (optional)
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
bincode = "1.3"                        # Binary serialization
rmp-serde = "1.1"                      # MessagePack serialization

# Storage and databases
rocksdb = "0.21"                       # Embedded key-value store
sled = "0.34"                          # Alternative embedded DB
tikv-jemallocator = "0.5"             # Memory allocator
memmap2 = "0.7"                        # Memory mapping
crc32fast = "1.3"                      # Checksums
xxhash-rust = "0.8"                    # Fast hashing
ahash = "0.8"                          # High-performance hashing

# Memory management and alignment
aligned-vec = "0.5"                    # Aligned memory for O_DIRECT
hugepage-rs = "0.4"                    # Huge page support
numa = "0.2"                           # NUMA awareness
page_size = "0.5"                      # Page size detection

# Cryptography (hardware accelerated)
ring = "0.17"                          # Hardware-accelerated crypto
aes-gcm = "0.10"                       # AES-GCM encryption
ed25519-dalek = "2.0"                  # Digital signatures
x25519-dalek = "2.0"                   # Key exchange
sha2 = "0.10"                          # SHA hashing
blake3 = "1.5"                         # BLAKE3 hashing

# Compression
lz4 = "1.24"                           # LZ4 compression
zstd = "0.12"                          # Zstandard compression
snap = "1.1"                           # Snappy compression

# Observability and metrics
tracing = "0.1"                        # Structured logging
tracing-subscriber = "0.3"             # Log formatting
tracing-opentelemetry = "0.21"         # OpenTelemetry integration
opentelemetry = "0.20"                 # Distributed tracing
opentelemetry-jaeger = "0.19"          # Jaeger exporter
metrics = "0.21"                       # Metrics collection
prometheus = "0.13"                    # Prometheus metrics

# Machine learning and optimization
candle-core = "0.3"                    # ML framework
candle-nn = "0.3"                      # Neural networks
ndarray = "0.15"                       # N-dimensional arrays
nalgebra = "0.32"                      # Linear algebra

# Container integration
bollard = "0.14"                       # Docker API
k8s-openapi = "0.20"                   # Kubernetes API
kube = "0.87"                          # Kubernetes client

# Filesystem interface
fuser = "0.14"                         # FUSE filesystem
selinux = "0.4"                        # SELinux integration

# Configuration and CLI
clap = { version = "4.4", features = ["derive"] }
config = "0.13"                        # Configuration management
toml = "0.8"                          # TOML parsing
uuid = { version = "1.6", features = ["v4", "serde"] }
chrono = { version = "0.4", features = ["serde"] }
humantime = "2.1"                      # Human-readable time
byte-unit = "4.0"                      # Byte size parsing

# Error handling and utilities
anyhow = "1.0"                         # Error handling
thiserror = "1.0"                      # Error derivation
once_cell = "1.19"                     # Global state
parking_lot = "0.12"                   # High-performance synchronization
crossbeam = "0.8"                      # Lock-free data structures
dashmap = "5.5"                        # Concurrent hash map
rayon = "1.8"                          # Data parallelism

# Reed-Solomon erasure coding
reed-solomon-erasure = "6.0"           # Erasure coding implementation
reed-solomon-simd = "2.1"              # SIMD-accelerated erasure coding

# Development and testing
criterion = { version = "0.5", features = ["html_reports"] }
proptest = "1.4"                       # Property-based testing
mockall = "0.12"                       # Mocking framework
tempfile = "3.8"                       # Temporary files
wiremock = "0.5"                       # HTTP mocking

# Hardware acceleration detection
cpuid = "0.1"                          # CPU feature detection
is-x86-feature-detected = "0.1"        # x86 feature detection

πŸ”§ Implementation Plan

Phase 1: Core Multi-Device Storage Engine (Months 1-3)

1.1 Linux-Optimized Device Management

  • Device Discovery: Scan /dev/ and /sys/block/ for available storage devices
  • Device Claiming: Implement exclusive O_DIRECT access with flock() and device locking
  • Multi-Device Coordination: Coordinate access across hundreds of devices per node
  • Device Health Monitoring: SMART data collection and predictive failure detection
  • Huge Page Support: Use 2MB/1GB pages for large volume buffers
  • NUMA Optimization: Bind threads and memory to specific NUMA nodes for device locality
// Device management for absurdly large volumes
pub struct MultiDeviceManager {
    // Up to 1000+ devices per node
    claimed_devices: HashMap<DeviceId, ClaimedDevice>,
    device_health: HashMap<DeviceId, HealthMonitor>,
    numa_topology: NumaTopology,
    device_to_numa: HashMap<DeviceId, NumaNode>,
}

impl MultiDeviceManager {
    pub async fn claim_devices_for_volume(
        &mut self,
        target_capacity: u64,
        performance_requirements: &PerformanceSpec
    ) -> Result<Vec<DeviceId>> {
        // Intelligently select devices across NUMA domains
        let candidate_devices = self.discover_available_devices().await?;
        let selected_devices = self.optimize_device_selection(
            &candidate_devices,
            target_capacity,
            performance_requirements
        ).await?;
        
        // Claim devices with proper locking
        for device_id in &selected_devices {
            self.claim_device_exclusive(*device_id).await?;
        }
        
        Ok(selected_devices)
    }
}

1.2 io_uring-Based High-Performance I/O

  • Multi-Ring Architecture: Separate io_uring per device for maximum parallelism
  • Batch Operations: Batch up to 256 operations per submission for efficiency
  • Zero-Copy I/O: Direct memory mapping with proper page alignment
  • Advanced io_uring Features: Use IORING_FEAT_FAST_POLL and IORING_FEAT_NODROP
  • Buffer Pools: Pre-allocated, aligned buffers with huge page backing
  • CPU Affinity: Pin I/O threads to CPUs close to device NUMA domains

1.3 Chunk-Based Storage Engine

  • Large Chunk Support: 64MB - 1GB chunks for efficient large volume management
  • Chunk Striping: Stripe chunks across multiple devices within same node
  • Cross-Node Striping: Stripe chunks across multiple nodes for massive volumes
  • Metadata Optimization: Efficient chunk metadata storage for millions of chunks
  • Write-Ahead Logging: Per-device WAL with batch commits for atomicity
  • Checksumming: Hardware-accelerated CRC32C or BLAKE3 for chunk integrity

Phase 2: Distributed Multi-Device Architecture (Months 2-4)

2.1 Cluster-Wide Device Coordination

  • Global Device Registry: Centralized registry of all devices across all nodes
  • Cross-Node Volume Creation: Coordinate volume creation across hundreds of nodes
  • Device Failure Handling: Automatic device replacement and data reconstruction
  • Load Balancing: Distribute chunks optimally across available devices
  • Capacity Management: Track used/available capacity across entire cluster
  • Performance Monitoring: Real-time IOPS/throughput tracking per device

2.2 Large Volume Replication

  • Multi-Node Replication: Replicate chunks across multiple nodes automatically
  • Erasure Coding: Reed-Solomon coding (4+2, 8+4, 16+4) for space efficiency
  • RDMA Replication: Use InfiniBand/RoCE for sub-microsecond replication
  • Quorum Management: Flexible quorum for different consistency requirements
  • Partial Failure Recovery: Reconstruct failed chunks from remaining replicas
  • Cross-Datacenter Replication: WAN-optimized replication for disaster recovery

2.3 Volume Topology Management

  • Chunk Placement Engine: ML-optimized placement across devices and nodes
  • Failure Domain Awareness: Avoid placing replicas in same failure domains
  • Hot/Cold Data Tiering: Automatic migration between NVMe/SSD/HDD tiers
  • Geographic Distribution: Place data across regions for compliance/latency
  • Dynamic Rebalancing: Automatically rebalance as cluster grows/shrinks
  • Topology Visualization: Visual representation of volume distribution

Phase 3: Massive Volume Management (Months 3-5)

3.1 Volume Operations at Scale

  • Petabyte+ Volume Creation: Handle volumes larger than individual nodes
  • Online Volume Expansion: Grow volumes across additional devices/nodes
  • Volume Snapshots: Efficient snapshots of massive multi-device volumes
  • Volume Cloning: Copy-on-write clones of large distributed volumes
  • Volume Migration: Move volumes between storage classes and locations
  • Volume Compaction: Reclaim space from deleted data
// Example: Creating a 100TB volume across 20 nodes
pub async fn create_massive_volume(
    volume_spec: VolumeSpec {
        size: 100 * 1024 * 1024 * 1024 * 1024u64, // 100TB
        chunk_size: 1024 * 1024 * 1024,           // 1GB chunks
        replication_factor: 3,
        erasure_coding: Some(ErasureCodingConfig { 
            data_blocks: 8, 
            parity_blocks: 4 
        }),
        placement_policy: PlacementPolicy::MaximumDistribution {
            prefer_local_node: false,
            max_chunks_per_device: 1000,
            max_chunks_per_node: 5000,
        },
    }
) -> Result<VolumeId>;

3.2 Performance Optimization for Large Volumes

  • Intelligent Prefetching: Predict access patterns for sequential workloads
  • Multi-Level Caching: Memory β†’ NVMe β†’ SSD β†’ HDD cache hierarchy
  • QoS Enforcement: Guarantee IOPS/bandwidth for critical large volumes
  • Load Distribution: Balance I/O across all devices in volume
  • Thermal Management: Move hot data to faster storage automatically
  • Performance Analytics: Detailed performance analysis for optimization

3.3 Advanced Storage Features

  • Deduplication: Block-level deduplication across large volumes
  • Compression: Transparent compression with hardware acceleration
  • Encryption: Per-chunk encryption with hardware AES acceleration
  • Backup Integration: Incremental backups of massive volumes
  • Disaster Recovery: Cross-region replication and failover
  • Compliance: Data residency and retention policy enforcement

Phase 4: High-Performance Interfaces (Months 4-6)

4.1 Ultra-High Performance Block API

  • Native Block Interface: Direct block access for databases and high-performance apps
  • Async/Await Support: Full async support with proper backpressure handling
  • Batch Operations: Submit thousands of operations in single API call
  • Direct Memory Access: Zero-copy operations with user-provided buffers
  • Multi-Queue Support: Multiple submission queues per volume for parallelism
  • Real-Time Metrics: Sub-millisecond latency and IOPS reporting

4.2 Optimized FUSE Filesystem

  • High-Performance FUSE: Optimized FUSE with kernel caching and batching
  • Large File Support: Efficiently handle files larger than individual nodes
  • Distributed Locking: Cluster-aware file locking across nodes
  • Memory Mapping: Support mmap() for large files distributed across cluster
  • Extended Attributes: Custom metadata storage per file
  • Security Integration: SELinux/AppArmor policy enforcement

4.3 S3-Compatible Object Storage

  • S3 API Compliance: Full S3 REST API compatibility
  • Large Object Support: Handle objects up to petabytes in size
  • Multipart Upload: Parallel uploads for massive objects
  • Object Lifecycle: Automatic tiering and archival policies
  • Cross-Region Replication: Automatic object replication across regions
  • Access Control: S3-compatible ACLs and bucket policies

4.4 Container Storage Interface (CSI)

  • CSI 1.6+ Compliance: Full Kubernetes and OmniCloud integration
  • Dynamic Provisioning: Automatic volume creation from storage classes
  • Topology Awareness: Zone and region-aware volume placement
  • Volume Expansion: Online resize of mounted volumes
  • Volume Snapshots: Point-in-time snapshots through CSI
  • Raw Block Volumes: Block device access for containerized databases

Phase 5: Enterprise Features (Months 5-7)

5.1 Advanced Security

  • Hardware Security Modules: Integration with HSMs for key management
  • Per-Volume Encryption: Individual encryption keys per volume
  • Key Rotation: Automatic encryption key rotation without downtime
  • Zero-Knowledge Encryption: Client-side encryption with customer keys
  • Audit Logging: Comprehensive security audit trails
  • Compliance Frameworks: SOC 2, FIPS 140-2, Common Criteria support

5.2 Enterprise Management

  • Multi-Tenancy: Complete tenant isolation with resource quotas
  • RBAC System: Fine-grained role-based access control
  • Identity Integration: OAuth2, OIDC, LDAP/AD integration
  • Usage Monitoring: Detailed usage tracking and billing support
  • SLA Management: Service level agreement compliance and reporting
  • Capacity Planning: Predictive analytics for capacity requirements

5.3 Operational Excellence

  • Health Monitoring: Comprehensive cluster health monitoring
  • Predictive Maintenance: ML-based failure prediction and prevention
  • Automated Recovery: Self-healing from various failure scenarios
  • Performance Optimization: Automatic performance tuning and optimization
  • Troubleshooting Tools: Advanced diagnostics and log analysis
  • Documentation: Comprehensive operational runbooks and guides

πŸ“‹ Detailed Requirements

Functional Requirements

Massive Volume Support

  • Volume Size Limits:

    • Minimum volume size: 1MB (for testing)
    • Maximum volume size: 1 Exabyte (1,000,000 TB) per volume
    • Support for volumes spanning 1000+ devices across 100+ nodes
    • Automatic distribution across available storage capacity
    • Dynamic growth without service interruption
  • Multi-Device Coordination:

    • Support up to 10,000 devices per cluster node
    • Coordinate I/O across hundreds of devices simultaneously
    • Automatic device discovery and integration
    • Device failure detection and automatic replacement
    • Hot device addition/removal without downtime
  • Cross-Node Volume Distribution:

    • Volumes can span unlimited number of cluster nodes
    • Intelligent chunk placement based on network topology
    • Automatic load balancing across nodes and devices
    • Node failure handling with data reconstruction
    • Cross-datacenter volume distribution support

Performance Requirements

Throughput Specifications
  • Per-Node Performance (Linux-optimized):

    • Sequential Read: >20 GB/s per node (with NVMe arrays)
    • Sequential Write: >10 GB/s per node (with replication)
    • Random Read (4KB): >2M IOPS per node (memory-backed)
    • Random Write (4KB): >1M IOPS per node (with journaling)
    • Multi-device aggregation: Linear scaling across devices
    • NUMA-optimized: <10% performance penalty across NUMA domains
  • Cluster-Wide Performance:

    • Aggregate Throughput: >2 TB/s across 100-node cluster
    • Volume Performance: Aggregate performance from all devices in volume
    • Linear Scaling: >95% efficiency when adding devices/nodes to volumes
    • Cross-Node I/O: <30% latency penalty for remote device access
    • Network Utilization: >90% of available network bandwidth for replication
    • Storage Utilization: >95% of raw device capacity
Latency Requirements
  • Linux-Optimized Latency:
    • Memory-resident data: <5ΞΌs p99 latency (NUMA-local)
    • Local NVMe access: <25ΞΌs p99 latency (io_uring optimized)
    • Local SSD access: <50ΞΌs p99 latency
    • Remote device access: <200ΞΌs p99 latency within datacenter
    • Metadata operations: <500ΞΌs p99 for volume operations
    • Cross-node replication: <1ms p99 with RDMA networking
Scalability Targets
  • Extreme Scale Support:
    • Node Count: Support 10,000+ storage nodes per cluster
    • Volume Count: Support 1M+ volumes per cluster
    • Device Count: Support 10M+ devices across entire cluster
    • Chunk Count: Support 1B+ chunks across all volumes
    • Concurrent Operations: >1M concurrent I/O operations cluster-wide
    • Metadata Scale: Handle metadata for exabyte-scale deployments

Data Durability and Consistency

Replication and Erasure Coding
  • Multi-Level Protection:
    • Configurable replication: 1-16 replicas per chunk
    • Reed-Solomon erasure coding: 4+2, 8+4, 16+4, custom configurations
    • Cross-node replication: Automatic placement across failure domains
    • Cross-datacenter replication: WAN-optimized with bandwidth management
    • Hybrid protection: Combine replication and erasure coding for optimal efficiency
    • Self-healing: Automatic reconstruction of failed replicas/parity blocks
Data Integrity
  • End-to-End Protection:
    • Hardware-accelerated checksums: CRC32C, BLAKE3 with CPU instruction sets
    • Silent corruption detection: Automatic verification during reads
    • Scrubbing operations: Periodic integrity verification of all data
    • Bit-rot protection: Regular checking and automatic repair
    • Data verification: Cryptographic verification of critical metadata
    • Repair automation: Automatic reconstruction from remaining good copies
Consistency Models
  • Flexible Consistency:
    • Strong consistency: Synchronous replication with quorum requirements
    • Eventual consistency: Asynchronous replication for performance
    • Read-after-write: Immediate consistency for single-client access
    • Causal consistency: Ordered operations within single session
    • Configurable quorum: Flexible R/W/N quorum settings per volume
    • Conflict resolution: Automatic resolution of concurrent write conflicts

Linux-Specific Optimizations

Kernel Integration
  • Advanced I/O Features:
    • io_uring integration: Latest io_uring features and optimizations
    • Direct I/O: Bypass page cache with O_DIRECT for maximum performance
    • Asynchronous I/O: Non-blocking I/O operations with completion queues
    • Batch operations: Submit hundreds of operations in single syscall
    • Memory mapping: Large file support with mmap() and huge pages
    • CPU affinity: Pin I/O threads to appropriate CPU cores
Memory Management
  • Optimized Memory Usage:
    • Huge page support: Use 2MB/1GB pages for large buffers
    • NUMA awareness: Allocate memory local to device NUMA domains
    • Buffer pools: Pre-allocated, aligned buffers for zero-copy I/O
    • Memory locking: Lock critical pages in memory to prevent swapping
    • Copy avoidance: Zero-copy operations wherever possible
    • Memory pressure handling: Graceful degradation under memory pressure
Network Optimization
  • High-Performance Networking:
    • RDMA support: InfiniBand/RoCE for ultra-low latency replication
    • Kernel bypass: DPDK integration for userspace networking
    • TCP optimizations: SO_REUSEPORT, TCP_NODELAY, optimized buffer sizes
    • Network batching: Batch network operations for efficiency
    • CPU offload: Use hardware offload features where available
    • Network NUMA: Bind network threads to appropriate NUMA domains

Security Requirements

Encryption
  • Hardware-Accelerated Security:
    • AES-NI acceleration: Use CPU AES instructions for encryption/decryption
    • Per-volume encryption: Individual encryption keys per volume
    • Per-chunk encryption: Granular encryption at chunk level
    • Key management: Hardware Security Module (HSM) integration
    • Key rotation: Automatic key rotation without service interruption
    • Zero-knowledge: Client-side encryption with customer-managed keys
Access Control
  • Enterprise Security:
    • Multi-tenant isolation: Complete separation between tenants
    • RBAC system: Role-based access control with fine-grained permissions
    • Identity integration: OAuth2, OIDC, LDAP/AD authentication
    • Audit logging: Comprehensive audit trail of all operations
    • Network security: mTLS for all inter-service communication
    • Container security: Integration with container runtime security
Compliance
  • Regulatory Compliance:
    • SOC 2 Type II: Service organization control compliance
    • FIPS 140-2: Federal cryptographic module standards
    • Common Criteria: International security evaluation standards
    • GDPR compliance: Data protection regulation compliance
    • Data residency: Geographic data location controls
    • Retention policies: Automated data lifecycle management

Operational Requirements

Deployment
  • Linux Container Deployment:
    • Docker containers: Multi-architecture container images (x86_64, ARM64)
    • systemd integration: Native systemd service files and management
    • Container orchestration: Kubernetes, Docker Swarm, OmniCloud integration
    • Bare metal: Optimized bare metal deployment scripts
    • Cloud platforms: AWS, Azure, GCP marketplace images
    • Package management: DEB/RPM packages for major Linux distributions
Monitoring and Observability
  • Comprehensive Monitoring:
    • Prometheus metrics: Detailed metrics export for monitoring
    • OpenTelemetry tracing: Distributed request tracing
    • Performance profiling: CPU, memory, I/O performance analysis
    • Health checking: Automated health verification and alerting
    • Log aggregation: Structured logging with multiple output formats
    • Capacity planning: Predictive analytics for capacity management
High Availability
  • Enterprise Availability:
    • 99.999% uptime: Five nines availability SLA
    • Zero-downtime upgrades: Rolling updates without service interruption
    • Automatic failover: Sub-second failover for active workloads
    • Disaster recovery: Cross-region replication and automated failover
    • Split-brain prevention: Network partition handling and recovery
    • Chaos engineering: Automated failure injection and recovery testing

Integration Requirements

OmniCloud Platform Integration
  • Native Platform Integration:
    • OmniCloud Orchestrator: Deep integration with container orchestration
    • Volume provisioning: Dynamic volume creation and lifecycle management
    • Resource management: Integration with OmniCloud resource quotas and policies
    • Multi-tenancy: Native tenant isolation and resource allocation
    • Policy enforcement: Integration with OmniCloud governance and compliance
    • Monitoring integration: Native integration with OmniCloud observability
Container Runtime Integration
  • Container Storage Interface (CSI):
    • CSI 1.6+ compliance: Latest CSI specification support
    • Dynamic provisioning: Automatic volume creation from storage classes
    • Volume expansion: Online volume resize for running containers
    • Volume snapshots: Point-in-time snapshots through CSI
    • Topology awareness: Zone and region-aware volume placement
    • Raw block volumes: Block device access for containerized databases
API Compatibility
  • Multi-Protocol Support:
    • Native gRPC API: High-performance binary protocol
    • S3-compatible API: Amazon S3 REST API compatibility
    • Block storage API: Raw block device access protocol
    • File storage API: POSIX-compliant filesystem interface
    • WebDAV support: Web-based file access protocol
    • CLI interface: Comprehensive command-line management tool

Quality Requirements

Reliability and Availability
  • Enterprise-Grade Reliability:

    • System Uptime: 99.999% (5 nines) availability SLA with <5 minutes downtime per year
    • Data Durability: 99.999999999% (11 nines) with Reed-Solomon erasure coding
    • Mean Time to Recovery (MTTR): <30 seconds for node failures, <5 minutes for datacenter failures
    • Mean Time Between Failures (MTBF): >1 year for individual volumes under normal conditions
    • Planned Downtime: Zero-downtime for all maintenance operations including upgrades
    • Error Rates: <0.0001% error rate for storage operations under normal load
  • Fault Tolerance Capabilities:

    • Simultaneous Failures: Survive failure of up to 50% of cluster nodes
    • Device Failures: Automatic recovery from multiple device failures per node
    • Network Partitions: Graceful handling of network splits with automatic recovery
    • Cascading Failure Prevention: Circuit breakers and bulkheads to prevent failure propagation
    • Silent Corruption Protection: Detect and repair silent data corruption automatically
    • Byzantine Fault Tolerance: Handle arbitrary failures in distributed consensus
Performance Consistency
  • Predictable Performance:

    • Latency Consistency: <2x variance in p99 latency under normal operations
    • Throughput Stability: <10% throughput variance under sustained load
    • QoS Enforcement: Hard guarantees for IOPS, bandwidth, and latency limits
    • Performance Isolation: Complete isolation between tenants and workloads
    • Tail Latency: <5ms p99.9 latency for critical operations
    • Jitter Control: <100ΞΌs jitter for time-sensitive applications
  • Load Handling Capabilities:

    • Burst Performance: Handle 10x normal load for up to 5 minutes
    • Graceful Degradation: Maintain core functionality under extreme load
    • Fair Scheduling: Prevent any single workload from monopolizing resources
    • Priority Queuing: Honor priority levels for critical vs. batch workloads
    • Backpressure Handling: Proper backpressure propagation to prevent cascade failures
    • Auto-scaling: Automatic resource scaling based on demand patterns
Resource Efficiency
  • Storage Efficiency:

    • Space Utilization: >95% storage utilization with intelligent placement
    • Compression Ratios: >3:1 compression for typical enterprise workloads
    • Deduplication: >5:1 space savings for redundant data across volumes
    • Erasure Coding Efficiency: <1.5x storage overhead with 8+4 erasure coding
    • Thin Provisioning: Dynamic allocation with <1% waste from over-provisioning
    • Garbage Collection: Automatic space reclamation with <5% overhead
  • Compute Efficiency:

    • CPU Overhead: <5% CPU overhead for storage operations under normal load
    • Memory Efficiency: <2GB RAM per TB of managed storage
    • Network Efficiency: <15% network overhead for replication traffic
    • Power Efficiency: <30W per TB for complete storage solution
    • Cache Efficiency: >90% cache hit rate for hot data access patterns
    • Resource Scaling: Linear resource usage scaling with data size
Data Consistency and Integrity
  • Strong Consistency Guarantees:

    • Metadata Consistency: Strong consistency for all metadata operations
    • Read Consistency: Read-your-writes consistency within single session
    • Cross-Region Consistency: Eventual consistency with bounded staleness (<1 second)
    • Transaction Support: ACID transactions for multi-block operations
    • Conflict Resolution: Automatic resolution of concurrent write conflicts
    • Consistency Verification: Automated consistency checking and repair
  • Data Integrity Assurance:

    • Checksum Coverage: End-to-end checksums for 100% of stored data
    • Corruption Detection: Real-time detection of data corruption during access
    • Automatic Repair: Self-healing from checksum mismatches and corruption
    • Verification Frequency: Complete data verification at least monthly
    • Error Reporting: Detailed error reporting and alerting for data issues
    • Recovery Success Rate: >99.9% successful recovery from detected corruption

πŸ§ͺ Testing and Validation Strategy

Comprehensive Test Suite

  • Unit Tests: >90% code coverage for all core components
  • Integration Tests: End-to-end testing of multi-device volume operations
  • Performance Tests: Automated regression testing for throughput and latency
  • Scalability Tests: Testing with 1000+ devices and 100+ nodes
  • Failure Tests: Comprehensive failure injection and recovery testing
  • Security Tests: Penetration testing and security vulnerability scanning

Chaos Engineering

  • Automated Chaos Testing:
    • Random device failures during high load
    • Network partitions and recovery testing
    • Memory pressure and resource exhaustion testing
    • Clock skew and time synchronization issues
    • Hardware failure simulation (disk, memory, CPU)
    • Datacenter-level failure scenarios

Performance Benchmarking

  • Industry Standard Benchmarks:
    • FIO benchmark suite with various I/O patterns
    • YCSB for database-like workloads
    • Custom large-volume benchmarks for multi-device scenarios
    • Network throughput testing with iperf3 and custom tools
    • Latency testing with histogram analysis
    • Sustained performance testing over 72+ hours

Real-World Validation

  • Production-Like Testing:
    • Deploy on bare metal with hundreds of real devices
    • Test with actual enterprise workloads (databases, file servers, etc.)
    • Multi-tenant testing with competing workloads
    • Cross-datacenter replication testing with real WAN conditions
    • Disaster recovery drills with actual failover scenarios
    • Performance validation under various Linux kernel versions

🎯 Success Criteria

Performance Benchmarks

  • Single Node Performance (Linux-optimized):

    • Achieve >20 GB/s sequential throughput with NVMe array
    • Sustain >2M random IOPS with memory-backed storage
    • Maintain <25ΞΌs p99 latency for local NVMe access
    • Scale linearly across 1000+ devices per node
    • Demonstrate <5% CPU overhead under full load
  • Multi-Device Volume Performance:

    • Create 100TB volume across 20 nodes in <60 seconds
    • Achieve aggregate >500 GB/s throughput across large volume
    • Maintain consistent performance as volume spans more devices
    • Demonstrate <2x latency penalty for cross-node access
    • Support >1M IOPS across distributed volume
  • Cluster-Wide Performance:

    • Scale to 1000+ nodes with linear performance scaling
    • Manage 1M+ volumes across entire cluster
    • Support 1B+ chunks with efficient metadata operations
    • Achieve >90% network utilization for replication traffic
    • Maintain <1ms p99 latency for metadata operations

Reliability Benchmarks

  • Data Durability:

    • Achieve 11 nines (99.999999999%) data durability
    • Survive multiple simultaneous node failures
    • Automatically recover from device failures within 30 seconds
    • Maintain service availability during rolling upgrades
    • Pass 72-hour continuous operation tests without failures
  • Fault Tolerance:

    • Handle network partitions gracefully with automatic recovery
    • Survive datacenter-level failures with <5 minute RTO
    • Detect and repair silent data corruption automatically
    • Prevent cascading failures through proper isolation
    • Maintain consistency during concurrent failures

Scalability Benchmarks

  • Extreme Scale Testing:
    • Deploy 1000+ node test cluster
    • Create petabyte-scale volumes across hundreds of nodes
    • Manage millions of volumes and billions of chunks
    • Demonstrate linear cost scaling with capacity growth
    • Validate performance at exabyte-scale simulations

πŸ“Š Success Metrics

Quantitative Metrics

  • Performance: Achieve 2x better performance than Ceph in equivalent configurations
  • Efficiency: Use 50% less CPU and memory overhead compared to existing solutions
  • Scalability: Support 10x larger volumes than current enterprise storage solutions
  • Reliability: Achieve 99.999% uptime in production deployments
  • Resource Usage: Maintain <5% CPU overhead and <2GB RAM per TB

Qualitative Goals

  • Operational Simplicity: Reduce storage management complexity by 80%
  • Developer Experience: Enable storage provisioning in <5 minutes vs. hours
  • Troubleshooting: Provide clear diagnostics and automated problem resolution
  • Documentation: Comprehensive guides for deployment, operation, and troubleshooting
  • Community Adoption: Gain adoption by major enterprises and cloud providers

πŸš€ Delivery Timeline

Milestone 1: Core Storage Engine

  • Multi-device raw storage management
  • Linux-optimized I/O with io_uring
  • Basic chunk management and allocation
  • Single-node volume operations
  • Device health monitoring and failure detection

Milestone 2: Distributed Architecture

  • Multi-node cluster formation and consensus
  • Cross-node volume distribution
  • Replication and erasure coding
  • Network-optimized data transfer
  • Basic failure recovery mechanisms

Milestone 3: Large Volume Support

  • Petabyte+ volume creation and management
  • Intelligent chunk placement across nodes
  • Hot/cold data tiering
  • Performance optimization for large volumes
  • Advanced failure recovery and reconstruction

Milestone 4: Enterprise Features

  • Complete security implementation
  • Multi-tenancy and resource quotas
  • Comprehensive monitoring and alerting
  • Production deployment tools
  • Performance optimization and tuning

Milestone 5: Production Readiness

  • Comprehensive testing and validation
  • Performance benchmarking vs. competitors
  • Documentation and operational guides
  • Customer pilot deployments
  • Community release and adoption

Note The specific file structure here is a guide only and does not need to be followed

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions