use of org.openkilda.messaging.model.Flow in project open-kilda by telstra.
the class CacheBolt method emitRerouteCommands.
private void emitRerouteCommands(Set<ImmutablePair<Flow, Flow>> flows, Tuple tuple, String correlationId, FlowOperation operation) {
for (ImmutablePair<Flow, Flow> flow : flows) {
try {
flow.getLeft().setState(FlowState.DOWN);
flow.getRight().setState(FlowState.DOWN);
FlowRerouteRequest request = new FlowRerouteRequest(flow.getLeft(), operation);
Values values = new Values(Utils.MAPPER.writeValueAsString(new CommandMessage(request, System.currentTimeMillis(), correlationId, Destination.WFM)));
outputCollector.emit(StreamType.WFM_DUMP.toString(), tuple, values);
logger.debug("Flow {} reroute command message sent with correlationId {}", flow.getLeft().getFlowId(), correlationId);
} catch (JsonProcessingException exception) {
logger.error("Could not format flow reroute request by flow={}", flow, exception);
}
}
}
use of org.openkilda.messaging.model.Flow in project open-kilda by telstra.
the class CacheBolt method emitRestoreCommands.
private void emitRestoreCommands(Set<ImmutablePair<Flow, Flow>> flows, Tuple tuple) {
if (flows != null) {
ResourceCache resourceCache = new ResourceCache();
for (ImmutablePair<Flow, Flow> flow : flows) {
resourceCache.allocateFlow(flow);
}
for (ImmutablePair<Flow, Flow> flow : flows) {
try {
FlowRestoreRequest request = new FlowRestoreRequest(flowCache.buildFlow(flow.getLeft(), new ImmutablePair<>(null, null), resourceCache));
resourceCache.deallocateFlow(flow);
Values values = new Values(Utils.MAPPER.writeValueAsString(new CommandMessage(request, System.currentTimeMillis(), UUID.randomUUID().toString(), Destination.WFM)));
outputCollector.emit(StreamType.WFM_DUMP.toString(), tuple, values);
logger.info("Flow {} restore command message sent", flow.getLeft().getFlowId());
} catch (JsonProcessingException exception) {
logger.error("Could not format flow restore request by flow={}", flow, exception);
}
}
}
}
use of org.openkilda.messaging.model.Flow in project open-kilda by telstra.
the class CrudBolt method handleUpdateRequest.
private void handleUpdateRequest(CommandMessage message, Tuple tuple) throws IOException {
Flow requestedFlow = ((FlowUpdateRequest) message.getData()).getPayload();
ImmutablePair<PathInfoData, PathInfoData> path;
try {
new FlowValidator(flowCache).checkFlowForEndpointConflicts(requestedFlow);
path = pathComputer.getPath(requestedFlow, Strategy.COST);
logger.info("Updated flow path: {}", path);
} catch (FlowValidationException e) {
throw new MessageException(message.getCorrelationId(), System.currentTimeMillis(), ErrorType.UPDATE_FAILURE, "Could not update flow", e.getMessage());
} catch (UnroutablePathException e) {
throw new MessageException(message.getCorrelationId(), System.currentTimeMillis(), ErrorType.UPDATE_FAILURE, "Could not update flow", "Path was not found");
}
ImmutablePair<Flow, Flow> flow = flowCache.updateFlow(requestedFlow, path);
logger.info("Updated flow: {}", flow);
FlowInfoData data = new FlowInfoData(requestedFlow.getFlowId(), flow, FlowOperation.UPDATE, message.getCorrelationId());
InfoMessage infoMessage = new InfoMessage(data, System.currentTimeMillis(), message.getCorrelationId());
Values topology = new Values(MAPPER.writeValueAsString(infoMessage));
outputCollector.emit(StreamType.UPDATE.toString(), tuple, topology);
Values northbound = new Values(new InfoMessage(new FlowResponse(buildFlowResponse(flow)), message.getTimestamp(), message.getCorrelationId(), Destination.NORTHBOUND));
outputCollector.emit(StreamType.RESPONSE.toString(), tuple, northbound);
}
use of org.openkilda.messaging.model.Flow in project open-kilda by telstra.
the class CrudBolt method handleRestoreRequest.
private void handleRestoreRequest(CommandMessage message, Tuple tuple) throws IOException {
ImmutablePair<Flow, Flow> requestedFlow = ((FlowRestoreRequest) message.getData()).getPayload();
try {
ImmutablePair<PathInfoData, PathInfoData> path = pathComputer.getPath(requestedFlow.getLeft(), Strategy.COST);
logger.info("Restored flow path: {}", path);
ImmutablePair<Flow, Flow> flow;
if (flowCache.cacheContainsFlow(requestedFlow.getLeft().getFlowId())) {
flow = flowCache.updateFlow(requestedFlow, path);
} else {
flow = flowCache.createFlow(requestedFlow, path);
}
logger.info("Restored flow: {}", flow);
Values topology = new Values(Utils.MAPPER.writeValueAsString(new FlowInfoData(requestedFlow.getLeft().getFlowId(), flow, FlowOperation.UPDATE, message.getCorrelationId())));
outputCollector.emit(StreamType.UPDATE.toString(), tuple, topology);
} catch (UnroutablePathException e) {
throw new MessageException(message.getCorrelationId(), System.currentTimeMillis(), ErrorType.CREATION_FAILURE, "Could not restore flow", "Path was not found");
}
}
use of org.openkilda.messaging.model.Flow in project open-kilda by telstra.
the class CrudBolt method handleCreateRequest.
private void handleCreateRequest(CommandMessage message, Tuple tuple) throws IOException {
Flow requestedFlow = ((FlowCreateRequest) message.getData()).getPayload();
ImmutablePair<PathInfoData, PathInfoData> path;
try {
new FlowValidator(flowCache).checkFlowForEndpointConflicts(requestedFlow);
path = pathComputer.getPath(requestedFlow, Strategy.COST);
logger.info("Created flow path: {}", path);
} catch (FlowValidationException e) {
throw new MessageException(message.getCorrelationId(), System.currentTimeMillis(), ErrorType.CREATION_FAILURE, "Could not create flow", e.getMessage());
} catch (UnroutablePathException e) {
throw new MessageException(message.getCorrelationId(), System.currentTimeMillis(), ErrorType.CREATION_FAILURE, "Could not create flow", "Path was not found");
}
ImmutablePair<Flow, Flow> flow = flowCache.createFlow(requestedFlow, path);
logger.info("Created flow: {}", flow);
FlowInfoData data = new FlowInfoData(requestedFlow.getFlowId(), flow, FlowOperation.CREATE, message.getCorrelationId());
InfoMessage infoMessage = new InfoMessage(data, System.currentTimeMillis(), message.getCorrelationId());
Values topology = new Values(MAPPER.writeValueAsString(infoMessage));
outputCollector.emit(StreamType.CREATE.toString(), tuple, topology);
Values northbound = new Values(new InfoMessage(new FlowResponse(buildFlowResponse(flow)), message.getTimestamp(), message.getCorrelationId(), Destination.NORTHBOUND));
outputCollector.emit(StreamType.RESPONSE.toString(), tuple, northbound);
}
Aggregations