diff options
author | a.sreekumar <ajith.sreekumar@bell.ca> | 2021-03-18 12:39:46 +0000 |
---|---|---|
committer | a.sreekumar <ajith.sreekumar@bell.ca> | 2021-03-19 10:54:13 +0000 |
commit | 369a94a9fd626b35d52c2e7ee5f19e6ff6e1b9d8 (patch) | |
tree | d2078b43c9c67fbf543bfa7d1440d28596649d05 /plugins/plugins-event | |
parent | cc52ec6f85b6aa2712c11b38d66844f8595211b4 (diff) |
Fixing parallel event execution problem in APEX-PDP REST layer
Parallel event execution in APEX was resulting in incorrect dynamic REST url. This issue is fixed in this review.
Change-Id: Id8a28c001a7fd7915df1f5909109bb369667ab40
Issue-ID: POLICY-3019
Signed-off-by: a.sreekumar <ajith.sreekumar@bell.ca>
Diffstat (limited to 'plugins/plugins-event')
-rw-r--r-- | plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restrequestor/src/main/java/org/onap/policy/apex/plugins/event/carrier/restrequestor/ApexRestRequestorConsumer.java | 47 |
1 files changed, 21 insertions, 26 deletions
diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restrequestor/src/main/java/org/onap/policy/apex/plugins/event/carrier/restrequestor/ApexRestRequestorConsumer.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restrequestor/src/main/java/org/onap/policy/apex/plugins/event/carrier/restrequestor/ApexRestRequestorConsumer.java index 54dba7a7c..d7ee0a5ee 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restrequestor/src/main/java/org/onap/policy/apex/plugins/event/carrier/restrequestor/ApexRestRequestorConsumer.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restrequestor/src/main/java/org/onap/policy/apex/plugins/event/carrier/restrequestor/ApexRestRequestorConsumer.java @@ -99,8 +99,6 @@ public class ApexRestRequestorConsumer extends ApexPluginsEventConsumer { // The number of the next request runner thread private static long nextRequestRunnerThreadNo = 0; - private String untaggedUrl = null; - // The pattern for filtering status code private Pattern httpCodeFilterPattern = null; @@ -207,22 +205,6 @@ public class ApexRestRequestorConsumer extends ApexPluginsEventConsumer { continue; } - Properties inputExecutionProperties = restRequest.getExecutionProperties(); - untaggedUrl = restConsumerProperties.getUrl(); - if (inputExecutionProperties != null) { - Set<String> names = restConsumerProperties.getKeysFromUrl(); - Set<String> inputProperty = inputExecutionProperties.stringPropertyNames(); - - names.stream().map(Optional::of) - .forEach(op -> op.filter(inputProperty::contains) - .orElseThrow(() -> new ApexEventRuntimeException( - "key\"" + op.get() + "\"specified on url \"" + restConsumerProperties.getUrl() - + "\"not found in execution properties passed by the current policy"))); - - untaggedUrl = names.stream().reduce(untaggedUrl, - (acc, str) -> acc.replace("{" + str + "}", (String) inputExecutionProperties.get(str))); - } - // Set the time stamp of the REST request restRequest.setTimestamp(System.currentTimeMillis()); @@ -311,18 +293,31 @@ public class ApexRestRequestorConsumer extends ApexPluginsEventConsumer { public void run() { // Get the thread for the request restRequestThread = Thread.currentThread(); - + Properties inputExecutionProperties = request.getExecutionProperties(); + String url = restConsumerProperties.getUrl(); + Set<String> names = restConsumerProperties.getKeysFromUrl(); + if (!names.isEmpty() && inputExecutionProperties != null) { + Set<String> inputProperty = inputExecutionProperties.stringPropertyNames(); + + names.stream().map(Optional::of) + .forEach(op -> op.filter(inputProperty::contains) + .orElseThrow(() -> new ApexEventRuntimeException( + "key\"" + op.get() + "\"specified on url \"" + restConsumerProperties.getUrl() + + "\"not found in execution properties passed by the current policy"))); + + url = names.stream().reduce(url, + (acc, str) -> acc.replace("{" + str + "}", (String) inputExecutionProperties.get(str))); + } try { if (restConsumerProperties.getHttpMethod().equals(HttpMethod.PUT) || restConsumerProperties.getHttpMethod().equals(HttpMethod.POST)) { - NetLoggerUtil.log(EventType.OUT, CommInfrastructure.REST, untaggedUrl, - request.getEvent().toString()); + NetLoggerUtil.log(EventType.OUT, CommInfrastructure.REST, url, request.getEvent().toString()); } // Execute the REST request - final Response response = sendEventAsRestRequest(untaggedUrl); + final Response response = sendEventAsRestRequest(url); // Get the event we received final String eventJsonString = response.readEntity(String.class); - NetLoggerUtil.log(EventType.IN, CommInfrastructure.REST, untaggedUrl, eventJsonString); + NetLoggerUtil.log(EventType.IN, CommInfrastructure.REST, url, eventJsonString); // Match the return code Matcher isPass = httpCodeFilterPattern.matcher(String.valueOf(response.getStatus())); @@ -336,7 +331,7 @@ public class ApexRestRequestorConsumer extends ApexPluginsEventConsumer { // Check there is content if (StringUtils.isBlank(eventJsonString)) { final String errorMessage = - "received an empty response to \"" + request + "\" from URL \"" + untaggedUrl + "\""; + "received an empty response to \"" + request + "\" from URL \"" + url + "\""; throw new ApexEventRuntimeException(errorMessage); } @@ -371,8 +366,8 @@ public class ApexRestRequestorConsumer extends ApexPluginsEventConsumer { * * @return the response to the REST request */ - public Response sendEventAsRestRequest(String untaggedUrl) { - Builder headers = client.target(untaggedUrl).request(APPLICATION_JSON) + public Response sendEventAsRestRequest(String url) { + Builder headers = client.target(url).request(APPLICATION_JSON) .headers(restConsumerProperties.getHttpHeadersAsMultivaluedMap()); switch (restConsumerProperties.getHttpMethod()) { case GET: |