oc-discovery -> conf
This commit is contained in:
@@ -13,6 +13,26 @@ import (
|
||||
oclib "cloud.o-forge.io/core/oc-lib"
|
||||
)
|
||||
|
||||
// MemberEventType is the SWIM membership event classification.
|
||||
type MemberEventType string
|
||||
|
||||
const (
|
||||
MemberAlive MemberEventType = "alive"
|
||||
MemberSuspect MemberEventType = "suspect"
|
||||
MemberDead MemberEventType = "dead"
|
||||
)
|
||||
|
||||
// MemberEvent is a SWIM membership event piggybacked on heartbeats (infection-style).
|
||||
// HopsLeft starts at InitialEventHops and is decremented on each retransmission.
|
||||
// Receivers discard events whose HopsLeft reaches 0 instead of forwarding them further.
|
||||
// Deduplication by (PeerID, Incarnation): higher incarnation or higher-priority type wins.
|
||||
type MemberEvent struct {
|
||||
Type MemberEventType `json:"type"`
|
||||
PeerID string `json:"peer_id"`
|
||||
Incarnation uint64 `json:"incarnation"`
|
||||
HopsLeft int `json:"hops_left"`
|
||||
}
|
||||
|
||||
type Heartbeat struct {
|
||||
Name string `json:"name"`
|
||||
Stream *Stream `json:"stream"`
|
||||
@@ -39,6 +59,13 @@ type Heartbeat struct {
|
||||
// Only one indexer per node receives Referent=true at a time (the best-scored one).
|
||||
// The indexer stores the node in its referencedNodes for distributed search.
|
||||
Referent bool `json:"referent,omitempty"`
|
||||
// SuspectedIncarnation is set when this node currently suspects the target indexer.
|
||||
// If the value matches the indexer's own incarnation, the indexer increments its
|
||||
// incarnation and replies with the new value — this is the SWIM refutation signal.
|
||||
SuspectedIncarnation *uint64 `json:"suspected_incarnation,omitempty"`
|
||||
// MembershipEvents carries SWIM events piggybacked on this heartbeat.
|
||||
// Events are forwarded infection-style until HopsLeft reaches 0.
|
||||
MembershipEvents []MemberEvent `json:"membership_events,omitempty"`
|
||||
}
|
||||
|
||||
// SearchPeerRequest is sent by a node to an indexer via ProtocolSearchPeer.
|
||||
@@ -104,6 +131,13 @@ type HeartbeatResponse struct {
|
||||
// Seeds: node de-stickies this indexer once it has MinIndexer non-seed alternatives.
|
||||
// Non-seeds: node removes this indexer immediately if it has enough alternatives.
|
||||
SuggestMigrate bool `json:"suggest_migrate,omitempty"`
|
||||
// Incarnation is this indexer's current SWIM incarnation number.
|
||||
// It is incremented whenever the indexer refutes a suspicion signal.
|
||||
// The node tracks this to detect explicit refutations and to clear suspect state.
|
||||
Incarnation uint64 `json:"incarnation,omitempty"`
|
||||
// MembershipEvents carries SWIM events piggybacked on this response.
|
||||
// The node should forward them to its other indexers (infection-style).
|
||||
MembershipEvents []MemberEvent `json:"membership_events,omitempty"`
|
||||
}
|
||||
|
||||
// ComputeIndexerScore computes a composite quality score [0, 100] for the connecting peer.
|
||||
|
||||
Reference in New Issue
Block a user