balancing_override.go 882 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package router
  2. import (
  3. sync "sync"
  4. )
  5. func (r *Router) OverrideBalancer(balancer string, target string) error {
  6. var b *Balancer
  7. for tag, bl := range r.balancers {
  8. if tag == balancer {
  9. b = bl
  10. break
  11. }
  12. }
  13. if b == nil {
  14. return newError("balancer '", balancer, "' not found")
  15. }
  16. b.override.Put(target)
  17. return nil
  18. }
  19. type overrideSettings struct {
  20. target string
  21. }
  22. type override struct {
  23. access sync.RWMutex
  24. settings overrideSettings
  25. }
  26. // Get gets the override settings
  27. func (o *override) Get() string {
  28. o.access.RLock()
  29. defer o.access.RUnlock()
  30. return o.settings.target
  31. }
  32. // Put updates the override settings
  33. func (o *override) Put(target string) {
  34. o.access.Lock()
  35. defer o.access.Unlock()
  36. o.settings.target = target
  37. }
  38. // Clear clears the override settings
  39. func (o *override) Clear() {
  40. o.access.Lock()
  41. defer o.access.Unlock()
  42. o.settings.target = ""
  43. }