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  }