Pulse/internal/config
rcourtman 6ca4d9b750 Fix P1/P2 infrastructure issues: panic recovery and optimizations
This commit addresses 4 P1 important issues and 1 P2 optimization in infrastructure components:

**P1-1: Missing Panic Recovery in Discovery Service** (service.go:172-195, 499-542)
- **Problem**: No panic recovery in Start(), ForceRefresh(), SetSubnet() goroutines
- **Impact**: Silent service death if scan panics, broken discovery with no monitoring
- **Fix**:
  - Wrapped initial scan goroutine with defer/recover (lines 172-182)
  - Wrapped scanLoop goroutine with defer/recover (lines 185-195)
  - Wrapped ForceRefresh scan with defer/recover (lines 499-509)
  - Wrapped SetSubnet scan with defer/recover (lines 532-542)
  - All log panics with stack traces for debugging

**P1-2: Missing Panic Recovery in Config Watcher Callback** (watcher.go:546-556)
- **Problem**: User-provided onMockReload callback could panic and crash watcher
- **Impact**: Panicking callback kills watcher goroutine, no config updates
- **Fix**: Wrapped callback invocation with defer/recover and stack trace logging

**P1-3: Session Store Stop() Using Send Instead of Close** (session_store.go:16-84)
- **Problem**: Stop() used channel send which blocks if nobody reads
- **Impact**: Stop() hangs if backgroundWorker already exited
- **Fix**:
  - Added sync.Once field stopOnce (line 22)
  - Changed Stop() to use close() within stopOnce.Do() (lines 80-84)
  - Prevents double-close panic and ensures all readers are signaled

**P2-1: Backup Cleanup Inefficient O(n²) Sort** (persistence.go:1424-1427)
- **Problem**: Bubble sort used to sort backups by modification time
- **Impact**: Inefficient for large backup counts (>100 files)
- **Fix**:
  - Replaced bubble sort with sort.Slice() using O(n log n) algorithm
  - Added "sort" import (line 9)
  - Maintains same oldest-first ordering for deletion logic

All fixes add defensive programming without changing external behavior. Panic recovery ensures services continue operating even with bugs, while optimization reduces cleanup time for backup-heavy environments.
2025-11-07 09:55:22 +00:00
..
api_tokens.go feat: add native Windows service support and expandable host details 2025-10-23 22:11:56 +00:00
api_tokens_test.go Add API token scopes and standalone host agent 2025-10-23 11:40:31 +00:00
client_helpers.go Fix settings security tab navigation 2025-10-11 23:29:47 +00:00
config.go Add configurable SSH port for temperature monitoring 2025-11-05 20:03:29 +00:00
credentials.go Fix settings security tab navigation 2025-10-11 23:29:47 +00:00
docker_metadata.go Implement Docker metadata API endpoints 2025-10-28 22:56:53 +00:00
export.go feat: production-ready import/export with API tokens and transactional rollback 2025-10-21 14:37:44 +00:00
guest_metadata.go Fix VM migration issue where custom alert thresholds are lost 2025-11-06 10:27:15 +00:00
import_transaction.go feat: production-ready import/export with API tokens and transactional rollback 2025-10-21 14:37:44 +00:00
oidc.go Fix settings security tab navigation 2025-10-11 23:29:47 +00:00
persistence.go Fix P1/P2 infrastructure issues: panic recovery and optimizations 2025-11-07 09:55:22 +00:00
persistence_fail_test.go Harden setup token flow and enforce encrypted persistence 2025-10-25 16:00:37 +00:00
persistence_test.go Add API token scopes and standalone host agent 2025-10-23 11:40:31 +00:00
registration.go Fix settings security tab navigation 2025-10-11 23:29:47 +00:00
watcher.go Fix P1/P2 infrastructure issues: panic recovery and optimizations 2025-11-07 09:55:22 +00:00