Make replication controller synchronizations independent.

pull/6/head
Brendan Burns 2014-07-24 21:55:56 -07:00
parent cb28f25b1b
commit ae0baf3fab
2 changed files with 18 additions and 5 deletions

View File

@ -19,6 +19,7 @@ package controller
import (
"encoding/json"
"fmt"
"sync"
"time"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
@ -203,10 +204,16 @@ func (rm *ReplicationManager) synchronize() {
glog.Errorf("Synchronization error: %v (%#v)", err, err)
return
}
for _, controllerSpec := range controllerSpecs {
err = rm.syncHandler(controllerSpec)
if err != nil {
glog.Errorf("Error synchronizing: %#v", err)
}
wg := sync.WaitGroup{}
wg.Add(len(controllerSpecs))
for ix := range controllerSpecs {
go func(ix int) {
defer wg.Done()
err := rm.syncHandler(controllerSpecs[ix])
if err != nil {
glog.Errorf("Error synchronizing: %#v", err)
}
}(ix)
}
wg.Wait()
}

View File

@ -21,6 +21,7 @@ import (
"fmt"
"net/http/httptest"
"reflect"
"sync"
"testing"
"time"
@ -41,13 +42,18 @@ func makeURL(suffix string) string {
type FakePodControl struct {
controllerSpec []api.ReplicationController
deletePodID []string
lock sync.Mutex
}
func (f *FakePodControl) createReplica(spec api.ReplicationController) {
f.lock.Lock()
defer f.lock.Unlock()
f.controllerSpec = append(f.controllerSpec, spec)
}
func (f *FakePodControl) deletePod(podID string) error {
f.lock.Lock()
defer f.lock.Unlock()
f.deletePodID = append(f.deletePodID, podID)
return nil
}