Skip to content

Commit fc7652d

Browse files
authored
[Fix] 1.2.16-preview-1 fix pack (#1104)
1 parent 156ed49 commit fc7652d

13 files changed

+180
-5
lines changed

docs/generated/metrics/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,6 @@
2323
| [arangodb_operator_rebalancer_moves_succeeded](./arangodb_operator_rebalancer_moves_succeeded.md) | arangodb_operator | rebalancer | Counter | Define how many moves succeeded |
2424
| [arangodb_operator_resources_arangodeployment_accepted](./arangodb_operator_resources_arangodeployment_accepted.md) | arangodb_operator | resources | Gauge | Defines if ArangoDeployment has been accepted |
2525
| [arangodb_operator_resources_arangodeployment_immutable_errors](./arangodb_operator_resources_arangodeployment_immutable_errors.md) | arangodb_operator | resources | Counter | Counter for deployment immutable errors |
26+
| [arangodb_operator_resources_arangodeployment_status_restores](./arangodb_operator_resources_arangodeployment_status_restores.md) | arangodb_operator | resources | Counter | Counter for deployment status restored |
2627
| [arangodb_operator_resources_arangodeployment_uptodate](./arangodb_operator_resources_arangodeployment_uptodate.md) | arangodb_operator | resources | Gauge | Defines if ArangoDeployment is uptodate |
2728
| [arangodb_operator_resources_arangodeployment_validation_errors](./arangodb_operator_resources_arangodeployment_validation_errors.md) | arangodb_operator | resources | Counter | Counter for deployment validation errors |
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# arangodb_operator_resources_arangodeployment_status_restores (Counter)
2+
3+
## Description
4+
5+
Counter for deployment status restored
6+
7+
## Labels
8+
9+
| Label | Description |
10+
|:---------:|:---------------------|
11+
| namespace | Deployment Namespace |
12+
| name | Deployment Name |

internal/metrics.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,15 @@ namespaces:
150150
- key: name
151151
description: "Deployment Name"
152152
resources:
153+
arangodeployment_status_restores:
154+
shortDescription: "Counter for deployment status restored"
155+
description: "Counter for deployment status restored"
156+
type: "Counter"
157+
labels:
158+
- key: namespace
159+
description: "Deployment Namespace"
160+
- key: name
161+
description: "Deployment Name"
153162
arangodeployment_validation_errors:
154163
shortDescription: "Counter for deployment validation errors"
155164
description: "Counter for deployment validation errors"

pkg/apis/deployment/v1/member_status.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,9 @@ type MemberStatus struct {
7777
// Endpoint definition how member should be reachable
7878
Endpoint *string `json:"endpoint,omitempty"`
7979
// Topology define topology member status assignment
80-
Topology *TopologyMemberStatus `json:"topology,omitempty"`
81-
Pod *MemberPodStatus `json:"pod,omitempty"`
80+
Topology *TopologyMemberStatus `json:"topology,omitempty"`
81+
Pod *MemberPodStatus `json:"pod,omitempty"`
82+
SecondaryPod *MemberPodStatus `json:"secondaryPod,omitempty"`
8283

8384
// deprecated
8485
// SideCarSpecs contains list of specifications specified for side cars
@@ -104,6 +105,7 @@ func (s MemberStatus) Equal(other MemberStatus) bool {
104105
util.TimeCompareEqual(s.CreatedAt, other.CreatedAt) &&
105106
s.PersistentVolumeClaimName == other.PersistentVolumeClaimName &&
106107
s.Pod.Equal(other.Pod) &&
108+
s.SecondaryPod.Equal(other.SecondaryPod) &&
107109
s.Conditions.Equal(other.Conditions) &&
108110
s.IsInitialized == other.IsInitialized &&
109111
s.CleanoutJobID == other.CleanoutJobID &&

pkg/apis/deployment/v1/zz_generated.deepcopy.go

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/apis/deployment/v2alpha1/member_status.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,9 @@ type MemberStatus struct {
7777
// Endpoint definition how member should be reachable
7878
Endpoint *string `json:"endpoint,omitempty"`
7979
// Topology define topology member status assignment
80-
Topology *TopologyMemberStatus `json:"topology,omitempty"`
81-
Pod *MemberPodStatus `json:"pod,omitempty"`
80+
Topology *TopologyMemberStatus `json:"topology,omitempty"`
81+
Pod *MemberPodStatus `json:"pod,omitempty"`
82+
SecondaryPod *MemberPodStatus `json:"secondaryPod,omitempty"`
8283

8384
// deprecated
8485
// SideCarSpecs contains list of specifications specified for side cars
@@ -104,6 +105,7 @@ func (s MemberStatus) Equal(other MemberStatus) bool {
104105
util.TimeCompareEqual(s.CreatedAt, other.CreatedAt) &&
105106
s.PersistentVolumeClaimName == other.PersistentVolumeClaimName &&
106107
s.Pod.Equal(other.Pod) &&
108+
s.SecondaryPod.Equal(other.SecondaryPod) &&
107109
s.Conditions.Equal(other.Conditions) &&
108110
s.IsInitialized == other.IsInitialized &&
109111
s.CleanoutJobID == other.CleanoutJobID &&

pkg/apis/deployment/v2alpha1/zz_generated.deepcopy.go

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/deployment/deployment_inspector.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,26 @@ func (d *Deployment) inspectDeployment(lastInterval util.Interval) util.Interval
114114

115115
// Ensure that status is up to date
116116
if !d.currentObjectStatus.Equal(updated.Status) {
117+
d.metrics.Errors.StatusRestores++
117118
if err := d.updateCRStatus(ctxReconciliation, *d.currentObjectStatus); err != nil {
118119
d.log.Err(err).Error("Unable to refresh status")
119120
return minInspectionInterval // Retry ASAP
120121
}
121122
}
122123

124+
// Ensure that fields are recovered
125+
currentStatus := d.GetStatus()
126+
if updated, err := RecoverStatus(&currentStatus, RecoverPodDetails); err != nil {
127+
d.log.Err(err).Error("Unable to recover status")
128+
return minInspectionInterval // Retry ASAP
129+
} else if updated {
130+
d.metrics.Errors.StatusRestores++
131+
if err := d.updateCRStatus(ctxReconciliation, currentStatus); err != nil {
132+
d.log.Err(err).Error("Unable to refresh status")
133+
return minInspectionInterval // Retry ASAP
134+
}
135+
}
136+
123137
d.currentObject = updated
124138

125139
d.metrics.Deployment.Accepted = updated.Status.Conditions.IsTrue(api.ConditionTypeSpecAccepted)
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
//
2+
// DISCLAIMER
3+
//
4+
// Copyright 2016-2022 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 deployment
22+
23+
import api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
24+
25+
func RecoverPodDetails(in *api.DeploymentStatus) (changed bool, _ error) {
26+
changed = false
27+
for _, m := range in.Members.AsList() {
28+
if m.Member.Pod == nil {
29+
// Pod is nil, recovery might be needed
30+
if m.Member.PodName != "" {
31+
m.Member.Pod = &api.MemberPodStatus{
32+
Name: m.Member.PodName,
33+
UID: m.Member.PodUID,
34+
SpecVersion: m.Member.PodSpecVersion,
35+
}
36+
37+
if err := in.Members.Update(m.Member, m.Group); err != nil {
38+
return false, err
39+
}
40+
changed = true
41+
}
42+
}
43+
}
44+
return
45+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//
2+
// DISCLAIMER
3+
//
4+
// Copyright 2016-2022 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 deployment
22+
23+
import api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
24+
25+
type RecoverStatusFunc func(in *api.DeploymentStatus) (bool, error)
26+
27+
func RecoverStatus(in *api.DeploymentStatus, fs ...RecoverStatusFunc) (bool, error) {
28+
var changed bool
29+
for _, f := range fs {
30+
if f != nil {
31+
if c, err := f(in); err != nil {
32+
return false, err
33+
} else if c {
34+
changed = true
35+
}
36+
}
37+
}
38+
return changed, nil
39+
}

0 commit comments

Comments
 (0)