Skip to content

Commit

Permalink
cloudcommon: policy: fix interval and oneshot sync
Browse files Browse the repository at this point in the history
Reduce CPU utilization caused by queued time.AfterFunc calls
  • Loading branch information
yousong committed Jun 21, 2020
1 parent 28e83a3 commit aeba29c
Showing 1 changed file with 25 additions and 13 deletions.
38 changes: 25 additions & 13 deletions pkg/cloudcommon/policy/policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"sort"
"strings"
"sync"
"sync/atomic"
"time"

"yunion.io/x/jsonutils"
Expand Down Expand Up @@ -191,11 +192,33 @@ func (manager *SPolicyManager) start(refreshInterval time.Duration, retryInterva

manager.cache = hashcache.NewCache(2048, manager.refreshInterval/2)

manager.SyncOnce()
manager.syncByInterval()
}

func (manager *SPolicyManager) syncByInterval() {
syncWorkerManager.Run(manager.syncByInterval_, nil, nil)
}

func (manager *SPolicyManager) syncByInterval_() {
err := manager.doSync()
var interval time.Duration
if err != nil {
interval = manager.failedRetryInterval
} else {
interval = manager.refreshInterval
}
time.AfterFunc(interval, manager.syncByInterval)
}

var syncOnce int32

func (manager *SPolicyManager) SyncOnce() {
syncWorkerManager.Run(manager.sync, nil, nil)
if atomic.CompareAndSwapInt32(&syncOnce, 0, 1) {
syncWorkerManager.Run(func() {
atomic.StoreInt32(&syncOnce, 0)
manager.doSync()
}, nil, nil)
}
}

func (manager *SPolicyManager) doSync() error {
Expand Down Expand Up @@ -223,17 +246,6 @@ func (manager *SPolicyManager) doSync() error {
return nil
}

func (manager *SPolicyManager) sync() {
err := manager.doSync()
var interval time.Duration
if err != nil {
interval = manager.failedRetryInterval
} else {
interval = manager.refreshInterval
}
time.AfterFunc(interval, manager.SyncOnce)
}

func queryKey(scope rbacutils.TRbacScope, userCred mcclient.TokenCredential, service string, resource string, action string, extra ...string) string {
queryKeys := []string{string(scope)}
queryKeys = append(queryKeys, userCred.GetProjectId(), userCred.GetDomainId(), userCred.GetUserId())
Expand Down

0 comments on commit aeba29c

Please sign in to comment.