mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
feat(region): sync CapacityUsed for Storage
This commit is contained in:
@@ -758,6 +758,58 @@ func (self *SStorage) syncRemoveCloudStorage(ctx context.Context, userCred mccli
|
||||
return err
|
||||
}
|
||||
|
||||
var CapacityUsedCloudStorageProvider = []string{
|
||||
api.CLOUD_PROVIDER_VMWARE,
|
||||
}
|
||||
|
||||
func (sm *SStorageManager) SyncCapacityUsedForStorage(ctx context.Context, userCred mcclient.TokenCredential, isStart bool) {
|
||||
cpSubQ := CloudproviderManager.Query("id").In("provider", CapacityUsedCloudStorageProvider).SubQuery()
|
||||
sQ := sm.Query()
|
||||
sQ = sQ.Join(cpSubQ, sqlchemy.Equals(sQ.Field("manager_id"), cpSubQ.Field("id")))
|
||||
storages := make([]SStorage, 0, 5)
|
||||
err := db.FetchModelObjects(sm, sQ, &storages)
|
||||
if err != nil {
|
||||
log.Errorf("unable to fetch storages with sql %q: %v", sQ.String(), err)
|
||||
}
|
||||
for i := range storages {
|
||||
err := storages[i].SyncCapacityUsed(ctx)
|
||||
if err != nil {
|
||||
log.Errorf("unable to sync CapacityUsed for storage %q: %v", storages[i].Id, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *SStorage) SyncCapacityUsed(ctx context.Context) error {
|
||||
cp := s.GetCloudprovider()
|
||||
if cp == nil {
|
||||
return errors.Wrapf(errors.ErrNotFound, "no cloudprovider for storage %s", s.Id)
|
||||
}
|
||||
if !utils.IsInStringArray(cp.Provider, CapacityUsedCloudStorageProvider) {
|
||||
return nil
|
||||
}
|
||||
icp, err := cp.GetProvider()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "GetProvider")
|
||||
}
|
||||
iregion, err := icp.GetOnPremiseIRegion()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "GetOnPremiseIRegion")
|
||||
}
|
||||
cloudStorage, err := iregion.GetIStorageById(s.ExternalId)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "GetIStorageById")
|
||||
}
|
||||
capacityUsed := cloudStorage.GetCapacityUsedMB()
|
||||
if s.ActualCapacityUsed == capacityUsed {
|
||||
return nil
|
||||
}
|
||||
_, err = db.UpdateWithLock(ctx, s, func() error {
|
||||
s.ActualCapacityUsed = capacityUsed
|
||||
return nil
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
func (self *SStorage) syncWithCloudStorage(ctx context.Context, userCred mcclient.TokenCredential, extStorage cloudprovider.ICloudStorage, provider *SCloudprovider) error {
|
||||
diff, err := db.UpdateWithLock(ctx, self, func() error {
|
||||
// self.Name = extStorage.GetName()
|
||||
@@ -767,6 +819,9 @@ func (self *SStorage) syncWithCloudStorage(ctx context.Context, userCred mcclien
|
||||
if capacity := extStorage.GetCapacityMB(); capacity != 0 {
|
||||
self.Capacity = capacity
|
||||
}
|
||||
if capacity := extStorage.GetCapacityUsedMB(); capacity != 0 {
|
||||
self.ActualCapacityUsed = capacity
|
||||
}
|
||||
self.StorageConf = extStorage.GetStorageConf()
|
||||
|
||||
self.Enabled = tristate.NewFromBool(extStorage.GetEnabled())
|
||||
@@ -807,6 +862,7 @@ func (manager *SStorageManager) newFromCloudStorage(ctx context.Context, userCre
|
||||
storage.MediumType = extStorage.GetMediumType()
|
||||
storage.StorageConf = extStorage.GetStorageConf()
|
||||
storage.Capacity = extStorage.GetCapacityMB()
|
||||
storage.ActualCapacityUsed = extStorage.GetCapacityUsedMB()
|
||||
storage.Cmtbound = 1.0
|
||||
|
||||
storage.Enabled = tristate.NewFromBool(extStorage.GetEnabled())
|
||||
|
||||
@@ -143,6 +143,8 @@ type ComputeOptions struct {
|
||||
|
||||
EnableAutoRenameProject bool `help:"when it set true, auto create project will rename when cloud project name changed" default:"false"`
|
||||
|
||||
SyncStorageCapacityUsedIntervalMinutes int `help:"interval sync storage capacity used" default:"10"`
|
||||
|
||||
SCapabilityOptions
|
||||
SASControllerOptions
|
||||
common_options.CommonOptions
|
||||
|
||||
@@ -135,6 +135,8 @@ func StartService() {
|
||||
cron.AddJobAtIntervalsWithStartRun("AutoSyncCloudaccountTask", time.Duration(opts.CloudAutoSyncIntervalSeconds)*time.Second, models.CloudaccountManager.AutoSyncCloudaccountTask, true)
|
||||
cron.AddJobAtIntervalsWithStartRun("ReconcileBackupGuests", time.Duration(opts.ReconcileGuestBackupIntervalSeconds)*time.Second, models.GuestManager.ReconcileBackupGuests, true)
|
||||
|
||||
cron.AddJobAtIntervalsWithStartRun("SyncCapacityUsedForStorage", time.Duration(opts.SyncStorageCapacityUsedIntervalMinutes)*time.Minute, models.StorageManager.SyncCapacityUsedForStorage, true)
|
||||
|
||||
cron.AddJobEveryFewHour("AutoDiskSnapshot", 1, 5, 0, models.DiskManager.AutoDiskSnapshot, false)
|
||||
cron.AddJobEveryFewHour("SnapshotsCleanup", 1, 35, 0, models.SnapshotManager.CleanupSnapshots, false)
|
||||
cron.AddJobEveryFewHour("AutoSyncExtDiskSnapshot", 1, 10, 0, models.DiskManager.AutoSyncExtDiskSnapshot, false)
|
||||
|
||||
Reference in New Issue
Block a user