feat(watchdog): quarantine escalates to ask_owner; reinstate/retire resolve fail-safe (#45)
This commit is contained in:
1 parent
bf4844c010
commit
720352c45b
6 files changed
+207
-23
No files matched your search
@@ -142,6 +142,32 @@ func (s *NestStore) Create(name string, crows []string) (Nest, error) {
|
||||
return copyNest(n), nil
|
||||
}
|
||||
|
||||
// RemoveCrow takes one crow out of a nest's membership (the owner's retire
|
||||
// call, #45). An unknown nest or a crow that is not a member is a no-op: the
|
||||
// removal is idempotent.
|
||||
func (s *NestStore) RemoveCrow(nestID, crow string) error {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
for i := range s.made {
|
||||
if s.made[i].ID != nestID {
|
||||
continue
|
||||
}
|
||||
j := slices.Index(s.made[i].Crows, crow)
|
||||
if j < 0 {
|
||||
return nil
|
||||
}
|
||||
old := s.made[i].Crows
|
||||
rest := slices.Clone(old)
|
||||
s.made[i].Crows = slices.Delete(rest, j, j+1)
|
||||
if err := s.save(); err != nil {
|
||||
s.made[i].Crows = old
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// save writes atomically, like the ledger. The caller holds s.mu.
|
||||
func (s *NestStore) save() error {
|
||||
data, err := json.MarshalIndent(s.made, "", " ")
|
||||
|
||||
Reference in new issue
Block a user