fix: make service control robust against partial service absence

This commit is contained in:
sagit
2026-02-08 04:17:10 +00:00
parent d5c0060cd9
commit a74eb9f431
2 changed files with 30 additions and 24 deletions
@@ -387,34 +387,31 @@ func (h *Handler) controlForwardServices(forward *forwardRecord, commandType str
nodeHandled := false
for _, base := range bases {
payload := map[string]interface{}{
"services": buildForwardControlServiceNames(base, commandType),
variants := []string{base + "_tcp", base + "_udp"}
if shouldTryLegacySingleService(commandType) || strings.EqualFold(strings.TrimSpace(commandType), "DeleteService") {
variants = append(variants, base)
}
_, err := h.sendNodeCommand(fp.NodeID, commandType, payload, false, false)
if err == nil {
candidateHandled := false
for _, name := range variants {
payload := map[string]interface{}{
"services": []string{name},
}
_, err := h.sendNodeCommand(fp.NodeID, commandType, payload, false, false)
if err == nil {
candidateHandled = true
continue
}
if !isNotFoundError(err) {
return err
}
lastNotFoundErr = err
}
if candidateHandled {
nodeHandled = true
break
}
if !isNotFoundError(err) {
return err
}
lastNotFoundErr = err
if shouldTryLegacySingleService(commandType) {
legacyPayload := map[string]interface{}{
"services": []string{base},
}
_, legacyErr := h.sendNodeCommand(fp.NodeID, commandType, legacyPayload, false, false)
if legacyErr == nil {
nodeHandled = true
break
}
if !isNotFoundError(legacyErr) {
return legacyErr
}
lastNotFoundErr = legacyErr
}
}
if nodeHandled {