Skip to content
This repository was archived by the owner on Aug 13, 2020. It is now read-only.

Commit 5c99bbc

Browse files
authored
Merge pull request #743 from CJSCommonPlatform/fix-shuttering-then-catchup
Fix problem of shuttering being called twice on catchup
2 parents 0576850 + 1d40520 commit 5c99bbc

File tree

34 files changed

+373
-129
lines changed

34 files changed

+373
-129
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ on [Keep a CHANGELOG](http://keepachangelog.com/). This project adheres to
55

66
## [Unreleased]
77

8+
## [6.0.0-M37] - 2019-06-25
9+
### Changed
10+
- Shuttering executors no longer register themselves but are discovered at system startup and registered
11+
### Fixed
12+
- Shuttering is no longer called twice when shuttering for catchup
13+
814
## [6.0.0-M36] - 2019-06-21
915
### Added
1016
- Observers for the shutter then catchup process

event-subscription/src/main/java/uk/gov/justice/subscription/YamlFileFinder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class YamlFileFinder {
2020
private static final String EVENT_SOURCE_FILE_NAME = "yaml/event-sources.yaml";
2121

2222
@Inject
23-
Logger logger;
23+
private Logger logger;
2424

2525
/**
2626
* Find all yaml/subscriptions-descriptor.yaml resources on the classpath
@@ -47,7 +47,7 @@ private List<URL> findOnClasspath(final String name) throws IOException {
4747
.getClassLoader()
4848
.getResources(name));
4949

50-
logger.info(format("Found %s resources on the classpath for %s", urls.size(), name));
50+
logger.debug(format("Found %s resources on the classpath for %s", urls.size(), name));
5151

5252
return urls;
5353
}

event-subscription/src/test/java/uk/gov/justice/subscription/YamlFileFinderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,6 @@ public void shouldFindAllEventSourcesOnTheClasspathWhichHaveTheCorrectName() thr
4848
public void shouldLogFoundResources() throws Exception {
4949
yamlFileFinder.getSubscriptionsDescriptorsPaths();
5050

51-
verify(logger).info("Found 1 resources on the classpath for yaml/subscriptions-descriptor.yaml");
51+
verify(logger).debug("Found 1 resources on the classpath for yaml/subscriptions-descriptor.yaml");
5252
}
5353
}

framework-bom/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@
6363
<artifactId>framework-api-rest-client</artifactId>
6464
<version>${framework-api.version}</version>
6565
</dependency>
66+
<dependency>
67+
<groupId>uk.gov.justice.services</groupId>
68+
<artifactId>framework-utilities</artifactId>
69+
<version>${cpp.framework.version}</version>
70+
</dependency>
6671
<dependency>
6772
<groupId>uk.gov.justice.services</groupId>
6873
<artifactId>common</artifactId>

framework-system/framework-management/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@
3131
<artifactId>jmx-command-handling</artifactId>
3232
<version>${project.version}</version>
3333
</dependency>
34+
<dependency>
35+
<groupId>uk.gov.justice.services</groupId>
36+
<artifactId>framework-utilities</artifactId>
37+
<version>${project.version}</version>
38+
</dependency>
3439

3540
<!-- Test Dependencies -->
3641
<dependency>

framework-system/framework-management/src/main/java/uk/gov/justice/services/management/shuttering/observers/shuttering/ShutterCommandApiObserver.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22

33
import uk.gov.justice.services.management.shuttering.events.ShutteringProcessStartedEvent;
44
import uk.gov.justice.services.management.shuttering.process.CommandApiShutteringBean;
5+
import uk.gov.justice.services.management.shuttering.startup.ShutteringExecutor;
56

6-
import javax.annotation.PostConstruct;
77
import javax.enterprise.event.Observes;
88
import javax.inject.Inject;
99

1010
import org.slf4j.Logger;
1111

12+
@ShutteringExecutor
1213
public class ShutterCommandApiObserver {
1314

1415
@Inject
@@ -20,16 +21,11 @@ public class ShutterCommandApiObserver {
2021
@Inject
2122
private Logger logger;
2223

23-
@PostConstruct
24-
public void registerAsShutterable() {
25-
shutteringRegistry.registerAsShutterable(getClass());
26-
}
27-
2824
public void onShutteringProcessStarted(@Observes final ShutteringProcessStartedEvent shutteringProcessStartedEvent) {
2925

3026
logger.info("Shuttering Command API");
3127

32-
commandApiShutteringBean.shutter(shutteringProcessStartedEvent.getTarget());
28+
commandApiShutteringBean.shutter();
3329

3430
logger.info("Shuttering of Command API complete");
3531

framework-system/framework-management/src/main/java/uk/gov/justice/services/management/shuttering/observers/shuttering/ShutteringRegistry.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33

44
import static java.lang.String.format;
5+
import static java.util.stream.Collectors.toList;
56
import static uk.gov.justice.services.management.shuttering.observers.shuttering.ShutteringRegistry.ShutteringState.SHUTTERING_COMPLETE;
67
import static uk.gov.justice.services.management.shuttering.observers.shuttering.ShutteringRegistry.ShutteringState.SHUTTERING_REQUESTED;
78

@@ -53,12 +54,16 @@ public void shutteringStarted() {
5354

5455
public void markShutteringCompleteFor(final Class<?> shutterable, final SystemCommand target) {
5556

57+
58+
logger.info("Marking shuttering complete for " + shutterable.getSimpleName());
5659
shutteringStateMap.put(shutterable, SHUTTERING_COMPLETE);
5760

5861
if (allShutteringComplete()) {
62+
63+
logger.info("All shuttering complete: " + allShutterables.stream().map(Class::getSimpleName).collect(toList()));
5964
shutteringStateMap.clear();
6065
shutteringCompleteEventFirer.fire(new ShutteringCompleteEvent(target, clock.now()));
61-
}
66+
}
6267
}
6368

6469
public void clear() {

framework-system/framework-management/src/main/java/uk/gov/justice/services/management/shuttering/observers/unshuttering/UnshutterCommandApiObserver.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,33 @@
22

33
import uk.gov.justice.services.management.shuttering.events.UnshutteringProcessStartedEvent;
44
import uk.gov.justice.services.management.shuttering.process.CommandApiShutteringBean;
5+
import uk.gov.justice.services.management.shuttering.startup.UnshutteringExecutor;
56

6-
import javax.annotation.PostConstruct;
77
import javax.enterprise.event.Observes;
88
import javax.inject.Inject;
99

1010
import org.slf4j.Logger;
1111

12+
@UnshutteringExecutor
1213
public class UnshutterCommandApiObserver {
1314

1415
@Inject
1516
private CommandApiShutteringBean commandApiShutteringBean;
1617

1718
@Inject
18-
private UnshutteringRegistry shutteringRegistry;
19+
private UnshutteringRegistry unshutteringRegistry;
1920

2021
@Inject
2122
private Logger logger;
2223

23-
@PostConstruct
24-
public void registerAsUnshutterable() {
25-
shutteringRegistry.registerAsUnshutterable(getClass());
26-
}
27-
2824
public void onUnshutteringProcessStarted(@Observes final UnshutteringProcessStartedEvent unshutteringProcessStartedEvent) {
2925

3026
logger.info("Unshuttering Command API");
3127

32-
commandApiShutteringBean.unshutter(unshutteringProcessStartedEvent.getTarget());
28+
commandApiShutteringBean.unshutter();
3329

3430
logger.info("Unshuttering of Command API complete");
3531

36-
shutteringRegistry.markUnshutteringCompleteFor(getClass(), unshutteringProcessStartedEvent.getTarget());
32+
unshutteringRegistry.markUnshutteringCompleteFor(getClass(), unshutteringProcessStartedEvent.getTarget());
3733
}
3834
}

framework-system/framework-management/src/main/java/uk/gov/justice/services/management/shuttering/observers/unshuttering/UnshutteringRegistry.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package uk.gov.justice.services.management.shuttering.observers.unshuttering;
22

33
import static java.lang.String.format;
4+
import static java.util.stream.Collectors.toList;
45
import static uk.gov.justice.services.management.shuttering.observers.unshuttering.UnshutteringRegistry.UnshutteringState.UNSHUTTERING_COMPLETE;
56
import static uk.gov.justice.services.management.shuttering.observers.unshuttering.UnshutteringRegistry.UnshutteringState.UNSHUTTERING_REQUESTED;
67

@@ -37,24 +38,26 @@ enum UnshutteringState {
3738
@Inject
3839
private Logger logger;
3940

40-
private final List<Class<?>> allUnshutterables = new ArrayList<>();
41+
private final List<Class<?>> allUnshutteringExecutors = new ArrayList<>();
4142
private final ConcurrentMap<Class<?>, UnshutteringState> unshutteringStateMap = new ConcurrentHashMap<>();
4243

43-
public void registerAsUnshutterable(final Class<?> unshutterable) {
44+
public void registerAsUnshutterable(final Class<?> unshutteringExecutorClass) {
4445

45-
logger.info(format("Registering %s as unshutterable", unshutterable.getSimpleName()));
46-
allUnshutterables.add(unshutterable);
46+
logger.info(format("Registering %s as unshuttering executor", unshutteringExecutorClass.getSimpleName()));
47+
allUnshutteringExecutors.add(unshutteringExecutorClass);
4748
}
4849

4950
public void unshutteringStarted() {
50-
allUnshutterables.forEach(unshutterableClass -> unshutteringStateMap.put(unshutterableClass, UNSHUTTERING_REQUESTED));
51+
allUnshutteringExecutors.forEach(unshutterableClass -> unshutteringStateMap.put(unshutterableClass, UNSHUTTERING_REQUESTED));
5152
}
5253

5354
public void markUnshutteringCompleteFor(final Class<?> unshutterable, final SystemCommand target) {
5455

56+
logger.info("Marking unshuttering complete for " + unshutterable.getSimpleName());
5557
unshutteringStateMap.put(unshutterable, UNSHUTTERING_COMPLETE);
5658

5759
if (allUnshutteringComplete()) {
60+
logger.info("All unshuttering complete: " + allUnshutteringExecutors.stream().map(Class::getSimpleName).collect(toList()));
5861
unshutteringStateMap.clear();
5962
unshutteringCompleteEventFirer.fire(new UnshutteringCompleteEvent(target, clock.now()));
6063
}

framework-system/framework-management/src/main/java/uk/gov/justice/services/management/shuttering/process/CommandApiShutteringBean.java

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,13 @@
22

33
import static javax.transaction.Transactional.TxType.REQUIRED;
44

5-
import uk.gov.justice.services.common.util.UtcClock;
6-
import uk.gov.justice.services.jmx.command.SystemCommand;
7-
import uk.gov.justice.services.management.shuttering.events.ShutteringCompleteEvent;
8-
import uk.gov.justice.services.management.shuttering.events.UnshutteringCompleteEvent;
95
import uk.gov.justice.services.messaging.jms.EnvelopeSenderSelector;
106
import uk.gov.justice.services.shuttering.domain.ShutteredCommand;
117
import uk.gov.justice.services.shuttering.persistence.ShutteringRepository;
128

139
import java.util.stream.Stream;
1410

1511
import javax.ejb.Stateless;
16-
import javax.enterprise.event.Event;
1712
import javax.inject.Inject;
1813
import javax.transaction.Transactional;
1914

@@ -29,30 +24,17 @@ public class CommandApiShutteringBean {
2924
@Inject
3025
private ShutteredCommandSender shutteredCommandSender;
3126

32-
@Inject
33-
private Event<ShutteringCompleteEvent> shutteringCompleteEventFirer;
34-
35-
@Inject
36-
private Event<UnshutteringCompleteEvent> unshutteringCompleteEventFirer;
37-
38-
@Inject
39-
private UtcClock clock;
40-
41-
public void shutter(final SystemCommand target) {
27+
public void shutter() {
4228
envelopeSenderSelector.setShuttered(true);
43-
44-
shutteringCompleteEventFirer.fire(new ShutteringCompleteEvent(target, clock.now()));
4529
}
4630

4731
@Transactional(REQUIRED)
48-
public void unshutter(final SystemCommand target) {
32+
public void unshutter() {
4933

5034
try (final Stream<ShutteredCommand> shutteredCommandStream = shutteringRepository.streamShutteredCommands()) {
5135
shutteredCommandStream.forEach(shutteredCommandSender::sendAndDelete);
5236
}
5337

5438
envelopeSenderSelector.setShuttered(false);
55-
56-
unshutteringCompleteEventFirer.fire(new UnshutteringCompleteEvent(target, clock.now()));
5739
}
5840
}

0 commit comments

Comments
 (0)