mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-10-15 18:48:32 +02:00
feat(uds): add Store opcode, AppendRawNeedle, and SRA transport client
Volume replication groundwork (Phase 6 hardening plan): - UDS handler: Add Store opcode (0x02) with opcode-based dispatch, StoreRequest/StoreResponse wire types, and size validation - storage/store.go: AppendRawNeedle() for accepting pre-serialized needle bytes from RDMA replication path - storage/needle: Return raw bytes from needle Append() to enable forwarding exact .dat bytes without re-serialization - storage/sra_transport.go: UDS client for outbound RDMA replication (connects to /tmp/sra-transport.sock, nil-safe fallback to HTTP) - command/volume.go: Wire -uds.transport flag - Integration test for Store opcode round-trip - Golden wire tests for Store request/response encoding Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
5e03b045aa
commit
ec49e5a28f
9 files changed
+803
-35
No files matched your search
@@ -153,6 +153,7 @@ func init() {
|
||||
serverOptions.v.inflightDownloadDataTimeout = cmdServer.Flag.Duration("volume.inflightDownloadDataTimeout", 60*time.Second, "inflight download data wait timeout of volume servers")
|
||||
|
||||
serverOptions.v.udsListen = cmdServer.Flag.String("volume.uds.listen", "", "Unix domain socket path for RDMA sidecar locate API (e.g., /tmp/sra-volume.sock)")
|
||||
serverOptions.v.udsTransport = cmdServer.Flag.String("volume.uds.transport", "", "Unix domain socket path for outbound RDMA replication (e.g., /tmp/sra-transport.sock)")
|
||||
|
||||
serverOptions.v.hasSlowRead = cmdServer.Flag.Bool("volume.hasSlowRead", true, "<experimental> if true, this prevents slow reads from blocking other requests, but large file read P99 latency will increase.")
|
||||
serverOptions.v.readBufferSizeMB = cmdServer.Flag.Int("volume.readBufferSizeMB", 4, "<experimental> larger values can optimize query performance but will increase some memory usage,Use with hasSlowRead normally")
|
||||
|
||||
@@ -75,6 +75,7 @@ type VolumeServerOptions struct {
|
||||
debug *bool
|
||||
debugPort *int
|
||||
udsListen *string // UDS socket path for RDMA sidecar integration
|
||||
udsTransport *string // UDS socket path for outbound RDMA replication
|
||||
}
|
||||
|
||||
func init() {
|
||||
@@ -116,6 +117,7 @@ func init() {
|
||||
v.debug = cmdVolume.Flag.Bool("debug", false, "serves runtime profiling data via pprof on the port specified by -debug.port")
|
||||
v.debugPort = cmdVolume.Flag.Int("debug.port", 6060, "http port for debugging")
|
||||
v.udsListen = cmdVolume.Flag.String("uds.listen", "", "Unix domain socket path for RDMA sidecar locate API (e.g., /tmp/sra-volume.sock)")
|
||||
v.udsTransport = cmdVolume.Flag.String("uds.transport", "", "Unix domain socket path for outbound RDMA replication (e.g., /tmp/sra-transport.sock)")
|
||||
}
|
||||
|
||||
var cmdVolume = &Command{
|
||||
@@ -302,6 +304,11 @@ func (v VolumeServerOptions) startVolumeServer(volumeFolders, maxVolumeCounts, v
|
||||
udsServer.Start()
|
||||
}
|
||||
|
||||
// set up outbound RDMA replication transport
|
||||
if *v.udsTransport != "" {
|
||||
volumeServer.SetSraTransport(storage.NewSraTransport(*v.udsTransport))
|
||||
}
|
||||
|
||||
// starting public http server
|
||||
var publicHttpDown httpdown.Server
|
||||
if v.isSeparatedPublicPort() {
|
||||
|
||||
Reference in new issue
Block a user