github.com/kubeshop/testkube@v1.17.23/pkg/triggers/lease.go (about) 1 package triggers 2 3 import ( 4 "context" 5 "time" 6 ) 7 8 func (s *Service) runLeaseChecker(ctx context.Context, leaseChan chan<- bool) { 9 ticker := time.NewTicker(s.leaseCheckInterval) 10 s.logger.Debugf("trigger service: starting lease checker") 11 12 s.logger.Info("trigger service: waiting for lease") 13 14 // check for lease immediately on startup instead of waiting for first ticker iteration 15 s.leaseCheckerIteration(ctx, leaseChan) 16 17 for { 18 select { 19 case <-ctx.Done(): 20 s.logger.Infof("trigger service: stopping lease checker component") 21 return 22 case <-ticker.C: 23 s.leaseCheckerIteration(ctx, leaseChan) 24 } 25 } 26 } 27 28 func (s *Service) leaseCheckerIteration(ctx context.Context, leaseChan chan<- bool) { 29 leased, err := s.leaseBackend.TryAcquire(ctx, s.identifier, s.clusterID) 30 if err != nil { 31 s.logger.Errorf("error checking and setting lease: %v", err) 32 } 33 leaseChan <- leased 34 } 35 36 type Lease struct { 37 Identifier string `bson:"identifier"` 38 ClusterID string `bson:"cluster_id"` 39 AcquiredAt time.Time `bson:"acquired_at"` 40 RenewedAt time.Time `bson:"renewed_at"` 41 } 42 43 func NewLease(identifier, clusterID string) *Lease { 44 return &Lease{ 45 Identifier: identifier, 46 ClusterID: clusterID, 47 AcquiredAt: time.Now(), 48 RenewedAt: time.Now(), 49 } 50 }