Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
autoscaler
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Package registry
Model registry
Operate
Terraform modules
Analyze
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
GitHub Mirror
kubernetes
autoscaler
Commits
999ca261
Commit
999ca261
authored
5 years ago
by
Łukasz Osipiuk
Browse files
Options
Downloads
Patches
Plain Diff
Add temporary deprecated_scheduler_snapshot.go
parent
c3b4362c
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
cluster-autoscaler/simulator/deprecated_scheduler_snapshot.go
+156
-0
156 additions, 0 deletions
...ter-autoscaler/simulator/deprecated_scheduler_snapshot.go
with
156 additions
and
0 deletions
cluster-autoscaler/simulator/deprecated_scheduler_snapshot.go
0 → 100644
+
156
−
0
View file @
999ca261
/*
Copyright 2016 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
simulator
import
(
"fmt"
v1
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/labels"
schedulerlisters
"k8s.io/kubernetes/pkg/scheduler/listers"
schedulernodeinfo
"k8s.io/kubernetes/pkg/scheduler/nodeinfo"
)
// This file contains copies of snapshot related code from scheduler codebase.
// It is temporary measure to make thinks compiling in the intermediate state and gets removed a couple commits later
// Snapshot is a snapshot of cache NodeInfo and NodeTree order. The scheduler takes a
// snapshot at the beginning of each scheduling cycle and uses it for its operations in that cycle.
type
Snapshot
struct
{
// NodeInfoMap a map of node name to a snapshot of its NodeInfo.
NodeInfoMap
map
[
string
]
*
schedulernodeinfo
.
NodeInfo
// NodeInfoList is the list of nodes as ordered in the cache's nodeTree.
NodeInfoList
[]
*
schedulernodeinfo
.
NodeInfo
// HavePodsWithAffinityNodeInfoList is the list of nodes with at least one pod declaring affinity terms.
HavePodsWithAffinityNodeInfoList
[]
*
schedulernodeinfo
.
NodeInfo
Generation
int64
}
// NewEmptySnapshot initializes a Snapshot struct and returns it.
func
NewEmptySnapshot
()
*
Snapshot
{
return
&
Snapshot
{
NodeInfoMap
:
make
(
map
[
string
]
*
schedulernodeinfo
.
NodeInfo
),
}
}
// NewSnapshot initializes a Snapshot struct and returns it.
func
NewSnapshot
(
nodeInfoMap
map
[
string
]
*
schedulernodeinfo
.
NodeInfo
)
*
Snapshot
{
nodeInfoList
:=
make
([]
*
schedulernodeinfo
.
NodeInfo
,
0
,
len
(
nodeInfoMap
))
havePodsWithAffinityNodeInfoList
:=
make
([]
*
schedulernodeinfo
.
NodeInfo
,
0
,
len
(
nodeInfoMap
))
for
_
,
v
:=
range
nodeInfoMap
{
nodeInfoList
=
append
(
nodeInfoList
,
v
)
if
len
(
v
.
PodsWithAffinity
())
>
0
{
havePodsWithAffinityNodeInfoList
=
append
(
havePodsWithAffinityNodeInfoList
,
v
)
}
}
s
:=
NewEmptySnapshot
()
s
.
NodeInfoMap
=
nodeInfoMap
s
.
NodeInfoList
=
nodeInfoList
s
.
HavePodsWithAffinityNodeInfoList
=
havePodsWithAffinityNodeInfoList
return
s
}
// CreateNodeInfoMap obtains a list of pods and pivots that list into a map where the keys are node names
// and the values are the aggregated information for that node.
func
CreateNodeInfoMap
(
pods
[]
*
v1
.
Pod
,
nodes
[]
*
v1
.
Node
)
map
[
string
]
*
schedulernodeinfo
.
NodeInfo
{
nodeNameToInfo
:=
make
(
map
[
string
]
*
schedulernodeinfo
.
NodeInfo
)
for
_
,
pod
:=
range
pods
{
nodeName
:=
pod
.
Spec
.
NodeName
if
_
,
ok
:=
nodeNameToInfo
[
nodeName
];
!
ok
{
nodeNameToInfo
[
nodeName
]
=
schedulernodeinfo
.
NewNodeInfo
()
}
nodeNameToInfo
[
nodeName
]
.
AddPod
(
pod
)
}
for
_
,
node
:=
range
nodes
{
if
_
,
ok
:=
nodeNameToInfo
[
node
.
Name
];
!
ok
{
nodeNameToInfo
[
node
.
Name
]
=
schedulernodeinfo
.
NewNodeInfo
()
}
nodeInfo
:=
nodeNameToInfo
[
node
.
Name
]
nodeInfo
.
SetNode
(
node
)
}
return
nodeNameToInfo
}
// Pods returns a PodLister
func
(
s
*
Snapshot
)
Pods
()
schedulerlisters
.
PodLister
{
return
&
podLister
{
snapshot
:
s
}
}
// NodeInfos returns a NodeInfoLister.
func
(
s
*
Snapshot
)
NodeInfos
()
schedulerlisters
.
NodeInfoLister
{
return
&
nodeInfoLister
{
snapshot
:
s
}
}
// NumNodes returns the number of nodes in the snapshot.
func
(
s
*
Snapshot
)
NumNodes
()
int
{
return
len
(
s
.
NodeInfoList
)
}
type
podLister
struct
{
snapshot
*
Snapshot
}
// List returns the list of pods in the snapshot.
func
(
p
*
podLister
)
List
(
selector
labels
.
Selector
)
([]
*
v1
.
Pod
,
error
)
{
alwaysTrue
:=
func
(
p
*
v1
.
Pod
)
bool
{
return
true
}
return
p
.
FilteredList
(
alwaysTrue
,
selector
)
}
// FilteredList returns a filtered list of pods in the snapshot.
func
(
p
*
podLister
)
FilteredList
(
podFilter
schedulerlisters
.
PodFilter
,
selector
labels
.
Selector
)
([]
*
v1
.
Pod
,
error
)
{
// podFilter is expected to return true for most or all of the pods. We
// can avoid expensive array growth without wasting too much memory by
// pre-allocating capacity.
maxSize
:=
0
for
_
,
n
:=
range
p
.
snapshot
.
NodeInfoList
{
maxSize
+=
len
(
n
.
Pods
())
}
pods
:=
make
([]
*
v1
.
Pod
,
0
,
maxSize
)
for
_
,
n
:=
range
p
.
snapshot
.
NodeInfoList
{
for
_
,
pod
:=
range
n
.
Pods
()
{
if
podFilter
(
pod
)
&&
selector
.
Matches
(
labels
.
Set
(
pod
.
Labels
))
{
pods
=
append
(
pods
,
pod
)
}
}
}
return
pods
,
nil
}
type
nodeInfoLister
struct
{
snapshot
*
Snapshot
}
// List returns the list of nodes in the snapshot.
func
(
n
*
nodeInfoLister
)
List
()
([]
*
schedulernodeinfo
.
NodeInfo
,
error
)
{
return
n
.
snapshot
.
NodeInfoList
,
nil
}
// HavePodsWithAffinityList returns the list of nodes with at least one pods with inter-pod affinity
func
(
n
*
nodeInfoLister
)
HavePodsWithAffinityList
()
([]
*
schedulernodeinfo
.
NodeInfo
,
error
)
{
return
n
.
snapshot
.
HavePodsWithAffinityNodeInfoList
,
nil
}
// Returns the NodeInfo of the given node name.
func
(
n
*
nodeInfoLister
)
Get
(
nodeName
string
)
(
*
schedulernodeinfo
.
NodeInfo
,
error
)
{
if
v
,
ok
:=
n
.
snapshot
.
NodeInfoMap
[
nodeName
];
ok
&&
v
.
Node
()
!=
nil
{
return
v
,
nil
}
return
nil
,
fmt
.
Errorf
(
"nodeinfo not found for node name %q"
,
nodeName
)
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment