From f26df6a98389b8ba94b2dbb3e20c74575cae96d1 Mon Sep 17 00:00:00 2001 From: markturansky Date: Thu, 16 Apr 2015 13:50:56 -0400 Subject: [PATCH] renamed exported symbol for pvOrderedIndex, added locks, remove go routine for sync funcs --- .../persistent_volume_claim_binder.go | 5 ++++- pkg/volumeclaimbinder/types.go | 17 ++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/pkg/volumeclaimbinder/persistent_volume_claim_binder.go b/pkg/volumeclaimbinder/persistent_volume_claim_binder.go index c98831e370..e55ca6ed89 100644 --- a/pkg/volumeclaimbinder/persistent_volume_claim_binder.go +++ b/pkg/volumeclaimbinder/persistent_volume_claim_binder.go @@ -117,6 +117,9 @@ func (controller *PersistentVolumeClaimBinder) syncPersistentVolume(obj interfac } func (controller *PersistentVolumeClaimBinder) syncPersistentVolumeClaim(obj interface{}) error { + controller.lock.Lock() + defer controller.lock.Unlock() + claim := obj.(*api.PersistentVolumeClaim) glog.V(5).Infof("Synchronizing PersistentVolumeClaim[%s]\n", claim.Name) @@ -218,7 +221,7 @@ func (controller *PersistentVolumeClaimBinder) reconcile(synchronizers ...Synchr wg := sync.WaitGroup{} wg.Add(len(items)) for ix := range items { - go func(ix int) { + func(ix int) { defer wg.Done() obj := items[ix] glog.V(5).Infof("Reconciliation of %v", obj) diff --git a/pkg/volumeclaimbinder/types.go b/pkg/volumeclaimbinder/types.go index ee4c141279..2ffd53dcc1 100644 --- a/pkg/volumeclaimbinder/types.go +++ b/pkg/volumeclaimbinder/types.go @@ -49,14 +49,14 @@ func accessModesIndexFunc(obj interface{}) (string, error) { } // ListByAccessModes returns all volumes with the given set of AccessModeTypes *in order* of their storage capacity (low to high) -func (pvstore *persistentVolumeOrderedIndex) ListByAccessModes(modes []api.AccessModeType) ([]*api.PersistentVolume, error) { +func (pvIndex *persistentVolumeOrderedIndex) ListByAccessModes(modes []api.AccessModeType) ([]*api.PersistentVolume, error) { pv := &api.PersistentVolume{ Spec: api.PersistentVolumeSpec{ AccessModes: modes, }, } - objs, err := pvstore.Index("accessmodes", pv) + objs, err := pvIndex.Index("accessmodes", pv) if err != nil { return nil, err } @@ -74,8 +74,8 @@ func (pvstore *persistentVolumeOrderedIndex) ListByAccessModes(modes []api.Acces type matchPredicate func(compareThis, toThis *api.PersistentVolume) bool // Find returns the nearest PV from the ordered list or nil if a match is not found -func (pvstore *persistentVolumeOrderedIndex) Find(pv *api.PersistentVolume, matchPredicate matchPredicate) (*api.PersistentVolume, error) { - volumes, err := pvstore.ListByAccessModes(pv.Spec.AccessModes) +func (pvIndex *persistentVolumeOrderedIndex) Find(pv *api.PersistentVolume, matchPredicate matchPredicate) (*api.PersistentVolume, error) { + volumes, err := pvIndex.ListByAccessModes(pv.Spec.AccessModes) if err != nil { return nil, err } @@ -88,7 +88,7 @@ func (pvstore *persistentVolumeOrderedIndex) Find(pv *api.PersistentVolume, matc } // FindByAccessModesAndStorageCapacity is a convenience method that calls Find w/ requisite matchPredicate for storage -func (pvstore *persistentVolumeOrderedIndex) FindByAccessModesAndStorageCapacity(modes []api.AccessModeType, qty resource.Quantity) (*api.PersistentVolume, error) { +func (pvIndex *persistentVolumeOrderedIndex) FindByAccessModesAndStorageCapacity(modes []api.AccessModeType, qty resource.Quantity) (*api.PersistentVolume, error) { pv := &api.PersistentVolume{ Spec: api.PersistentVolumeSpec{ AccessModes: modes, @@ -98,12 +98,12 @@ func (pvstore *persistentVolumeOrderedIndex) FindByAccessModesAndStorageCapacity }, } - return pvstore.Find(pv, filterBoundVolumes) + return pvIndex.Find(pv, filterBoundVolumes) } // FindBestMatchForClaim is a convenience method that finds a volume by the claim's AccessModes and requests for Storage -func (pvstore *persistentVolumeOrderedIndex) FindBestMatchForClaim(claim *api.PersistentVolumeClaim) (*api.PersistentVolume, error) { - return pvstore.FindByAccessModesAndStorageCapacity(claim.Spec.AccessModes, claim.Spec.Resources.Requests[api.ResourceName(api.ResourceStorage)]) +func (pvIndex *persistentVolumeOrderedIndex) FindBestMatchForClaim(claim *api.PersistentVolumeClaim) (*api.PersistentVolume, error) { + return pvIndex.FindByAccessModesAndStorageCapacity(claim.Spec.AccessModes, claim.Spec.Resources.Requests[api.ResourceName(api.ResourceStorage)]) } // byCapacity is used to order volumes by ascending storage size @@ -125,7 +125,6 @@ func (c byCapacity) Len() int { // matchStorageCapacity is a matchPredicate used to sort and find volumes func matchStorageCapacity(pvA, pvB *api.PersistentVolume) bool { - // skip already claimed volumes if pvA.Spec.ClaimRef != nil { return false