Skip to content

Commit b9569ab

Browse files
acrmpBen Fullerrroberts2222ctlong
committed
Converge metric tags (#56)
* Correct log messages for internal route converge - Desired and actual LRP messages were switched in reporting of errors associated with decrypting and parsing routes - Swap desired and actual messages so that the errors are correct cloudfoundry/diego-release#662 * Migration to add metric tags to actual_lrps table - Also ensure metric_tags column is encrypted cloudfoundry/diego-release#662 * Remove unnecessary references to types cloudfoundry/diego-release#662 * Persist metric tags against actual lrps - Extends StartActualLRP and EvacuateRunningActualLRP to accept metric tags - Will enable us to implement convergence for metric tags - At this point we've chosen not to bump the revision on these internal endpoints cloudfoundry/diego-release#662 Co-authored-by: Andrew Crump <[email protected]> * Include metric tags when converging LRPs cloudfoundry/diego-release#662 Co-authored-by: Rebecca Roberts <[email protected]> Co-authored-by: Carson Long <[email protected]> Co-authored-by: Andrew Crump <[email protected]> * Update BBS internal API docs - StartActualLRP and EvacuateRunningActualLRP were changed to include metric tags - The revision of these endpoints was not incremented as it did not appear to be necessary cloudfoundry/diego-release#662 Co-authored-by: Andrew Crump <[email protected]> * Ignore nil actual lrp metric tags - Prevent attempting to converge metric tags for actual lrps on old reps. cloudfoundry/diego-release#662 Signed-off-by: Ben Fuller <[email protected]> * Delete actuallrps when internal routes or metric tags are invalid - This makes our behaviour consistent with handling of invalid net_info data cloudfoundry/diego-release#662 Co-authored-by: Andrew Crump <[email protected]> * Disallow creation of Desired LRPs with nil metric tags - We ignore Actual LRPs without metric tags when converging metric tags - Require metric tags to be provided on Desired LRPs to avoid creation of Desired LRPs that will fail to converge when metric tags are later set cloudfoundry/diego-release#662 Co-authored-by: Rebecca Roberts <[email protected]> --------- Signed-off-by: Ben Fuller <[email protected]> Co-authored-by: Ben Fuller <[email protected]> Co-authored-by: Rebecca Roberts <[email protected]> Co-authored-by: Carson Long <[email protected]>
1 parent c507a8c commit b9569ab

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+1918
-462
lines changed

client.go

+17-13
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,13 @@ type InternalClient interface {
5050
Client
5151

5252
ClaimActualLRP(logger lager.Logger, key *models.ActualLRPKey, instanceKey *models.ActualLRPInstanceKey) error
53-
StartActualLRP(logger lager.Logger, key *models.ActualLRPKey, instanceKey *models.ActualLRPInstanceKey, netInfo *models.ActualLRPNetInfo, internalRoutes []*models.ActualLRPInternalRoute) error
53+
StartActualLRP(logger lager.Logger, key *models.ActualLRPKey, instanceKey *models.ActualLRPInstanceKey, netInfo *models.ActualLRPNetInfo, internalRoutes []*models.ActualLRPInternalRoute, metricTags map[string]string) error
5454
CrashActualLRP(logger lager.Logger, key *models.ActualLRPKey, instanceKey *models.ActualLRPInstanceKey, errorMessage string) error
5555
FailActualLRP(logger lager.Logger, key *models.ActualLRPKey, errorMessage string) error
5656
RemoveActualLRP(logger lager.Logger, key *models.ActualLRPKey, instanceKey *models.ActualLRPInstanceKey) error
5757

5858
EvacuateClaimedActualLRP(lager.Logger, *models.ActualLRPKey, *models.ActualLRPInstanceKey) (bool, error)
59-
EvacuateRunningActualLRP(lager.Logger, *models.ActualLRPKey, *models.ActualLRPInstanceKey, *models.ActualLRPNetInfo, []*models.ActualLRPInternalRoute) (bool, error)
59+
EvacuateRunningActualLRP(lager.Logger, *models.ActualLRPKey, *models.ActualLRPInstanceKey, *models.ActualLRPNetInfo, []*models.ActualLRPInternalRoute, map[string]string) (bool, error)
6060
EvacuateStoppedActualLRP(lager.Logger, *models.ActualLRPKey, *models.ActualLRPInstanceKey) (bool, error)
6161
EvacuateCrashedActualLRP(lager.Logger, *models.ActualLRPKey, *models.ActualLRPInstanceKey, string) (bool, error)
6262
RemoveEvacuatingActualLRP(lager.Logger, *models.ActualLRPKey, *models.ActualLRPInstanceKey) error
@@ -422,17 +422,21 @@ func (c *client) ClaimActualLRP(logger lager.Logger, key *models.ActualLRPKey, i
422422
return response.Error.ToError()
423423
}
424424

425-
func (c *client) StartActualLRP(logger lager.Logger, key *models.ActualLRPKey, instanceKey *models.ActualLRPInstanceKey, netInfo *models.ActualLRPNetInfo, internalRoutes []*models.ActualLRPInternalRoute) error {
426-
request := models.StartActualLRPRequest{
425+
func (c *client) StartActualLRP(logger lager.Logger, key *models.ActualLRPKey, instanceKey *models.ActualLRPInstanceKey, netInfo *models.ActualLRPNetInfo, internalRoutes []*models.ActualLRPInternalRoute, metricTags map[string]string) error {
426+
response := models.ActualLRPLifecycleResponse{}
427+
err := c.doRequest(logger, StartActualLRPRoute_r1, nil, nil, &models.StartActualLRPRequest{
427428
ActualLrpKey: key,
428429
ActualLrpInstanceKey: instanceKey,
429430
ActualLrpNetInfo: netInfo,
430431
ActualLrpInternalRoutes: internalRoutes,
431-
}
432-
response := models.ActualLRPLifecycleResponse{}
433-
err := c.doRequest(logger, StartActualLRPRoute_r1, nil, nil, &request, &response)
432+
MetricTags: metricTags,
433+
}, &response)
434434
if err != nil && err == EndpointNotFoundErr {
435-
err = c.doRequest(logger, StartActualLRPRoute_r0, nil, nil, &request, &response)
435+
err = c.doRequest(logger, StartActualLRPRoute_r0, nil, nil, &models.StartActualLRPRequest{
436+
ActualLrpKey: key,
437+
ActualLrpInstanceKey: instanceKey,
438+
ActualLrpNetInfo: netInfo,
439+
}, &response)
436440
}
437441

438442
if err != nil {
@@ -520,19 +524,19 @@ func (c *client) EvacuateStoppedActualLRP(logger lager.Logger, key *models.Actua
520524
})
521525
}
522526

523-
func (c *client) EvacuateRunningActualLRP(logger lager.Logger, key *models.ActualLRPKey, instanceKey *models.ActualLRPInstanceKey, netInfo *models.ActualLRPNetInfo, internalRoutes []*models.ActualLRPInternalRoute) (bool, error) {
527+
func (c *client) EvacuateRunningActualLRP(logger lager.Logger, key *models.ActualLRPKey, instanceKey *models.ActualLRPInstanceKey, netInfo *models.ActualLRPNetInfo, internalRoutes []*models.ActualLRPInternalRoute, metricTags map[string]string) (bool, error) {
524528
keepContainer, err := c.doEvacRequest(logger, EvacuateRunningActualLRPRoute_r1, KeepContainer, &models.EvacuateRunningActualLRPRequest{
525529
ActualLrpKey: key,
526530
ActualLrpInstanceKey: instanceKey,
527531
ActualLrpNetInfo: netInfo,
528532
ActualLrpInternalRoutes: internalRoutes,
533+
MetricTags: metricTags,
529534
})
530535
if err != nil && err == EndpointNotFoundErr {
531536
keepContainer, err = c.doEvacRequest(logger, EvacuateRunningActualLRPRoute_r0, KeepContainer, &models.EvacuateRunningActualLRPRequest{
532-
ActualLrpKey: key,
533-
ActualLrpInstanceKey: instanceKey,
534-
ActualLrpNetInfo: netInfo,
535-
ActualLrpInternalRoutes: internalRoutes,
537+
ActualLrpKey: key,
538+
ActualLrpInstanceKey: instanceKey,
539+
ActualLrpNetInfo: netInfo,
536540
})
537541
}
538542

client_test.go

+64-8
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
"code.cloudfoundry.org/bbs"
1111
"code.cloudfoundry.org/bbs/models"
12+
"code.cloudfoundry.org/bbs/models/test/model_helpers"
1213
"code.cloudfoundry.org/lager"
1314
"code.cloudfoundry.org/lager/lagertest"
1415
"code.cloudfoundry.org/tlsconfig"
@@ -58,6 +59,26 @@ var _ = Describe("Client", func() {
5859
Expect(err).ToNot(HaveOccurred())
5960
})
6061
Context("StartActualLRP", func() {
62+
It("populates the request", func() {
63+
actualLRP := model_helpers.NewValidActualLRP("some-guid", 0)
64+
bbsServer.AppendHandlers(
65+
ghttp.CombineHandlers(
66+
ghttp.VerifyRequest("POST", "/v1/actual_lrps/start.r1"),
67+
ghttp.VerifyProtoRepresenting(&models.StartActualLRPRequest{
68+
ActualLrpKey: &actualLRP.ActualLRPKey,
69+
ActualLrpInstanceKey: &actualLRP.ActualLRPInstanceKey,
70+
ActualLrpNetInfo: &actualLRP.ActualLRPNetInfo,
71+
ActualLrpInternalRoutes: actualLRP.ActualLrpInternalRoutes,
72+
MetricTags: actualLRP.MetricTags,
73+
}),
74+
ghttp.RespondWithProto(200, &models.ActualLRPLifecycleResponse{Error: nil}),
75+
),
76+
)
77+
78+
err := internalClient.StartActualLRP(logger, &actualLRP.ActualLRPKey, &actualLRP.ActualLRPInstanceKey, &actualLRP.ActualLRPNetInfo, actualLRP.ActualLrpInternalRoutes, actualLRP.MetricTags)
79+
Expect(err).NotTo(HaveOccurred())
80+
})
81+
6182
It("Calls the current endpoint", func() {
6283
bbsServer.AppendHandlers(
6384
ghttp.CombineHandlers(
@@ -66,23 +87,31 @@ var _ = Describe("Client", func() {
6687
),
6788
)
6889

69-
err := internalClient.StartActualLRP(logger, &models.ActualLRPKey{}, &models.ActualLRPInstanceKey{}, &models.ActualLRPNetInfo{}, []*models.ActualLRPInternalRoute{})
90+
err := internalClient.StartActualLRP(logger, &models.ActualLRPKey{}, &models.ActualLRPInstanceKey{}, &models.ActualLRPNetInfo{}, []*models.ActualLRPInternalRoute{}, map[string]string{})
7091
Expect(err).NotTo(HaveOccurred())
7192
})
7293

7394
It("Falls back to the deprecated endpoint if the current endpoint returns a 404", func() {
95+
actualLRP := model_helpers.NewValidActualLRP("some-guid", 0)
7496
bbsServer.AppendHandlers(
7597
ghttp.CombineHandlers(
7698
ghttp.VerifyRequest("POST", "/v1/actual_lrps/start.r1"),
7799
ghttp.RespondWith(http.StatusNotFound, nil),
78100
),
79101
ghttp.CombineHandlers(
80102
ghttp.VerifyRequest("POST", "/v1/actual_lrps/start"),
103+
ghttp.VerifyProtoRepresenting(&models.StartActualLRPRequest{
104+
ActualLrpKey: &actualLRP.ActualLRPKey,
105+
ActualLrpInstanceKey: &actualLRP.ActualLRPInstanceKey,
106+
ActualLrpNetInfo: &actualLRP.ActualLRPNetInfo,
107+
ActualLrpInternalRoutes: nil,
108+
MetricTags: nil,
109+
}),
81110
ghttp.RespondWithProto(200, &models.ActualLRPLifecycleResponse{Error: nil}),
82111
),
83112
)
84113

85-
err := internalClient.StartActualLRP(logger, &models.ActualLRPKey{}, &models.ActualLRPInstanceKey{}, &models.ActualLRPNetInfo{}, []*models.ActualLRPInternalRoute{})
114+
err := internalClient.StartActualLRP(logger, &actualLRP.ActualLRPKey, &actualLRP.ActualLRPInstanceKey, &actualLRP.ActualLRPNetInfo, actualLRP.ActualLrpInternalRoutes, actualLRP.MetricTags)
86115
Expect(err).NotTo(HaveOccurred())
87116
})
88117

@@ -94,7 +123,7 @@ var _ = Describe("Client", func() {
94123
),
95124
)
96125

97-
err := internalClient.StartActualLRP(logger, &models.ActualLRPKey{}, &models.ActualLRPInstanceKey{}, &models.ActualLRPNetInfo{}, []*models.ActualLRPInternalRoute{})
126+
err := internalClient.StartActualLRP(logger, &models.ActualLRPKey{}, &models.ActualLRPInstanceKey{}, &models.ActualLRPNetInfo{}, []*models.ActualLRPInternalRoute{}, map[string]string{})
98127
Expect(err).To(MatchError("Invalid Response with status code: 403"))
99128
})
100129

@@ -110,12 +139,31 @@ var _ = Describe("Client", func() {
110139
),
111140
)
112141

113-
err := internalClient.StartActualLRP(logger, &models.ActualLRPKey{}, &models.ActualLRPInstanceKey{}, &models.ActualLRPNetInfo{}, []*models.ActualLRPInternalRoute{})
142+
err := internalClient.StartActualLRP(logger, &models.ActualLRPKey{}, &models.ActualLRPInstanceKey{}, &models.ActualLRPNetInfo{}, []*models.ActualLRPInternalRoute{}, map[string]string{})
114143
Expect(err).To(MatchError("Invalid Response with status code: 403"))
115144
})
116145
})
117146

118147
Context("evacuateRunningActualLrp", func() {
148+
It("populates the request", func() {
149+
actualLRP := model_helpers.NewValidActualLRP("some-guid", 0)
150+
bbsServer.AppendHandlers(
151+
ghttp.CombineHandlers(
152+
ghttp.VerifyRequest("POST", "/v1/actual_lrps/evacuate_running.r1"),
153+
ghttp.VerifyProtoRepresenting(&models.EvacuateRunningActualLRPRequest{
154+
ActualLrpKey: &actualLRP.ActualLRPKey,
155+
ActualLrpInstanceKey: &actualLRP.ActualLRPInstanceKey,
156+
ActualLrpNetInfo: &actualLRP.ActualLRPNetInfo,
157+
ActualLrpInternalRoutes: actualLRP.ActualLrpInternalRoutes,
158+
MetricTags: actualLRP.MetricTags,
159+
}),
160+
ghttp.RespondWithProto(200, &models.EvacuationResponse{KeepContainer: true, Error: nil}),
161+
),
162+
)
163+
164+
_, err := internalClient.EvacuateRunningActualLRP(logger, &actualLRP.ActualLRPKey, &actualLRP.ActualLRPInstanceKey, &actualLRP.ActualLRPNetInfo, actualLRP.ActualLrpInternalRoutes, actualLRP.MetricTags)
165+
Expect(err).NotTo(HaveOccurred())
166+
})
119167
It("Calls the current endpoint", func() {
120168
bbsServer.AppendHandlers(
121169
ghttp.CombineHandlers(
@@ -124,23 +172,31 @@ var _ = Describe("Client", func() {
124172
),
125173
)
126174

127-
_, err := internalClient.EvacuateRunningActualLRP(logger, &models.ActualLRPKey{}, &models.ActualLRPInstanceKey{}, &models.ActualLRPNetInfo{}, []*models.ActualLRPInternalRoute{})
175+
_, err := internalClient.EvacuateRunningActualLRP(logger, &models.ActualLRPKey{}, &models.ActualLRPInstanceKey{}, &models.ActualLRPNetInfo{}, []*models.ActualLRPInternalRoute{}, map[string]string{})
128176
Expect(err).NotTo(HaveOccurred())
129177
})
130178

131179
It("Falls back to the deprecated endpoint if the current endpoint returns a 404", func() {
180+
actualLRP := model_helpers.NewValidActualLRP("some-guid", 0)
132181
bbsServer.AppendHandlers(
133182
ghttp.CombineHandlers(
134183
ghttp.VerifyRequest("POST", "/v1/actual_lrps/evacuate_running.r1"),
135184
ghttp.RespondWith(http.StatusNotFound, nil),
136185
),
137186
ghttp.CombineHandlers(
138187
ghttp.VerifyRequest("POST", "/v1/actual_lrps/evacuate_running"),
188+
ghttp.VerifyProtoRepresenting(&models.EvacuateRunningActualLRPRequest{
189+
ActualLrpKey: &actualLRP.ActualLRPKey,
190+
ActualLrpInstanceKey: &actualLRP.ActualLRPInstanceKey,
191+
ActualLrpNetInfo: &actualLRP.ActualLRPNetInfo,
192+
ActualLrpInternalRoutes: nil,
193+
MetricTags: nil,
194+
}),
139195
ghttp.RespondWithProto(200, &models.EvacuationResponse{KeepContainer: true, Error: nil}),
140196
),
141197
)
142198

143-
_, err := internalClient.EvacuateRunningActualLRP(logger, &models.ActualLRPKey{}, &models.ActualLRPInstanceKey{}, &models.ActualLRPNetInfo{}, []*models.ActualLRPInternalRoute{})
199+
_, err := internalClient.EvacuateRunningActualLRP(logger, &actualLRP.ActualLRPKey, &actualLRP.ActualLRPInstanceKey, &actualLRP.ActualLRPNetInfo, actualLRP.ActualLrpInternalRoutes, actualLRP.MetricTags)
144200
Expect(err).NotTo(HaveOccurred())
145201
})
146202

@@ -152,7 +208,7 @@ var _ = Describe("Client", func() {
152208
),
153209
)
154210

155-
_, err := internalClient.EvacuateRunningActualLRP(logger, &models.ActualLRPKey{}, &models.ActualLRPInstanceKey{}, &models.ActualLRPNetInfo{}, []*models.ActualLRPInternalRoute{})
211+
_, err := internalClient.EvacuateRunningActualLRP(logger, &models.ActualLRPKey{}, &models.ActualLRPInstanceKey{}, &models.ActualLRPNetInfo{}, []*models.ActualLRPInternalRoute{}, map[string]string{})
156212
Expect(err).To(MatchError("Invalid Response with status code: 403"))
157213
})
158214

@@ -168,7 +224,7 @@ var _ = Describe("Client", func() {
168224
),
169225
)
170226

171-
_, err := internalClient.EvacuateRunningActualLRP(logger, &models.ActualLRPKey{}, &models.ActualLRPInstanceKey{}, &models.ActualLRPNetInfo{}, []*models.ActualLRPInternalRoute{})
227+
_, err := internalClient.EvacuateRunningActualLRP(logger, &models.ActualLRPKey{}, &models.ActualLRPInstanceKey{}, &models.ActualLRPNetInfo{}, []*models.ActualLRPInternalRoute{}, map[string]string{})
172228
Expect(err).To(MatchError("Invalid Response with status code: 403"))
173229
})
174230
})

0 commit comments

Comments
 (0)