73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
/*
|
|
|
|
Copyright (c) [2023] [pcm]
|
|
[pcm-coordinator] is licensed under Mulan PSL v2.
|
|
You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
You may obtain a copy of Mulan PSL v2 at:
|
|
http://license.coscl.org.cn/MulanPSL2
|
|
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
EITHER EXPaRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
See the Mulan PSL v2 for more details.
|
|
|
|
*/
|
|
|
|
package scheduler
|
|
|
|
import (
|
|
"gitlink.org.cn/jcce-pcm/pcm-coordinator/api/pkg/response"
|
|
"gitlink.org.cn/jcce-pcm/pcm-coordinator/pkg/scheduler/algorithm/providerPricing"
|
|
"gorm.io/gorm"
|
|
"math/rand"
|
|
"time"
|
|
)
|
|
|
|
type scheduleService interface {
|
|
getNewStructForDb(task *response.TaskInfo, resource string, participantId int64) (interface{}, error)
|
|
pickOptimalStrategy(task *providerPricing.Task, providers ...*providerPricing.Provider) (*providerPricing.Strategy, error)
|
|
genTaskAndProviders(task *response.TaskInfo, dbEngin *gorm.DB) (*providerPricing.Task, []*providerPricing.Provider)
|
|
}
|
|
|
|
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
|
|
}
|