mirror of
https://github.com/gravitational/teleport
synced 2024-10-21 01:34:01 +00:00
fix data race
This commit is contained in:
parent
b2ed270bb6
commit
6471bc32da
|
@ -44,7 +44,7 @@ import (
|
|||
// the local reverse tunnel server, and now it can provide access to the
|
||||
// cluster behind it.
|
||||
type remoteSite struct {
|
||||
sync.Mutex
|
||||
sync.RWMutex
|
||||
|
||||
*log.Entry
|
||||
domainName string
|
||||
|
@ -73,14 +73,14 @@ func (s *remoteSite) String() string {
|
|||
}
|
||||
|
||||
func (s *remoteSite) connectionCount() int {
|
||||
s.Lock()
|
||||
defer s.Unlock()
|
||||
s.RLock()
|
||||
defer s.RUnlock()
|
||||
return len(s.connections)
|
||||
}
|
||||
|
||||
func (s *remoteSite) hasValidConnections() bool {
|
||||
s.Lock()
|
||||
defer s.Unlock()
|
||||
s.RLock()
|
||||
defer s.RUnlock()
|
||||
|
||||
for _, conn := range s.connections {
|
||||
if !conn.isInvalid() {
|
||||
|
@ -156,10 +156,17 @@ func (s *remoteSite) GetStatus() string {
|
|||
return RemoteSiteStatusOffline
|
||||
}
|
||||
|
||||
func (s *remoteSite) copyConnInfo() services.TunnelConnection {
|
||||
s.RLock()
|
||||
defer s.RUnlock()
|
||||
return s.connInfo.Clone()
|
||||
}
|
||||
|
||||
func (s *remoteSite) registerHeartbeat(t time.Time) {
|
||||
s.connInfo.SetLastHeartbeat(t)
|
||||
s.connInfo.SetExpiry(s.clock.Now().Add(defaults.ReverseTunnelOfflineThreshold))
|
||||
err := s.srv.AccessPoint.UpsertTunnelConnection(s.connInfo)
|
||||
connInfo := s.copyConnInfo()
|
||||
connInfo.SetLastHeartbeat(t)
|
||||
connInfo.SetExpiry(s.clock.Now().Add(defaults.ReverseTunnelOfflineThreshold))
|
||||
err := s.srv.AccessPoint.UpsertTunnelConnection(connInfo)
|
||||
if err != nil {
|
||||
s.Warningf("failed to register heartbeat: %v", err)
|
||||
}
|
||||
|
|
|
@ -35,6 +35,8 @@ type TunnelConnection interface {
|
|||
CheckAndSetDefaults() error
|
||||
// String returns user friendly representation of this connection
|
||||
String() string
|
||||
// Clone returns a copy of this tunnel connection
|
||||
Clone() TunnelConnection
|
||||
}
|
||||
|
||||
// MustCreateTunnelConnection returns new connection from V2 spec or panics if
|
||||
|
@ -76,6 +78,12 @@ type TunnelConnectionV2 struct {
|
|||
Spec TunnelConnectionSpecV2 `json:"spec"`
|
||||
}
|
||||
|
||||
// Clone returns a copy of this tunnel connection
|
||||
func (r *TunnelConnectionV2) Clone() TunnelConnection {
|
||||
out := *r
|
||||
return &out
|
||||
}
|
||||
|
||||
// String returns user-friendly description of this connection
|
||||
func (r *TunnelConnectionV2) String() string {
|
||||
return fmt.Sprintf("TunnelConnection(name=%v, cluster=%v, proxy=%v)", r.Metadata.Name, r.Spec.ClusterName, r.Spec.ProxyName)
|
||||
|
|
Loading…
Reference in a new issue