mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-01-13 11:25:19 +00:00
Move from glog to klog
- Move from the old github.com/golang/glog to k8s.io/klog - klog as explicit InitFlags() so we add them as necessary - we update the other repositories that we vendor that made a similar change from glog to klog * github.com/kubernetes/repo-infra * k8s.io/gengo/ * k8s.io/kube-openapi/ * github.com/google/cadvisor - Entirely remove all references to glog - Fix some tests by explicit InitFlags in their init() methods Change-Id: I92db545ff36fcec83afe98f550c9e630098b3135
This commit is contained in:
@@ -67,7 +67,7 @@ go_library(
|
||||
"//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library",
|
||||
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
||||
"//staging/src/k8s.io/client-go/tools/record:go_default_library",
|
||||
"//vendor/github.com/golang/glog:go_default_library",
|
||||
"//vendor/k8s.io/klog:go_default_library",
|
||||
] + select({
|
||||
"@io_bazel_rules_go//go/platform:linux": [
|
||||
"//vendor/golang.org/x/sys/unix:go_default_library",
|
||||
|
||||
@@ -22,7 +22,7 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/golang/glog"
|
||||
"k8s.io/klog"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
@@ -153,7 +153,7 @@ func (m *managerImpl) Admit(attrs *lifecycle.PodAdmitAttributes) lifecycle.PodAd
|
||||
}
|
||||
|
||||
// reject pods when under memory pressure (if pod is best effort), or if under disk pressure.
|
||||
glog.Warningf("Failed to admit pod %s - node has conditions: %v", format.Pod(attrs.Pod), m.nodeConditions)
|
||||
klog.Warningf("Failed to admit pod %s - node has conditions: %v", format.Pod(attrs.Pod), m.nodeConditions)
|
||||
return lifecycle.PodAdmitResult{
|
||||
Admit: false,
|
||||
Reason: Reason,
|
||||
@@ -164,7 +164,7 @@ func (m *managerImpl) Admit(attrs *lifecycle.PodAdmitAttributes) lifecycle.PodAd
|
||||
// Start starts the control loop to observe and response to low compute resources.
|
||||
func (m *managerImpl) Start(diskInfoProvider DiskInfoProvider, podFunc ActivePodsFunc, podCleanedUpFunc PodCleanedUpFunc, monitoringInterval time.Duration) {
|
||||
thresholdHandler := func(message string) {
|
||||
glog.Infof(message)
|
||||
klog.Infof(message)
|
||||
m.synchronize(diskInfoProvider, podFunc)
|
||||
}
|
||||
if m.config.KernelMemcgNotification {
|
||||
@@ -172,7 +172,7 @@ func (m *managerImpl) Start(diskInfoProvider DiskInfoProvider, podFunc ActivePod
|
||||
if threshold.Signal == evictionapi.SignalMemoryAvailable || threshold.Signal == evictionapi.SignalAllocatableMemoryAvailable {
|
||||
notifier, err := NewMemoryThresholdNotifier(threshold, m.config.PodCgroupRoot, &CgroupNotifierFactory{}, thresholdHandler)
|
||||
if err != nil {
|
||||
glog.Warningf("eviction manager: failed to create memory threshold notifier: %v", err)
|
||||
klog.Warningf("eviction manager: failed to create memory threshold notifier: %v", err)
|
||||
} else {
|
||||
go notifier.Start()
|
||||
m.thresholdNotifiers = append(m.thresholdNotifiers, notifier)
|
||||
@@ -184,7 +184,7 @@ func (m *managerImpl) Start(diskInfoProvider DiskInfoProvider, podFunc ActivePod
|
||||
go func() {
|
||||
for {
|
||||
if evictedPods := m.synchronize(diskInfoProvider, podFunc); evictedPods != nil {
|
||||
glog.Infof("eviction manager: pods %s evicted, waiting for pod to be cleaned up", format.Pods(evictedPods))
|
||||
klog.Infof("eviction manager: pods %s evicted, waiting for pod to be cleaned up", format.Pods(evictedPods))
|
||||
m.waitForPodsCleanup(podCleanedUpFunc, evictedPods)
|
||||
} else {
|
||||
time.Sleep(monitoringInterval)
|
||||
@@ -223,7 +223,7 @@ func (m *managerImpl) synchronize(diskInfoProvider DiskInfoProvider, podFunc Act
|
||||
return nil
|
||||
}
|
||||
|
||||
glog.V(3).Infof("eviction manager: synchronize housekeeping")
|
||||
klog.V(3).Infof("eviction manager: synchronize housekeeping")
|
||||
// build the ranking functions (if not yet known)
|
||||
// TODO: have a function in cadvisor that lets us know if global housekeeping has completed
|
||||
if m.dedicatedImageFs == nil {
|
||||
@@ -240,7 +240,7 @@ func (m *managerImpl) synchronize(diskInfoProvider DiskInfoProvider, podFunc Act
|
||||
updateStats := true
|
||||
summary, err := m.summaryProvider.Get(updateStats)
|
||||
if err != nil {
|
||||
glog.Errorf("eviction manager: failed to get summary stats: %v", err)
|
||||
klog.Errorf("eviction manager: failed to get summary stats: %v", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -248,7 +248,7 @@ func (m *managerImpl) synchronize(diskInfoProvider DiskInfoProvider, podFunc Act
|
||||
m.thresholdsLastUpdated = m.clock.Now()
|
||||
for _, notifier := range m.thresholdNotifiers {
|
||||
if err := notifier.UpdateThreshold(summary); err != nil {
|
||||
glog.Warningf("eviction manager: failed to update %s: %v", notifier.Description(), err)
|
||||
klog.Warningf("eviction manager: failed to update %s: %v", notifier.Description(), err)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -275,7 +275,7 @@ func (m *managerImpl) synchronize(diskInfoProvider DiskInfoProvider, podFunc Act
|
||||
// the set of node conditions that are triggered by currently observed thresholds
|
||||
nodeConditions := nodeConditions(thresholds)
|
||||
if len(nodeConditions) > 0 {
|
||||
glog.V(3).Infof("eviction manager: node conditions - observed: %v", nodeConditions)
|
||||
klog.V(3).Infof("eviction manager: node conditions - observed: %v", nodeConditions)
|
||||
}
|
||||
|
||||
// track when a node condition was last observed
|
||||
@@ -284,7 +284,7 @@ func (m *managerImpl) synchronize(diskInfoProvider DiskInfoProvider, podFunc Act
|
||||
// node conditions report true if it has been observed within the transition period window
|
||||
nodeConditions = nodeConditionsObservedSince(nodeConditionsLastObservedAt, m.config.PressureTransitionPeriod, now)
|
||||
if len(nodeConditions) > 0 {
|
||||
glog.V(3).Infof("eviction manager: node conditions - transition period not met: %v", nodeConditions)
|
||||
klog.V(3).Infof("eviction manager: node conditions - transition period not met: %v", nodeConditions)
|
||||
}
|
||||
|
||||
// determine the set of thresholds we need to drive eviction behavior (i.e. all grace periods are met)
|
||||
@@ -314,7 +314,7 @@ func (m *managerImpl) synchronize(diskInfoProvider DiskInfoProvider, podFunc Act
|
||||
}
|
||||
|
||||
if len(thresholds) == 0 {
|
||||
glog.V(3).Infof("eviction manager: no resources are starved")
|
||||
klog.V(3).Infof("eviction manager: no resources are starved")
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -323,39 +323,39 @@ func (m *managerImpl) synchronize(diskInfoProvider DiskInfoProvider, podFunc Act
|
||||
thresholdToReclaim := thresholds[0]
|
||||
resourceToReclaim, found := signalToResource[thresholdToReclaim.Signal]
|
||||
if !found {
|
||||
glog.V(3).Infof("eviction manager: threshold %s was crossed, but reclaim is not implemented for this threshold.", thresholdToReclaim.Signal)
|
||||
klog.V(3).Infof("eviction manager: threshold %s was crossed, but reclaim is not implemented for this threshold.", thresholdToReclaim.Signal)
|
||||
return nil
|
||||
}
|
||||
glog.Warningf("eviction manager: attempting to reclaim %v", resourceToReclaim)
|
||||
klog.Warningf("eviction manager: attempting to reclaim %v", resourceToReclaim)
|
||||
|
||||
// record an event about the resources we are now attempting to reclaim via eviction
|
||||
m.recorder.Eventf(m.nodeRef, v1.EventTypeWarning, "EvictionThresholdMet", "Attempting to reclaim %s", resourceToReclaim)
|
||||
|
||||
// check if there are node-level resources we can reclaim to reduce pressure before evicting end-user pods.
|
||||
if m.reclaimNodeLevelResources(thresholdToReclaim.Signal, resourceToReclaim) {
|
||||
glog.Infof("eviction manager: able to reduce %v pressure without evicting pods.", resourceToReclaim)
|
||||
klog.Infof("eviction manager: able to reduce %v pressure without evicting pods.", resourceToReclaim)
|
||||
return nil
|
||||
}
|
||||
|
||||
glog.Infof("eviction manager: must evict pod(s) to reclaim %v", resourceToReclaim)
|
||||
klog.Infof("eviction manager: must evict pod(s) to reclaim %v", resourceToReclaim)
|
||||
|
||||
// rank the pods for eviction
|
||||
rank, ok := m.signalToRankFunc[thresholdToReclaim.Signal]
|
||||
if !ok {
|
||||
glog.Errorf("eviction manager: no ranking function for signal %s", thresholdToReclaim.Signal)
|
||||
klog.Errorf("eviction manager: no ranking function for signal %s", thresholdToReclaim.Signal)
|
||||
return nil
|
||||
}
|
||||
|
||||
// the only candidates viable for eviction are those pods that had anything running.
|
||||
if len(activePods) == 0 {
|
||||
glog.Errorf("eviction manager: eviction thresholds have been met, but no pods are active to evict")
|
||||
klog.Errorf("eviction manager: eviction thresholds have been met, but no pods are active to evict")
|
||||
return nil
|
||||
}
|
||||
|
||||
// rank the running pods for eviction for the specified resource
|
||||
rank(activePods, statsFunc)
|
||||
|
||||
glog.Infof("eviction manager: pods ranked for eviction: %s", format.Pods(activePods))
|
||||
klog.Infof("eviction manager: pods ranked for eviction: %s", format.Pods(activePods))
|
||||
|
||||
//record age of metrics for met thresholds that we are using for evictions.
|
||||
for _, t := range thresholds {
|
||||
@@ -377,7 +377,7 @@ func (m *managerImpl) synchronize(diskInfoProvider DiskInfoProvider, podFunc Act
|
||||
return []*v1.Pod{pod}
|
||||
}
|
||||
}
|
||||
glog.Infof("eviction manager: unable to evict any pods from the node")
|
||||
klog.Infof("eviction manager: unable to evict any pods from the node")
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -389,7 +389,7 @@ func (m *managerImpl) waitForPodsCleanup(podCleanedUpFunc PodCleanedUpFunc, pods
|
||||
for {
|
||||
select {
|
||||
case <-timeout.C():
|
||||
glog.Warningf("eviction manager: timed out waiting for pods %s to be cleaned up", format.Pods(pods))
|
||||
klog.Warningf("eviction manager: timed out waiting for pods %s to be cleaned up", format.Pods(pods))
|
||||
return
|
||||
case <-ticker.C():
|
||||
for i, pod := range pods {
|
||||
@@ -397,7 +397,7 @@ func (m *managerImpl) waitForPodsCleanup(podCleanedUpFunc PodCleanedUpFunc, pods
|
||||
break
|
||||
}
|
||||
if i == len(pods)-1 {
|
||||
glog.Infof("eviction manager: pods %s successfully cleaned up", format.Pods(pods))
|
||||
klog.Infof("eviction manager: pods %s successfully cleaned up", format.Pods(pods))
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -411,14 +411,14 @@ func (m *managerImpl) reclaimNodeLevelResources(signalToReclaim evictionapi.Sign
|
||||
for _, nodeReclaimFunc := range nodeReclaimFuncs {
|
||||
// attempt to reclaim the pressured resource.
|
||||
if err := nodeReclaimFunc(); err != nil {
|
||||
glog.Warningf("eviction manager: unexpected error when attempting to reduce %v pressure: %v", resourceToReclaim, err)
|
||||
klog.Warningf("eviction manager: unexpected error when attempting to reduce %v pressure: %v", resourceToReclaim, err)
|
||||
}
|
||||
|
||||
}
|
||||
if len(nodeReclaimFuncs) > 0 {
|
||||
summary, err := m.summaryProvider.Get(true)
|
||||
if err != nil {
|
||||
glog.Errorf("eviction manager: failed to get summary stats after resource reclaim: %v", err)
|
||||
klog.Errorf("eviction manager: failed to get summary stats after resource reclaim: %v", err)
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -502,7 +502,7 @@ func (m *managerImpl) podEphemeralStorageLimitEviction(podStats statsapi.PodStat
|
||||
}
|
||||
podEphemeralUsage, err := podLocalEphemeralStorageUsage(podStats, pod, fsStatsSet)
|
||||
if err != nil {
|
||||
glog.Errorf("eviction manager: error getting pod disk usage %v", err)
|
||||
klog.Errorf("eviction manager: error getting pod disk usage %v", err)
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -545,7 +545,7 @@ func (m *managerImpl) evictPod(pod *v1.Pod, gracePeriodOverride int64, evictMsg
|
||||
// do not evict such pods. Static pods are not re-admitted after evictions.
|
||||
// https://github.com/kubernetes/kubernetes/issues/40573 has more details.
|
||||
if kubelettypes.IsCriticalPod(pod) && kubepod.IsStaticPod(pod) {
|
||||
glog.Errorf("eviction manager: cannot evict a critical static pod %s", format.Pod(pod))
|
||||
klog.Errorf("eviction manager: cannot evict a critical static pod %s", format.Pod(pod))
|
||||
return false
|
||||
}
|
||||
status := v1.PodStatus{
|
||||
@@ -558,9 +558,9 @@ func (m *managerImpl) evictPod(pod *v1.Pod, gracePeriodOverride int64, evictMsg
|
||||
// this is a blocking call and should only return when the pod and its containers are killed.
|
||||
err := m.killPodFunc(pod, status, &gracePeriodOverride)
|
||||
if err != nil {
|
||||
glog.Errorf("eviction manager: pod %s failed to evict %v", format.Pod(pod), err)
|
||||
klog.Errorf("eviction manager: pod %s failed to evict %v", format.Pod(pod), err)
|
||||
} else {
|
||||
glog.Infof("eviction manager: pod %s is evicted successfully", format.Pod(pod))
|
||||
klog.Infof("eviction manager: pod %s is evicted successfully", format.Pod(pod))
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -23,10 +23,10 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/golang/glog"
|
||||
"k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||
"k8s.io/klog"
|
||||
"k8s.io/kubernetes/pkg/features"
|
||||
statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1"
|
||||
evictionapi "k8s.io/kubernetes/pkg/kubelet/eviction/api"
|
||||
@@ -732,7 +732,7 @@ func makeSignalObservations(summary *statsapi.Summary) (signalObservations, stat
|
||||
}
|
||||
}
|
||||
if allocatableContainer, err := getSysContainer(summary.Node.SystemContainers, statsapi.SystemContainerPods); err != nil {
|
||||
glog.Errorf("eviction manager: failed to construct signal: %q error: %v", evictionapi.SignalAllocatableMemoryAvailable, err)
|
||||
klog.Errorf("eviction manager: failed to construct signal: %q error: %v", evictionapi.SignalAllocatableMemoryAvailable, err)
|
||||
} else {
|
||||
if memory := allocatableContainer.Memory; memory != nil && memory.AvailableBytes != nil && memory.WorkingSetBytes != nil {
|
||||
result[evictionapi.SignalAllocatableMemoryAvailable] = signalObservation{
|
||||
@@ -805,7 +805,7 @@ func thresholdsMet(thresholds []evictionapi.Threshold, observations signalObserv
|
||||
threshold := thresholds[i]
|
||||
observed, found := observations[threshold.Signal]
|
||||
if !found {
|
||||
glog.Warningf("eviction manager: no observation found for eviction signal %v", threshold.Signal)
|
||||
klog.Warningf("eviction manager: no observation found for eviction signal %v", threshold.Signal)
|
||||
continue
|
||||
}
|
||||
// determine if we have met the specified threshold
|
||||
@@ -828,20 +828,20 @@ func thresholdsMet(thresholds []evictionapi.Threshold, observations signalObserv
|
||||
}
|
||||
|
||||
func debugLogObservations(logPrefix string, observations signalObservations) {
|
||||
if !glog.V(3) {
|
||||
if !klog.V(3) {
|
||||
return
|
||||
}
|
||||
for k, v := range observations {
|
||||
if !v.time.IsZero() {
|
||||
glog.Infof("eviction manager: %v: signal=%v, available: %v, capacity: %v, time: %v", logPrefix, k, v.available, v.capacity, v.time)
|
||||
klog.Infof("eviction manager: %v: signal=%v, available: %v, capacity: %v, time: %v", logPrefix, k, v.available, v.capacity, v.time)
|
||||
} else {
|
||||
glog.Infof("eviction manager: %v: signal=%v, available: %v, capacity: %v", logPrefix, k, v.available, v.capacity)
|
||||
klog.Infof("eviction manager: %v: signal=%v, available: %v, capacity: %v", logPrefix, k, v.available, v.capacity)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func debugLogThresholdsWithObservation(logPrefix string, thresholds []evictionapi.Threshold, observations signalObservations) {
|
||||
if !glog.V(3) {
|
||||
if !klog.V(3) {
|
||||
return
|
||||
}
|
||||
for i := range thresholds {
|
||||
@@ -849,9 +849,9 @@ func debugLogThresholdsWithObservation(logPrefix string, thresholds []evictionap
|
||||
observed, found := observations[threshold.Signal]
|
||||
if found {
|
||||
quantity := evictionapi.GetThresholdQuantity(threshold.Value, observed.capacity)
|
||||
glog.Infof("eviction manager: %v: threshold [signal=%v, quantity=%v] observed %v", logPrefix, threshold.Signal, quantity, observed.available)
|
||||
klog.Infof("eviction manager: %v: threshold [signal=%v, quantity=%v] observed %v", logPrefix, threshold.Signal, quantity, observed.available)
|
||||
} else {
|
||||
glog.Infof("eviction manager: %v: threshold [signal=%v] had no observation", logPrefix, threshold.Signal)
|
||||
klog.Infof("eviction manager: %v: threshold [signal=%v] had no observation", logPrefix, threshold.Signal)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -862,7 +862,7 @@ func thresholdsUpdatedStats(thresholds []evictionapi.Threshold, observations, la
|
||||
threshold := thresholds[i]
|
||||
observed, found := observations[threshold.Signal]
|
||||
if !found {
|
||||
glog.Warningf("eviction manager: no observation found for eviction signal %v", threshold.Signal)
|
||||
klog.Warningf("eviction manager: no observation found for eviction signal %v", threshold.Signal)
|
||||
continue
|
||||
}
|
||||
last, found := lastObservations[threshold.Signal]
|
||||
@@ -892,7 +892,7 @@ func thresholdsMetGracePeriod(observedAt thresholdsObservedAt, now time.Time) []
|
||||
for threshold, at := range observedAt {
|
||||
duration := now.Sub(at)
|
||||
if duration < threshold.GracePeriod {
|
||||
glog.V(2).Infof("eviction manager: eviction criteria not yet met for %v, duration: %v", formatThreshold(threshold), duration)
|
||||
klog.V(2).Infof("eviction manager: eviction criteria not yet met for %v, duration: %v", formatThreshold(threshold), duration)
|
||||
continue
|
||||
}
|
||||
results = append(results, threshold)
|
||||
|
||||
@@ -20,7 +20,7 @@ import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/golang/glog"
|
||||
"k8s.io/klog"
|
||||
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1"
|
||||
@@ -71,7 +71,7 @@ func NewMemoryThresholdNotifier(threshold evictionapi.Threshold, cgroupRoot stri
|
||||
}
|
||||
|
||||
func (m *memoryThresholdNotifier) Start() {
|
||||
glog.Infof("eviction manager: created %s", m.Description())
|
||||
klog.Infof("eviction manager: created %s", m.Description())
|
||||
for range m.events {
|
||||
m.handler(fmt.Sprintf("eviction manager: %s crossed", m.Description()))
|
||||
}
|
||||
@@ -98,7 +98,7 @@ func (m *memoryThresholdNotifier) UpdateThreshold(summary *statsapi.Summary) err
|
||||
memcgThreshold.Sub(*evictionThresholdQuantity)
|
||||
memcgThreshold.Add(*inactiveFile)
|
||||
|
||||
glog.V(3).Infof("eviction manager: setting %s to %s\n", m.Description(), memcgThreshold.String())
|
||||
klog.V(3).Infof("eviction manager: setting %s to %s\n", m.Description(), memcgThreshold.String())
|
||||
if m.notifier != nil {
|
||||
m.notifier.Stop()
|
||||
}
|
||||
|
||||
@@ -21,8 +21,8 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/golang/glog"
|
||||
"golang.org/x/sys/unix"
|
||||
"k8s.io/klog"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -104,7 +104,7 @@ func (n *linuxCgroupNotifier) Start(eventCh chan<- struct{}) {
|
||||
Events: unix.EPOLLIN,
|
||||
})
|
||||
if err != nil {
|
||||
glog.Warningf("eviction manager: error adding epoll eventfd: %v", err)
|
||||
klog.Warningf("eviction manager: error adding epoll eventfd: %v", err)
|
||||
return
|
||||
}
|
||||
for {
|
||||
@@ -115,7 +115,7 @@ func (n *linuxCgroupNotifier) Start(eventCh chan<- struct{}) {
|
||||
}
|
||||
event, err := wait(n.epfd, n.eventfd, notifierRefreshInterval)
|
||||
if err != nil {
|
||||
glog.Warningf("eviction manager: error while waiting for memcg events: %v", err)
|
||||
klog.Warningf("eviction manager: error while waiting for memcg events: %v", err)
|
||||
return
|
||||
} else if !event {
|
||||
// Timeout on wait. This is expected if the threshold was not crossed
|
||||
@@ -125,7 +125,7 @@ func (n *linuxCgroupNotifier) Start(eventCh chan<- struct{}) {
|
||||
buf := make([]byte, eventSize)
|
||||
_, err = unix.Read(n.eventfd, buf)
|
||||
if err != nil {
|
||||
glog.Warningf("eviction manager: error reading memcg events: %v", err)
|
||||
klog.Warningf("eviction manager: error reading memcg events: %v", err)
|
||||
return
|
||||
}
|
||||
eventCh <- struct{}{}
|
||||
|
||||
@@ -18,11 +18,11 @@ limitations under the License.
|
||||
|
||||
package eviction
|
||||
|
||||
import "github.com/golang/glog"
|
||||
import "k8s.io/klog"
|
||||
|
||||
// NewCgroupNotifier creates a cgroup notifier that does nothing because cgroups do not exist on non-linux systems.
|
||||
func NewCgroupNotifier(path, attribute string, threshold int64) (CgroupNotifier, error) {
|
||||
glog.V(5).Infof("cgroup notifications not supported")
|
||||
klog.V(5).Infof("cgroup notifications not supported")
|
||||
return &unsupportedThresholdNotifier{}, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user