From a0ea5fb76b213595ab0fd9510264210e6d10300d Mon Sep 17 00:00:00 2001 From: TangBin Date: Wed, 5 Dec 2018 16:09:25 +0800 Subject: [PATCH] sku sync add limit & offset --- pkg/compute/skus/skus.go | 39 ++++++++++++++++++++------------ pkg/mcclient/modules/mod_skus.go | 4 ++-- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/pkg/compute/skus/skus.go b/pkg/compute/skus/skus.go index 823d1fd3bc..6276e0a813 100644 --- a/pkg/compute/skus/skus.go +++ b/pkg/compute/skus/skus.go @@ -103,32 +103,41 @@ func processSkuData(ndata jsonutils.JSONObject) jsonutils.JSONObject { func (self *SkusZone) Init() error { s := auth.GetAdminSession(options.Options.Region, "") p, r, z := self.getExternalZone() - - ret, e := modules.CloudmetaSkus.GetSkus(s, p, r, z) - if e != nil { - log.Debugf("SkusZone %s init failed, %s", z, e.Error()) - return e - } + limit := 1024 + offset := 0 + total := 1024 records := map[string]jsonutils.JSONObject{} - for _, sku := range ret.Data { - name, err := sku.GetString("name") - if err != nil { - log.Debugf("SkusZone sku name empty : %s", sku) - return err + for offset < total { + ret, e := modules.CloudmetaSkus.GetSkus(s, p, r, z, limit, offset) + if e != nil { + log.Debugf("SkusZone %s init failed, %s", z, e.Error()) + return e } - if odata, exists := records[name]; exists { - records[name] = mergeSkuData(odata, sku) - } else { - records[name] = processSkuData(sku) + for _, sku := range ret.Data { + name, err := sku.GetString("name") + if err != nil { + log.Debugf("SkusZone sku name empty : %s", sku) + return err + } + + if odata, exists := records[name]; exists { + records[name] = mergeSkuData(odata, sku) + } else { + records[name] = processSkuData(sku) + } } + + offset += limit + total = ret.Total } filtedData := []jsonutils.JSONObject{} for _, item := range records { filtedData = append(filtedData, item) } + self.total = len(records) self.skus = filtedData return nil diff --git a/pkg/mcclient/modules/mod_skus.go b/pkg/mcclient/modules/mod_skus.go index 7f3064e0ce..eac5cb8ebd 100644 --- a/pkg/mcclient/modules/mod_skus.go +++ b/pkg/mcclient/modules/mod_skus.go @@ -37,11 +37,11 @@ func init() { registerCompute(&ServerSkus) } -func (self *SkusManager) GetSkus(s *mcclient.ClientSession, providerId, regionId, zoneId string) (*ListResult, error) { +func (self *SkusManager) GetSkus(s *mcclient.ClientSession, providerId, regionId, zoneId string, limit, offset int) (*ListResult, error) { p := strings.ToLower(providerId) r := strings.ToLower(regionId) z := strings.ToLower(zoneId) - url := fmt.Sprintf("/providers/%s/regions/%s/zones/%s/skus", p, r, z) + url := fmt.Sprintf("/providers/%s/regions/%s/zones/%s/skus?limit=%d&offset=%d", p, r, z, limit, offset) ret, err := self._list(s, url, self.KeywordPlural) if err != nil { return &ListResult{}, err