use of org.openkilda.wfm.topology.flowhs.exception.UnknownKeyException in project open-kilda by telstra.
the class YFlowUpdateService method handleAsyncResponse.
/**
* Handles async response from worker.
*
* @param key command identifier.
*/
public void handleAsyncResponse(@NonNull String key, @NonNull SpeakerResponse speakerResponse) throws UnknownKeyException {
log.debug("Received flow command response {}", speakerResponse);
YFlowUpdateFsm fsm = fsmRegister.getFsmByKey(key).orElseThrow(() -> new UnknownKeyException(key));
if (speakerResponse instanceof SpeakerFlowSegmentResponse) {
SpeakerFlowSegmentResponse response = (SpeakerFlowSegmentResponse) speakerResponse;
String flowId = response.getMetadata().getFlowId();
if (fsm.getUpdatingSubFlows().contains(flowId)) {
flowUpdateService.handleAsyncResponseByFlowId(flowId, response);
}
} else if (speakerResponse instanceof SpeakerCommandResponse) {
SpeakerCommandResponse response = (SpeakerCommandResponse) speakerResponse;
YFlowUpdateContext context = YFlowUpdateContext.builder().speakerResponse(response).build();
fsmExecutor.fire(fsm, Event.RESPONSE_RECEIVED, context);
} else {
log.debug("Received unexpected speaker response: {}", speakerResponse);
}
// After handling an event by FlowUpdate service, we should propagate execution to the FSM.
if (!fsm.isTerminated()) {
fsmExecutor.fire(fsm, Event.NEXT);
}
removeIfFinished(fsm, key);
}
use of org.openkilda.wfm.topology.flowhs.exception.UnknownKeyException in project open-kilda by telstra.
the class YFlowValidationHubService method handleAsyncResponse.
/**
* Handles async response from worker.
*
* @param key command identifier.
*/
public void handleAsyncResponse(@NonNull String key, @NonNull String flowId, @NonNull MessageData data) throws UnknownKeyException {
log.debug("Received worker response {}", data);
YFlowValidationFsm fsm = fsmRegister.getFsmByKey(key).orElseThrow(() -> new UnknownKeyException(key));
if (fsm.getValidatingSubFlows().contains(flowId)) {
flowValidationService.handleAsyncResponseByFlowId(flowId, data);
// After handling an event by FlowUpdate service, we should propagate execution to the FSM.
fsmExecutor.fire(fsm, Event.NEXT);
} else {
YFlowValidationContext context = YFlowValidationContext.builder().speakerResponse(data).build();
if (data instanceof ErrorData) {
fsmExecutor.fire(fsm, Event.ERROR_RECEIVED, context);
} else {
fsmExecutor.fire(fsm, Event.RESPONSE_RECEIVED, context);
}
}
removeIfFinished(fsm, key);
}
use of org.openkilda.wfm.topology.flowhs.exception.UnknownKeyException in project open-kilda by telstra.
the class YFlowCreateService method handleTimeout.
/**
* Handles timeout case.
*
* @param key command identifier.
*/
public void handleTimeout(@NonNull String key) throws UnknownKeyException {
log.debug("Handling timeout for {}", key);
YFlowCreateFsm fsm = fsmRegister.getFsmByKey(key).orElseThrow(() -> new UnknownKeyException(key));
// Propagate timeout event to all sub-flow processing FSMs.
fsm.getCreatingSubFlows().forEach(flowId -> {
try {
flowCreateService.handleTimeoutByFlowId(flowId);
} catch (UnknownKeyException e) {
log.error("Failed to handle a timeout event by FlowCreateService for {}.", flowId);
}
});
fsm.getDeletingSubFlows().forEach(flowId -> {
try {
flowDeleteService.handleTimeoutByFlowId(flowId);
} catch (UnknownKeyException e) {
log.error("Failed to handle a timeout event by FlowDeleteService for {}.", flowId);
}
});
fsmExecutor.fire(fsm, Event.TIMEOUT);
removeIfFinished(fsm, key);
}
use of org.openkilda.wfm.topology.flowhs.exception.UnknownKeyException in project open-kilda by telstra.
the class FlowUpdateService method handleAsyncResponse.
/**
* Handles async response from worker.
*
* @param key command identifier.
*/
public void handleAsyncResponse(@NonNull String key, @NonNull SpeakerFlowSegmentResponse flowResponse) throws UnknownKeyException {
log.debug("Received flow command response {}", flowResponse);
FlowUpdateFsm fsm = fsmRegister.getFsmByKey(key).orElseThrow(() -> new UnknownKeyException(key));
FlowUpdateContext context = FlowUpdateContext.builder().speakerFlowResponse(flowResponse).build();
if (flowResponse instanceof FlowErrorResponse) {
fsmExecutor.fire(fsm, Event.ERROR_RECEIVED, context);
} else {
fsmExecutor.fire(fsm, Event.RESPONSE_RECEIVED, context);
}
removeIfFinished(fsm, key);
}
use of org.openkilda.wfm.topology.flowhs.exception.UnknownKeyException in project open-kilda by telstra.
the class FlowDeleteService method handleAsyncResponse.
/**
* Handles async response from worker.
*
* @param key command identifier.
*/
public void handleAsyncResponse(@NonNull String key, @NonNull SpeakerFlowSegmentResponse flowResponse) throws UnknownKeyException {
log.debug("Received flow command response {}", flowResponse);
FlowDeleteFsm fsm = fsmRegister.getFsmByKey(key).orElseThrow(() -> new UnknownKeyException(key));
FlowDeleteContext context = FlowDeleteContext.builder().speakerFlowResponse(flowResponse).build();
if (flowResponse instanceof FlowErrorResponse) {
fsmExecutor.fire(fsm, Event.ERROR_RECEIVED, context);
} else {
fsmExecutor.fire(fsm, Event.RESPONSE_RECEIVED, context);
}
removeIfFinished(fsm, key);
}
Aggregations