10
10
import io .kubernetes .client .informer .SharedIndexInformer ;
11
11
import io .kubernetes .client .informer .SharedInformerFactory ;
12
12
import io .kubernetes .client .informer .cache .Lister ;
13
+ import io .kubernetes .client .openapi .ApiException ;
13
14
import io .kubernetes .client .util .generic .GenericKubernetesApi ;
14
15
15
16
import java .util .ArrayList ;
@@ -24,31 +25,41 @@ public class InstanceInformer extends EInstanceInformer {
24
25
25
26
private List <EInstanceInformerListener > listeners ;
26
27
28
+ private String namespace ;
29
+ private GenericKubernetesApi <EpsilonInstanceCRD , EpsilonInstanceCRDList > epsilonInstanceClient ;
30
+
27
31
public InstanceInformer (String namespace , SharedInformerFactory informerFactory , GenericKubernetesApi <EpsilonInstanceCRD , EpsilonInstanceCRDList > epsilonInstanceClient ) {
28
32
this .instanceInformer = informerFactory .sharedIndexInformerFor (epsilonInstanceClient ,
29
- EpsilonInstanceCRD .class , TimeUnit .SECONDS .toMillis (1 ), namespace );
33
+ EpsilonInstanceCRD .class , TimeUnit .MINUTES .toMillis (5 ), namespace );
30
34
31
35
this .instanceStore = new Lister <>(instanceInformer .getIndexer ());
32
36
33
37
this .listeners = new ArrayList <>();
34
38
39
+ this .namespace = namespace ;
40
+ this .epsilonInstanceClient = epsilonInstanceClient ;
41
+
35
42
instanceInformer .addEventHandlerWithResyncPeriod (new ResourceEventHandler <EpsilonInstanceCRD >() {
36
43
@ Override
37
44
public void onAdd (EpsilonInstanceCRD instance ) {}
38
45
39
46
@ Override
40
47
public void onUpdate (EpsilonInstanceCRD oldInstance , EpsilonInstanceCRD newInstance ) {
41
- if (newInstance .getStatus () != null )
42
- for (EInstanceInformerListener listener : listeners )
43
- listener .onInstanceUpdate (newInstance .getInstance ());
48
+ update (newInstance );
44
49
}
45
50
46
51
@ Override
47
52
public void onDelete (EpsilonInstanceCRD instance , boolean deletedFinalStateUnknown ) {
48
53
for (EInstanceInformerListener listener : listeners )
49
54
listener .onInstanceRemove (instance .getInstance ());
50
55
}
51
- }, TimeUnit .SECONDS .toMillis (1 ));
56
+ }, TimeUnit .MINUTES .toMillis (10 ));
57
+ }
58
+
59
+ private void update (EpsilonInstanceCRD instance ) {
60
+ if (instance .getStatus () != null )
61
+ for (EInstanceInformerListener listener : listeners )
62
+ listener .onInstanceUpdate (instance .getInstance ());
52
63
}
53
64
54
65
@ Override
@@ -80,5 +91,12 @@ public Instance[] getInstances(EType type) {
80
91
@ Override
81
92
public void registerListener (EInstanceInformerListener listener ) {
82
93
listeners .add (listener );
94
+
95
+ try {
96
+ for (EpsilonInstanceCRD instance : epsilonInstanceClient .list (namespace ).throwsApiException ().getObject ().getItems ())
97
+ update (instance );
98
+ } catch (ApiException e ) {
99
+ throw new RuntimeException (e );
100
+ }
83
101
}
84
102
}
0 commit comments