/
pending.go
85 lines (66 loc) · 2.15 KB
/
pending.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
* SPDX-FileCopyrightText: 2019 SAP SE or an SAP affiliate company and Gardener contributors
*
* SPDX-License-Identifier: Apache-2.0
*/
package legobridge
import (
"sync"
"time"
"github.com/gardener/controller-manager-library/pkg/resources"
)
// PendingCertificateRequests contains the pending certificate requests.
type PendingCertificateRequests struct {
lock sync.Mutex
requests map[resources.ObjectName]time.Time
}
// NewPendingRequests creates a new PendingCertificateRequests
func NewPendingRequests() *PendingCertificateRequests {
return &PendingCertificateRequests{requests: map[resources.ObjectName]time.Time{}}
}
// Add adds a certificate object name.
func (pr *PendingCertificateRequests) Add(name resources.ObjectName) {
pr.lock.Lock()
defer pr.lock.Unlock()
pr.requests[name] = time.Now()
}
// Contains check if a certificate object name is pending.
func (pr *PendingCertificateRequests) Contains(name resources.ObjectName) bool {
pr.lock.Lock()
defer pr.lock.Unlock()
t, ok := pr.requests[name]
return ok && !t.Add(5*time.Minute).Before(time.Now())
}
// Remove removes a certificate object name from the pending list.
func (pr *PendingCertificateRequests) Remove(name resources.ObjectName) {
pr.lock.Lock()
defer pr.lock.Unlock()
delete(pr.requests, name)
}
// PendingResults caches the ObtainOutput results.
type PendingResults struct {
lock sync.Mutex
results map[resources.ObjectName]*ObtainOutput
}
// NewPendingResults creates a new PendingResults.
func NewPendingResults() *PendingResults {
return &PendingResults{results: map[resources.ObjectName]*ObtainOutput{}}
}
// Add adds a object name / ObtainOutput pair.
func (pr *PendingResults) Add(name resources.ObjectName, result *ObtainOutput) {
pr.lock.Lock()
defer pr.lock.Unlock()
pr.results[name] = result
}
// Peek fetches a pending result by object name.
func (pr *PendingResults) Peek(name resources.ObjectName) *ObtainOutput {
pr.lock.Lock()
defer pr.lock.Unlock()
return pr.results[name]
}
// Remove removes a pending result by object name.
func (pr *PendingResults) Remove(name resources.ObjectName) {
pr.lock.Lock()
defer pr.lock.Unlock()
delete(pr.results, name)
}