OLD | NEW |
| (Empty) |
1 package task_scheduler | |
2 | |
3 import ( | |
4 "fmt" | |
5 | |
6 "go.skia.org/infra/build_scheduler/go/db" | |
7 ) | |
8 | |
9 // cacheWrapper is an implementation of db.TaskCache which allows insertion of | |
10 // fake Tasks. Use one per task spec. | |
11 type cacheWrapper struct { | |
12 byCommit map[string]*db.Task | |
13 byId map[string]*db.Task | |
14 c db.TaskCache | |
15 known bool | |
16 } | |
17 | |
18 func newCacheWrapper(c db.TaskCache) *cacheWrapper { | |
19 return &cacheWrapper{ | |
20 byCommit: map[string]*db.Task{}, | |
21 byId: map[string]*db.Task{}, | |
22 c: c, | |
23 known: false, | |
24 } | |
25 } | |
26 | |
27 // See documentation for TaskCache interface. | |
28 func (c *cacheWrapper) GetTask(id string) (*db.Task, error) { | |
29 if t, ok := c.byId[id]; ok { | |
30 return t, nil | |
31 } | |
32 return c.c.GetTask(id) | |
33 } | |
34 | |
35 // See documentation for TaskCache interface. | |
36 func (c *cacheWrapper) GetTaskForCommit(repo, commit, name string) (*db.Task, er
ror) { | |
37 if t, ok := c.byCommit[commit]; ok { | |
38 return t, nil | |
39 } | |
40 return c.c.GetTaskForCommit(repo, commit, name) | |
41 } | |
42 | |
43 // See documentation for TaskCache interface. | |
44 func (c *cacheWrapper) GetTasksForCommits(string, []string) (map[string]map[stri
ng]*db.Task, error) { | |
45 return nil, fmt.Errorf("cacheWrapper.GetTasksForCommits not implemented.
") | |
46 } | |
47 | |
48 // See documentation for TaskCache interface. | |
49 func (c *cacheWrapper) KnownTaskName(repo, name string) bool { | |
50 if c.known { | |
51 return true | |
52 } | |
53 return c.c.KnownTaskName(repo, name) | |
54 } | |
55 | |
56 // See documentation for TaskCache interface. | |
57 func (c *cacheWrapper) UnfinishedTasks() ([]*db.Task, error) { | |
58 return nil, fmt.Errorf("cacheWrapper.UnfinishedTasks not implemented.") | |
59 } | |
60 | |
61 // See documentation for TaskCache interface. | |
62 func (c *cacheWrapper) Update() error { | |
63 return fmt.Errorf("cacheWrapper.Update not implemented.") | |
64 } | |
65 | |
66 // insert adds a task to the cacheWrapper's fake layer so that it will be | |
67 // included in query results but not actually inserted into the DB. | |
68 func (c *cacheWrapper) insert(t *db.Task) { | |
69 c.byId[t.Id] = t | |
70 for _, commit := range t.Commits { | |
71 c.byCommit[commit] = t | |
72 } | |
73 c.known = true | |
74 } | |
OLD | NEW |