Skip to content

Commit d83a1ce

Browse files
authored
[Feature] Agency Lock bugfix (#1335)
1 parent de90967 commit d83a1ce

File tree

16 files changed

+174
-430
lines changed

16 files changed

+174
-430
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
- (Feature) Metrics Counter
77
- (Feature) Requests Bytes Counter
88
- (Feature) Agency Poll System
9+
- (Bugfix) (CE) Agency Lock bugfix
910

1011
## [1.2.29](https://github.com/arangodb/kube-arangodb/tree/1.2.29) (2023-06-08)
1112
- (Maintenance) Add govulncheck to pipeline, update golangci-linter

pkg/debug_package/cli/cli.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import "github.com/spf13/cobra"
2424

2525
func Register(cmd *cobra.Command) {
2626
f := cmd.Flags()
27-
f.StringVar(&input.Namespace, "namespace", "default", "Kubernetes namespace")
27+
f.StringVarP(&input.Namespace, "namespace", "n", "default", "Kubernetes namespace")
2828
f.BoolVar(&input.HideSensitiveData, "hide-sensitive-data", true, "Hide sensitive data")
2929
f.BoolVar(&input.PodLogs, "pod-logs", true, "Collect pod logs")
3030
}

pkg/debug_package/generators/kubernetes/agency.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func agencyDump(logger zerolog.Logger, files chan<- shared.File) error {
5151
return errors.Newf("Client is not initialised")
5252
}
5353

54-
deployments, err := ListDeployments(k)
54+
deployments, err := listArangoDeployments(k.Arango())()
5555
if err != nil {
5656
return err
5757
}
@@ -102,7 +102,7 @@ func discoverExecFunc() (ArangoOperatorExecFunc, error) {
102102
return nil, errors.Newf("Client is not initialised")
103103
}
104104

105-
pods, err := ListPods(k)
105+
pods, err := listPods(k.Kubernetes())()
106106
if err != nil {
107107
return nil, err
108108
}

pkg/debug_package/generators/kubernetes/deployments.go renamed to pkg/debug_package/generators/kubernetes/arango_deployments.go

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
3131
"github.com/arangodb/kube-arangodb/pkg/debug_package/cli"
3232
"github.com/arangodb/kube-arangodb/pkg/debug_package/shared"
33+
arangoClient "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned"
3334
"github.com/arangodb/kube-arangodb/pkg/util/errors"
3435
"github.com/arangodb/kube-arangodb/pkg/util/kclient"
3536
)
@@ -38,20 +39,32 @@ func Deployments() shared.Factory {
3839
return shared.NewFactory("deployments", true, deployments)
3940
}
4041

42+
func listArangoDeployments(client arangoClient.Interface) func() ([]*api.ArangoDeployment, error) {
43+
return func() ([]*api.ArangoDeployment, error) {
44+
return ListObjects[*api.ArangoDeploymentList, *api.ArangoDeployment](context.Background(), client.DatabaseV1().ArangoDeployments(cli.GetInput().Namespace), func(result *api.ArangoDeploymentList) []*api.ArangoDeployment {
45+
q := make([]*api.ArangoDeployment, len(result.Items))
46+
47+
for id, e := range result.Items {
48+
q[id] = e.DeepCopy()
49+
}
50+
51+
return q
52+
})
53+
}
54+
}
55+
4156
func deployments(logger zerolog.Logger, files chan<- shared.File) error {
4257
k, ok := kclient.GetDefaultFactory().Client()
4358
if !ok {
4459
return errors.Newf("Client is not initialised")
4560
}
4661

47-
deployments, err := ListDeployments(k)
62+
deploymentList, err := listArangoDeployments(k.Arango())()
4863
if err != nil {
4964
return err
5065
}
5166

52-
deploymentList := deployments.AsList()
53-
54-
errDeployments := make([]error, len(deployments))
67+
errDeployments := make([]error, len(deploymentList))
5568

5669
for id := range deploymentList {
5770
errDeployments[id] = deployment(k, deploymentList[id], files)

pkg/debug_package/generators/kubernetes/events.go

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,13 @@
2121
package kubernetes
2222

2323
import (
24+
"context"
25+
2426
"github.com/rs/zerolog"
27+
core "k8s.io/api/core/v1"
28+
"k8s.io/client-go/kubernetes"
2529

30+
"github.com/arangodb/kube-arangodb/pkg/debug_package/cli"
2631
"github.com/arangodb/kube-arangodb/pkg/debug_package/shared"
2732
"github.com/arangodb/kube-arangodb/pkg/util/errors"
2833
"github.com/arangodb/kube-arangodb/pkg/util/kclient"
@@ -32,26 +37,27 @@ func Events() shared.Factory {
3237
return shared.NewFactory("kubernetes-events", true, events)
3338
}
3439

40+
func listEvents(client kubernetes.Interface) func() ([]*core.Event, error) {
41+
return func() ([]*core.Event, error) {
42+
return ListObjects[*core.EventList, *core.Event](context.Background(), client.CoreV1().Events(cli.GetInput().Namespace), func(result *core.EventList) []*core.Event {
43+
q := make([]*core.Event, len(result.Items))
44+
45+
for id, e := range result.Items {
46+
q[id] = e.DeepCopy()
47+
}
48+
49+
return q
50+
})
51+
}
52+
}
53+
3554
func events(logger zerolog.Logger, files chan<- shared.File) error {
3655
k, ok := kclient.GetDefaultFactory().Client()
3756
if !ok {
3857
return errors.Newf("Client is not initialised")
3958
}
4059

41-
events, err := ListEvents(k)
42-
if err != nil {
43-
return err
44-
}
45-
46-
files <- shared.NewYAMLFile("kubernetes/events.yaml", func() ([]interface{}, error) {
47-
q := make([]interface{}, 0, len(events))
48-
49-
for _, e := range events {
50-
q = append(q, e)
51-
}
52-
53-
return q, nil
54-
})
60+
files <- shared.NewYAMLFile("kubernetes/events.yaml", listEvents(k.Kubernetes()))
5561

5662
return nil
5763
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
//
2+
// DISCLAIMER
3+
//
4+
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
5+
//
6+
// Licensed under the Apache License, Version 2.0 (the "License");
7+
// you may not use this file except in compliance with the License.
8+
// You may obtain a copy of the License at
9+
//
10+
// http://www.apache.org/licenses/LICENSE-2.0
11+
//
12+
// Unless required by applicable law or agreed to in writing, software
13+
// distributed under the License is distributed on an "AS IS" BASIS,
14+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
// See the License for the specific language governing permissions and
16+
// limitations under the License.
17+
//
18+
// Copyright holder is ArangoDB GmbH, Cologne, Germany
19+
//
20+
21+
package kubernetes
22+
23+
import (
24+
"context"
25+
26+
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
27+
"k8s.io/apimachinery/pkg/types"
28+
29+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
30+
)
31+
32+
type ObjectList[T meta.Object] map[types.UID]T
33+
34+
func (d ObjectList[T]) AsList() []T {
35+
list := make([]T, 0, len(d))
36+
for _, p := range d {
37+
list = append(list, p)
38+
}
39+
40+
return list
41+
}
42+
43+
func MapObjects[L k8sutil.ListContinue, T meta.Object](ctx context.Context, k k8sutil.ListAPI[L], extract func(result L) []T) (ObjectList[T], error) {
44+
objects := ObjectList[T]{}
45+
46+
if err := k8sutil.APIList[L](ctx, k, meta.ListOptions{}, func(result L, err error) error {
47+
if err != nil {
48+
return err
49+
}
50+
for _, obj := range extract(result) {
51+
obj.SetManagedFields(nil)
52+
53+
objects[obj.GetUID()] = obj
54+
}
55+
56+
return nil
57+
}); err != nil {
58+
return nil, err
59+
}
60+
61+
return objects, nil
62+
}
63+
64+
func ListObjects[L k8sutil.ListContinue, T meta.Object](ctx context.Context, k k8sutil.ListAPI[L], extract func(result L) []T) ([]T, error) {
65+
objects, err := MapObjects[L, T](ctx, k, extract)
66+
if err != nil {
67+
return nil, err
68+
}
69+
70+
return objects.AsList(), nil
71+
}

pkg/debug_package/generators/kubernetes/lister_deployment.go

Lines changed: 0 additions & 70 deletions
This file was deleted.

pkg/debug_package/generators/kubernetes/lister_events.go

Lines changed: 0 additions & 70 deletions
This file was deleted.

0 commit comments

Comments
 (0)