Add Target Poll Event in Service Events (#2981)
* Add Target Poll Event in Service Events Signed-off-by: strailov <Stanislav.Trailov@bosch.io> * Target poll event to service event Signed-off-by: strailov <Stanislav.Trailov@bosch.io> --------- Signed-off-by: strailov <Stanislav.Trailov@bosch.io>
This commit is contained in:
committed by
GitHub
parent
5aafdaca6f
commit
ba3a08e560
@@ -0,0 +1,31 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2026 Contributors to the Eclipse Foundation
|
||||||
|
*
|
||||||
|
* This program and the accompanying materials are made
|
||||||
|
* available under the terms of the Eclipse Public License 2.0
|
||||||
|
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
|
*/
|
||||||
|
package org.eclipse.hawkbit.repository.event.remote.service;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import org.eclipse.hawkbit.repository.event.remote.TargetPollEvent;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Service event for {@link TargetPollEvent}. Event that needs single replica processing
|
||||||
|
*/
|
||||||
|
public class TargetPollServiceEvent extends AbstractServiceRemoteEvent<TargetPollEvent> {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@JsonCreator
|
||||||
|
public TargetPollServiceEvent(@JsonProperty("payload") TargetPollEvent remoteEvent) {
|
||||||
|
super(remoteEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -70,6 +70,7 @@ import org.eclipse.hawkbit.repository.event.remote.service.TargetAssignDistribut
|
|||||||
import org.eclipse.hawkbit.repository.event.remote.service.TargetAttributesRequestedServiceEvent;
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetAttributesRequestedServiceEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.service.TargetCreatedServiceEvent;
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetCreatedServiceEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.service.TargetDeletedServiceEvent;
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetDeletedServiceEvent;
|
||||||
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetPollServiceEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.service.TargetUpdatedServiceEvent;
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetUpdatedServiceEvent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -181,6 +182,7 @@ public class EventType {
|
|||||||
TYPES.put(1005, CancelTargetAssignmentServiceEvent.class);
|
TYPES.put(1005, CancelTargetAssignmentServiceEvent.class);
|
||||||
TYPES.put(1008, ActionCreatedServiceEvent.class);
|
TYPES.put(1008, ActionCreatedServiceEvent.class);
|
||||||
TYPES.put(1009, ActionUpdatedServiceEvent.class);
|
TYPES.put(1009, ActionUpdatedServiceEvent.class);
|
||||||
|
TYPES.put(1010, TargetPollServiceEvent.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import org.eclipse.hawkbit.repository.event.remote.CancelTargetAssignmentEvent;
|
|||||||
import org.eclipse.hawkbit.repository.event.remote.TargetAssignDistributionSetEvent;
|
import org.eclipse.hawkbit.repository.event.remote.TargetAssignDistributionSetEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.TargetAttributesRequestedEvent;
|
import org.eclipse.hawkbit.repository.event.remote.TargetAttributesRequestedEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.TargetDeletedEvent;
|
import org.eclipse.hawkbit.repository.event.remote.TargetDeletedEvent;
|
||||||
|
import org.eclipse.hawkbit.repository.event.remote.TargetPollEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.entity.ActionCreatedEvent;
|
import org.eclipse.hawkbit.repository.event.remote.entity.ActionCreatedEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.entity.ActionUpdatedEvent;
|
import org.eclipse.hawkbit.repository.event.remote.entity.ActionUpdatedEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.entity.TargetCreatedEvent;
|
import org.eclipse.hawkbit.repository.event.remote.entity.TargetCreatedEvent;
|
||||||
@@ -31,6 +32,7 @@ import org.eclipse.hawkbit.repository.event.remote.service.TargetAssignDistribut
|
|||||||
import org.eclipse.hawkbit.repository.event.remote.service.TargetAttributesRequestedServiceEvent;
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetAttributesRequestedServiceEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.service.TargetCreatedServiceEvent;
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetCreatedServiceEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.service.TargetDeletedServiceEvent;
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetDeletedServiceEvent;
|
||||||
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetPollServiceEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.service.TargetUpdatedServiceEvent;
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetUpdatedServiceEvent;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
@@ -74,7 +76,8 @@ public final class EventPublisherHolder {
|
|||||||
CancelTargetAssignmentEvent.class,
|
CancelTargetAssignmentEvent.class,
|
||||||
TargetAttributesRequestedEvent.class,
|
TargetAttributesRequestedEvent.class,
|
||||||
ActionCreatedEvent.class,
|
ActionCreatedEvent.class,
|
||||||
ActionUpdatedEvent.class
|
ActionUpdatedEvent.class,
|
||||||
|
TargetPollEvent.class
|
||||||
);
|
);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -181,6 +184,8 @@ public final class EventPublisherHolder {
|
|||||||
return new ActionCreatedServiceEvent(actionCreatedEvent);
|
return new ActionCreatedServiceEvent(actionCreatedEvent);
|
||||||
} else if (event instanceof ActionUpdatedEvent actionUpdatedEvent) {
|
} else if (event instanceof ActionUpdatedEvent actionUpdatedEvent) {
|
||||||
return new ActionUpdatedServiceEvent(actionUpdatedEvent);
|
return new ActionUpdatedServiceEvent(actionUpdatedEvent);
|
||||||
|
} else if (event instanceof TargetPollEvent targetPollEvent) {
|
||||||
|
return new TargetPollServiceEvent(targetPollEvent);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ import org.eclipse.hawkbit.repository.event.ApplicationEventFilter;
|
|||||||
import org.eclipse.hawkbit.repository.event.remote.EventEntityManager;
|
import org.eclipse.hawkbit.repository.event.remote.EventEntityManager;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.EventEntityManagerHolder;
|
import org.eclipse.hawkbit.repository.event.remote.EventEntityManagerHolder;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.TargetPollEvent;
|
import org.eclipse.hawkbit.repository.event.remote.TargetPollEvent;
|
||||||
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetPollServiceEvent;
|
||||||
import org.eclipse.hawkbit.repository.jpa.acm.AccessController;
|
import org.eclipse.hawkbit.repository.jpa.acm.AccessController;
|
||||||
import org.eclipse.hawkbit.repository.jpa.aspects.ExceptionMappingAspectHandler;
|
import org.eclipse.hawkbit.repository.jpa.aspects.ExceptionMappingAspectHandler;
|
||||||
import org.eclipse.hawkbit.repository.jpa.autocleanup.AutoActionCleanup;
|
import org.eclipse.hawkbit.repository.jpa.autocleanup.AutoActionCleanup;
|
||||||
@@ -277,7 +278,9 @@ public class JpaRepositoryConfiguration {
|
|||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnMissingBean
|
@ConditionalOnMissingBean
|
||||||
ApplicationEventFilter applicationEventFilter(final RepositoryProperties repositoryProperties) {
|
ApplicationEventFilter applicationEventFilter(final RepositoryProperties repositoryProperties) {
|
||||||
return e -> e instanceof TargetPollEvent && !repositoryProperties.isPublishTargetPollEvent();
|
return e ->
|
||||||
|
(e instanceof TargetPollEvent || e instanceof TargetPollServiceEvent)
|
||||||
|
&& !repositoryProperties.isPublishTargetPollEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import org.eclipse.hawkbit.repository.event.remote.service.TargetAssignDistribut
|
|||||||
import org.eclipse.hawkbit.repository.event.remote.service.TargetAttributesRequestedServiceEvent;
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetAttributesRequestedServiceEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.service.TargetCreatedServiceEvent;
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetCreatedServiceEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.service.TargetDeletedServiceEvent;
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetDeletedServiceEvent;
|
||||||
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetPollServiceEvent;
|
||||||
import org.eclipse.hawkbit.repository.model.Action;
|
import org.eclipse.hawkbit.repository.model.Action;
|
||||||
import org.eclipse.hawkbit.repository.model.DistributionSet;
|
import org.eclipse.hawkbit.repository.model.DistributionSet;
|
||||||
import org.eclipse.hawkbit.repository.model.Target;
|
import org.eclipse.hawkbit.repository.model.Target;
|
||||||
@@ -78,7 +79,8 @@ class ServiceEventsTest {
|
|||||||
CancelTargetAssignmentEvent.class,
|
CancelTargetAssignmentEvent.class,
|
||||||
TargetAttributesRequestedEvent.class,
|
TargetAttributesRequestedEvent.class,
|
||||||
ActionCreatedEvent.class,
|
ActionCreatedEvent.class,
|
||||||
ActionUpdatedEvent.class
|
ActionUpdatedEvent.class,
|
||||||
|
TargetPollEvent.class
|
||||||
);
|
);
|
||||||
assertEquals(EventPublisherHolder.SERVICE_EVENTS, expected);
|
assertEquals(EventPublisherHolder.SERVICE_EVENTS, expected);
|
||||||
}
|
}
|
||||||
@@ -130,6 +132,14 @@ class ServiceEventsTest {
|
|||||||
verify(streamBridge).send(eq("group"), any(CancelTargetAssignmentServiceEvent.class));
|
verify(streamBridge).send(eq("group"), any(CancelTargetAssignmentServiceEvent.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testTargetPollEventIsSent() {
|
||||||
|
TargetPollEvent event = new TargetPollEvent();
|
||||||
|
publisher.publishEvent(event);
|
||||||
|
verify(streamBridge).send("fanout", event);
|
||||||
|
verify(streamBridge).send(eq("group"), any(TargetPollServiceEvent.class));
|
||||||
|
}
|
||||||
|
|
||||||
private Action mockAction() {
|
private Action mockAction() {
|
||||||
final Action actionMock = mock(Action.class);
|
final Action actionMock = mock(Action.class);
|
||||||
final Target targetMock = mock(Target.class);
|
final Target targetMock = mock(Target.class);
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import org.eclipse.hawkbit.repository.event.remote.RemoteTenantAwareEvent;
|
|||||||
import org.eclipse.hawkbit.repository.event.remote.TargetAssignDistributionSetEvent;
|
import org.eclipse.hawkbit.repository.event.remote.TargetAssignDistributionSetEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.TargetAttributesRequestedEvent;
|
import org.eclipse.hawkbit.repository.event.remote.TargetAttributesRequestedEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.TargetDeletedEvent;
|
import org.eclipse.hawkbit.repository.event.remote.TargetDeletedEvent;
|
||||||
|
import org.eclipse.hawkbit.repository.event.remote.TargetPollEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.entity.ActionCreatedEvent;
|
import org.eclipse.hawkbit.repository.event.remote.entity.ActionCreatedEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.entity.ActionUpdatedEvent;
|
import org.eclipse.hawkbit.repository.event.remote.entity.ActionUpdatedEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.entity.TargetCreatedEvent;
|
import org.eclipse.hawkbit.repository.event.remote.entity.TargetCreatedEvent;
|
||||||
@@ -49,6 +50,7 @@ import org.eclipse.hawkbit.repository.event.remote.service.TargetAssignDistribut
|
|||||||
import org.eclipse.hawkbit.repository.event.remote.service.TargetAttributesRequestedServiceEvent;
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetAttributesRequestedServiceEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.service.TargetCreatedServiceEvent;
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetCreatedServiceEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.service.TargetDeletedServiceEvent;
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetDeletedServiceEvent;
|
||||||
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetPollServiceEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.service.TargetUpdatedServiceEvent;
|
import org.eclipse.hawkbit.repository.event.remote.service.TargetUpdatedServiceEvent;
|
||||||
import org.springframework.context.ApplicationEventPublisher;
|
import org.springframework.context.ApplicationEventPublisher;
|
||||||
import org.springframework.context.ApplicationListener;
|
import org.springframework.context.ApplicationListener;
|
||||||
@@ -180,6 +182,8 @@ public class EventVerifier extends AbstractTestExecutionListener {
|
|||||||
modifiedEvents.add(new DynamicExpect(ActionCreatedServiceEvent.class, event.count()));
|
modifiedEvents.add(new DynamicExpect(ActionCreatedServiceEvent.class, event.count()));
|
||||||
} else if (type.isAssignableFrom(ActionUpdatedEvent.class)) {
|
} else if (type.isAssignableFrom(ActionUpdatedEvent.class)) {
|
||||||
modifiedEvents.add(new DynamicExpect(ActionUpdatedServiceEvent.class, event.count()));
|
modifiedEvents.add(new DynamicExpect(ActionUpdatedServiceEvent.class, event.count()));
|
||||||
|
} else if (type.isAssignableFrom(TargetPollEvent.class)) {
|
||||||
|
modifiedEvents.add(new DynamicExpect(TargetPollServiceEvent.class, event.count()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user