-
Notifications
You must be signed in to change notification settings - Fork 15
/
auction_runner_delegate.go
67 lines (58 loc) · 1.71 KB
/
auction_runner_delegate.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package auctionrunnerdelegate
import (
"code.cloudfoundry.org/bbs"
"code.cloudfoundry.org/rep"
"code.cloudfoundry.org/auction/auctiontypes"
"code.cloudfoundry.org/lager/v3"
)
type AuctionRunnerDelegate struct {
repClientFactory rep.ClientFactory
bbsClient bbs.InternalClient
}
func New(
repClientFactory rep.ClientFactory,
bbsClient bbs.InternalClient,
) *AuctionRunnerDelegate {
return &AuctionRunnerDelegate{
repClientFactory: repClientFactory,
bbsClient: bbsClient,
}
}
func (a *AuctionRunnerDelegate) FetchCellReps(logger lager.Logger, traceID string) (map[string]rep.Client, error) {
cells, err := a.bbsClient.Cells(logger, traceID)
cellReps := map[string]rep.Client{}
if err != nil {
return cellReps, err
}
for _, cell := range cells {
client, err := a.repClientFactory.CreateClient(cell.RepAddress, cell.RepUrl, traceID)
if err != nil {
logger.Error("create-rep-client-failed", err)
continue
}
cellReps[cell.CellId] = client
}
return cellReps, nil
}
func (a *AuctionRunnerDelegate) AuctionCompleted(logger lager.Logger, traceID string, results auctiontypes.AuctionResults) {
for i := range results.FailedTasks {
task := &results.FailedTasks[i]
err := a.bbsClient.RejectTask(logger, traceID, task.TaskGuid, task.PlacementError)
if err != nil {
logger.Error("failed-to-reject-task", err, lager.Data{
"task": task,
"auction-result": "failed",
})
}
}
for i := range results.FailedLRPs {
lrp := &results.FailedLRPs[i]
err := a.bbsClient.FailActualLRP(logger, traceID, &lrp.ActualLRPKey, lrp.PlacementError)
if err != nil {
logger.Error("failed-to-fail-LRP", err, lager.Data{
"lrp": lrp,
"auction-result": "failed",
})
}
}
}