Files
seaweedfs/sw-block/runtime/protocolv2/identity.go
T
pingqiuandClaude Opus 4.6 b8c6944e3f feat: V2 MVP milestone — masterv2 + volumev2 + in-process failover
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>
2026-04-05 13:08:02 -07:00

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
}