Automatic merge from release/2.4.0 -> release/2.5.0

* commit 'cf51c8ff9d092efff8c3d8009f22fb6cb739cc3f':
  add ping detect
This commit is contained in:
邱剑
2018-12-22 18:27:56 +08:00
4 changed files with 45 additions and 5 deletions
+31
View File
@@ -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)
}
}
+3
View File
@@ -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
}
+2
View File
@@ -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)
}