@@ -50,8 +50,10 @@ func (r *Reconciler) createMemberPodSchedulingFailurePlan(ctx context.Context,
50
50
return p
51
51
}
52
52
53
+ q := r .log .Str ("step" , "CreateMemberPodSchedulingFailurePlan" )
54
+
53
55
for _ , m := range status .Members .AsList () {
54
- l := r . log .Str ("id" , m .Member .ID ).Str ("role" , m .Group .AsRole ())
56
+ l := q .Str ("id" , m .Member .ID ).Str ("role" , m .Group .AsRole ())
55
57
56
58
if m .Member .Phase != api .MemberPhaseCreated || m .Member .Pod .GetName () == "" {
57
59
// Act only when phase is created
@@ -65,48 +67,54 @@ func (r *Reconciler) createMemberPodSchedulingFailurePlan(ctx context.Context,
65
67
66
68
if c , ok := m .Member .Conditions .Get (api .ConditionTypeScheduled ); ! ok {
67
69
// Action cant proceed if pod is not scheduled
70
+ l .Debug ("Unable to find scheduled condition" )
68
71
continue
69
72
} else if c .LastTransitionTime .IsZero () {
70
73
// LastTransitionTime is not set
74
+ l .Debug ("Scheduled condition LastTransitionTime is zero" )
71
75
continue
72
76
} else {
73
- if time .Since (c .LastTransitionTime .Time ) <= globals .GetGlobalTimeouts ().PodSchedulingGracePeriod ().Get () {
77
+ if d := time .Since (c .LastTransitionTime .Time ); d <= globals .GetGlobalTimeouts ().PodSchedulingGracePeriod ().Get () {
74
78
// In grace period
79
+ l .Dur ("since" , d ).Debug ("Still in grace period" )
75
80
continue
76
81
}
77
82
}
78
83
79
- imageInfo , imageFound := context .SelectImageForMember (spec , status , m .Member )
80
- if ! imageFound {
81
- l .Warn ("could not find image for already created member" )
82
- continue
83
- }
84
-
85
- renderedPod , err := context .RenderPodForMember (ctx , context .ACS (), spec , status , m .Member .ID , imageInfo )
86
- if err != nil {
87
- l .Err (err ).Warn ("could not render pod for already created member" )
88
- continue
89
- }
90
-
91
84
cache , ok := context .ACS ().ClusterCache (m .Member .ClusterID )
92
85
if ! ok {
86
+ l .Warn ("Unable to get member name" )
93
87
continue
94
88
}
95
89
96
90
memberName := m .Member .ArangoMemberName (context .GetName (), m .Group )
97
91
member , ok := cache .ArangoMember ().V1 ().GetSimple (memberName )
98
92
if ! ok {
93
+ l .Warn ("Unable to get ArangoMember" )
99
94
continue
100
95
}
101
96
102
- if template := member .Spec .Template ; template != nil {
103
- if pod := template .PodSpec ; pod != nil {
104
- if ! r .schedulingParametersAreTheSame (renderedPod .Spec , pod .Spec ) {
105
- l .Info ("Adding KillMemberPod action: scheduling failed and parameters already updated" )
106
- p = append (p ,
107
- actions .NewAction (api .ActionTypeKillMemberPod , m .Group , m .Member , "Scheduling failed" ),
108
- )
97
+ if m .Member .Conditions .IsTrue (api .ConditionTypeScheduleSpecChanged ) {
98
+ l .Info ("Adding KillMemberPod action: scheduling failed and scheduling changed condition is present" )
99
+ p = append (p ,
100
+ actions .NewAction (api .ActionTypeKillMemberPod , m .Group , m .Member , "Scheduling failed" ),
101
+ )
102
+ } else {
103
+ if statusTemplate , specTemplate := member .Status .Template , member .Spec .Template ; statusTemplate != nil && specTemplate != nil {
104
+ if statusTemplateSpec , specTemplateSpec := statusTemplate .PodSpec , specTemplate .PodSpec ; statusTemplateSpec != nil && specTemplateSpec != nil {
105
+ if ! r .schedulingParametersAreTheSame (specTemplateSpec .Spec , statusTemplateSpec .Spec ) {
106
+ l .Info ("Adding KillMemberPod action: scheduling failed and parameters already updated" )
107
+ p = append (p ,
108
+ actions .NewAction (api .ActionTypeKillMemberPod , m .Group , m .Member , "Scheduling failed" ),
109
+ )
110
+ } else {
111
+ l .Info ("Scheduling parameters are not updated" )
112
+ }
113
+ } else {
114
+ l .Warn ("Pod TemplateSpec is nil" )
109
115
}
116
+ } else {
117
+ l .Warn ("Pod Template is nil" )
110
118
}
111
119
}
112
120
}
0 commit comments