fix: harden operations and configuration recovery

This commit is contained in:
proxyctl coordinator
2026-08-30 11:13:45 +08:00
parent e34bf7d989
commit 8928986830
27 changed files with 542 additions and 125 deletions
+13 -2
View File
@@ -323,8 +323,19 @@ func (a *Adapter) disable() error {
if metadata.OriginalScript != nil {
restored = []byte(*metadata.OriginalScript)
}
if err := a.writeOwned(a.configuration.EnvironmentFile, restored); err != nil {
return fmt.Errorf("restore Shell environment: %w", err)
current, err := a.files.ReadFile(a.configuration.EnvironmentFile)
if err != nil {
return fmt.Errorf("read managed Shell environment before restore: %w", err)
}
switch currentFingerprint := fingerprint(current); currentFingerprint {
case fingerprint(restored):
// A previous recovery completed the file write but not metadata cleanup.
case metadata.Fingerprint:
if err := a.writeOwned(a.configuration.EnvironmentFile, restored); err != nil {
return fmt.Errorf("restore Shell environment: %w", err)
}
default:
return errors.New("Shell environment changed after proxyctl applied it; refusing to overwrite current configuration or discard recovery metadata")
}
if err := a.files.Remove(a.configuration.RecoveryFile); err != nil && !errors.Is(err, fs.ErrNotExist) {
return fmt.Errorf("remove Shell recovery metadata after environment changed: %w", err)