All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alogic.kube.controller.ControllerManager Maven / Gradle / Ivy

package com.alogic.kube.controller;

import com.alogic.kube.informer.SharedInformerFactory;
import io.kubernetes.client.extended.controller.Controller;
import io.kubernetes.client.extended.controller.DefaultController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ControllerManager implements Controller {
    private static final Logger log = LoggerFactory.getLogger(DefaultController.class);
    private Controller[] controllers;
    private ExecutorService controllerThreadPool;
    private SharedInformerFactory informerFactory;

    public ControllerManager(SharedInformerFactory factory, Controller... controllers) {
        this.controllers = controllers;
        this.informerFactory = factory;
    }

    @Override
    public void shutdown() {
        Controller[] ctrls = this.controllers;
        int length = ctrls.length;

        for(int i = 0; i < length; ++i) {
            Controller controller = ctrls[i];
            controller.shutdown();
        }

        if (this.controllerThreadPool != null) {
            this.controllerThreadPool.shutdown();
        }

        this.informerFactory.stopAllRegisteredInformers();
    }

    @Override
    public void run() {
        if (this.controllers.length == 0) {
            throw new RuntimeException("no controller registered in the manager..");
        } else {
            this.informerFactory.startAllRegisteredInformers();
            CountDownLatch latch = new CountDownLatch(this.controllers.length);
            this.controllerThreadPool = Executors.newFixedThreadPool(this.controllers.length);
            Controller[] ctrls = this.controllers;
            int length = ctrls.length;

            for(int i = 0; i < length; ++i) {
                Controller controller = ctrls[i];
                this.controllerThreadPool.submit(() -> {
                    try {
                        log.debug("Starting controller manager");
                        controller.run();
                    } catch (Throwable var6) {
                        log.error("Unexpected controller termination", var6);
                    } finally {
                        latch.countDown();
                        log.debug("Exiting controller manager");
                    }

                });
            }

            try {
                log.debug("Controller-Manager bootstrapping.");
                latch.await();
            } catch (InterruptedException var9) {
                log.error("Aborting controller-manager.", var9);
            } finally {
                log.info("Controller-Manager exited");
            }

        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy