mirror of
https://github.com/hanzoai/s3.git
synced 2026-10-30 14:59:09 +00:00
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.
161 lines
4.8 KiB
Go
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,
|
|
},
|
|
}
|
|
}
|