Skip to content

Commit

Permalink
Fix double announce/denounce/implicit withdrawals (#29)
Browse files Browse the repository at this point in the history
Signed-off-by: Igor Shishkin <me@teran.dev>
  • Loading branch information
teran authored Jun 5, 2024
1 parent 356c2b7 commit a7709ca
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 7 deletions.
22 changes: 17 additions & 5 deletions service/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package service

import (
"context"
"sync/atomic"
"time"

"github.com/pkg/errors"
Expand All @@ -21,6 +22,8 @@ type service struct {
checks []checkers.Checker
interval time.Duration
metrics Metrics

announced *atomic.Bool
}

func New(
Expand All @@ -36,6 +39,7 @@ func New(
checks: checks,
interval: interval,
metrics: metrics,
announced: &atomic.Bool{},
}
}

Expand All @@ -59,19 +63,27 @@ func (s *service) run(ctx context.Context) error {

s.metrics.ServiceDown(s.name)

if err := s.announcer.Denounce(ctx); err != nil {
log.Warnf("denounce failed: %s", err)
return nil
if s.announced.Load() {
if err := s.announcer.Denounce(ctx); err != nil {
log.Warnf("denounce failed: %s", err)
return nil
}
s.announced.Store(false)
}
return nil
}
}

s.metrics.ServiceUp(s.name)

if err := s.announcer.Announce(ctx); err != nil {
log.Warnf("announce failed: %s", err)
if !s.announced.Load() {
if err := s.announcer.Announce(ctx); err != nil {
log.Warnf("announce failed: %s", err)
return nil
}
}

s.announced.Store(true)

return nil
}
2 changes: 0 additions & 2 deletions service/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@ func (s *serviceTestSuite) TestRunPass() {
}

func (s *serviceTestSuite) TestRunFail() {
s.announcerM.On("Denounce").Return(nil).Once()

s.checkM.On("Check").Return(errors.New("error")).Once()

s.metricsM.On("ServiceDown", "test_service").Return().Once()
Expand Down

0 comments on commit a7709ca

Please sign in to comment.