Skip to content

Commit 870cf52

Browse files
committed
support start informer factory from a controller-manager
1 parent f0e846f commit 870cf52

File tree

6 files changed

+26
-9
lines changed

6 files changed

+26
-9
lines changed

examples/src/main/java/io/kubernetes/client/examples/ControllerExample.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,9 @@ public static void main(String[] args) throws IOException {
8686

8787
// Use builder library to manage one or multiple controllers.
8888
ControllerManager controllerManager =
89-
ControllerBuilder.controllerManagerBuilder().addController(controller).build();
89+
ControllerBuilder.controllerManagerBuilder(informerFactory)
90+
.addController(controller)
91+
.build();
9092

9193
LeaderElectingController leaderElectingController =
9294
new LeaderElectingController(

extended/src/main/java/io/kubernetes/client/extended/controller/ControllerManager.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,30 @@
11
package io.kubernetes.client.extended.controller;
22

3+
import io.kubernetes.client.informer.SharedInformerFactory;
34
import java.util.concurrent.CountDownLatch;
45
import java.util.concurrent.ExecutorService;
56
import java.util.concurrent.Executors;
67
import org.slf4j.Logger;
78
import org.slf4j.LoggerFactory;
89

9-
/** The type Controller manager manages a set of controllers' lifecycle. */
10+
/**
11+
* The type Controller manager manages a set of controllers' lifecycle and also their informer
12+
* factory.
13+
*/
1014
public class ControllerManager implements Controller {
1115
private static final Logger log = LoggerFactory.getLogger(DefaultController.class);
1216
private Controller[] controllers;
1317
private ExecutorService controllerThreadPool;
18+
private SharedInformerFactory informerFactory;
1419

1520
/**
1621
* Instantiates a new Controller manager.
1722
*
1823
* @param controllers the controllers to be managed.
1924
*/
20-
public ControllerManager(Controller... controllers) {
25+
public ControllerManager(SharedInformerFactory factory, Controller... controllers) {
2126
this.controllers = controllers;
27+
this.informerFactory = factory;
2228
}
2329

2430
@Override
@@ -29,13 +35,15 @@ public void shutdown() {
2935
if (controllerThreadPool != null) {
3036
this.controllerThreadPool.shutdown();
3137
}
38+
this.informerFactory.stopAllRegisteredInformers();
3239
}
3340

3441
@Override
3542
public void run() {
3643
if (controllers.length == 0) {
3744
throw new RuntimeException("no controller registered in the manager..");
3845
}
46+
this.informerFactory.startAllRegisteredInformers();
3947
CountDownLatch latch = new CountDownLatch(controllers.length);
4048
this.controllerThreadPool = Executors.newFixedThreadPool(controllers.length);
4149
for (Controller controller : this.controllers) {

extended/src/main/java/io/kubernetes/client/extended/controller/builder/ControllerBuilder.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ public static DefaultControllerBuilder defaultBuilder(SharedInformerFactory fact
1919
/**
2020
* Controller manager builder is for building controller-manager .
2121
*
22+
* @param factory the informer factory
2223
* @return the controller mananger builder
2324
*/
24-
public static ControllerManangerBuilder controllerManagerBuilder() {
25-
return new ControllerManangerBuilder();
25+
public static ControllerManangerBuilder controllerManagerBuilder(SharedInformerFactory factory) {
26+
return new ControllerManangerBuilder(factory);
2627
}
2728
}

extended/src/main/java/io/kubernetes/client/extended/controller/builder/ControllerManangerBuilder.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,18 @@
22

33
import io.kubernetes.client.extended.controller.Controller;
44
import io.kubernetes.client.extended.controller.ControllerManager;
5+
import io.kubernetes.client.informer.SharedInformerFactory;
56
import java.util.ArrayList;
67
import java.util.List;
78

89
/** The type Controller mananger builder. */
910
public class ControllerManangerBuilder {
1011

12+
private SharedInformerFactory informerFactory;
13+
1114
/** Instantiates a new Controller mananger builder. */
12-
ControllerManangerBuilder() {
15+
ControllerManangerBuilder(SharedInformerFactory factory) {
16+
this.informerFactory = factory;
1317
this.controllerList = new ArrayList<>();
1418
}
1519

@@ -32,6 +36,7 @@ public ControllerManangerBuilder addController(Controller controller) {
3236
* @return the controller manager
3337
*/
3438
public ControllerManager build() {
35-
return new ControllerManager(controllerList.stream().toArray(Controller[]::new));
39+
return new ControllerManager(
40+
informerFactory, controllerList.stream().toArray(Controller[]::new));
3641
}
3742
}

extended/src/test/java/io/kubernetes/client/extended/controller/ControllerManagerTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static org.junit.Assert.*;
44

5+
import io.kubernetes.client.informer.SharedInformerFactory;
56
import org.junit.Test;
67

78
public class ControllerManagerTest {
@@ -11,7 +12,7 @@ public void testControllerStartShutdown() {
1112
DummyController dummy1 = new DummyController();
1213
DummyController dummy2 = new DummyController();
1314

14-
ControllerManager cm = new ControllerManager(dummy1, dummy2);
15+
ControllerManager cm = new ControllerManager(new SharedInformerFactory(), dummy1, dummy2);
1516

1617
cm.run();
1718
assertTrue(dummy1.started);

util/src/main/java/io/kubernetes/client/informer/SharedInformerFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public synchronized <ApiType, ApiListType> SharedIndexInformer<ApiType> sharedIn
7979
SharedIndexInformer<ApiType> informer =
8080
new DefaultSharedIndexInformer<ApiType, ApiListType>(
8181
apiTypeClass, listerWatcher, resyncPeriodInMillis);
82-
this.informers.put(TypeToken.get(apiTypeClass).getType(), informer);
82+
this.informers.putIfAbsent(TypeToken.get(apiTypeClass).getType(), informer);
8383
return informer;
8484
}
8585

0 commit comments

Comments
 (0)