Files
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

161 lines
4.8 KiB
Go

// Package ipc provides communication between Go sidecar and Rust RDMA engine
package ipc
import "time"
// IpcMessage represents the tagged union of all IPC messages
// This matches the Rust enum: #[serde(tag = "type", content = "data")]
type IpcMessage struct {
Type string `msgpack:"type"`
Data interface{} `msgpack:"data"`
}
// Request message types
const (
MsgStartRead = "StartRead"
MsgCompleteRead = "CompleteRead"
MsgGetCapabilities = "GetCapabilities"
MsgPing = "Ping"
)
// Response message types
const (
MsgStartReadResponse = "StartReadResponse"
MsgCompleteReadResponse = "CompleteReadResponse"
MsgGetCapabilitiesResponse = "GetCapabilitiesResponse"
MsgPong = "Pong"
MsgError = "Error"
)
// StartReadRequest corresponds to Rust StartReadRequest
type StartReadRequest struct {
VolumeID uint32 `msgpack:"volume_id"`
NeedleID uint64 `msgpack:"needle_id"`
Cookie uint32 `msgpack:"cookie"`
Offset uint64 `msgpack:"offset"`
Size uint64 `msgpack:"size"`
RemoteAddr uint64 `msgpack:"remote_addr"`
RemoteKey uint32 `msgpack:"remote_key"`
TimeoutSecs uint64 `msgpack:"timeout_secs"`
AuthToken *string `msgpack:"auth_token,omitempty"`
}
// StartReadResponse corresponds to Rust StartReadResponse
type StartReadResponse struct {
SessionID string `msgpack:"session_id"`
LocalAddr uint64 `msgpack:"local_addr"`
LocalKey uint32 `msgpack:"local_key"`
TransferSize uint64 `msgpack:"transfer_size"`
ExpectedCrc uint32 `msgpack:"expected_crc"`
ExpiresAtNs uint64 `msgpack:"expires_at_ns"`
}
// CompleteReadRequest corresponds to Rust CompleteReadRequest
type CompleteReadRequest struct {
SessionID string `msgpack:"session_id"`
Success bool `msgpack:"success"`
BytesTransferred uint64 `msgpack:"bytes_transferred"`
ClientCrc *uint32 `msgpack:"client_crc,omitempty"`
ErrorMessage *string `msgpack:"error_message,omitempty"`
}
// CompleteReadResponse corresponds to Rust CompleteReadResponse
type CompleteReadResponse struct {
Success bool `msgpack:"success"`
ServerCrc *uint32 `msgpack:"server_crc,omitempty"`
Message *string `msgpack:"message,omitempty"`
}
// GetCapabilitiesRequest corresponds to Rust GetCapabilitiesRequest
type GetCapabilitiesRequest struct {
ClientID *string `msgpack:"client_id,omitempty"`
}
// GetCapabilitiesResponse corresponds to Rust GetCapabilitiesResponse
type GetCapabilitiesResponse struct {
DeviceName string `msgpack:"device_name"`
VendorId uint32 `msgpack:"vendor_id"`
MaxTransferSize uint64 `msgpack:"max_transfer_size"`
MaxSessions usize `msgpack:"max_sessions"`
ActiveSessions usize `msgpack:"active_sessions"`
PortGid string `msgpack:"port_gid"`
PortLid uint16 `msgpack:"port_lid"`
SupportedAuth []string `msgpack:"supported_auth"`
Version string `msgpack:"version"`
RealRdma bool `msgpack:"real_rdma"`
}
// usize corresponds to Rust's usize type (platform dependent, but typically uint64 on 64-bit systems)
type usize uint64
// PingRequest corresponds to Rust PingRequest
type PingRequest struct {
TimestampNs uint64 `msgpack:"timestamp_ns"`
ClientID *string `msgpack:"client_id,omitempty"`
}
// PongResponse corresponds to Rust PongResponse
type PongResponse struct {
ClientTimestampNs uint64 `msgpack:"client_timestamp_ns"`
ServerTimestampNs uint64 `msgpack:"server_timestamp_ns"`
ServerRttNs uint64 `msgpack:"server_rtt_ns"`
}
// ErrorResponse corresponds to Rust ErrorResponse
type ErrorResponse struct {
Code string `msgpack:"code"`
Message string `msgpack:"message"`
Details *string `msgpack:"details,omitempty"`
}
// Helper functions for creating messages
func NewStartReadMessage(req *StartReadRequest) *IpcMessage {
return &IpcMessage{
Type: MsgStartRead,
Data: req,
}
}
func NewCompleteReadMessage(sessionID string, success bool, bytesTransferred uint64, clientCrc *uint32, errorMessage *string) *IpcMessage {
return &IpcMessage{
Type: MsgCompleteRead,
Data: &CompleteReadRequest{
SessionID: sessionID,
Success: success,
BytesTransferred: bytesTransferred,
ClientCrc: clientCrc,
ErrorMessage: errorMessage,
},
}
}
func NewGetCapabilitiesMessage(clientID *string) *IpcMessage {
return &IpcMessage{
Type: MsgGetCapabilities,
Data: &GetCapabilitiesRequest{
ClientID: clientID,
},
}
}
func NewPingMessage(clientID *string) *IpcMessage {
return &IpcMessage{
Type: MsgPing,
Data: &PingRequest{
TimestampNs: uint64(time.Now().UnixNano()),
ClientID: clientID,
},
}
}
func NewErrorMessage(code, message string, details *string) *IpcMessage {
return &IpcMessage{
Type: MsgError,
Data: &ErrorResponse{
Code: code,
Message: message,
Details: details,
},
}
}