Skip to content

Commit

Permalink
#461: fix concurrency locking
Browse files Browse the repository at this point in the history
  • Loading branch information
Charlotte Godley committed Jun 22, 2018
1 parent 9fbda94 commit d295e51
Showing 1 changed file with 18 additions and 12 deletions.
30 changes: 18 additions & 12 deletions cmd/dm/pkg/remotes/remotes.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,41 +73,41 @@ func (remote S3Remote) DefaultNamespace() string {
// TODO is there a less hacky way of doing this? hate the duplication, but otherwise you need to cast all over the place
func (remote DMRemote) SetDefaultRemoteVolumeFor(localNamespace, localVolume, remoteNamespace, remoteVolume string) {
if remote.DefaultRemoteVolumes == nil {
remote.DefaultRemoteVolumes = make(map[string]map[string]VolumeName)
remote.DefaultRemoteVolumes = map[string]map[string]VolumeName{}
}
if remote.DefaultRemoteVolumes[localNamespace] == nil {
remote.DefaultRemoteVolumes[localNamespace] = make(map[string]VolumeName)
remote.DefaultRemoteVolumes[localNamespace] = map[string]VolumeName{}
}
remote.DefaultRemoteVolumes[localNamespace][localVolume] = VolumeName{remoteNamespace, remoteVolume}
}

func (remote DMRemote) DefaultRemoteVolumeFor(localNamespace, localVolume string) (VolumeName, bool) {
if remote.DefaultRemoteVolumes == nil {
remote.DefaultRemoteVolumes = make(map[string]map[string]VolumeName)
remote.DefaultRemoteVolumes = map[string]map[string]VolumeName{}
}
if remote.DefaultRemoteVolumes[localNamespace] == nil {
remote.DefaultRemoteVolumes[localNamespace] = make(map[string]VolumeName)
remote.DefaultRemoteVolumes[localNamespace] = map[string]VolumeName{}
}
volName, ok := remote.DefaultRemoteVolumes[localNamespace][localVolume]
return volName, ok
}

func (remote S3Remote) SetDefaultRemoteVolumeFor(localNamespace, localVolume, remoteNamespace, remoteVolume string) {
if remote.DefaultRemoteVolumes == nil {
remote.DefaultRemoteVolumes = make(map[string]map[string]VolumeName)
remote.DefaultRemoteVolumes = map[string]map[string]VolumeName{}
}
if remote.DefaultRemoteVolumes[localNamespace] == nil {
remote.DefaultRemoteVolumes[localNamespace] = make(map[string]VolumeName)
remote.DefaultRemoteVolumes[localNamespace] = map[string]VolumeName{}
}
remote.DefaultRemoteVolumes[localNamespace][localVolume] = VolumeName{remoteNamespace, remoteVolume}
}

func (remote S3Remote) DefaultRemoteVolumeFor(localNamespace, localVolume string) (VolumeName, bool) {
if remote.DefaultRemoteVolumes == nil {
remote.DefaultRemoteVolumes = make(map[string]map[string]VolumeName)
remote.DefaultRemoteVolumes = map[string]map[string]VolumeName{}
}
if remote.DefaultRemoteVolumes[localNamespace] == nil {
remote.DefaultRemoteVolumes[localNamespace] = make(map[string]VolumeName)
remote.DefaultRemoteVolumes[localNamespace] = map[string]VolumeName{}
}
volName, ok := remote.DefaultRemoteVolumes[localNamespace][localVolume]
return volName, ok
Expand Down Expand Up @@ -179,21 +179,27 @@ func (c *Configuration) save() error {
return nil
}

func (c *Configuration) GetRemote(name string) (Remote, error) {
c.lock.Lock()
defer c.lock.Unlock()
func (c *Configuration) getRemote(name string) (Remote, error) {
var r Remote
var ok bool
fmt.Printf("Inside get remote")
r, ok = c.DMRemotes[name]
if !ok {
r, ok = c.S3Remotes[name]
fmt.Printf("%#v", r)
if !ok {
return nil, fmt.Errorf("Unable to find remote '%s'", name)
}
}
return r, nil
}

func (c *Configuration) GetRemote(name string) (Remote, error) {
c.lock.Lock()
defer c.lock.Unlock()
return c.getRemote(name)
}

// todo this should probably return interfaces and just make a map of all of them
func (c *Configuration) GetRemotes() map[string]*DMRemote {
c.lock.Lock()
Expand Down Expand Up @@ -262,7 +268,7 @@ func (c *Configuration) SetCurrentVolume(volume string) error {
func (c *Configuration) DefaultRemoteVolumeFor(peer, namespace, volume string) (string, string, bool) {
c.lock.Lock()
defer c.lock.Unlock()
remote, err := c.GetRemote(peer)
remote, err := c.getRemote(peer)
if err != nil {
// TODO should we return an error instead of bool? this is getting messy
return "", "", false
Expand Down

0 comments on commit d295e51

Please sign in to comment.