Search in sources :

Example 6 with MessageContext

use of org.openkilda.messaging.MessageContext in project open-kilda by telstra.

the class ControllerToSpeakerSharedProxyBolt method handleRegionNotFoundError.

private void handleRegionNotFoundError(CommandMessage commandMessage, SwitchId switchId) {
    String errorDetails = String.format("Switch %s not found", switchId.toString());
    ErrorData errorData = new ErrorData(ErrorType.NOT_FOUND, errorDetails, errorDetails);
    ErrorMessage errorMessage = new ErrorMessage(errorData, System.currentTimeMillis(), commandMessage.getCorrelationId(), null);
    Tuple input = getCurrentTuple();
    if (commandMessage.getData() instanceof DumpRulesForFlowHsRequest || commandMessage.getData() instanceof DumpMetersForFlowHsRequest) {
        MessageContext messageContext = new MessageContext(commandMessage);
        SpeakerDataResponse result = new SpeakerDataResponse(messageContext, errorData);
        // FIXME(surabujin): there is no subscriber on this stream now
        getOutput().emit(Stream.FLOWHS_WORKER, input, makeFlowHsWorkerTuple(commandMessage.getCorrelationId(), result));
    } else if (commandMessage.getData() instanceof DumpRulesForSwitchManagerRequest || commandMessage.getData() instanceof DumpMetersForSwitchManagerRequest || commandMessage.getData() instanceof InstallFlowForSwitchManagerRequest || commandMessage.getData() instanceof RemoveFlowForSwitchManagerRequest || commandMessage.getData() instanceof ReinstallDefaultFlowForSwitchManagerRequest) {
        getOutput().emit(Stream.KILDA_SWITCH_MANAGER, input, makeSwitchManagerTuple(commandMessage.getCorrelationId(), errorMessage));
    } else if (commandMessage.getData() instanceof DumpSwitchPortsDescriptionRequest || commandMessage.getData() instanceof DumpPortDescriptionRequest || commandMessage.getData() instanceof DumpRulesRequest || commandMessage.getData() instanceof DumpMetersRequest || commandMessage.getData() instanceof DeleteMeterRequest || commandMessage.getData() instanceof PortConfigurationRequest) {
        getOutput().emit(Stream.NORTHBOUND_REPLY, input, makeNorthboundTuple(commandMessage.getCorrelationId(), errorMessage));
    } else {
        log.error("Unable to lookup region for message: {}. switch is not tracked.", commandMessage);
    }
}
Also used : RemoveFlowForSwitchManagerRequest(org.openkilda.messaging.command.flow.RemoveFlowForSwitchManagerRequest) ReinstallDefaultFlowForSwitchManagerRequest(org.openkilda.messaging.command.flow.ReinstallDefaultFlowForSwitchManagerRequest) InstallFlowForSwitchManagerRequest(org.openkilda.messaging.command.flow.InstallFlowForSwitchManagerRequest) DumpPortDescriptionRequest(org.openkilda.messaging.command.switches.DumpPortDescriptionRequest) SpeakerDataResponse(org.openkilda.floodlight.api.response.SpeakerDataResponse) DumpMetersRequest(org.openkilda.messaging.command.switches.DumpMetersRequest) PortConfigurationRequest(org.openkilda.messaging.command.switches.PortConfigurationRequest) DumpMetersForFlowHsRequest(org.openkilda.messaging.command.switches.DumpMetersForFlowHsRequest) DumpMetersForSwitchManagerRequest(org.openkilda.messaging.command.switches.DumpMetersForSwitchManagerRequest) DumpRulesRequest(org.openkilda.messaging.command.switches.DumpRulesRequest) DumpSwitchPortsDescriptionRequest(org.openkilda.messaging.command.switches.DumpSwitchPortsDescriptionRequest) DumpRulesForFlowHsRequest(org.openkilda.messaging.command.switches.DumpRulesForFlowHsRequest) MessageContext(org.openkilda.messaging.MessageContext) ErrorMessage(org.openkilda.messaging.error.ErrorMessage) DumpRulesForSwitchManagerRequest(org.openkilda.messaging.command.switches.DumpRulesForSwitchManagerRequest) DeleteMeterRequest(org.openkilda.messaging.command.flow.DeleteMeterRequest) ErrorData(org.openkilda.messaging.error.ErrorData) Tuple(org.apache.storm.tuple.Tuple)

Example 7 with MessageContext

use of org.openkilda.messaging.MessageContext in project open-kilda by telstra.

the class SpeakerFlowSegmentRequestBuilder method makeSingleSwitchIngressLoopRequest.

private FlowSegmentRequestFactory makeSingleSwitchIngressLoopRequest(CommandContext context, FlowPath path, FlowSideAdapter flowSide) {
    UUID commandId = commandIdGenerator.generate();
    MessageContext messageContext = new MessageContext(commandId.toString(), context.getCorrelationId());
    Cookie cookie = path.getCookie().toBuilder().looped(true).build();
    return IngressFlowLoopSegmentRequestFactory.builder().messageContext(messageContext).metadata(makeMetadata(path.getFlow().getFlowId(), cookie, path.isSrcWithMultiTable())).endpoint(flowSide.getEndpoint()).build();
}
Also used : Cookie(org.openkilda.model.cookie.Cookie) FlowSegmentCookie(org.openkilda.model.cookie.FlowSegmentCookie) MessageContext(org.openkilda.messaging.MessageContext) UUID(java.util.UUID)

Example 8 with MessageContext

use of org.openkilda.messaging.MessageContext in project open-kilda by telstra.

the class SpeakerFlowSegmentRequestBuilder method makeOneSwitchRequest.

private List<FlowSegmentRequestFactory> makeOneSwitchRequest(CommandContext context, FlowPath path, FlowSideAdapter ingressSide, FlowSideAdapter egressSide, RulesContext rulesContext, MirrorContext mirrorContext) {
    Flow flow = ingressSide.getFlow();
    UUID commandId = commandIdGenerator.generate();
    MessageContext messageContext = new MessageContext(commandId.toString(), context.getCorrelationId());
    FlowSegmentMetadata metadata = makeMetadata(path, ensureEqualMultiTableFlag(path.isSrcWithMultiTable(), path.isDestWithMultiTable(), String.format("Flow(id:%s) have incompatible for one-switch flow per-side multi-table flags - " + "src(%s) != dst(%s)", flow.getFlowId(), path.isSrcWithMultiTable(), path.isDestWithMultiTable())));
    List<FlowSegmentRequestFactory> oneSwitchFactories = new ArrayList<>();
    if (!mirrorContext.isBuildMirrorFactoryOnly()) {
        oneSwitchFactories.add(OneSwitchFlowRequestFactory.builder().messageContext(messageContext).metadata(metadata).endpoint(ingressSide.getEndpoint()).meterConfig(getMeterConfig(path)).egressEndpoint(egressSide.getEndpoint()).rulesContext(rulesContext).build());
    }
    Optional<MirrorConfig> mirrorConfig = makeMirrorConfig(path, egressSide.getEndpoint(), mirrorContext);
    if (mirrorConfig.isPresent() || mirrorContext.isRemoveFlowOperation()) {
        FlowSegmentCookie mirrorCookie = path.getCookie().toBuilder().mirror(true).build();
        oneSwitchFactories.add(OneSwitchMirrorFlowRequestFactory.builder().messageContext(new MessageContext(commandIdGenerator.generate().toString(), context.getCorrelationId())).metadata(makeMetadata(metadata.getFlowId(), mirrorCookie, metadata.isMultiTable())).endpoint(ingressSide.getEndpoint()).meterConfig(getMeterConfig(path)).egressEndpoint(egressSide.getEndpoint()).rulesContext(rulesContext).mirrorConfig(mirrorConfig.orElse(null)).build());
    }
    return oneSwitchFactories;
}
Also used : IngressMirrorFlowSegmentRequestFactory(org.openkilda.floodlight.api.request.factory.IngressMirrorFlowSegmentRequestFactory) IngressFlowSegmentRequestFactory(org.openkilda.floodlight.api.request.factory.IngressFlowSegmentRequestFactory) EgressMirrorFlowSegmentRequestFactory(org.openkilda.floodlight.api.request.factory.EgressMirrorFlowSegmentRequestFactory) EgressFlowSegmentRequestFactory(org.openkilda.floodlight.api.request.factory.EgressFlowSegmentRequestFactory) TransitFlowSegmentRequestFactory(org.openkilda.floodlight.api.request.factory.TransitFlowSegmentRequestFactory) FlowSegmentRequestFactory(org.openkilda.floodlight.api.request.factory.FlowSegmentRequestFactory) FlowSegmentCookie(org.openkilda.model.cookie.FlowSegmentCookie) MirrorConfig(org.openkilda.model.MirrorConfig) ArrayList(java.util.ArrayList) MessageContext(org.openkilda.messaging.MessageContext) UUID(java.util.UUID) FlowSegmentMetadata(org.openkilda.floodlight.model.FlowSegmentMetadata) Flow(org.openkilda.model.Flow)

Example 9 with MessageContext

use of org.openkilda.messaging.MessageContext in project open-kilda by telstra.

the class RecordHandler method doDeleteGroupRequest.

private void doDeleteGroupRequest(CommandMessage message) {
    SwitchId switchId = ((DeleteGroupRequest) message.getData()).getSwitchId();
    GroupId groupId = ((DeleteGroupRequest) message.getData()).getGroupId();
    logger.debug("Delete group '{}' for switch '{}'", groupId, switchId);
    handleSpeakerCommand(new GroupRemoveCommand(new MessageContext(message), switchId, groupId));
    DeleteGroupResponse response = new DeleteGroupResponse(true);
    String correlationId = message.getCorrelationId();
    InfoMessage infoMessage = new InfoMessage(response, System.currentTimeMillis(), correlationId);
    getKafkaProducer().sendMessageAndTrack(context.getKafkaSwitchManagerTopic(), correlationId, infoMessage);
}
Also used : DeleteGroupResponse(org.openkilda.messaging.info.switches.DeleteGroupResponse) InfoMessage(org.openkilda.messaging.info.InfoMessage) GroupRemoveCommand(org.openkilda.floodlight.command.group.GroupRemoveCommand) SwitchId(org.openkilda.model.SwitchId) MessageContext(org.openkilda.messaging.MessageContext) DeleteGroupRequest(org.openkilda.messaging.command.switches.DeleteGroupRequest) GroupId(org.openkilda.model.GroupId)

Example 10 with MessageContext

use of org.openkilda.messaging.MessageContext in project open-kilda by telstra.

the class RecordHandler method doModifyFlowMeterForSwitchManager.

private void doModifyFlowMeterForSwitchManager(CommandMessage message) {
    ModifyFlowMeterForSwitchManagerRequest request = (ModifyFlowMeterForSwitchManagerRequest) message.getData();
    IKafkaProducerService producerService = getKafkaProducer();
    long meterId = request.getMeterId();
    SwitchId switchId = request.getSwitchId();
    MeterConfig meterConfig = new MeterConfig(new MeterId(request.getMeterId()), request.getRate());
    logger.info("Modifying flow meter {} on Switch {}", meterId, switchId);
    handleSpeakerCommand(new MeterModifyCommand(new MessageContext(message), switchId, meterConfig));
    InfoMessage response = new InfoMessage(new ModifyMeterResponse(switchId, request.getMeterId()), System.currentTimeMillis(), message.getCorrelationId());
    producerService.sendMessageAndTrack(context.getKafkaSwitchManagerTopic(), message.getCorrelationId(), response);
}
Also used : MeterModifyCommand(org.openkilda.floodlight.command.meter.MeterModifyCommand) ModifyMeterResponse(org.openkilda.messaging.info.switches.ModifyMeterResponse) IKafkaProducerService(org.openkilda.floodlight.service.kafka.IKafkaProducerService) InfoMessage(org.openkilda.messaging.info.InfoMessage) SwitchId(org.openkilda.model.SwitchId) MessageContext(org.openkilda.messaging.MessageContext) OFMeterConfig(org.projectfloodlight.openflow.protocol.OFMeterConfig) MeterConfig(org.openkilda.model.MeterConfig) ModifyFlowMeterForSwitchManagerRequest(org.openkilda.messaging.command.flow.ModifyFlowMeterForSwitchManagerRequest) MeterId(org.openkilda.model.MeterId)

Aggregations

MessageContext (org.openkilda.messaging.MessageContext)28 UUID (java.util.UUID)13 FlowSegmentMetadata (org.openkilda.floodlight.model.FlowSegmentMetadata)9 SwitchId (org.openkilda.model.SwitchId)9 ArrayList (java.util.ArrayList)7 Cookie (org.openkilda.model.cookie.Cookie)6 EgressFlowSegmentRequestFactory (org.openkilda.floodlight.api.request.factory.EgressFlowSegmentRequestFactory)5 InfoMessage (org.openkilda.messaging.info.InfoMessage)5 FlowEndpoint (org.openkilda.model.FlowEndpoint)5 MirrorConfig (org.openkilda.model.MirrorConfig)5 FlowSegmentCookie (org.openkilda.model.cookie.FlowSegmentCookie)5 Session (org.openkilda.floodlight.service.session.Session)4 MeterConfig (org.openkilda.model.MeterConfig)4 MeterId (org.openkilda.model.MeterId)4 List (java.util.List)3 Optional (java.util.Optional)3 CompletableFuture (java.util.concurrent.CompletableFuture)3 EgressMirrorFlowSegmentRequestFactory (org.openkilda.floodlight.api.request.factory.EgressMirrorFlowSegmentRequestFactory)3 FlowSegmentRequestFactory (org.openkilda.floodlight.api.request.factory.FlowSegmentRequestFactory)3 IngressFlowSegmentRequestFactory (org.openkilda.floodlight.api.request.factory.IngressFlowSegmentRequestFactory)3