|
- /*
-
- 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 common
-
- import (
- "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/scheduler/strategy"
- "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/pkg/response"
- "math/rand"
- "time"
- )
-
- type SubSchedule interface {
- GetNewStructForDb(task *response.TaskInfo, resource string, participantId int64) (interface{}, error)
- PickOptimalStrategy() (strategy.Strategy, error)
- AssignTask(clusters []*strategy.AssignedCluster) error
- }
-
- // 求交集
- 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
- }
|