65 lines
1.7 KiB
Go
65 lines
1.7 KiB
Go
package cache
|
|
|
|
import (
|
|
"k8s.io/apimachinery/pkg/util/sets"
|
|
|
|
"github.com/karmada-io/karmada/pkg/scheduler/framework"
|
|
"github.com/karmada-io/karmada/pkg/util"
|
|
)
|
|
|
|
// Snapshot is a snapshot of cache ClusterInfo. The scheduler takes a
|
|
// snapshot at the beginning of each scheduling cycle and uses it for its operations in that cycle.
|
|
type Snapshot struct {
|
|
// clusterInfoList is the list of nodes as ordered in the cache's nodeTree.
|
|
clusterInfoList []*framework.ClusterInfo
|
|
}
|
|
|
|
// NewEmptySnapshot initializes a Snapshot struct and returns it.
|
|
func NewEmptySnapshot() Snapshot {
|
|
return Snapshot{}
|
|
}
|
|
|
|
// NumOfClusters returns the number of clusters.
|
|
func (s *Snapshot) NumOfClusters() int {
|
|
return len(s.clusterInfoList)
|
|
}
|
|
|
|
// GetClusters returns all the clusters.
|
|
func (s *Snapshot) GetClusters() []*framework.ClusterInfo {
|
|
return s.clusterInfoList
|
|
}
|
|
|
|
// GetReadyClusters returns the clusters in ready status.
|
|
func (s *Snapshot) GetReadyClusters() []*framework.ClusterInfo {
|
|
var readyClusterInfoList []*framework.ClusterInfo
|
|
for _, c := range s.clusterInfoList {
|
|
if util.IsClusterReady(&c.Cluster().Status) {
|
|
readyClusterInfoList = append(readyClusterInfoList, c)
|
|
}
|
|
}
|
|
|
|
return readyClusterInfoList
|
|
}
|
|
|
|
// GetReadyClusterNames returns the clusterNames in ready status.
|
|
func (s *Snapshot) GetReadyClusterNames() sets.String {
|
|
readyClusterNames := sets.NewString()
|
|
for _, c := range s.clusterInfoList {
|
|
if util.IsClusterReady(&c.Cluster().Status) {
|
|
readyClusterNames.Insert(c.Cluster().Name)
|
|
}
|
|
}
|
|
|
|
return readyClusterNames
|
|
}
|
|
|
|
// GetCluster returns the given clusters.
|
|
func (s *Snapshot) GetCluster(clusterName string) *framework.ClusterInfo {
|
|
for _, c := range s.clusterInfoList {
|
|
if c.Cluster().Name == clusterName {
|
|
return c
|
|
}
|
|
}
|
|
return nil
|
|
}
|