diff --git a/rpc-pool.go b/rpc-pool.go index ed43092..6a509b1 100644 --- a/rpc-pool.go +++ b/rpc-pool.go @@ -114,22 +114,22 @@ func (p *RemoteGrainPool) findRemoteGrain(id CartId) *RemoteGrain { return grain } -// func (p *RemoteGrainPool) findOrCreateGrain(id CartId) *RemoteGrain { -// grain := p.findRemoteGrain(id) -// if grain == nil { -// grain = NewRemoteGrain(id, p.Host) -// p.mu.Lock() -// p.grains[id] = grain -// p.mu.Unlock() -// grain.Connect() -// } -// return grain -// } +func (p *RemoteGrainPool) findOrCreateGrain(id CartId) *RemoteGrain { + grain := p.findRemoteGrain(id) + if grain == nil { + grain = NewRemoteGrain(id, p.Host) + p.mu.Lock() + p.grains[id] = grain + p.mu.Unlock() + grain.Connect() + } + return grain +} func (p *RemoteGrainPool) Process(id CartId, messages ...Message) ([]byte, error) { var result []byte var err error - grain := p.findRemoteGrain(id) + grain := p.findOrCreateGrain(id) if grain == nil { return nil, fmt.Errorf("grain not found") } @@ -140,7 +140,7 @@ func (p *RemoteGrainPool) Process(id CartId, messages ...Message) ([]byte, error } func (p *RemoteGrainPool) Get(id CartId) ([]byte, error) { - grain := p.findRemoteGrain(id) + grain := p.findOrCreateGrain(id) if grain == nil { return nil, fmt.Errorf("grain not found") }