Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
c6402569
Commit
c6402569
authored
Mar 03, 2016
by
Marcin Wielgus
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Shorten execution time of HPA tests
parent
548cfa68
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
52 additions
and
29 deletions
+52
-29
event.go
pkg/client/record/event.go
+9
-4
event_test.go
pkg/client/record/event_test.go
+5
-10
horizontal.go
pkg/controller/podautoscaler/horizontal.go
+18
-13
horizontal_test.go
pkg/controller/podautoscaler/horizontal_test.go
+20
-2
No files found.
pkg/client/record/event.go
View file @
c6402569
...
...
@@ -35,7 +35,7 @@ import (
const
maxTriesPerEvent
=
12
var
s
leepDuration
=
10
*
time
.
Second
var
defaultS
leepDuration
=
10
*
time
.
Second
const
maxQueuedEvents
=
1000
...
...
@@ -93,11 +93,16 @@ type EventBroadcaster interface {
// Creates a new event broadcaster.
func
NewBroadcaster
()
EventBroadcaster
{
return
&
eventBroadcasterImpl
{
watch
.
NewBroadcaster
(
maxQueuedEvents
,
watch
.
DropIfChannelFull
)}
return
&
eventBroadcasterImpl
{
watch
.
NewBroadcaster
(
maxQueuedEvents
,
watch
.
DropIfChannelFull
),
defaultSleepDuration
}
}
func
NewBroadcasterForTests
(
sleepDuration
time
.
Duration
)
EventBroadcaster
{
return
&
eventBroadcasterImpl
{
watch
.
NewBroadcaster
(
maxQueuedEvents
,
watch
.
DropIfChannelFull
),
sleepDuration
}
}
type
eventBroadcasterImpl
struct
{
*
watch
.
Broadcaster
sleepDuration
time
.
Duration
}
// StartRecordingToSink starts sending events received from the specified eventBroadcaster to the given sink.
...
...
@@ -110,11 +115,11 @@ func (eventBroadcaster *eventBroadcasterImpl) StartRecordingToSink(sink EventSin
eventCorrelator
:=
NewEventCorrelator
(
util
.
RealClock
{})
return
eventBroadcaster
.
StartEventWatcher
(
func
(
event
*
api
.
Event
)
{
recordToSink
(
sink
,
event
,
eventCorrelator
,
randGen
)
recordToSink
(
sink
,
event
,
eventCorrelator
,
randGen
,
eventBroadcaster
.
sleepDuration
)
})
}
func
recordToSink
(
sink
EventSink
,
event
*
api
.
Event
,
eventCorrelator
*
EventCorrelator
,
randGen
*
rand
.
Rand
)
{
func
recordToSink
(
sink
EventSink
,
event
*
api
.
Event
,
eventCorrelator
*
EventCorrelator
,
randGen
*
rand
.
Rand
,
sleepDuration
time
.
Duration
)
{
// Make a copy before modification, because there could be multiple listeners.
// Events are safe to copy like this.
eventCopy
:=
*
event
...
...
pkg/client/record/event_test.go
View file @
c6402569
...
...
@@ -33,11 +33,6 @@ import (
"k8s.io/kubernetes/pkg/util/strategicpatch"
)
func
init
()
{
// Don't bother sleeping between retries.
sleepDuration
=
0
}
type
testEventSink
struct
{
OnCreate
func
(
e
*
api
.
Event
)
(
*
api
.
Event
,
error
)
OnUpdate
func
(
e
*
api
.
Event
)
(
*
api
.
Event
,
error
)
...
...
@@ -346,7 +341,7 @@ func TestEventf(t *testing.T) {
},
OnPatch
:
OnPatchFactory
(
testCache
,
patchEvent
),
}
eventBroadcaster
:=
NewBroadcaster
(
)
eventBroadcaster
:=
NewBroadcaster
ForTests
(
0
)
sinkWatcher
:=
eventBroadcaster
.
StartRecordingToSink
(
&
testEvents
)
clock
:=
util
.
NewFakeClock
(
time
.
Now
())
...
...
@@ -431,7 +426,7 @@ func TestWriteEventError(t *testing.T) {
},
}
ev
:=
&
api
.
Event
{}
recordToSink
(
sink
,
ev
,
eventCorrelator
,
randGen
)
recordToSink
(
sink
,
ev
,
eventCorrelator
,
randGen
,
0
)
if
attempts
!=
ent
.
attemptsWanted
{
t
.
Errorf
(
"case %v: wanted %d, got %d attempts"
,
caseName
,
ent
.
attemptsWanted
,
attempts
)
}
...
...
@@ -460,7 +455,7 @@ func TestLotsOfEvents(t *testing.T) {
},
}
eventBroadcaster
:=
NewBroadcaster
(
)
eventBroadcaster
:=
NewBroadcaster
ForTests
(
0
)
sinkWatcher
:=
eventBroadcaster
.
StartRecordingToSink
(
&
testEvents
)
logWatcher
:=
eventBroadcaster
.
StartLogging
(
func
(
formatter
string
,
args
...
interface
{})
{
loggerCalled
<-
struct
{}{}
...
...
@@ -557,7 +552,7 @@ func TestEventfNoNamespace(t *testing.T) {
},
OnPatch
:
OnPatchFactory
(
testCache
,
patchEvent
),
}
eventBroadcaster
:=
NewBroadcaster
(
)
eventBroadcaster
:=
NewBroadcaster
ForTests
(
0
)
sinkWatcher
:=
eventBroadcaster
.
StartRecordingToSink
(
&
testEvents
)
clock
:=
util
.
NewFakeClock
(
time
.
Now
())
...
...
@@ -846,7 +841,7 @@ func TestMultiSinkCache(t *testing.T) {
OnPatch
:
OnPatchFactory
(
testCache2
,
patchEvent2
),
}
eventBroadcaster
:=
NewBroadcaster
(
)
eventBroadcaster
:=
NewBroadcaster
ForTests
(
0
)
clock
:=
util
.
NewFakeClock
(
time
.
Now
())
recorder
:=
recorderWithFakeClock
(
api
.
EventSource
{
Component
:
"eventTest"
},
eventBroadcaster
,
clock
)
...
...
pkg/controller/podautoscaler/horizontal.go
View file @
c6402569
...
...
@@ -65,19 +65,8 @@ type HorizontalController struct {
var
downscaleForbiddenWindow
=
5
*
time
.
Minute
var
upscaleForbiddenWindow
=
3
*
time
.
Minute
func
NewHorizontalController
(
evtNamespacer
unversionedcore
.
EventsGetter
,
scaleNamespacer
unversionedextensions
.
ScalesGetter
,
hpaNamespacer
unversionedextensions
.
HorizontalPodAutoscalersGetter
,
metricsClient
metrics
.
MetricsClient
,
resyncPeriod
time
.
Duration
)
*
HorizontalController
{
broadcaster
:=
record
.
NewBroadcaster
()
broadcaster
.
StartRecordingToSink
(
&
unversionedcore
.
EventSinkImpl
{
evtNamespacer
.
Events
(
""
)})
recorder
:=
broadcaster
.
NewRecorder
(
api
.
EventSource
{
Component
:
"horizontal-pod-autoscaler"
})
controller
:=
&
HorizontalController
{
metricsClient
:
metricsClient
,
eventRecorder
:
recorder
,
scaleNamespacer
:
scaleNamespacer
,
hpaNamespacer
:
hpaNamespacer
,
}
controller
.
store
,
controller
.
controller
=
framework
.
NewInformer
(
func
newInformer
(
controller
*
HorizontalController
,
resyncPeriod
time
.
Duration
)
(
cache
.
Store
,
*
framework
.
Controller
)
{
return
framework
.
NewInformer
(
&
cache
.
ListWatch
{
ListFunc
:
func
(
options
api
.
ListOptions
)
(
runtime
.
Object
,
error
)
{
return
controller
.
hpaNamespacer
.
HorizontalPodAutoscalers
(
api
.
NamespaceAll
)
.
List
(
options
)
...
...
@@ -111,6 +100,22 @@ func NewHorizontalController(evtNamespacer unversionedcore.EventsGetter, scaleNa
// We are not interested in deletions.
},
)
}
func
NewHorizontalController
(
evtNamespacer
unversionedcore
.
EventsGetter
,
scaleNamespacer
unversionedextensions
.
ScalesGetter
,
hpaNamespacer
unversionedextensions
.
HorizontalPodAutoscalersGetter
,
metricsClient
metrics
.
MetricsClient
,
resyncPeriod
time
.
Duration
)
*
HorizontalController
{
broadcaster
:=
record
.
NewBroadcaster
()
broadcaster
.
StartRecordingToSink
(
&
unversionedcore
.
EventSinkImpl
{
evtNamespacer
.
Events
(
""
)})
recorder
:=
broadcaster
.
NewRecorder
(
api
.
EventSource
{
Component
:
"horizontal-pod-autoscaler"
})
controller
:=
&
HorizontalController
{
metricsClient
:
metricsClient
,
eventRecorder
:
recorder
,
scaleNamespacer
:
scaleNamespacer
,
hpaNamespacer
:
hpaNamespacer
,
}
store
,
frameworkController
:=
newInformer
(
controller
,
resyncPeriod
)
controller
.
store
=
store
controller
.
controller
=
frameworkController
return
controller
}
...
...
pkg/controller/podautoscaler/horizontal_test.go
View file @
c6402569
...
...
@@ -29,8 +29,10 @@ import (
_
"k8s.io/kubernetes/pkg/apimachinery/registered"
"k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
"k8s.io/kubernetes/pkg/client/record"
"k8s.io/kubernetes/pkg/client/restclient"
"k8s.io/kubernetes/pkg/client/testing/core"
unversionedcore
"k8s.io/kubernetes/pkg/client/typed/generated/core/unversioned"
"k8s.io/kubernetes/pkg/client/unversioned/testclient"
"k8s.io/kubernetes/pkg/controller/podautoscaler/metrics"
"k8s.io/kubernetes/pkg/runtime"
...
...
@@ -329,13 +331,29 @@ func (tc *testCase) verifyResults(t *testing.T) {
func
(
tc
*
testCase
)
runTest
(
t
*
testing
.
T
)
{
testClient
:=
tc
.
prepareTestClient
(
t
)
metricsClient
:=
metrics
.
NewHeapsterMetricsClient
(
testClient
,
metrics
.
DefaultHeapsterNamespace
,
metrics
.
DefaultHeapsterScheme
,
metrics
.
DefaultHeapsterService
,
metrics
.
DefaultHeapsterPort
)
hpaController
:=
NewHorizontalController
(
testClient
.
Core
(),
testClient
.
Extensions
(),
testClient
.
Extensions
(),
metricsClient
,
0
)
broadcaster
:=
record
.
NewBroadcasterForTests
(
0
)
broadcaster
.
StartRecordingToSink
(
&
unversionedcore
.
EventSinkImpl
{
testClient
.
Core
()
.
Events
(
""
)})
recorder
:=
broadcaster
.
NewRecorder
(
api
.
EventSource
{
Component
:
"horizontal-pod-autoscaler"
})
hpaController
:=
&
HorizontalController
{
metricsClient
:
metricsClient
,
eventRecorder
:
recorder
,
scaleNamespacer
:
testClient
.
Extensions
(),
hpaNamespacer
:
testClient
.
Extensions
(),
}
store
,
frameworkController
:=
newInformer
(
hpaController
,
time
.
Minute
)
hpaController
.
store
=
store
hpaController
.
controller
=
frameworkController
stop
:=
make
(
chan
struct
{})
defer
close
(
stop
)
go
hpaController
.
Run
(
stop
)
if
tc
.
verifyEvents
{
// We need to wait for events to be broadcasted (sleep for longer than record.sleepDuration).
time
.
Sleep
(
1
2
*
time
.
Second
)
time
.
Sleep
(
2
*
time
.
Second
)
}
// Wait for HPA to be processed.
<-
tc
.
processed
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment