Exemple #1
0
    def __init__(self, input_file, logger_config):
        """
            Init function for the KafkaTopology class
            Args:
                input_file - file containing information about
                             kind of hosts on which the failure must
                             be induced , zookeeper paths and zookeeper
                             connection
                logger_config - configuration for logger
            Return:
                None
            Raise:
                None
        """
        TopologyBuilder.__init__(self, input_file, logger_config)

        with open(self.input_file, 'r') as file_descr:
            doc = yaml.load(file_descr)

        # Declaring the config variables
        self.plan = []
        self.zookeeper = None
        self.zookeeper_paths = None
        self.kafka_host_resolution = None
        self.resolved_topology = []

        # initializing Logger
        self.logger_instance = Logger(self.logger_config)

        # Reading from the config
        for key, val in doc.iteritems():
            setattr(self, key, val)

        # setup the zookeeper client
        if self.zookeeper:
            zook = KazooClient(hosts=self.zookeeper.get("host"),
                               read_only=True)
            zook.start()

            # read ZK Paths into a dictionary
            zk_paths = {}
            if self.zookeeper_paths:
                for path_type, path in self.zookeeper_paths.items():
                    zk_paths[path_type] = path
            # create zk_helper object
            helper = KafkaZkHelper(zook, zk_paths)
            self.helper = helper
        self.generate_plan()
Exemple #2
0
    def __init__(self,
                 config,
                 config_dir,
                 output_queue,
                 event_queue,
                 verbose=False,
                 debug=False,
                 logger_instance=None):
        """
            Init function for the atropos class
            Args:
                config - A dict containing fate book contents
                config_dir - Path to config directory
                output_queue - A multi processing queue to add atropos
                information
                event_queue - A multi processing queue to record event status
                verbose - Verbosity flag
                debug - debug flag
            Return:
                None
            Raise:
                None
        """
        self.verbose = verbose
        self.config = config
        self.debug = debug
        self.config_dir = config_dir

        self.nyx = False
        self.non_deterministic_schdlr_flag = False
        self.deterministic_schdlr_flag = False
        self.logger_instance = None
        self.failure_in_flight = False
        # Adding an empty initialization of all the config variables
        # Config variables
        self.destiny = None
        self.logger = None
        self.logger_file_handle = None
        self.failures = None
        self.topology = None
        self.service = None
        self.impact_limits = None
        self.scheduler_plugin = None
        self.journal = None
        self.topology_object = None
        self.healthcheck = None
        self.output_queue = output_queue
        self.event_queue = event_queue

        for key, val in config.iteritems():
            setattr(self, key, val)
        del self.config

        if logger_instance is None:
            self.logger_instance = Logger(self.logger)
        else:
            self.logger_instance = logger_instance

        if 'topology_config' in self.topology.keys():
            self.topology_config = self.topology['topology_config']
        else:
            self.topology_config = None
        if 'topology_plugin' in self.topology.keys():
            self.topology_plugin = self.topology['topology_plugin']
        else:
            self.topology_plugin = None

        if self.topology_config is not None:
            self.topology_config = os.path.join(self.config_dir,
                                                self.topology_config)
        self.populate_topology()

        self.populate_scheduler_plugin()

        signal.signal(signal.SIGTERM, self.sigterm_handler)

        self.main_loop()