You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
You can also configure the default retry behavior using the `@GradualRetry` annotation.
22
+
23
+
It is possible to provide a custom implementation using the `retry` field of the
24
+
`@ControllerConfiguration` annotation and specifying the class of your custom implementation.
25
+
Note that this class will need to provide an accessible no-arg constructor for automated
26
+
instantiation. Additionally, your implementation can be automatically configured from an
27
+
annotation that you can provide by having your `Retry` implementation implement the
28
+
`AnnotationConfigurable` interface, parameterized with your annotation type. See the
29
+
`GenericRetry` implementation for more details.
30
+
31
+
Information about the current retry state is accessible from
32
+
the [Context](https://github.com/java-operator-sdk/java-operator-sdk/blob/master/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/Context.java)
33
+
object. Of note, particularly interesting is the `isLastAttempt` method, which could allow your
34
+
`Reconciler` to implement a different behavior based on this status, by setting an error message
35
+
in your resource' status, for example, when attempting a last retry.
36
+
37
+
Note, though, that reaching the retry limit won't prevent new events to be processed. New
38
+
reconciliations will happen for new events as usual. However, if an error also occurs that
39
+
would normally trigger a retry, the SDK won't schedule one at this point since the retry limit
40
+
is already reached.
41
+
42
+
A successful execution resets the retry state.
43
+
44
+
### Setting Error Status After Last Retry Attempt
45
+
46
+
In order to facilitate error reporting, `Reconciler` can implement the
You can also configure the default retry behavior using the `@GradualRetry` annotation.
92
-
93
-
It is possible to provide a custom implementation using the `retry` field of the
94
-
`@ControllerConfiguration` annotation and specifying the class of your custom implementation.
95
-
Note that this class will need to provide an accessible no-arg constructor for automated
96
-
instantiation. Additionally, your implementation can be automatically configured from an
97
-
annotation that you can provide by having your `Retry` implementation implement the
98
-
`AnnotationConfigurable` interface, parameterized with your annotation type. See the
99
-
`GenericRetry` implementation for more details.
100
-
101
-
Information about the current retry state is accessible from
102
-
the [Context](https://github.com/java-operator-sdk/java-operator-sdk/blob/master/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/Context.java)
103
-
object. Of note, particularly interesting is the `isLastAttempt` method, which could allow your
104
-
`Reconciler` to implement a different behavior based on this status, by setting an error message
105
-
in your resource' status, for example, when attempting a last retry.
106
-
107
-
Note, though, that reaching the retry limit won't prevent new events to be processed. New
108
-
reconciliations will happen for new events as usual. However, if an error also occurs that
109
-
would normally trigger a retry, the SDK won't schedule one at this point since the retry limit
110
-
is already reached.
111
-
112
-
A successful execution resets the retry state.
113
-
114
-
### Setting Error Status After Last Retry Attempt
115
-
116
-
In order to facilitate error reporting, `Reconciler` can implement the
While it is possible to deactivate automatic retries, this is not desirable, unless for very
150
-
specific reasons. Errors naturally occur, whether it be transient network errors or conflicts
151
-
when a given resource is handled by a `Reconciler` but is modified at the same time by a user in
152
-
a different process. Automatic retries handle these cases nicely and will usually result in a
153
-
successful reconciliation.
154
74
155
-
## Retry and Rescheduling and Event Handling Common Behavior
156
-
157
-
Retry, reschedule and standard event processing form a relatively complex system, each of these
158
-
functionalities interacting with the others. In the following, we describe the interplay of
159
-
these features:
160
-
161
-
1. A successful execution resets a retry and the rescheduled executions which were present before
162
-
the reconciliation. However, a new rescheduling can be instructed from the reconciliation
163
-
outcome (`UpdateControl` or `DeleteControl`).
164
-
165
-
For example, if a reconciliation had previously been re-scheduled after some amount of time, but an event triggered
166
-
the reconciliation (or cleanup) in the mean time, the scheduled execution would be automatically cancelled, i.e.
167
-
re-scheduling a reconciliation does not guarantee that one will occur exactly at that time, it simply guarantees that
168
-
one reconciliation will occur at that time at the latest, triggering one if no event from the cluster triggered one.
169
-
Of course, it's always possible to re-schedule a new reconciliation at the end of that "automatic" reconciliation.
170
-
171
-
Similarly, if a retry was scheduled, any event from the cluster triggering a successful execution in the mean time
172
-
would cancel the scheduled retry (because there's now no point in retrying something that already succeeded)
173
-
174
-
2. In case an exception happened, a retry is initiated. However, if an event is received
175
-
meanwhile, it will be reconciled instantly, and this execution won't count as a retry attempt.
176
-
3. If the retry limit is reached (so no more automatic retry would happen), but a new event
177
-
received, the reconciliation will still happen, but won't reset the retry, and will still be
178
-
marked as the last attempt in the retry info. The point (1) still holds, but in case of an
179
-
error, no retry will happen.
180
-
181
-
The thing to keep in mind when it comes to retrying or rescheduling is that JOSDK tries to avoid unnecessary work. When
182
-
you reschedule an operation, you instruct JOSDK to perform that operation at the latest by the end of the rescheduling
183
-
delay. If something occurred on the cluster that triggers that particular operation (reconciliation or cleanup), then
184
-
JOSDK considers that there's no point in attempting that operation again at the end of the specified delay since there
185
-
is now no point to do so anymore. The same idea also applies to retries.
186
75
187
76
## Rate Limiting
188
77
@@ -512,17 +401,6 @@ See sample configuration in
512
401
the [E2E test](https://github.com/java-operator-sdk/java-operator-sdk/blob/8865302ac0346ee31f2d7b348997ec2913d5922b/sample-operators/leader-election/src/main/java/io/javaoperatorsdk/operator/sample/LeaderElectionTestOperator.java#L21-L23)
0 commit comments