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
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
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)
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
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