22
33import java .time .Duration ;
44import java .time .LocalDateTime ;
5+ import java .util .concurrent .Executors ;
6+ import java .util .concurrent .ScheduledExecutorService ;
7+ import java .util .concurrent .TimeUnit ;
58
69import io .fabric8 .kubernetes .api .model .HasMetadata ;
710import io .javaoperatorsdk .operator .api .reconciler .IndexedResourceCache ;
811
912public class PeriodicCleanerExpectationManager <P extends HasMetadata >
1013 extends ExpectationManager <P > {
1114
15+ private final ScheduledExecutorService scheduler =
16+ Executors .newScheduledThreadPool (
17+ 1 ,
18+ r -> {
19+ Thread thread = Executors .defaultThreadFactory ().newThread (r );
20+ thread .setDaemon (true );
21+ return thread ;
22+ });
23+
1224 private final Duration cleanupDelayAfterExpiration ;
1325 private final IndexedResourceCache <P > primaryCache ;
1426
15- // todo fixes schedule
1627 public PeriodicCleanerExpectationManager (Duration period , Duration cleanupDelayAfterExpiration ) {
17- this .cleanupDelayAfterExpiration = cleanupDelayAfterExpiration ;
18- this .primaryCache = null ;
28+ this (period , cleanupDelayAfterExpiration , null );
1929 }
2030
2131 public PeriodicCleanerExpectationManager (Duration period , IndexedResourceCache <P > primaryCache ) {
22- this .cleanupDelayAfterExpiration = null ;
32+ this (period , null , primaryCache );
33+ }
34+
35+ private PeriodicCleanerExpectationManager (
36+ Duration period , Duration cleanupDelayAfterExpiration , IndexedResourceCache <P > primaryCache ) {
37+ this .cleanupDelayAfterExpiration = cleanupDelayAfterExpiration ;
2338 this .primaryCache = primaryCache ;
39+ scheduler .scheduleWithFixedDelay (
40+ this ::clean , period .toMillis (), period .toMillis (), TimeUnit .MICROSECONDS );
2441 }
2542
2643 public void clean () {
@@ -40,4 +57,8 @@ public void clean() {
4057 }
4158 });
4259 }
60+
61+ void stop () {
62+ scheduler .shutdownNow ();
63+ }
4364}
0 commit comments