package org.onap.policy.models.provider.impl;
import static org.assertj.core.api.Assertions.assertThatCode;
+import static org.awaitility.Awaitility.await;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Base64;
import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
String policyTypeString = ResourceUtils.getResourceAsString(policyTypeFilePath);
ToscaServiceTemplate foundPolicyTypeSt =
- yamlTranslator.fromYaml(policyTypeString, ToscaServiceTemplate.class);
+ yamlTranslator.fromYaml(policyTypeString, ToscaServiceTemplate.class);
serviceTemplate.setDerivedFrom(foundPolicyTypeSt.getDerivedFrom());
serviceTemplate.setDescription(foundPolicyTypeSt.getDescription());
}
}
- assertThatCode(() -> databaseProvider.createPolicyTypes(serviceTemplate)).doesNotThrowAnyException();
+ CountDownLatch threadCountDownLatch = new CountDownLatch(10);
+
+ for (int i = 0; i < 10; i++) {
+ new Thread() {
+ public void run() {
+ assertThatCode(() -> databaseProvider.createPolicyTypes(serviceTemplate))
+ .doesNotThrowAnyException();
+ threadCountDownLatch.countDown();
+ }
+ }.start();
+ }
+
+ threadCountDownLatch.await(9, TimeUnit.SECONDS);
ToscaEntityKey resourceOptimizationPtKey =
- new ToscaEntityKey("onap.policies.optimization.resource.OptimizationPolicy", "1.0.0");
+ new ToscaEntityKey("onap.policies.optimization.resource.OptimizationPolicy", "1.0.0");
ToscaServiceTemplate resOptPolicyTypeSt = databaseProvider.getPolicyTypes(resourceOptimizationPtKey.getName(),
- resourceOptimizationPtKey.getVersion());
+ resourceOptimizationPtKey.getVersion());
assertEquals(3, resOptPolicyTypeSt.getPolicyTypesAsMap().size());
assertTrue(resOptPolicyTypeSt.getPolicyTypesAsMap().containsKey(resourceOptimizationPtKey));
public class AuthorativeToscaProvider {
private static final Logger LOGGER = LoggerFactory.getLogger(AuthorativeToscaProvider.class);
+ // TODO: In next release this locking mechanism should be removed and replaced with proper session handling
+ private static final Object providerLockObject = "providerLockObject";
+
/**
* Get policy types.
*
public ToscaServiceTemplate createPolicyTypes(@NonNull final PfDao dao,
@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException {
- LOGGER.debug("->createPolicyTypes: serviceTemplate={}", serviceTemplate);
+ synchronized (providerLockObject) {
+ LOGGER.debug("->createPolicyTypes: serviceTemplate={}", serviceTemplate);
- ToscaServiceTemplate createdServiceTempalate = new SimpleToscaProvider()
- .createPolicyTypes(dao, new JpaToscaServiceTemplate(serviceTemplate)).toAuthorative();
+ ToscaServiceTemplate createdServiceTempalate = new SimpleToscaProvider()
+ .createPolicyTypes(dao, new JpaToscaServiceTemplate(serviceTemplate)).toAuthorative();
- LOGGER.debug("<-createPolicyTypes: createdServiceTempalate={}", createdServiceTempalate);
- return createdServiceTempalate;
+ LOGGER.debug("<-createPolicyTypes: createdServiceTempalate={}", createdServiceTempalate);
+ return createdServiceTempalate;
+ }
}
/**
public ToscaServiceTemplate updatePolicyTypes(@NonNull final PfDao dao,
@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException {
- LOGGER.debug("->updatePolicyTypes: serviceTempalate={}", serviceTemplate);
+ synchronized (providerLockObject) {
+ LOGGER.debug("->updatePolicyTypes: serviceTempalate={}", serviceTemplate);
- ToscaServiceTemplate updatedServiceTempalate = new SimpleToscaProvider()
- .updatePolicyTypes(dao, new JpaToscaServiceTemplate(serviceTemplate)).toAuthorative();
+ ToscaServiceTemplate updatedServiceTempalate = new SimpleToscaProvider()
+ .updatePolicyTypes(dao, new JpaToscaServiceTemplate(serviceTemplate)).toAuthorative();
- LOGGER.debug("<-updatePolicyTypes: updatedServiceTempalate={}", updatedServiceTempalate);
- return updatedServiceTempalate;
+ LOGGER.debug("<-updatePolicyTypes: updatedServiceTempalate={}", updatedServiceTempalate);
+ return updatedServiceTempalate;
+ }
}
/**
public ToscaServiceTemplate deletePolicyType(@NonNull final PfDao dao, @NonNull final String name,
@NonNull final String version) throws PfModelException {
- LOGGER.debug("->deletePolicyType: name={}, version={}", name, version);
+ synchronized (providerLockObject) {
+ LOGGER.debug("->deletePolicyType: name={}, version={}", name, version);
- ToscaServiceTemplate deletedServiceTempalate =
- new SimpleToscaProvider().deletePolicyType(dao, new PfConceptKey(name, version)).toAuthorative();
+ ToscaServiceTemplate deletedServiceTempalate =
+ new SimpleToscaProvider().deletePolicyType(dao, new PfConceptKey(name, version)).toAuthorative();
- LOGGER.debug("<-deletePolicyType: name={}, version={}, deletedServiceTempalate={}", name, version,
- deletedServiceTempalate);
- return deletedServiceTempalate;
+ LOGGER.debug("<-deletePolicyType: name={}, version={}, deletedServiceTempalate={}", name, version,
+ deletedServiceTempalate);
+ return deletedServiceTempalate;
+ }
}
/**
public ToscaServiceTemplate createPolicies(@NonNull final PfDao dao,
@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException {
- LOGGER.debug("->createPolicies: serviceTempalate={}", serviceTemplate);
+ synchronized (providerLockObject) {
+ LOGGER.debug("->createPolicies: serviceTempalate={}", serviceTemplate);
- ToscaServiceTemplate createdServiceTempalate =
- new SimpleToscaProvider().createPolicies(dao, new JpaToscaServiceTemplate(serviceTemplate)).toAuthorative();
+ ToscaServiceTemplate createdServiceTempalate = new SimpleToscaProvider()
+ .createPolicies(dao, new JpaToscaServiceTemplate(serviceTemplate)).toAuthorative();
- LOGGER.debug("<-createPolicies: createdServiceTempalate={}", createdServiceTempalate);
- return createdServiceTempalate;
+ LOGGER.debug("<-createPolicies: createdServiceTempalate={}", createdServiceTempalate);
+ return createdServiceTempalate;
+ }
}
/**
public ToscaServiceTemplate updatePolicies(@NonNull final PfDao dao,
@NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException {
- LOGGER.debug("->updatePolicies: serviceTempalate={}", serviceTemplate);
+ synchronized (providerLockObject) {
+ LOGGER.debug("->updatePolicies: serviceTempalate={}", serviceTemplate);
- ToscaServiceTemplate updatedServiceTempalate =
- new SimpleToscaProvider().updatePolicies(dao, new JpaToscaServiceTemplate(serviceTemplate)).toAuthorative();
+ ToscaServiceTemplate updatedServiceTempalate = new SimpleToscaProvider()
+ .updatePolicies(dao, new JpaToscaServiceTemplate(serviceTemplate)).toAuthorative();
- LOGGER.debug("<-updatePolicies: updatedServiceTempalate={}", updatedServiceTempalate);
- return updatedServiceTempalate;
+ LOGGER.debug("<-updatePolicies: updatedServiceTempalate={}", updatedServiceTempalate);
+ return updatedServiceTempalate;
+ }
}
/**
public ToscaServiceTemplate deletePolicy(@NonNull final PfDao dao, @NonNull final String name,
@NonNull final String version) throws PfModelException {
- LOGGER.debug("->deletePolicy: name={}, version={}", name, version);
+ synchronized (providerLockObject) {
+ LOGGER.debug("->deletePolicy: name={}, version={}", name, version);
- ToscaServiceTemplate deletedServiceTempalate =
- new SimpleToscaProvider().deletePolicy(dao, new PfConceptKey(name, version)).toAuthorative();
+ ToscaServiceTemplate deletedServiceTempalate =
+ new SimpleToscaProvider().deletePolicy(dao, new PfConceptKey(name, version)).toAuthorative();
- LOGGER.debug("<-deletePolicy: name={}, version={}, deletedServiceTempalate={}", name, version,
- deletedServiceTempalate);
- return deletedServiceTempalate;
+ LOGGER.debug("<-deletePolicy: name={}, version={}, deletedServiceTempalate={}", name, version,
+ deletedServiceTempalate);
+ return deletedServiceTempalate;
+ }
}
/**