mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-08-20 14:17:07 +00:00
V2 runtime packages: - sw-block/runtime/masterv2: identity authority (desired state, heartbeat handling, promotion arbitration via SelectPromotionCandidate) - sw-block/runtime/volumev2: per-volume micro-cluster shell (node, orchestrator, control session, iSCSI frontend, takeover gate, failover session + driver, replica summary reconstruction) - sw-block/runtime/purev2: RF1 execution shell (engine + store + dispatcher + local boundary observations) - sw-block/runtime/protocolv2: three-channel separation (heartbeat/assignment/query + replica summary) V2 binaries: - sw-block/cmd/v2singleblock: single-node RF1 block server - sw-block/cmd/purev2rf1: minimal RF1 runtime binary Milestone capabilities: - RF1 write/read/sync with engine-driven mode projection - masterv2 ↔ volumev2 heartbeat convergence + assignment reissue - Promotion query with fresh CommittedLSN/WALHeadLSN evidence - Replica summary for bounded takeover reconstruction - Primary-loss reconstruction from peer summaries (fail-closed gate) - In-process failover driver with session observability - Local boundary observations feed engine (Committed/Durable/Checkpoint) Design docs: - v2-two-loop-protocol.md: identity vs data-control separation - v2-automata-ownership-map.md: event/command ownership split - v2-loop1-surface-draft.md: heartbeat/query/assignment field spec - v2-volumev2-single-node-mvp.md: target layering - v2-kernel-closure-review.md: per-volume micro-cluster principle - v2-pure-runtime-rf1-bootstrap.md, v2-capability-map.md, v2-proof-and-retest-pyramid.md Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
69 lines
1.6 KiB
Go
69 lines
1.6 KiB
Go
package protocolv2
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/storage/blockvol"
|
|
)
|
|
|
|
// ReplicaMember identifies one replica in the low-frequency identity loop.
|
|
// It carries identity and transport only, never replication progress.
|
|
type ReplicaMember struct {
|
|
NodeID string
|
|
DataAddr string
|
|
CtrlAddr string
|
|
}
|
|
|
|
// Assignment is the Loop 1 assignment surface from masterv2 to volumev2.
|
|
type Assignment struct {
|
|
Name string
|
|
Path string
|
|
NodeID string
|
|
Epoch uint64
|
|
LeaseTTL time.Duration
|
|
CreateOptions blockvol.CreateOptions
|
|
Role string
|
|
ReplicaSet []ReplicaMember
|
|
}
|
|
|
|
// VolumeHeartbeat is the periodic identity-loop heartbeat surface.
|
|
// It stays small and carries only applied identity, compressed outward mode,
|
|
// and a passive committed-boundary cache.
|
|
type VolumeHeartbeat struct {
|
|
Name string
|
|
Path string
|
|
Epoch uint64
|
|
Role string
|
|
Mode string
|
|
ModeReason string
|
|
CommittedLSN uint64
|
|
RoleApplied bool
|
|
ReplicaReady bool
|
|
}
|
|
|
|
// NodeHeartbeat is the low-frequency periodic heartbeat from a volume node.
|
|
type NodeHeartbeat struct {
|
|
NodeID string
|
|
ReportedAt time.Time
|
|
Volumes []VolumeHeartbeat
|
|
}
|
|
|
|
// PromotionQueryRequest asks one candidate for fresh failover evidence.
|
|
type PromotionQueryRequest struct {
|
|
VolumeName string
|
|
ExpectedEpoch uint64
|
|
}
|
|
|
|
// PromotionQueryResponse returns fresh candidate evidence at query time.
|
|
type PromotionQueryResponse struct {
|
|
VolumeName string
|
|
NodeID string
|
|
Epoch uint64
|
|
Role string
|
|
CommittedLSN uint64
|
|
WALHeadLSN uint64
|
|
ReceiverReady bool
|
|
Eligible bool
|
|
Reason string
|
|
}
|