57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package scheduler
|
|
|
|
import (
|
|
"gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/algo"
|
|
"gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/types"
|
|
"math/rand"
|
|
"time"
|
|
)
|
|
|
|
type scheduleService interface {
|
|
getNewStructForDb(task *types.TaskInfo, participantId int64) (interface{}, error)
|
|
pickOptimalStrategy(task *algo.Task, providers ...*algo.Provider) (*algo.Task, error)
|
|
}
|
|
|
|
type providerParams struct {
|
|
Disk_avail float64
|
|
Mem_avail float64
|
|
Cpu_avail float64
|
|
Participant_id int64
|
|
}
|
|
|
|
// 求交集
|
|
func intersect(slice1, slice2 []int64) []int64 {
|
|
m := make(map[int64]int)
|
|
nn := make([]int64, 0)
|
|
for _, v := range slice1 {
|
|
m[v]++
|
|
}
|
|
|
|
for _, v := range slice2 {
|
|
times, _ := m[v]
|
|
if times == 1 {
|
|
nn = append(nn, v)
|
|
}
|
|
}
|
|
return nn
|
|
}
|
|
|
|
func micsSlice(origin []int64, count int) []int64 {
|
|
tmpOrigin := make([]int64, len(origin))
|
|
copy(tmpOrigin, origin)
|
|
//一定要seed
|
|
rand.Seed(time.Now().Unix())
|
|
rand.Shuffle(len(tmpOrigin), func(i int, j int) {
|
|
tmpOrigin[i], tmpOrigin[j] = tmpOrigin[j], tmpOrigin[i]
|
|
})
|
|
|
|
result := make([]int64, 0, count)
|
|
for index, value := range tmpOrigin {
|
|
if index == count {
|
|
break
|
|
}
|
|
result = append(result, value)
|
|
}
|
|
return result
|
|
}
|