Exemplo n.º 1
0
    def handle(self):
        try:
            event_handled = False

            if self.get_message_type() == MT_SWITCH:
                if self.payload['state'] == "ADDED":
                    self.create_switch()
                elif self.payload['state'] == "ACTIVATED":
                    self.activate_switch()
                elif self.payload['state'] in ("DEACTIVATED", "REMOVED"):
                    self.switch_unplug()
                event_handled = True

            elif self.get_message_type() == MT_ISL:
                if self.payload['state'] == "DISCOVERED":
                    self.create_isl()
                elif self.payload['state'] in ("FAILED", "MOVED"):
                    self.isl_discovery_failed()
                event_handled = True

            elif self.get_message_type() == MT_PORT:
                if self.payload['state'] == "DOWN":
                    self.port_down()
                event_handled = True

            # Cache topology expects to receive OFE events
            if event_handled:
                message_utils.send_cache_message(self.payload,
                                                 self.correlation_id)
                self.handle_topology_change()

            elif self.get_message_type() == MT_FLOW_INFODATA:
                event_handled = self.flow_operation()

            elif self.get_message_type() == MT_STATE_TOGGLE:
                event_handled = self.get_feature_toggle_state()
            elif self.get_message_type() == MT_TOGGLE:
                event_handled = self.update_feature_toggles()

            elif self.get_message_type() == MT_SYNC_REQUEST:
                event_handled = self.sync_switch_rules()

            elif self.get_message_type() in (
                    CD_LINK_PROPS_PUT, CD_LINK_PROPS_DROP):
                self.handle_link_props()
                event_handled = True

            if not event_handled:
                logger.error('Message was not handled correctly: message=%s',
                             self.payload)

            return event_handled
        except Exception as e:
            logger.exception("Exception during handling message")
            return False
Exemplo n.º 2
0
    def handle(self):
        try:
            event_handled = False

            if self.get_message_type() == MT_SWITCH:
                if self.payload['state'] == "ADDED":
                    event_handled = self.create_switch()
                elif self.payload['state'] == "ACTIVATED":
                    event_handled = self.activate_switch()
                elif self.payload['state'] == "DEACTIVATED":
                    event_handled = self.deactivate_switch()
                elif self.payload['state'] == "REMOVED":
                    event_handled = self.remove_switch()

                if event_handled:
                    message_utils.send_cache_message(self.payload,
                                                     self.correlation_id)

            elif self.get_message_type() == MT_ISL:
                if self.payload['state'] == "DISCOVERED":
                    event_handled = self.create_isl()
                elif self.payload['state'] == "FAILED":
                    event_handled = self.isl_discovery_failed()

                if event_handled:
                    message_utils.send_cache_message(self.payload,
                                                     self.correlation_id)

            elif self.get_message_type() == MT_PORT:
                if self.payload['state'] == "DOWN":
                    event_handled = self.port_down()
                else:
                    event_handled = True

            elif self.get_message_type() == MT_FLOW_INFODATA:
                event_handled = self.flow_operation()

            elif self.get_command() == CD_NETWORK:
                event_handled = self.dump_network()

            if not event_handled:
                logger.error('Message was not handled correctly: message=%s',
                             self.payload)

            return event_handled
        except Exception as e:
            logger.exception("Exception during handling message")
            return False
Exemplo n.º 3
0
    def handle_topology_change(self):
        if self.get_message_type() != MT_ISL:
            return
        if self.payload['state'] != "DISCOVERED":
            return
        if not features_status[FEATURE_REROUTE_ON_ISL_DISCOVERY]:
            return

        path = self.payload['path']
        node = path[0]

        payload = {
            'clazz': MT_NETWORK_TOPOLOGY_CHANGE,
            'type': 'ENDPOINT_ADD',
            'switch_id': node['switch_id'],
            'port_number': node['port_no']}

        message_utils.send_cache_message(
                payload, self.correlation_id)
Exemplo n.º 4
0
    def dump_network(self):
        correlation_id = self.correlation_id
        step = "Init"
        logger.info('Dump network request: timestamp=%s, correlation_id=%s',
                    self.timestamp, correlation_id)

        try:
            step = "Switches"
            switches = self.get_switches()
            logger.debug("%s: %s", step, switches)

            step = "ISLs"
            isls = self.get_isls()
            logger.debug("%s: %s", step, isls)

            step = "Flows"
            flows = flow_utils.get_flows()
            logger.debug("%s: %s", step, flows)

            step = "Send"
            payload = {
                'switches': switches,
                'isls': isls,
                'flows': flows,
                'clazz': MT_NETWORK
            }
            message_utils.send_cache_message(payload, correlation_id)

        except Exception as e:
            logger.exception('Can not dump network: %s', e.message)
            message_utils.send_error_message(correlation_id, "INTERNAL_ERROR",
                                             e.message, step, "WFM_CACHE",
                                             config.KAFKA_CACHE_TOPIC)
            raise

        return True
Exemplo n.º 5
0
    def handle(self):
        try:
            event_handled = False

            if self.get_message_type() == MT_SWITCH:
                if self.payload['state'] == "ADDED":
                    self.create_switch()
                elif self.payload['state'] == "ACTIVATED":
                    self.activate_switch()
                elif self.payload['state'] in ("DEACTIVATED", "REMOVED"):
                    self.switch_unplug()
                event_handled = True

            elif self.get_message_type() == MT_ISL:
                if self.payload['state'] == "DISCOVERED":
                    self.create_isl()
                elif self.payload['state'] in ("FAILED", "MOVED"):
                    self.isl_discovery_failed()
                event_handled = True

            elif self.get_message_type() == MT_PORT:
                if self.payload['state'] == "DOWN":
                    self.port_down()
                event_handled = True

            # Cache topology expects to receive OFE events
            if event_handled:
                message_utils.send_cache_message(self.payload,
                                                 self.correlation_id)
                self.handle_topology_change()

            elif self.get_message_type() == MT_FLOW_INFODATA:
                event_handled = self.flow_operation()

            elif self.get_command() == CD_FLOWS_SYNC_REQUEST:
                self.handle_flow_topology_sync()
                event_handled = True

            elif self.get_message_type() == MT_STATE_TOGGLE:
                event_handled = self.get_feature_toggle_state()
            elif self.get_message_type() == MT_TOGGLE:
                event_handled = self.update_feature_toggles()

            elif self.get_message_type() == MT_SWITCH_EXTENDED:
                if features_status[FEATURE_SYNC_OFRULES]:
                    event_handled = self.validate_and_sync_switch_rules()
                else:
                    event_handled = True

            elif self.get_message_type() == MT_VALID_REQUEST:
                event_handled = self.send_dump_rules_request()

            elif self.get_message_type() == MT_SWITCH_RULES:
                event_handled = self.validate_switch_rules()

            elif self.get_message_type() == MT_SYNC_REQUEST:
                event_handled = self.sync_switch_rules()

            if not event_handled:
                logger.error('Message was not handled correctly: message=%s',
                             self.payload)

            return event_handled
        except Exception as e:
            logger.exception("Exception during handling message")
            return False