diff --git a/pkg/compute/models/cloudproviders.go b/pkg/compute/models/cloudproviders.go index a7b93a8ab7..bb1abad82f 100644 --- a/pkg/compute/models/cloudproviders.go +++ b/pkg/compute/models/cloudproviders.go @@ -8,14 +8,14 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" - "yunion.io/x/onecloud/pkg/httperrors" - "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/pkg/util/timeutils" "yunion.io/x/pkg/utils" "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/cloudprovider" + "yunion.io/x/onecloud/pkg/httperrors" + "yunion.io/x/onecloud/pkg/mcclient" ) const ( @@ -71,6 +71,18 @@ func (self *SCloudprovider) ValidateDeleteCondition(ctx context.Context) error { return self.SEnabledStatusStandaloneResourceBase.ValidateDeleteCondition(ctx) } +func (self *SCloudprovider) CleanSchedCache() { + hosts := []SHost{} + q := HostManager.Query().Equals("manager_id", self.Id) + if err := db.FetchModelObjects(HostManager, q, &hosts); err != nil { + log.Errorf("failed to get hosts for cloudprovider %s error: %v", self.Name, err) + return + } + for _, host := range hosts { + host.ClearSchedDescCache() + } +} + func (self *SCloudprovider) GetGuestCount() int { sq := HostManager.Query("id").Equals("manager_id", self.Id) return GuestManager.Query().In("host_id", sq).Count() diff --git a/pkg/compute/tasks/cloud_provider_sync_info_task.go b/pkg/compute/tasks/cloud_provider_sync_info_task.go index 0a17233daf..73e5cf6664 100644 --- a/pkg/compute/tasks/cloud_provider_sync_info_task.go +++ b/pkg/compute/tasks/cloud_provider_sync_info_task.go @@ -80,6 +80,7 @@ func (self *CloudProviderSyncInfoTask) OnInit(ctx context.Context, obj db.IStand } provider.SetStatus(self.UserCred, models.CLOUD_PROVIDER_CONNECTED, "") + provider.CleanSchedCache() self.SetStageComplete(ctx, nil) logclient.AddActionLog(provider, getAction(self.Params), body, self.UserCred, true) }