use of org.openkilda.server42.control.messaging.flowrtt.Headers in project open-kilda by telstra.
the class Gate method listen.
@KafkaHandler
void listen(ListFlowsRequest data, @Header(KafkaHeaders.RECEIVED_MESSAGE_KEY) String switchIdKey) {
CommandPacket commandPacket = getFlowListCommandPacket(switchIdKey);
try {
CommandPacketResponse serverResponse = zeroMqClient.send(commandPacket);
if (serverResponse == null) {
log.error("No response from server on {}", data.getHeaders().getCorrelationId());
return;
}
HashSet<String> flowList = new HashSet<>();
for (Any any : serverResponse.getResponseList()) {
flowList.add(any.unpack(Flow.class).getFlowId());
}
ListFlowsResponse response = ListFlowsResponse.builder().headers(data.getHeaders()).flowIds(flowList).build();
template.send(toStorm, response);
} catch (InvalidProtocolBufferException e) {
log.error("Marshalling error on {}", data);
}
}
use of org.openkilda.server42.control.messaging.flowrtt.Headers in project open-kilda by telstra.
the class Gate method listen.
@KafkaHandler
void listen(@Payload ListIslsRequest data) {
Builder builder = CommandPacket.newBuilder();
builder.setType(Type.LIST_ISLS);
IslRttControl.ListIslsFilter listIslsFilter = IslRttControl.ListIslsFilter.newBuilder().setSwitchId(data.getSwitchId().toString()).build();
builder.addCommand(Any.pack(listIslsFilter));
try {
CommandPacketResponse serverResponse = zeroMqClient.send(builder.build());
if (serverResponse == null) {
log.error("No response from server on {}", data.getHeaders().getCorrelationId());
return;
}
HashSet<Integer> portList = new HashSet<>();
for (Any any : serverResponse.getResponseList()) {
portList.add(any.unpack(IslEndpoint.class).getPort());
}
ListIslsResponse response = ListIslsResponse.builder().headers(data.getHeaders()).switchId(data.getSwitchId()).ports(portList).build();
template.send(toStorm, response);
} catch (InvalidProtocolBufferException e) {
log.error("Marshalling error on {}", data, e);
}
}
use of org.openkilda.server42.control.messaging.flowrtt.Headers in project open-kilda by telstra.
the class GateTest method listFlowsTest.
@Test
public void listFlowsTest() throws Exception {
Builder commandPacketResponseBuilded = CommandPacketResponse.newBuilder();
Flow flow1 = Flow.newBuilder().setFlowId("some-flow-id-01").build();
Flow flow2 = Flow.newBuilder().setFlowId("some-flow-id-02").build();
commandPacketResponseBuilded.addResponse(Any.pack(flow1));
commandPacketResponseBuilded.addResponse(Any.pack(flow2));
CommandPacketResponse commandPacketResponse = commandPacketResponseBuilded.build();
when(zeroMqClient.send(argThat(commandPacket -> commandPacket.getType() == Type.LIST_FLOWS))).thenReturn(commandPacketResponse);
String switchId = "00:00:1b:45:18:d6:71:5a";
Headers headers = Headers.builder().correlationId("some-correlation-id").build();
gate.listen(new ListFlowsRequest(headers), switchId);
ArgumentCaptor<ListFlowsResponse> argument = ArgumentCaptor.forClass(ListFlowsResponse.class);
verify(template).send(eq(toStorm), argument.capture());
ListFlowsResponse response = argument.getValue();
assertThat(response.getFlowIds()).contains(flow1.getFlowId(), flow2.getFlowId());
}
use of org.openkilda.server42.control.messaging.flowrtt.Headers in project open-kilda by telstra.
the class KafkaController method getFlowList.
@GetMapping(value = "/flow/")
@ResponseBody
private DeferredResult<ResponseEntity<?>> getFlowList(@RequestParam String switchId) throws InterruptedException, ExecutionException, TimeoutException {
Headers headers = buildHeader();
String correlationId = headers.getCorrelationId();
send(switchId, new ListFlowsRequest(headers));
DeferredResult<ResponseEntity<?>> deferredResult = new DeferredResult<>(500L);
deferredResult.onTimeout(() -> {
deferredResult.setErrorResult(ResponseEntity.status(HttpStatus.REQUEST_TIMEOUT).body("Request timeout occurred."));
deferredResultConcurrentHashMap.remove(correlationId);
});
deferredResult.onCompletion(() -> deferredResultConcurrentHashMap.remove(correlationId));
deferredResult.onError((Throwable throwable) -> {
deferredResult.setErrorResult(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(throwable));
deferredResultConcurrentHashMap.remove(correlationId);
});
deferredResultConcurrentHashMap.put(correlationId, deferredResult);
return deferredResult;
}
use of org.openkilda.server42.control.messaging.flowrtt.Headers in project open-kilda by telstra.
the class FlowHandler method notifyActivateFlowMonitoring.
@Override
public void notifyActivateFlowMonitoring(String flowId, SwitchId switchId, Integer port, Integer vlan, Integer innerVlan, boolean isForward) {
AddFlow addFlow = AddFlow.builder().flowId(flowId).port(port).tunnelId(vlan.longValue()).innerTunnelId(innerVlan.longValue()).direction(isForward ? FlowDirection.FORWARD : FlowDirection.REVERSE).headers(buildHeader()).build();
emit(STREAM_CONTROL_COMMANDS_ID, getCurrentTuple(), new Values(switchId.toString(), addFlow));
}
Aggregations