From a2b08010e2ed397aabc0cb88e8f52a249b716d25 Mon Sep 17 00:00:00 2001 From: ioito Date: Tue, 20 Aug 2019 19:03:25 +0800 Subject: [PATCH] =?UTF-8?q?hotfix:=20=E9=81=BF=E5=85=8D=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E9=95=9C=E5=83=8F=E5=90=8E,=E5=86=8D=E6=AC=A1=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E9=95=9C=E5=83=8F=E5=88=97=E8=A1=A8=E5=9B=A0=E7=BD=91?= =?UTF-8?q?=E7=BB=9C=E5=8E=9F=E5=9B=A0=E5=AF=BC=E8=87=B4=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/guestdrivers/zstack.go | 2 ++ pkg/multicloud/zstack/zstack.go | 24 +++++++++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/pkg/compute/guestdrivers/zstack.go b/pkg/compute/guestdrivers/zstack.go index 7a300f15f5..47022658c3 100644 --- a/pkg/compute/guestdrivers/zstack.go +++ b/pkg/compute/guestdrivers/zstack.go @@ -44,6 +44,8 @@ func (self *SZStackGuestDriver) DoScheduleMemoryFilter() bool { return true } func (self *SZStackGuestDriver) DoScheduleSKUFilter() bool { return false } +func (self *SZStackGuestDriver) DoScheduleStorageFilter() bool { return true } + func (self *SZStackGuestDriver) GetHypervisor() string { return api.HYPERVISOR_ZSTACK } diff --git a/pkg/multicloud/zstack/zstack.go b/pkg/multicloud/zstack/zstack.go index 7f5e72a6e9..0f0ae6856c 100644 --- a/pkg/multicloud/zstack/zstack.go +++ b/pkg/multicloud/zstack/zstack.go @@ -316,14 +316,24 @@ func (cli *SZStackClient) _get(resource, resourceId string, spec string) (jsonut client := httputils.GetDefaultClient() header := http.Header{} requestURL := cli.getURL(resource, resourceId, spec) - err := cli.sign(requestURL, "GET", header) - if err != nil { - return nil, err - } - _, resp, err := httputils.JSONRequest(client, context.Background(), "GET", requestURL, header, nil, cli.debug) - if err != nil { - return nil, errors.Wrapf(err, fmt.Sprintf("GET %s %s %s", resource, resourceId, spec)) + var resp jsonutils.JSONObject + startTime := time.Now() + for time.Now().Sub(startTime) < time.Minute*5 { + err := cli.sign(requestURL, "GET", header) + if err != nil { + return nil, err + } + _, resp, err = httputils.JSONRequest(client, context.Background(), "GET", requestURL, header, nil, cli.debug) + if err != nil { + if strings.Contains(err.Error(), "exceeded while awaiting headers") { + time.Sleep(time.Second * 5) + continue + } + return nil, errors.Wrapf(err, fmt.Sprintf("GET %s %s %s", resource, resourceId, spec)) + } + break } + if resp.Contains("location") { location, _ := resp.GetString("location") return cli.wait(client, header, "get", requestURL, jsonutils.NewDict(), location)