github.com/kubewharf/katalyst-core@v0.5.3/pkg/config/generic/qos_expander.go (about) 1 /* 2 Copyright 2022 The Katalyst Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package generic 18 19 import ( 20 "sync" 21 22 v1 "k8s.io/api/core/v1" 23 ) 24 25 // QoSLevelExpander provides a mechanism for user-specified qos judgement 26 // since we may need to set qos-level for some customized cases 27 type QoSLevelExpander interface { 28 Override(qosLevel string, pod *v1.Pod, expandedAnnotations map[string]string) (string, bool) 29 } 30 31 type dummyQoSLevelExpander struct{} 32 33 func (d dummyQoSLevelExpander) Override(qos string, _ *v1.Pod, _ map[string]string) (string, bool) { 34 return qos, false 35 } 36 37 var ( 38 qosLevelExpander QoSLevelExpander = dummyQoSLevelExpander{} 39 qosLevelExpanderLock sync.RWMutex 40 ) 41 42 func SetQoSLevelExpander(e QoSLevelExpander) { 43 qosLevelExpanderLock.Lock() 44 qosLevelExpander = e 45 qosLevelExpanderLock.Unlock() 46 } 47 48 func getQoSLevelExpander() QoSLevelExpander { 49 qosLevelExpanderLock.RLock() 50 defer qosLevelExpanderLock.RUnlock() 51 return qosLevelExpander 52 } 53 54 // QoSEnhancementExpander provides a mechanism for user-specified qos-enhancement judgement 55 // since we may need to set qos-enhancement for some customized cases 56 type QoSEnhancementExpander interface { 57 Override(flattenedEnhancements map[string]string, pod *v1.Pod, expandedAnnotations map[string]string) (map[string]string, bool) 58 } 59 60 type dummyQoSEnhancementExpander struct{} 61 62 func (d dummyQoSEnhancementExpander) Override(flattenedEnhancements map[string]string, _ *v1.Pod, _ map[string]string) (map[string]string, bool) { 63 return flattenedEnhancements, false 64 } 65 66 var ( 67 qosEnhancementExpander QoSEnhancementExpander = dummyQoSEnhancementExpander{} 68 qosEnhancementExpanderLock sync.RWMutex 69 ) 70 71 func SetQoSEnhancementExpander(e QoSEnhancementExpander) { 72 qosEnhancementExpanderLock.Lock() 73 qosEnhancementExpander = e 74 qosEnhancementExpanderLock.Unlock() 75 } 76 77 func getQoSEnhancementExpander() QoSEnhancementExpander { 78 qosEnhancementExpanderLock.RLock() 79 defer qosEnhancementExpanderLock.RUnlock() 80 return qosEnhancementExpander 81 }