From 41cbf23c62ea14bb31a36b182ebe2e5b52aa40a5 Mon Sep 17 00:00:00 2001 From: Bondar Bogdan <36962546+bogdan-bondar@users.noreply.github.com> Date: Thu, 1 Aug 2019 10:19:20 +0200 Subject: [PATCH] Feature dispatcher refactoring (#872) * added target validation for cancel event, allowed from-self check overriding Signed-off-by: Bogdan Bondar * changed methods visibility Signed-off-by: Bogdan Bondar * made isFromSelf a concrete implementation of shouldBeProcessed generic event method Signed-off-by: Bogdan Bondar * changed log level to warn Signed-off-by: Bogdan Bondar --- .../amqp/AmqpMessageDispatcherService.java | 39 ++++++++++++------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/hawkbit-dmf/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java b/hawkbit-dmf/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java index 2d3b70b7a..029ebf509 100644 --- a/hawkbit-dmf/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java +++ b/hawkbit-dmf/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java @@ -136,7 +136,7 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { */ @EventListener(classes = TargetAssignDistributionSetEvent.class) protected void targetAssignDistributionSet(final TargetAssignDistributionSetEvent assignedEvent) { - if (isNotFromSelf(assignedEvent)) { + if (!shouldBeProcessed(assignedEvent)) { return; } @@ -161,15 +161,15 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { * the Multi-Action event to be processed */ @EventListener(classes = MultiActionEvent.class) - protected void onMultiAction(final MultiActionEvent e) { - if (isNotFromSelf(e)) { + protected void onMultiAction(final MultiActionEvent multiActionEvent) { + if (!shouldBeProcessed(multiActionEvent)) { return; } - LOG.debug("MultiActionEvent received for {}", e.getControllerIds()); - sendMultiActionRequestMessages(e.getTenant(), e.getControllerIds()); + LOG.debug("MultiActionEvent received for {}", multiActionEvent.getControllerIds()); + sendMultiActionRequestMessages(multiActionEvent.getTenant(), multiActionEvent.getControllerIds()); } - protected void sendMultiActionRequestMessages(final String tenant, final List controllerIds) { + private void sendMultiActionRequestMessages(final String tenant, final List controllerIds) { final Map> softwareModuleMetadata = new HashMap<>(); targetManagement.getByControllerID(controllerIds).stream() @@ -284,12 +284,19 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { */ @EventListener(classes = CancelTargetAssignmentEvent.class) protected void targetCancelAssignmentToDistributionSet(final CancelTargetAssignmentEvent cancelEvent) { - if (isNotFromSelf(cancelEvent)) { + if (!shouldBeProcessed(cancelEvent)) { return; } - sendCancelMessageToTarget(cancelEvent.getTenant(), cancelEvent.getEntity().getControllerId(), - cancelEvent.getActionId(), cancelEvent.getEntity().getAddress()); + final Target target = cancelEvent.getEntity(); + if (target != null) { + sendCancelMessageToTarget(cancelEvent.getTenant(), target.getControllerId(), cancelEvent.getActionId(), + target.getAddress()); + } else { + LOG.warn( + "Cannot process the received CancelTargetAssignmentEvent with action ID {} because the referenced target with ID {} does no longer exist.", + cancelEvent.getActionId(), cancelEvent.getEntityId()); + } } /** @@ -302,7 +309,7 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { */ @EventListener(classes = TargetDeletedEvent.class) protected void targetDelete(final TargetDeletedEvent deleteEvent) { - if (isNotFromSelf(deleteEvent)) { + if (!shouldBeProcessed(deleteEvent)) { return; } sendDeleteMessage(deleteEvent.getTenant(), deleteEvent.getControllerId(), deleteEvent.getTargetAddress()); @@ -352,7 +359,7 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { IpUtil.createAmqpUri(virtualHost, ping.getMessageProperties().getReplyTo())); } - protected void sendDeleteMessage(final String tenant, final String controllerId, final String targetAddress) { + private void sendDeleteMessage(final String tenant, final String controllerId, final String targetAddress) { if (!hasValidAddress(targetAddress)) { return; @@ -366,8 +373,12 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { return targetAddress != null && IpUtil.isAmqpUri(URI.create(targetAddress)); } - private boolean isNotFromSelf(final RemoteApplicationEvent event) { - return serviceMatcher != null && !serviceMatcher.isFromSelf(event); + protected boolean shouldBeProcessed(final RemoteApplicationEvent event) { + return isFromSelf(event); + } + + private boolean isFromSelf(final RemoteApplicationEvent event) { + return serviceMatcher == null || serviceMatcher.isFromSelf(event); } protected void sendCancelMessageToTarget(final String tenant, final String controllerId, final Long actionId, @@ -386,7 +397,7 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { } - protected void sendUpdateAttributesMessageToTarget(final String tenant, final String controllerId, + private void sendUpdateAttributesMessageToTarget(final String tenant, final String controllerId, final String targetAddress) { if (!hasValidAddress(targetAddress)) { return;