discovery stale records dropout implemented

This commit is contained in:
Stephan D
2026-02-27 18:07:42 +01:00
parent 077c510690
commit d47159278b
6 changed files with 202 additions and 19 deletions

View File

@@ -216,22 +216,35 @@ func (s *RegistryService) handleHeartbeat(_ context.Context, env me.Envelope) (e
s.logWarn("Failed to decode discovery heartbeat payload", fields...)
return err
}
s.logDebug("Discovery heartbeat received", append(envelopeFields(env), zap.String("id", payload.ID), zap.String("instance_id", payload.InstanceID), zap.String("status", payload.Status))...)
if strings.TrimSpace(payload.InstanceID) == "" && strings.TrimSpace(payload.ID) == "" {
entryKey := strings.TrimSpace(payload.EntryKey)
s.logDebug("Discovery heartbeat received", append(envelopeFields(env), zap.String("id", payload.ID), zap.String("instance_id", payload.InstanceID), zap.String("entry_key", entryKey), zap.String("status", payload.Status))...)
if entryKey == "" && strings.TrimSpace(payload.InstanceID) == "" && strings.TrimSpace(payload.ID) == "" {
return nil
}
if strings.TrimSpace(payload.InstanceID) == "" {
if entryKey == "" && strings.TrimSpace(payload.InstanceID) == "" {
fields := append(envelopeFields(env), zap.String("id", payload.ID))
s.logWarn("Discovery heartbeat missing instance id", fields...)
}
status := strings.TrimSpace(payload.Status)
ts := time.Unix(payload.TS, 0)
if ts.Unix() <= 0 {
ts = time.Now()
}
results := s.registry.UpdateHeartbeat(payload.ID, payload.InstanceID, strings.TrimSpace(payload.Status), ts, time.Now())
if len(results) == 0 {
s.logDebug("Discovery heartbeat ignored: entry not found", zap.String("id", payload.ID), zap.String("instance_id", payload.InstanceID))
return nil
now := time.Now()
var results []UpdateResult
if entryKey != "" {
result, found := s.registry.UpdateHeartbeatByKey(entryKey, status, ts, now)
if !found {
s.logDebug("Discovery heartbeat ignored: entry not found", zap.String("entry_key", entryKey), zap.String("id", payload.ID), zap.String("instance_id", payload.InstanceID))
return nil
}
results = append(results, result)
} else {
results = s.registry.UpdateHeartbeat(payload.ID, payload.InstanceID, status, ts, now)
if len(results) == 0 {
s.logDebug("Discovery heartbeat ignored: entry not found", zap.String("id", payload.ID), zap.String("instance_id", payload.InstanceID))
return nil
}
}
for _, result := range results {
if result.BecameHealthy {