Skip to content

Commit c137f5a

Browse files
Merge pull request #93 from francoisledroff/GH-91
GH-91 pushing bootstrap events accross the cluster
2 parents 587f2fc + 116cc89 commit c137f5a

File tree

9 files changed

+100
-136
lines changed

9 files changed

+100
-136
lines changed

aem/core_aem/src/main/java/com/adobe/aio/aem/util/Util.java

Lines changed: 0 additions & 42 deletions
This file was deleted.

aem/events_mgmt_aem/src/main/java/com/adobe/aio/aem/event/management/EventMetadataRegistrationJobConsumer.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ public class EventMetadataRegistrationJobConsumer implements JobConsumer {
4444
@Activate
4545
protected void activate() {
4646
log.info("activating");
47-
eventMetadataStatusSupplier.setJobConsumerReady(true);
4847
}
4948

5049
@Override

aem/events_mgmt_aem/src/main/java/com/adobe/aio/aem/event/management/EventMetadataStatusSupplier.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
@ProviderType
1919
public interface EventMetadataStatusSupplier extends StatusSupplier {
2020

21-
Boolean isJobConsumerReady();
22-
void setJobConsumerReady(Boolean ready);
2321
void addStatus(String eventCode, EventMetadataStatus eventMetadataStatus);
22+
2423
}

aem/events_mgmt_aem/src/main/java/com/adobe/aio/aem/event/management/internal/EventMetadataStatusSupplierImpl.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,6 @@ public class EventMetadataStatusSupplierImpl implements EventMetadataStatusSuppl
3030

3131
private final Logger log = LoggerFactory.getLogger(getClass());
3232
private final Map<String, EventMetadataStatus> eventMetadataStatusByEventCode = new ConcurrentHashMap<>();
33-
private Boolean isJobConsumerReady = false;
34-
35-
@Override
36-
public Boolean isJobConsumerReady() {
37-
return this.isJobConsumerReady;
38-
}
39-
40-
@Override
41-
public void setJobConsumerReady(Boolean ready) {
42-
this.isJobConsumerReady = ready;
43-
}
4433

4534
@Override
4635
public void addStatus(String eventCode, EventMetadataStatus eventMetadataStatus) {
@@ -52,9 +41,10 @@ public Status getStatus() {
5241
Map<String, Object> details = new HashMap<>(1);
5342
try {
5443
if (eventMetadataStatusByEventCode.isEmpty()) {
55-
return new Status(Status.DOWN, null, "Missing event metadata configuration");
44+
return new Status(Status.DOWN, null, "No event metadata configuration found (yet?)");
5645
} else {
57-
details.putAll(eventMetadataStatusByEventCode);
46+
details.put("size",""+eventMetadataStatusByEventCode.size());
47+
details.put("event_metadata",eventMetadataStatusByEventCode);
5848
boolean isUp = eventMetadataStatusByEventCode.values().stream()
5949
.allMatch(EventMetadataStatus::isUp);
6050
return new Status(isUp, details);

aem/events_mgmt_aem/src/main/java/com/adobe/aio/aem/event/management/internal/EventMetadataSupplierImpl.java

Lines changed: 42 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,18 @@
1111
*/
1212
package com.adobe.aio.aem.event.management.internal;
1313

14+
import static org.apache.sling.event.dea.DEAConstants.PROPERTY_DISTRIBUTE;
1415
import com.adobe.aio.aem.event.management.EventMetadataRegistrationJobConsumer;
1516
import com.adobe.aio.aem.event.management.EventMetadataStatusSupplier;
1617
import com.adobe.aio.aem.event.management.EventMetadataSupplier;
1718
import com.adobe.aio.aem.event.management.EventProviderRegistrationService;
1819
import com.adobe.aio.aem.event.management.ocd.EventMetadataConfig;
19-
import com.adobe.aio.aem.util.Util;
2020
import com.adobe.aio.event.management.model.EventMetadata;
2121
import com.fasterxml.jackson.databind.ObjectMapper;
2222
import java.util.HashMap;
2323
import java.util.Map;
24+
import java.util.Timer;
25+
import java.util.TimerTask;
2426
import java.util.concurrent.ThreadLocalRandom;
2527
import org.apache.sling.event.jobs.JobManager;
2628
import org.osgi.service.component.annotations.Activate;
@@ -52,32 +54,46 @@ public class EventMetadataSupplierImpl implements EventMetadataSupplier {
5254

5355
@Activate
5456
protected void activate(EventMetadataConfig eventMetadataConfig) {
55-
Map<String, Object> jobProperties = new HashMap();
56-
jobProperties.put(EventMetadataRegistrationJobConsumer.AIO_EVENT_CODE_PROPERTY,
57-
eventMetadataConfig.aio_event_code());
58-
try {
59-
Util.waitFor(eventMetadataStatusSupplier::isJobConsumerReady,
60-
"Adobe I/O Events Metadata Registration Job Consumer");
61-
EventMetadata configuredEventMetadata = EventMetadata.builder()
62-
.description(eventMetadataConfig.aio_event_description())
63-
.label(eventMetadataConfig.aio_event_label())
64-
.eventCode(eventMetadataConfig.aio_event_code())
65-
.build();
66-
jobProperties.put(EventMetadataRegistrationJobConsumer.AIO_EVENT_METADATA_PROPERTY,
67-
objectMapper.writeValueAsString(configuredEventMetadata));
68-
jobManager.addJob(EventMetadataRegistrationJobConsumer.AIO_CONFIG_EVENT_METADA_JOB_TOPIC, jobProperties);
69-
log.debug("Adobe I/O Events Metadata Config Job {} added.", jobProperties);
70-
} catch (Exception e) {
71-
log.error("Adobe I/O Events' Event Metadata Supplier Service Activation Error: {}",
72-
e.getMessage(), e);
73-
jobProperties.put(EventMetadataRegistrationJobConsumer.AIO_ERROR_PROPERTY,
74-
e.getClass().getSimpleName() + ":" + e.getMessage());
75-
jobManager.addJob(EventMetadataRegistrationJobConsumer.AIO_CONFIG_EVENT_METADA_JOB_TOPIC, jobProperties);
76-
} finally {
77-
log.info("Adobe I/O Events' Event Metadata Supplier Service Activation Complete with config : {}",
78-
eventMetadataConfig);
79-
}
57+
new Timer(this.getClass().getSimpleName() + "_" + eventMetadataConfig.aio_event_code())
58+
.schedule(getTask(eventMetadataConfig),
59+
ThreadLocalRandom.current().nextInt(3000, 4000));
60+
// waiting a bit for the JobConsumer to be ready ... not sure if necessary
8061
}
8162

8263

64+
public TimerTask getTask(EventMetadataConfig eventMetadataConfig) {
65+
return new TimerTask() {
66+
public void run() {
67+
Map<String, Object> jobProperties = new HashMap();
68+
jobProperties.put(EventMetadataRegistrationJobConsumer.AIO_EVENT_CODE_PROPERTY,
69+
eventMetadataConfig.aio_event_code());
70+
try {
71+
EventMetadata configuredEventMetadata = EventMetadata.builder()
72+
.description(eventMetadataConfig.aio_event_description())
73+
.label(eventMetadataConfig.aio_event_label())
74+
.eventCode(eventMetadataConfig.aio_event_code())
75+
.build();
76+
// we want the event to be distributed in the cluster
77+
jobProperties.put(PROPERTY_DISTRIBUTE,"");
78+
jobProperties.put(EventMetadataRegistrationJobConsumer.AIO_EVENT_METADATA_PROPERTY,
79+
objectMapper.writeValueAsString(configuredEventMetadata));
80+
jobManager.addJob(EventMetadataRegistrationJobConsumer.AIO_CONFIG_EVENT_METADA_JOB_TOPIC,
81+
jobProperties);
82+
log.debug("Adobe I/O Events Metadata Config Job {} added.", jobProperties);
83+
} catch (Exception e) {
84+
log.error("Adobe I/O Events' Event Metadata Supplier Service Activation Error: {}",
85+
e.getMessage(), e);
86+
jobProperties.put(EventMetadataRegistrationJobConsumer.AIO_ERROR_PROPERTY,
87+
e.getClass().getSimpleName() + ":" + e.getMessage());
88+
jobManager.addJob(EventMetadataRegistrationJobConsumer.AIO_CONFIG_EVENT_METADA_JOB_TOPIC,
89+
jobProperties);
90+
} finally {
91+
log.info(
92+
"Adobe I/O Events' Event Metadata Supplier Service Activation Complete with config : {}",
93+
eventMetadataConfig);
94+
}
95+
}
96+
};
97+
}
98+
8399
}

aem/events_osgi_mapping/src/main/java/com/adobe/aio/aem/event/osgimapping/EventHandlerRegistrationJobConsumer.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ public class EventHandlerRegistrationJobConsumer implements JobConsumer {
7575
protected void activate(BundleContext context, Map<String, Object> config) {
7676
log.info("activating");
7777
this.bundleContext = context;
78-
osgiEventMappingStatusSupplier.setJobConsumerReady(true);
7978
}
8079

8180
@Override

aem/events_osgi_mapping/src/main/java/com/adobe/aio/aem/event/osgimapping/OsgiEventMappingStatusSupplier.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
@ProviderType
1919
public interface OsgiEventMappingStatusSupplier extends StatusSupplier {
2020

21-
boolean isJobConsumerReady();
22-
void setJobConsumerReady(boolean ready);
2321
void addStatus(String eventCode, OsgiEventMappingStatus eventMetadataStatus);
22+
2423
}

aem/events_osgi_mapping/src/main/java/com/adobe/aio/aem/event/osgimapping/internal/OsgiEventMappingStatusSupplierImpl.java

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,6 @@ public class OsgiEventMappingStatusSupplierImpl implements OsgiEventMappingStatu
3232
private final Logger log = LoggerFactory.getLogger(getClass());
3333
private final Map<String, OsgiEventMappingStatus> osgiEventMappingStatusByEventCode = new ConcurrentHashMap<>();
3434

35-
private boolean isJobConsumerReady = false;
36-
37-
@Override
38-
public boolean isJobConsumerReady() {
39-
return this.isJobConsumerReady;
40-
}
41-
42-
@Override
43-
public void setJobConsumerReady(boolean ready) {
44-
this.isJobConsumerReady =ready;
45-
}
46-
4735
@Override
4836
public void addStatus(String eventCode, OsgiEventMappingStatus eventMetadataStatus) {
4937
osgiEventMappingStatusByEventCode.put(eventCode, eventMetadataStatus);
@@ -54,9 +42,10 @@ public Status getStatus() {
5442
Map<String, Object> details = new HashMap<>(1);
5543
try {
5644
if (osgiEventMappingStatusByEventCode.isEmpty()) {
57-
return new Status(Status.DOWN, null, "Missing Osgi Event Mapping configuration");
45+
return new Status(Status.DOWN, null, "No Osgi Event Mapping configuration found (yet?)");
5846
} else {
59-
details.putAll(osgiEventMappingStatusByEventCode);
47+
details.put("size",""+osgiEventMappingStatusByEventCode.size());
48+
details.put("event_metadata",osgiEventMappingStatusByEventCode);
6049
boolean isUp = osgiEventMappingStatusByEventCode.values().stream()
6150
.allMatch(OsgiEventMappingStatus::isUp);
6251
return new Status(isUp, details);

aem/events_osgi_mapping/src/main/java/com/adobe/aio/aem/event/osgimapping/internal/OsgiEventMappingSupplierImpl.java

Lines changed: 50 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,21 @@
1111
*/
1212
package com.adobe.aio.aem.event.osgimapping.internal;
1313

14+
import static org.apache.sling.event.dea.DEAConstants.PROPERTY_DISTRIBUTE;
15+
1416
import com.adobe.aio.aem.event.management.EventMetadataRegistrationJobConsumer;
1517
import com.adobe.aio.aem.event.management.EventMetadataStatusSupplier;
1618
import com.adobe.aio.aem.event.osgimapping.EventHandlerRegistrationJobConsumer;
1719
import com.adobe.aio.aem.event.osgimapping.OsgiEventMappingStatusSupplier;
1820
import com.adobe.aio.aem.event.osgimapping.OsgiEventMappingSupplier;
1921
import com.adobe.aio.aem.event.osgimapping.eventhandler.OsgiEventMapping;
2022
import com.adobe.aio.aem.event.osgimapping.ocd.OsgiEventMappingConfig;
21-
import com.adobe.aio.aem.util.Util;
2223
import com.adobe.aio.event.management.model.EventMetadata;
2324
import com.fasterxml.jackson.databind.ObjectMapper;
2425
import java.util.HashMap;
2526
import java.util.Map;
27+
import java.util.Timer;
28+
import java.util.TimerTask;
2629
import java.util.concurrent.ThreadLocalRandom;
2730
import org.apache.sling.event.jobs.JobManager;
2831
import org.osgi.service.component.annotations.Activate;
@@ -54,40 +57,52 @@ public class OsgiEventMappingSupplierImpl implements OsgiEventMappingSupplier {
5457

5558
@Activate
5659
protected void activate(OsgiEventMappingConfig eventMetadataConfig) {
57-
Map<String, Object> jobProperties = new HashMap();
58-
jobProperties.put(EventMetadataRegistrationJobConsumer.AIO_EVENT_CODE_PROPERTY,
59-
eventMetadataConfig.aio_event_code());
60-
try {
61-
Util.waitFor(eventMetadataStatusSupplier::isJobConsumerReady,
62-
"Adobe I/O Events Metadata Registration Job Consumer");
63-
Util.waitFor(osgiEventMappingStatusSupplier::isJobConsumerReady,
64-
"Adobe I/O Events Handler Registration Job Consumer");
65-
EventMetadata configuredEventMetadata = EventMetadata.builder()
66-
.description(eventMetadataConfig.aio_event_description())
67-
.label(eventMetadataConfig.aio_event_label())
68-
.eventCode(eventMetadataConfig.aio_event_code())
69-
.build();
70-
jobProperties.put(EventHandlerRegistrationJobConsumer.AIO_OSGI_EVENT_MAPPING_PROPERTY,
71-
objectMapper.writeValueAsString(new OsgiEventMapping(eventMetadataConfig)));
72-
jobProperties.put(EventMetadataRegistrationJobConsumer.AIO_EVENT_METADATA_PROPERTY,
73-
objectMapper.writeValueAsString(configuredEventMetadata));
74-
jobManager.addJob(EventMetadataRegistrationJobConsumer.AIO_CONFIG_EVENT_METADA_JOB_TOPIC,
75-
jobProperties);
76-
jobManager.addJob(EventHandlerRegistrationJobConsumer.AIO_CONFIG_OSGI_EVENT_METADA_JOB_TOPIC,
77-
jobProperties);
78-
log.debug("Adobe I/O Events Metadata Config Job {} added.", jobProperties);
79-
} catch (Exception e) {
80-
log.error("Adobe I/O Events' Event Metadata Supplier Service Activation Error: {}",
81-
e.getMessage(), e);
82-
jobProperties.put(EventMetadataRegistrationJobConsumer.AIO_ERROR_PROPERTY,
83-
e.getClass().getSimpleName() + ":" + e.getMessage());
84-
jobManager.addJob(EventMetadataRegistrationJobConsumer.AIO_CONFIG_EVENT_METADA_JOB_TOPIC,
85-
jobProperties);
86-
} finally {
87-
log.info(
88-
"Adobe I/O Events' Event Metadata Supplier Service Activation Complete with config : {}",
89-
eventMetadataConfig);
90-
}
60+
new Timer(this.getClass().getSimpleName() + "_" + eventMetadataConfig.aio_event_code())
61+
.schedule(getTask(eventMetadataConfig),
62+
ThreadLocalRandom.current().nextInt(3000, 4000));
63+
// waiting a bit for the JobConsumer to be ready ... not sure if necessary
9164
}
9265

66+
public TimerTask getTask(OsgiEventMappingConfig eventMetadataConfig) {
67+
return new TimerTask() {
68+
public void run() {
69+
Map<String, Object> jobProperties = new HashMap();
70+
jobProperties.put(EventMetadataRegistrationJobConsumer.AIO_EVENT_CODE_PROPERTY,
71+
eventMetadataConfig.aio_event_code());
72+
try {
73+
EventMetadata configuredEventMetadata = EventMetadata.builder()
74+
.description(eventMetadataConfig.aio_event_description())
75+
.label(eventMetadataConfig.aio_event_label())
76+
.eventCode(eventMetadataConfig.aio_event_code())
77+
.build();
78+
// we want the event to be distributed in the cluster
79+
jobProperties.put(PROPERTY_DISTRIBUTE,"");
80+
jobProperties.put(EventHandlerRegistrationJobConsumer.AIO_OSGI_EVENT_MAPPING_PROPERTY,
81+
objectMapper.writeValueAsString(new OsgiEventMapping(eventMetadataConfig)));
82+
jobProperties.put(EventMetadataRegistrationJobConsumer.AIO_EVENT_METADATA_PROPERTY,
83+
objectMapper.writeValueAsString(configuredEventMetadata));
84+
jobManager.addJob(EventMetadataRegistrationJobConsumer.AIO_CONFIG_EVENT_METADA_JOB_TOPIC,
85+
jobProperties);
86+
jobManager.addJob(
87+
EventHandlerRegistrationJobConsumer.AIO_CONFIG_OSGI_EVENT_METADA_JOB_TOPIC,
88+
jobProperties);
89+
log.debug("Adobe I/O Events Metadata Config Job {} added.", jobProperties);
90+
} catch (Exception e) {
91+
log.error("Adobe I/O Events' Event Metadata Supplier Service Activation Error: {}",
92+
e.getMessage(), e);
93+
jobProperties.put(EventMetadataRegistrationJobConsumer.AIO_ERROR_PROPERTY,
94+
e.getClass().getSimpleName() + ":" + e.getMessage());
95+
jobManager.addJob(EventMetadataRegistrationJobConsumer.AIO_CONFIG_EVENT_METADA_JOB_TOPIC,
96+
jobProperties);
97+
} finally {
98+
log.info(
99+
"Adobe I/O Events' Event Metadata Supplier Service Activation Complete with config : {}",
100+
eventMetadataConfig);
101+
}
102+
}
103+
104+
};
105+
}
106+
107+
93108
}

0 commit comments

Comments
 (0)