diff options
Diffstat (limited to 'src/main/java')
6 files changed, 179 insertions, 12 deletions
diff --git a/src/main/java/org/onap/clamp/clds/Application.java b/src/main/java/org/onap/clamp/clds/Application.java index 9d057b583..ae8b6d82b 100644 --- a/src/main/java/org/onap/clamp/clds/Application.java +++ b/src/main/java/org/onap/clamp/clds/Application.java @@ -42,6 +42,7 @@ import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.boot.web.support.SpringBootServletInitializer; import org.springframework.context.annotation.Bean; @@ -56,6 +57,7 @@ import org.springframework.scheduling.annotation.EnableAsync; DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class, JpaRepositoriesAutoConfiguration.class, SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class }) +@EnableConfigurationProperties @EnableAsync public class Application extends SpringBootServletInitializer { diff --git a/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java b/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java index ffc9b8e28..f1cfd18f3 100644 --- a/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java +++ b/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java @@ -61,6 +61,8 @@ public class DcaeInventoryServices { protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
public static final String DCAE_INVENTORY_URL = "dcae.inventory.url";
+ public static final String DCAE_INVENTORY_RETRY_INTERVAL = "dcae.intentory.retry.interval";
+ public static final String DCAE_INVENTORY_RETRY_LIMIT = "dcae.intentory.retry.limit";
public static final String DCAE_TYPE_NAME = "typeName";
public static final String DCAE_TYPE_ID = "typeId";
@Autowired
@@ -78,7 +80,7 @@ public class DcaeInventoryServices { * @throws ParseException
* In case of DCAE Json parse exception
*/
- public void setEventInventory(CldsModel cldsModel, String userId) throws ParseException {
+ public void setEventInventory(CldsModel cldsModel, String userId) throws ParseException, InterruptedException {
String artifactName = cldsModel.getControlName();
DcaeEvent dcaeEvent = new DcaeEvent();
DcaeInventoryResponse dcaeResponse = null;
@@ -159,7 +161,7 @@ public class DcaeInventoryServices { * In case of issues with the Json parsing
*/
public DcaeInventoryResponse getDcaeInformation(String artifactName, String serviceUuid, String resourceUuid)
- throws IOException, ParseException {
+ throws IOException, ParseException, InterruptedException {
Date startTime = new Date();
LoggingUtils.setTargetContext("DCAE", "getDcaeInformation");
String queryString = "?asdcResourceId=" + resourceUuid + "&asdcServiceId=" + serviceUuid + "&typeName="
@@ -167,7 +169,8 @@ public class DcaeInventoryServices { String fullUrl = refProp.getStringValue(DCAE_INVENTORY_URL) + "/dcae-service-types" + queryString;
logger.info("Dcae Inventory Service full url - " + fullUrl);
String dcaeInventoryResponse = null;
- String responseStr = DcaeHttpConnectionManager.doDcaeHttpQuery(fullUrl, "GET", null, null);
+
+ String responseStr = queryDCAEInventory (fullUrl);
JSONParser parser = new JSONParser();
Object obj0 = parser.parse(responseStr);
JSONObject jsonObj = (JSONObject) obj0;
@@ -185,6 +188,34 @@ public class DcaeInventoryServices { return JacksonUtils.getObjectMapperInstance().readValue(dcaeInventoryResponse, DcaeInventoryResponse.class);
}
+ private String queryDCAEInventory (String fullUrl) throws IOException, InterruptedException {
+ int retryInterval = 0;
+ int retryLimit = 1;
+ if (refProp.getStringValue(DCAE_INVENTORY_RETRY_LIMIT) != null) {
+ retryLimit = Integer.valueOf(refProp.getStringValue(DCAE_INVENTORY_RETRY_LIMIT));
+ }
+ if (refProp.getStringValue(DCAE_INVENTORY_RETRY_INTERVAL) != null) {
+ retryInterval = Integer.valueOf(refProp.getStringValue(DCAE_INVENTORY_RETRY_INTERVAL));
+ }
+
+ int i = 0;
+ while (i < retryLimit) {
+ i++;
+ try {
+ return DcaeHttpConnectionManager.doDcaeHttpQuery(fullUrl, "GET", null, null);
+ } catch (BadRequestException e) {
+ if (i == retryLimit) {
+ // reach the retry limit, but still failed to connect to DCAE
+ throw e;
+ } else {
+ // wait for a while and try to connect to DCAE again
+ Thread.sleep(retryInterval);
+ }
+ }
+ }
+ // normally it should not go to this branch. It should either return the DCAE query result, or throw exception
+ return null;
+ }
/**
* Inserts a new DCAEServiceType or updates an existing instance. If the
* typeName is same second time(already exists) then the
diff --git a/src/main/java/org/onap/clamp/clds/client/req/policy/PolicyClient.java b/src/main/java/org/onap/clamp/clds/client/req/policy/PolicyClient.java index 8caac0c7d..5c68f00b9 100644 --- a/src/main/java/org/onap/clamp/clds/client/req/policy/PolicyClient.java +++ b/src/main/java/org/onap/clamp/clds/client/req/policy/PolicyClient.java @@ -26,7 +26,6 @@ package org.onap.clamp.clds.client.req.policy; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; -import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -38,6 +37,7 @@ import java.util.UUID; import javax.ws.rs.BadRequestException; import org.onap.clamp.clds.config.ClampProperties; +import org.onap.clamp.clds.config.PolicyConfiguration; import org.onap.clamp.clds.exception.policy.PolicyClientException; import org.onap.clamp.clds.model.properties.ModelProperties; import org.onap.clamp.clds.util.LoggingUtils; @@ -55,7 +55,6 @@ import org.onap.policy.api.PolicyParameters; import org.onap.policy.api.PolicyType; import org.onap.policy.api.PushPolicyParameters; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; @@ -71,12 +70,12 @@ public class PolicyClient { protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); protected static final String POLICY_MSTYPE_PROPERTY_NAME = "policy.ms.type"; protected static final String POLICY_ONAPNAME_PROPERTY_NAME = "policy.onap.name"; - @Value("${clamp.config.files.cldsPolicyConfig:'classpath:/clds/clds-policy-config.properties'}") - protected String cldsPolicyConfigFile; @Autowired protected ApplicationContext appContext; @Autowired protected ClampProperties refProp; + @Autowired + private PolicyConfiguration policyConfiguration; /** * Perform BRMS policy type. @@ -353,9 +352,7 @@ public class PolicyClient { private PolicyEngine getPolicyEngine() { PolicyEngine policyEngine; try { - policyEngine = new PolicyEngine(appContext.getResource(cldsPolicyConfigFile).getFile().getAbsolutePath()); - } catch (IOException e1) { - throw new PolicyClientException("Exception when opening policy config file", e1); + policyEngine = new PolicyEngine(policyConfiguration.getProperties()); } catch (PolicyEngineException e) { throw new PolicyClientException("Exception when creating a new policy engine", e); } diff --git a/src/main/java/org/onap/clamp/clds/config/PolicyConfiguration.java b/src/main/java/org/onap/clamp/clds/config/PolicyConfiguration.java new file mode 100644 index 000000000..53899d5e5 --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/config/PolicyConfiguration.java @@ -0,0 +1,128 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ + +package org.onap.clamp.clds.config; + +import java.util.Properties; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Component +@ConfigurationProperties(prefix = "clamp.config.policy") +public class PolicyConfiguration { + + public static final String PDP_URL1 = "PDP_URL1"; + public static final String PDP_URL2 = "PDP_URL2"; + public static final String PAP_URL = "PAP_URL"; + public static final String NOTIFICATION_TYPE = "NOTIFICATION_TYPE"; + public static final String NOTIFICATION_UEB_SERVERS = "NOTIFICATION_UEB_SERVERS"; + public static final String CLIENT_ID = "CLIENT_ID"; + public static final String CLIENT_KEY = "CLIENT_KEY"; + public static final String ENVIRONMENT = "ENVIRONMENT"; + private String pdpUrl1; + private String pdpUrl2; + private String papUrl; + private String notificationType; + private String notificationUebServers; + private String clientId; + private String clientKey; + private String policyEnvironment; + + public String getPdpUrl1() { + return pdpUrl1; + } + + public void setPdpUrl1(String pdpUrl1) { + this.pdpUrl1 = pdpUrl1; + } + + public String getPdpUrl2() { + return pdpUrl2; + } + + public void setPdpUrl2(String pdpUrl2) { + this.pdpUrl2 = pdpUrl2; + } + + public String getPapUrl() { + return papUrl; + } + + public void setPapUrl(String papUrl) { + this.papUrl = papUrl; + } + + public String getNotificationType() { + return notificationType; + } + + public void setNotificationType(String notificationType) { + this.notificationType = notificationType; + } + + public String getNotificationUebServers() { + return notificationUebServers; + } + + public void setNotificationUebServers(String notificationUebServers) { + this.notificationUebServers = notificationUebServers; + } + + public String getClientId() { + return clientId; + } + + public void setClientId(String clientId) { + this.clientId = clientId; + } + + public String getClientKey() { + return clientKey; + } + + public void setClientKey(String clientKey) { + this.clientKey = clientKey; + } + + public String getPolicyEnvironment() { + return policyEnvironment; + } + + public void setPolicyEnvironment(String environment) { + this.policyEnvironment = environment; + } + + public Properties getProperties() { + Properties prop = new Properties(); + prop.put(PDP_URL1, pdpUrl1); + prop.put(PDP_URL2, pdpUrl2); + prop.put(PAP_URL, papUrl); + prop.put(NOTIFICATION_TYPE, notificationType); + prop.put(NOTIFICATION_UEB_SERVERS, notificationUebServers); + prop.put(CLIENT_ID, clientId); + prop.put(CLIENT_KEY, clientKey); + prop.put(ENVIRONMENT, policyEnvironment); + return prop; + } +} diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java b/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java index 627bc72ad..a44f86771 100644 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java @@ -27,6 +27,7 @@ import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager;
import java.util.Date;
+import java.util.concurrent.ThreadLocalRandom;
import org.onap.clamp.clds.config.ClampProperties;
import org.onap.clamp.clds.config.sdc.SdcSingleControllerConfiguration;
@@ -200,6 +201,10 @@ public class SdcSingleController { public void treatNotification(INotificationData iNotif) {
CsarHandler csar = null;
try {
+ // wait for a random time, so that 2 running Clamp will not treat the same Notification at the same time
+ int i = ThreadLocalRandom.current().nextInt(1, 5);
+ Thread.sleep(i * 1000);
+
logger.info("Notification received for service UUID:" + iNotif.getServiceUUID());
this.changeControllerStatus(SdcSingleControllerStatus.BUSY);
csar = new CsarHandler(iNotif, this.sdcConfig.getSdcControllerName(),
@@ -241,6 +246,8 @@ public class SdcSingleController { this.sendSdcNotification(NotificationType.DEPLOY, csar.getArtifactElement().getArtifactURL(),
sdcConfig.getConsumerID(), iNotif.getDistributionID(), DistributionStatusEnum.DEPLOY_ERROR,
e.getMessage(), System.currentTimeMillis());
+ } catch (InterruptedException e) {
+ logger.error("Interrupt exception caught during the notification processing", e);
} catch (RuntimeException e) {
logger.error("Unexpected exception caught during the notification processing", e);
} finally {
diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java index 1b5b4257c..cb0da0aa0 100644 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java @@ -43,6 +43,7 @@ import org.onap.clamp.clds.model.CldsModel; import org.onap.clamp.clds.model.CldsTemplate; import org.onap.clamp.clds.service.CldsService; import org.onap.clamp.clds.service.CldsTemplateService; +import org.springframework.transaction.annotation.Transactional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; @@ -89,13 +90,14 @@ public class CsarInstallerImpl implements CsarInstaller { } @Override + @Transactional public void installTheCsar(CsarHandler csar) throws SdcArtifactInstallerException { try { String serviceTypeId = queryDcaeToGetServiceTypeId(csar); createFakeCldsModel(csar, createFakeCldsTemplate(csar, this.searchForRightMapping(csar)), serviceTypeId); } catch (IOException e) { throw new SdcArtifactInstallerException("Exception caught during the Csar installation in database", e); - } catch (ParseException e) { + } catch (ParseException | InterruptedException e) { throw new SdcArtifactInstallerException("Exception caught during the Dcae query to get ServiceTypeId", e); } } @@ -149,7 +151,7 @@ public class CsarInstallerImpl implements CsarInstaller { return policyNameList.get(0); } - private String queryDcaeToGetServiceTypeId(CsarHandler csar) throws IOException, ParseException { + private String queryDcaeToGetServiceTypeId(CsarHandler csar) throws IOException, ParseException, InterruptedException { return dcaeInventoryService.getDcaeInformation(csar.getBlueprintArtifactName(), csar.getBlueprintInvariantServiceUuid(), csar.getBlueprintInvariantResourceUuid()).getTypeId(); } |