Skip to content

Commit c55adc3

Browse files
authored
[Bugfix] Remove deadlock in cache (#690)
1 parent e66375b commit c55adc3

File tree

8 files changed

+92
-29
lines changed

8 files changed

+92
-29
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
- Fix AKS Volume Resize mode
55
- Use cached status in member client creation
66
- Remove failed DBServers
7+
- Remove deadlock in internal cache
78

89
## [1.1.4](https://github.com/arangodb/kube-arangodb/tree/1.1.4) (2021-02-15)
910
- Add support for spec.ClusterDomain to be able to use FQDN in ArangoDB cluster communication

pkg/deployment/resources/inspector/pdbs.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,7 @@ type PodDisruptionBudgetFilter func(podDisruptionBudget *policy.PodDisruptionBud
3333
type PodDisruptionBudgetAction func(podDisruptionBudget *policy.PodDisruptionBudget) error
3434

3535
func (i *inspector) IteratePodDisruptionBudgets(action PodDisruptionBudgetAction, filters ...PodDisruptionBudgetFilter) error {
36-
i.lock.Lock()
37-
defer i.lock.Unlock()
38-
39-
for _, podDisruptionBudget := range i.podDisruptionBudgets {
36+
for _, podDisruptionBudget := range i.PodDisruptionBudgets() {
4037
if err := i.iteratePodDisruptionBudget(podDisruptionBudget, action, filters...); err != nil {
4138
return err
4239
}
@@ -54,6 +51,18 @@ func (i *inspector) iteratePodDisruptionBudget(podDisruptionBudget *policy.PodDi
5451
return action(podDisruptionBudget)
5552
}
5653

54+
func (i *inspector) PodDisruptionBudgets() []*policy.PodDisruptionBudget {
55+
i.lock.Lock()
56+
defer i.lock.Unlock()
57+
58+
var r []*policy.PodDisruptionBudget
59+
for _, podDisruptionBudget := range i.podDisruptionBudgets {
60+
r = append(r, podDisruptionBudget)
61+
}
62+
63+
return r
64+
}
65+
5766
func (i *inspector) PodDisruptionBudget(name string) (*policy.PodDisruptionBudget, bool) {
5867
i.lock.Lock()
5968
defer i.lock.Unlock()

pkg/deployment/resources/inspector/pods.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,7 @@ type PodFilter func(pod *core.Pod) bool
3333
type PodAction func(pod *core.Pod) error
3434

3535
func (i *inspector) IteratePods(action PodAction, filters ...PodFilter) error {
36-
i.lock.Lock()
37-
defer i.lock.Unlock()
38-
39-
for _, pod := range i.pods {
36+
for _, pod := range i.Pods() {
4037
if err := i.iteratePod(pod, action, filters...); err != nil {
4138
return err
4239
}
@@ -54,6 +51,18 @@ func (i *inspector) iteratePod(pod *core.Pod, action PodAction, filters ...PodFi
5451
return action(pod)
5552
}
5653

54+
func (i *inspector) Pods() []*core.Pod {
55+
i.lock.Lock()
56+
defer i.lock.Unlock()
57+
58+
var r []*core.Pod
59+
for _, pod := range i.pods {
60+
r = append(r, pod)
61+
}
62+
63+
return r
64+
}
65+
5766
func (i *inspector) Pod(name string) (*core.Pod, bool) {
5867
i.lock.Lock()
5968
defer i.lock.Unlock()

pkg/deployment/resources/inspector/pvcs.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,7 @@ type PersistentVolumeClaimFilter func(pvc *core.PersistentVolumeClaim) bool
3333
type PersistentVolumeClaimAction func(pvc *core.PersistentVolumeClaim) error
3434

3535
func (i *inspector) IteratePersistentVolumeClaims(action PersistentVolumeClaimAction, filters ...PersistentVolumeClaimFilter) error {
36-
i.lock.Lock()
37-
defer i.lock.Unlock()
38-
39-
for _, pvc := range i.pvcs {
36+
for _, pvc := range i.PersistentVolumeClaims() {
4037
if err := i.iteratePersistentVolumeClaim(pvc, action, filters...); err != nil {
4138
return err
4239
}
@@ -54,6 +51,18 @@ func (i *inspector) iteratePersistentVolumeClaim(pvc *core.PersistentVolumeClaim
5451
return action(pvc)
5552
}
5653

54+
func (i *inspector) PersistentVolumeClaims() []*core.PersistentVolumeClaim {
55+
i.lock.Lock()
56+
defer i.lock.Unlock()
57+
58+
var r []*core.PersistentVolumeClaim
59+
for _, persistentVolumeClaim := range i.pvcs {
60+
r = append(r, persistentVolumeClaim)
61+
}
62+
63+
return r
64+
}
65+
5766
func (i *inspector) PersistentVolumeClaim(name string) (*core.PersistentVolumeClaim, bool) {
5867
i.lock.Lock()
5968
defer i.lock.Unlock()

pkg/deployment/resources/inspector/sa.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,7 @@ type ServiceAccountFilter func(serviceAccount *core.ServiceAccount) bool
3333
type ServiceAccountAction func(serviceAccount *core.ServiceAccount) error
3434

3535
func (i *inspector) IterateServiceAccounts(action ServiceAccountAction, filters ...ServiceAccountFilter) error {
36-
i.lock.Lock()
37-
defer i.lock.Unlock()
38-
39-
for _, serviceAccount := range i.serviceAccounts {
36+
for _, serviceAccount := range i.ServiceAccounts() {
4037
if err := i.iterateServiceAccount(serviceAccount, action, filters...); err != nil {
4138
return err
4239
}
@@ -54,6 +51,18 @@ func (i *inspector) iterateServiceAccount(serviceAccount *core.ServiceAccount, a
5451
return action(serviceAccount)
5552
}
5653

54+
func (i *inspector) ServiceAccounts() []*core.ServiceAccount {
55+
i.lock.Lock()
56+
defer i.lock.Unlock()
57+
58+
var r []*core.ServiceAccount
59+
for _, serviceAccount := range i.serviceAccounts {
60+
r = append(r, serviceAccount)
61+
}
62+
63+
return r
64+
}
65+
5766
func (i *inspector) ServiceAccount(name string) (*core.ServiceAccount, bool) {
5867
i.lock.Lock()
5968
defer i.lock.Unlock()

pkg/deployment/resources/inspector/secrets.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,7 @@ type SecretFilter func(pod *core.Secret) bool
3535
type SecretAction func(pod *core.Secret) error
3636

3737
func (i *inspector) IterateSecrets(action SecretAction, filters ...SecretFilter) error {
38-
i.lock.Lock()
39-
defer i.lock.Unlock()
40-
41-
for _, secret := range i.secrets {
38+
for _, secret := range i.Secrets() {
4239
if err := i.iterateSecrets(secret, action, filters...); err != nil {
4340
return err
4441
}
@@ -56,6 +53,18 @@ func (i *inspector) iterateSecrets(secret *core.Secret, action SecretAction, fil
5653
return action(secret)
5754
}
5855

56+
func (i *inspector) Secrets() []*core.Secret {
57+
i.lock.Lock()
58+
defer i.lock.Unlock()
59+
60+
var r []*core.Secret
61+
for _, secret := range i.secrets {
62+
r = append(r, secret)
63+
}
64+
65+
return r
66+
}
67+
5968
func (i *inspector) Secret(name string) (*core.Secret, bool) {
6069
i.lock.Lock()
6170
defer i.lock.Unlock()

pkg/deployment/resources/inspector/services.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,7 @@ type ServiceFilter func(pod *core.Service) bool
3333
type ServiceAction func(pod *core.Service) error
3434

3535
func (i *inspector) IterateServices(action ServiceAction, filters ...ServiceFilter) error {
36-
i.lock.Lock()
37-
defer i.lock.Unlock()
38-
39-
for _, service := range i.services {
36+
for _, service := range i.Services() {
4037
if err := i.iterateServices(service, action, filters...); err != nil {
4138
return err
4239
}
@@ -54,6 +51,18 @@ func (i *inspector) iterateServices(service *core.Service, action ServiceAction,
5451
return action(service)
5552
}
5653

54+
func (i *inspector) Services() []*core.Service {
55+
i.lock.Lock()
56+
defer i.lock.Unlock()
57+
58+
var r []*core.Service
59+
for _, service := range i.services {
60+
r = append(r, service)
61+
}
62+
63+
return r
64+
}
65+
5766
func (i *inspector) Service(name string) (*core.Service, bool) {
5867
i.lock.Lock()
5968
defer i.lock.Unlock()

pkg/deployment/resources/inspector/sms.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,14 @@ import (
2626
"github.com/arangodb/kube-arangodb/pkg/util/errors"
2727
monitoring "github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1"
2828
monitoringClient "github.com/coreos/prometheus-operator/pkg/client/versioned/typed/monitoring/v1"
29-
3029
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
3130
)
3231

3332
type ServiceMonitorFilter func(serviceMonitor *monitoring.ServiceMonitor) bool
3433
type ServiceMonitorAction func(serviceMonitor *monitoring.ServiceMonitor) error
3534

3635
func (i *inspector) IterateServiceMonitors(action ServiceMonitorAction, filters ...ServiceMonitorFilter) error {
37-
i.lock.Lock()
38-
defer i.lock.Unlock()
39-
40-
for _, serviceMonitor := range i.serviceMonitors {
36+
for _, serviceMonitor := range i.ServiceMonitors() {
4137
if err := i.iterateServiceMonitor(serviceMonitor, action, filters...); err != nil {
4238
return err
4339
}
@@ -55,6 +51,18 @@ func (i *inspector) iterateServiceMonitor(serviceMonitor *monitoring.ServiceMoni
5551
return action(serviceMonitor)
5652
}
5753

54+
func (i *inspector) ServiceMonitors() []*monitoring.ServiceMonitor {
55+
i.lock.Lock()
56+
defer i.lock.Unlock()
57+
58+
var r []*monitoring.ServiceMonitor
59+
for _, sms := range i.serviceMonitors {
60+
r = append(r, sms)
61+
}
62+
63+
return r
64+
}
65+
5866
func (i *inspector) ServiceMonitor(name string) (*monitoring.ServiceMonitor, bool) {
5967
i.lock.Lock()
6068
defer i.lock.Unlock()

0 commit comments

Comments
 (0)