fix: 修复应用日志异常膨胀

This commit is contained in:
ryan
2026-06-21 10:21:18 +08:00
parent a343c7a605
commit b12a9b0185
12 changed files with 358 additions and 53 deletions
+6 -5
View File
@@ -95,12 +95,13 @@ func (m *Manager) GetCurrentConfigChecksum() string {
}
// UpdateConfig reconciles running frpc processes with the latest tunnel configuration.
func (m *Manager) UpdateConfig(ctx context.Context, newConfig *service.FlaredTunnelConfigResponse) error {
// The returned bool indicates whether the active config version or checksum changed.
func (m *Manager) UpdateConfig(ctx context.Context, newConfig *service.FlaredTunnelConfigResponse) (bool, error) {
m.mu.Lock()
defer m.mu.Unlock()
if newConfig == nil {
return nil
return false, nil
}
versionChanged := newConfig.Version != m.currentVersion || newConfig.Checksum != m.currentChecksum
@@ -111,7 +112,7 @@ func (m *Manager) UpdateConfig(ctx context.Context, newConfig *service.FlaredTun
}
if err := os.MkdirAll(m.cfg.DataDir, dataDirPerm); err != nil {
return fmt.Errorf("create data dir failed: %w", err)
return false, fmt.Errorf("create data dir failed: %w", err)
}
activeRelays := make(map[string]struct{})
@@ -155,9 +156,9 @@ func (m *Manager) UpdateConfig(ctx context.Context, newConfig *service.FlaredTun
if versionChanged {
m.currentVersion = newConfig.Version
m.currentChecksum = newConfig.Checksum
return m.saveState()
return true, m.saveState()
}
return nil
return false, nil
}
func (m *Manager) restartProcess(ctx context.Context, relayID string, configPath string) {
+6 -6
View File
@@ -119,7 +119,7 @@ func TestStartProcessSuccess(t *testing.T) {
Proxies: nil,
}
err := m.UpdateConfig(context.Background(), newConfig)
_, err := m.UpdateConfig(context.Background(), newConfig)
if err != nil {
t.Fatalf("failed to UpdateConfig: %v", err)
}
@@ -160,7 +160,7 @@ func TestStartProcessFailureAndBackoff(t *testing.T) {
Proxies: nil,
}
_ = m.UpdateConfig(context.Background(), newConfig)
_, _ = m.UpdateConfig(context.Background(), newConfig)
assertStatusEventually(t, m, "relay-1", "error", 4*time.Second)
@@ -208,7 +208,7 @@ func TestUnexpectedExit0CPUProtection(t *testing.T) {
Proxies: nil,
}
_ = m.UpdateConfig(context.Background(), newConfig)
_, _ = m.UpdateConfig(context.Background(), newConfig)
assertStatusEventually(t, m, "relay-1", "stopped", 4*time.Second)
@@ -249,7 +249,7 @@ func TestBackoffReset(t *testing.T) {
Proxies: nil,
}
_ = m.UpdateConfig(context.Background(), newConfig)
_, _ = m.UpdateConfig(context.Background(), newConfig)
// Wait to crash
assertStatusEventually(t, m, "relay-1", "error", 4*time.Second)
@@ -323,7 +323,7 @@ func TestUpdateConfigKillsOrphanProcessBeforeRestart(t *testing.T) {
},
}
if err := m.UpdateConfig(context.Background(), newConfig); err != nil {
if _, err := m.UpdateConfig(context.Background(), newConfig); err != nil {
t.Fatalf("failed to UpdateConfig: %v", err)
}
@@ -361,7 +361,7 @@ func TestStopCancelsRunningProcesses(t *testing.T) {
},
}
if err := m.UpdateConfig(context.Background(), newConfig); err != nil {
if _, err := m.UpdateConfig(context.Background(), newConfig); err != nil {
t.Fatalf("failed to UpdateConfig: %v", err)
}
+14 -9
View File
@@ -68,19 +68,24 @@ func (s *Service) doSync(ctx context.Context) {
// 不在 sync 层做版本早退,由 frpcManager.UpdateConfig 负责判断。
// 原因:重启后进程全部消失,即使版本/checksum 未变,仍需重新拉起 frpc 进程。
err = s.frpcManager.UpdateConfig(ctx, configResp)
result := "success"
message := "apply success"
configChanged, err := s.frpcManager.UpdateConfig(ctx, configResp)
if err != nil {
result = "failed"
message = err.Error()
slog.Error("failed to apply tunnel config", "error", err)
} else {
slog.Info("tunnel config applied successfully", "version", configResp.Version)
s.reportApplyLog(ctx, configResp, "failed", err.Error())
return
}
if configChanged {
slog.Info("tunnel config applied successfully", "version", configResp.Version)
s.reportApplyLog(ctx, configResp, "success", "apply success")
return
}
slog.Debug("tunnel config unchanged, skipping apply log report", "version", configResp.Version)
}
// Report apply log
func (s *Service) reportApplyLog(ctx context.Context, configResp *service.FlaredTunnelConfigResponse, result string, message string) {
if configResp == nil {
return
}
logPayload := service.ApplyLogPayload{
Version: configResp.Version,
Result: result,