more locks
This commit is contained in:
@@ -69,6 +69,8 @@ func (p *SyncedPool) PongHandler(data *FrameWithPayload, resultChan chan<- Frame
|
||||
|
||||
func (p *SyncedPool) GetCartIdHandler(data *FrameWithPayload, resultChan chan<- FrameWithPayload) error {
|
||||
ids := make([]string, 0, len(p.local.grains))
|
||||
p.mu.RLock()
|
||||
defer p.mu.RUnlock()
|
||||
for id := range p.local.grains {
|
||||
if p.local.grains[id] == nil {
|
||||
continue
|
||||
@@ -140,29 +142,37 @@ func (p *SyncedPool) SpawnRemoteGrain(id CartId, host string) {
|
||||
log.Printf("Invalid grain id, %s", id)
|
||||
return
|
||||
}
|
||||
if p.local.grains[id] != nil {
|
||||
p.mu.RLock()
|
||||
localGrain, ok := p.local.grains[id]
|
||||
p.mu.RUnlock()
|
||||
|
||||
if ok && localGrain != nil {
|
||||
log.Printf("Grain %s already exists locally, owner is (%s)", id, host)
|
||||
p.mu.Lock()
|
||||
delete(p.local.grains, id)
|
||||
p.mu.Unlock()
|
||||
}
|
||||
|
||||
remote, err := NewRemoteGrain(id, host)
|
||||
if err != nil {
|
||||
log.Printf("Error creating remote grain %v", err)
|
||||
return
|
||||
}
|
||||
go func(i CartId, h string) {
|
||||
remote, err := NewRemoteGrain(i, h)
|
||||
if err != nil {
|
||||
log.Printf("Error creating remote grain %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
p.mu.Lock()
|
||||
p.remoteIndex[id] = remote
|
||||
p.mu.Unlock()
|
||||
p.mu.Lock()
|
||||
p.remoteIndex[i] = remote
|
||||
p.mu.Unlock()
|
||||
}(id, host)
|
||||
}
|
||||
|
||||
func (p *SyncedPool) HandleHostError(host string) {
|
||||
p.mu.RLock()
|
||||
defer p.mu.RUnlock()
|
||||
for _, r := range p.remotes {
|
||||
if r.Host == host {
|
||||
if !r.IsHealthy() {
|
||||
p.RemoveHost(r)
|
||||
go p.RemoveHost(r)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user