feat: searcher can not found candidate scheduler clusters, return all scheduler clusters (#1991)

Signed-off-by: Gaius <gaius.qi@gmail.com>
This commit is contained in:
Gaius 2023-01-10 15:52:43 +08:00
parent 7614664039
commit 4755fca7f2
No known key found for this signature in database
GPG Key ID: 8B4E5D1290FA2FFB
2 changed files with 21 additions and 6 deletions

View File

@ -39,6 +39,13 @@ var (
Help: "Gauge of the number of peer.", Help: "Gauge of the number of peer.",
}, []string{"version", "commit"}) }, []string{"version", "commit"})
SearchSchedulerClusterFailureCount = promauto.NewCounterVec(prometheus.CounterOpts{
Namespace: types.MetricsNamespace,
Subsystem: types.SchedulerMetricsName,
Name: "search_scheduler_cluster_failure_total",
Help: "Counter of the number of failed of searching scheduler cluster.",
}, []string{"version", "commit"})
VersionGauge = promauto.NewGaugeVec(prometheus.GaugeOpts{ VersionGauge = promauto.NewGaugeVec(prometheus.GaugeOpts{
Namespace: types.MetricsNamespace, Namespace: types.MetricsNamespace,
Subsystem: types.ManagerMetricsName, Subsystem: types.ManagerMetricsName,

View File

@ -544,20 +544,28 @@ func (s *Server) ListSchedulers(ctx context.Context, req *managerv1.ListSchedule
if err := s.db.WithContext(ctx).Preload("SecurityGroup.SecurityRules").Preload("SeedPeerClusters.SeedPeers", "state = ?", "active").Preload("Schedulers", "state = ?", "active").Find(&schedulerClusters).Error; err != nil { if err := s.db.WithContext(ctx).Preload("SecurityGroup.SecurityRules").Preload("SeedPeerClusters.SeedPeers", "state = ?", "active").Preload("Schedulers", "state = ?", "active").Find(&schedulerClusters).Error; err != nil {
return nil, status.Error(codes.Unknown, err.Error()) return nil, status.Error(codes.Unknown, err.Error())
} }
log.Debugf("list scheduler clusters %v with hostInfo %#v", getSchedulerClusterNames(schedulerClusters), req.HostInfo)
// Search optimal scheduler clusters. // Search optimal scheduler clusters.
log.Debugf("list scheduler clusters %v with hostInfo %#v", getSchedulerClusterNames(schedulerClusters), req.HostInfo) // If searcher can not found candidate scheduler cluster,
schedulerClusters, err := s.searcher.FindSchedulerClusters(ctx, schedulerClusters, req) // return all scheduler clusters.
var (
candidateSchedulerClusters []model.SchedulerCluster
err error
)
candidateSchedulerClusters, err = s.searcher.FindSchedulerClusters(ctx, schedulerClusters, req)
if err != nil { if err != nil {
candidateSchedulerClusters = schedulerClusters
log.Error(err) log.Error(err)
return nil, status.Error(codes.NotFound, "scheduler cluster not found") metrics.SearchSchedulerClusterFailureCount.WithLabelValues(req.Version, req.Commit).Inc()
} }
log.Debugf("find matching scheduler cluster %v", getSchedulerClusterNames(schedulerClusters)) log.Debugf("find matching scheduler cluster %v", getSchedulerClusterNames(schedulerClusters))
schedulers := []model.Scheduler{} schedulers := []model.Scheduler{}
for _, schedulerCluster := range schedulerClusters { for _, candidateSchedulerCluster := range candidateSchedulerClusters {
for _, scheduler := range schedulerCluster.Schedulers { for _, scheduler := range candidateSchedulerCluster.Schedulers {
scheduler.SchedulerCluster = schedulerCluster scheduler.SchedulerCluster = candidateSchedulerCluster
schedulers = append(schedulers, scheduler) schedulers = append(schedulers, scheduler)
} }
} }