mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-11-01 11:42:03 +08:00
Automatic merge from release/2.4.0 -> release/2.5.0
* commit 'cf51c8ff9d092efff8c3d8009f22fb6cb739cc3f': add ping detect
This commit is contained in:
@@ -3555,3 +3555,34 @@ func (self *SHost) GetShortDesc(ctx context.Context) *jsonutils.JSONDict {
|
||||
desc.Update(jsonutils.Marshal(&info))
|
||||
return desc
|
||||
}
|
||||
|
||||
func (self *SHost) MarkGuestUnknown(userCred mcclient.TokenCredential) {
|
||||
log.Errorln(self.GetGuests())
|
||||
for _, guest := range self.GetGuests() {
|
||||
guest.SetStatus(userCred, VM_UNKNOWN, "host offline")
|
||||
}
|
||||
}
|
||||
|
||||
func (manager *SHostManager) PingDetectionTask(ctx context.Context, userCred mcclient.TokenCredential, isStart bool) {
|
||||
deadline := time.Now().Add(-1 * time.Duration(options.Options.HostOfflineMaxSeconds) * time.Second)
|
||||
|
||||
q := manager.Query().Equals("host_status", HOST_ONLINE).
|
||||
Equals("host_type", HOST_TYPE_HYPERVISOR)
|
||||
q = q.Filter(sqlchemy.OR(sqlchemy.IsNull(q.Field("last_ping_at")),
|
||||
sqlchemy.LT(q.Field("last_ping_at"), deadline)))
|
||||
|
||||
rows, err := q.Rows()
|
||||
if err != nil {
|
||||
log.Errorln(err)
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var host = SHost{}
|
||||
q.Row2Struct(rows, &host)
|
||||
host.SetModelManager(manager)
|
||||
host.PerformOffline(ctx, userCred, nil, nil)
|
||||
host.MarkGuestUnknown(userCred)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,6 +76,9 @@ type ComputeOptions struct {
|
||||
|
||||
SnapshotCreateDiskProtocol string `help:"Snapshot create disk protocol" choices:"url|fuse" default:"fuse"`
|
||||
|
||||
HostOfflineMaxSeconds int `help:"Maximal seconds interval that a host considered offline during which it did not ping region, default is 3 minues" default:"180"`
|
||||
HostOfflineDetectionInterval int `help:"Interval to check offline hosts, defualt is half a minute" default:"30"`
|
||||
|
||||
cloudcommon.DBOptions
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package service
|
||||
import (
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/compute/skus"
|
||||
|
||||
"yunion.io/x/log"
|
||||
@@ -60,6 +61,7 @@ func StartService() {
|
||||
cron.AddJob1("CleanPendingDeleteDisks", time.Duration(options.Options.PendingDeleteCheckSeconds)*time.Second, models.DiskManager.CleanPendingDeleteDisks)
|
||||
cron.AddJob1("CleanPendingDeleteLoadbalancers", time.Duration(options.Options.LoadbalancerPendingDeleteCheckInterval)*time.Second, models.LoadbalancerAgentManager.CleanPendingDeleteLoadbalancers)
|
||||
cron.AddJob1("CleanPendingDeleteServers", time.Duration(options.Options.PrepaidExpireCheckSeconds)*time.Second, models.GuestManager.DeleteExpiredPrepaidServers)
|
||||
cron.AddJob1("StartHostPingDetectionTask", time.Duration(options.Options.HostOfflineDetectionInterval)*time.Second, models.HostManager.PingDetectionTask)
|
||||
|
||||
cron.AddJob2("AutoDiskSnapshot", options.Options.AutoSnapshotDay, options.Options.AutoSnapshotHour, 0, 0, models.DiskManager.AutoDiskSnapshot, false)
|
||||
cron.AddJob2("SyncSkus", options.Options.SyncSkusDay, options.Options.SyncSkusHour, 0, 0, skus.SyncSkus, true)
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"fmt"
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/log"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db/taskman"
|
||||
"yunion.io/x/onecloud/pkg/compute/models"
|
||||
@@ -76,14 +77,17 @@ func (self *BaremetalSyncAllGuestsStatusTask) OnInit(ctx context.Context, obj db
|
||||
}
|
||||
|
||||
func (self *BaremetalSyncAllGuestsStatusTask) OnGuestSyncStatusComplete(ctx context.Context, baremetal *models.SHost, body jsonutils.JSONObject) {
|
||||
guests := baremetal.GetGuests()
|
||||
for _, guest := range guests {
|
||||
if guest.Status == models.VM_UNKNOWN && guest.Hypervisor == models.HYPERVISOR_BAREMETAL {
|
||||
var guests = make([]models.SGuest, 0)
|
||||
for _, guest := range baremetal.GetGuests() {
|
||||
if guest.Status == models.VM_UNKNOWN && guest.Hypervisor != models.HYPERVISOR_BAREMETAL {
|
||||
guest.SetStatus(self.UserCred, models.VM_SYNCING_STATUS, "")
|
||||
// GuestBatchSyncStatusTask
|
||||
guest.StartSyncstatus(ctx, self.UserCred, "")
|
||||
guests = append(guests, guest)
|
||||
}
|
||||
}
|
||||
for _, guest := range guests {
|
||||
guest.StartSyncstatus(ctx, self.UserCred, "")
|
||||
}
|
||||
log.Infof("All unknown guests syncstatus complete")
|
||||
self.SetStageComplete(ctx, nil)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user