From cd4e5b408603a13dabc58f832e4aae4194e81995 Mon Sep 17 00:00:00 2001
From: "Boslet, Cory" <cory.boslet@att.com>
Date: Wed, 25 Mar 2020 16:04:41 -0400
Subject: convert openstack to external tasks

Use external tasks to communicate with openstack adapter
Will be more resilient to failures
Refactored all flows to use external tasks not REST calls
Rollback is now an external task
Ensured backwards compatibility

Issue-ID: SO-2767
Signed-off-by: Benjamin, Max (mb388a) <mb388a@att.com>
Change-Id: I8afdb89c688d756aed0f25f7d9a7fb898142554d
---
 .../so/externaltasks/logging/AuditMDCSetup.java    | 56 -------------
 .../org/onap/so/logging/tasks/AuditMDCSetup.java   | 57 +++++++++++++
 .../onap/so/utils/ExternalTaskServiceUtils.java    |  7 +-
 .../java/org/onap/so/utils/ExternalTaskUtils.java  |  6 +-
 .../externaltasks/logging/AuditMDCSetupTest.java   | 93 ----------------------
 .../org/onap/so/logging/tasks/MDCSetupTest.java    | 92 +++++++++++++++++++++
 .../org/onap/so/utils/ExternalTaskUtilsTest.java   |  5 ++
 7 files changed, 163 insertions(+), 153 deletions(-)
 delete mode 100644 common/src/main/java/org/onap/so/externaltasks/logging/AuditMDCSetup.java
 create mode 100644 common/src/main/java/org/onap/so/logging/tasks/AuditMDCSetup.java
 delete mode 100644 common/src/test/java/org/onap/so/externaltasks/logging/AuditMDCSetupTest.java
 create mode 100644 common/src/test/java/org/onap/so/logging/tasks/MDCSetupTest.java

(limited to 'common/src')

diff --git a/common/src/main/java/org/onap/so/externaltasks/logging/AuditMDCSetup.java b/common/src/main/java/org/onap/so/externaltasks/logging/AuditMDCSetup.java
deleted file mode 100644
index 9f71e61e1f..0000000000
--- a/common/src/main/java/org/onap/so/externaltasks/logging/AuditMDCSetup.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.onap.so.externaltasks.logging;
-
-import java.time.ZoneOffset;
-import java.time.ZonedDateTime;
-import java.time.format.DateTimeFormatter;
-import org.camunda.bpm.client.task.ExternalTask;
-import org.onap.logging.filter.base.MDCSetup;
-import org.onap.logging.filter.base.ONAPComponents;
-import org.onap.logging.ref.slf4j.ONAPLogConstants;
-import org.onap.so.logger.MdcConstants;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.slf4j.MDC;
-import org.springframework.stereotype.Component;
-
-@Component
-public class AuditMDCSetup {
-
-    private static final Logger logger = LoggerFactory.getLogger(AuditMDCSetup.class);
-
-    private MDCSetup mdcSetup = new MDCSetup();
-
-    public void setupMDC(ExternalTask externalTask) {
-        MDC.put(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP,
-                ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT));
-        String msoRequestId = externalTask.getVariable("mso-request-id");
-        if (msoRequestId != null && !msoRequestId.isEmpty()) {
-            MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, msoRequestId);
-        }
-        MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, externalTask.getTopicName());
-        MDC.put(ONAPLogConstants.MDCs.PARTNER_NAME, ONAPComponents.OPENSTACK_ADAPTER.toString());
-        setResponseCode(ONAPLogConstants.ResponseStatus.INPROGRESS.toString());
-        setElapsedTime();
-        mdcSetup.setServerFQDN();
-        logger.info(ONAPLogConstants.Markers.ENTRY, "Entering");
-    }
-
-    public void setElapsedTime() {
-        DateTimeFormatter timeFormatter = DateTimeFormatter.ISO_ZONED_DATE_TIME;
-        MDC.put(ONAPLogConstants.MDCs.ELAPSED_TIME, Long.toString(System.currentTimeMillis() - ZonedDateTime
-                .parse(MDC.get(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP), timeFormatter).toInstant().toEpochMilli()));
-    }
-
-    public void setResponseCode(String code) {
-        MDC.put(MdcConstants.OPENSTACK_STATUS_CODE, code);
-        MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, code);
-    }
-
-    public void clearClientMDCs() {
-        MDC.remove(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE);
-        MDC.remove(MdcConstants.OPENSTACK_STATUS_CODE);
-        MDC.remove(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP);
-        MDC.remove(ONAPLogConstants.MDCs.ELAPSED_TIME);
-        MDC.remove(ONAPLogConstants.MDCs.PARTNER_NAME);
-    }
-}
diff --git a/common/src/main/java/org/onap/so/logging/tasks/AuditMDCSetup.java b/common/src/main/java/org/onap/so/logging/tasks/AuditMDCSetup.java
new file mode 100644
index 0000000000..8d98307a43
--- /dev/null
+++ b/common/src/main/java/org/onap/so/logging/tasks/AuditMDCSetup.java
@@ -0,0 +1,57 @@
+package org.onap.so.logging.tasks;
+
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import org.camunda.bpm.client.task.ExternalTask;
+import org.onap.logging.filter.base.MDCSetup;
+import org.onap.logging.filter.base.ONAPComponents;
+import org.onap.logging.ref.slf4j.ONAPLogConstants;
+import org.onap.so.logger.MdcConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+import org.springframework.stereotype.Component;
+
+@Component
+public class AuditMDCSetup {
+
+    private static final Logger logger = LoggerFactory.getLogger(AuditMDCSetup.class);
+
+    private MDCSetup mdcSetup = new MDCSetup();
+
+    public void setupMDC(ExternalTask externalTask) {
+        MDC.put(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP,
+                ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT));
+        String msoRequestId = externalTask.getVariable("mso-request-id");
+        if (msoRequestId != null && !msoRequestId.isEmpty()) {
+            MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, msoRequestId);
+        }
+        MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, externalTask.getTopicName());
+        MDC.put(ONAPLogConstants.MDCs.PARTNER_NAME, ONAPComponents.OPENSTACK_ADAPTER.toString());
+        setResponseCode(ONAPLogConstants.ResponseStatus.INPROGRESS.toString());
+        setElapsedTime();
+        mdcSetup.setServerFQDN();
+        logger.info(ONAPLogConstants.Markers.ENTRY, "Entering");
+    }
+
+    public void setElapsedTime() {
+        DateTimeFormatter timeFormatter = DateTimeFormatter.ISO_ZONED_DATE_TIME;
+        MDC.put(ONAPLogConstants.MDCs.ELAPSED_TIME, Long.toString(System.currentTimeMillis() - ZonedDateTime
+                .parse(MDC.get(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP), timeFormatter).toInstant().toEpochMilli()));
+    }
+
+    public void setResponseCode(String code) {
+        MDC.put(MdcConstants.OPENSTACK_STATUS_CODE, code);
+        MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, code);
+    }
+
+    public void clearClientMDCs() {
+        MDC.remove(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE);
+        MDC.remove(MdcConstants.OPENSTACK_STATUS_CODE);
+        MDC.remove(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP);
+        MDC.remove(ONAPLogConstants.MDCs.ELAPSED_TIME);
+        MDC.remove(ONAPLogConstants.MDCs.PARTNER_NAME);
+    }
+
+}
diff --git a/common/src/main/java/org/onap/so/utils/ExternalTaskServiceUtils.java b/common/src/main/java/org/onap/so/utils/ExternalTaskServiceUtils.java
index 035ad1dc81..840a978a61 100644
--- a/common/src/main/java/org/onap/so/utils/ExternalTaskServiceUtils.java
+++ b/common/src/main/java/org/onap/so/utils/ExternalTaskServiceUtils.java
@@ -51,7 +51,12 @@ public class ExternalTaskServiceUtils {
     }
 
     public int getMaxClients() {
-        return Integer.parseInt(env.getProperty("workflow.topics.maxClients", "3"));
+        return Integer.parseInt(env.getProperty("workflow.topics.maxClients", "10"));
+    }
+
+    public Long getLockDuration() {
+        Long lockDuration = Long.parseLong(env.getProperty("mso.audit.lock-time", "60000"));
+        return lockDuration;
     }
 
     @ScheduledLogging
diff --git a/common/src/main/java/org/onap/so/utils/ExternalTaskUtils.java b/common/src/main/java/org/onap/so/utils/ExternalTaskUtils.java
index 9488187003..d414135570 100644
--- a/common/src/main/java/org/onap/so/utils/ExternalTaskUtils.java
+++ b/common/src/main/java/org/onap/so/utils/ExternalTaskUtils.java
@@ -9,11 +9,11 @@ import org.springframework.stereotype.Component;
 @Component
 public abstract class ExternalTaskUtils {
 
+    private static final Logger logger = LoggerFactory.getLogger(ExternalTaskUtils.class);
+
     @Autowired
     Environment env;
 
-    private static final Logger logger = LoggerFactory.getLogger(ExternalTaskUtils.class);
-
     private final RetrySequenceLevel retrySequenceLevel;
 
     public ExternalTaskUtils() {
@@ -49,7 +49,7 @@ public abstract class ExternalTaskUtils {
                 return seqInter;
             case LONG:
                 String[] seqLong = {"1", "1", "2", "3", "5", "8", "13", "20"};
-                if (env.getProperty("mso.workflow.topics.retrySequence") != null) {
+                if (env.getProperty("mso.workflow.topics.retrySequence.long") != null) {
                     seqLong = env.getProperty("mso.workflow.topics.retrySequence", String[].class);
                 }
                 return seqLong;
diff --git a/common/src/test/java/org/onap/so/externaltasks/logging/AuditMDCSetupTest.java b/common/src/test/java/org/onap/so/externaltasks/logging/AuditMDCSetupTest.java
deleted file mode 100644
index c4609f0336..0000000000
--- a/common/src/test/java/org/onap/so/externaltasks/logging/AuditMDCSetupTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.onap.so.externaltasks.logging;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.mockito.Mockito.doReturn;
-import org.camunda.bpm.client.task.ExternalTask;
-import org.junit.After;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Spy;
-import org.mockito.junit.MockitoJUnitRunner;
-import org.onap.logging.filter.base.MDCSetup;
-import org.onap.logging.ref.slf4j.ONAPLogConstants;
-import org.onap.so.logger.MdcConstants;
-import org.slf4j.MDC;
-
-@RunWith(MockitoJUnitRunner.class)
-public class AuditMDCSetupTest {
-
-    @Mock
-    private ExternalTask externalTask;
-
-    @Mock
-    private MDCSetup mdcSet;
-
-    @Spy
-    @InjectMocks
-    private AuditMDCSetup mdcSetup;
-
-    private String requestId = "9bb86b8d-a02f-4a0b-81a9-2eb963850009";
-    private String serviceName = "testServiceName";
-
-    @After
-    public void tearDown() {
-        MDC.clear();
-    }
-
-    @Test
-    public void setupMDCTest() {
-        doReturn(requestId).when(externalTask).getVariable("mso-request-id");
-        doReturn(serviceName).when(externalTask).getTopicName();
-
-        mdcSetup.setupMDC(externalTask);
-
-        assertNotNull(MDC.get(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP));
-        assertEquals(requestId, MDC.get(ONAPLogConstants.MDCs.REQUEST_ID));
-        assertEquals(serviceName, MDC.get(ONAPLogConstants.MDCs.SERVICE_NAME));
-        assertEquals("SO.OPENSTACK_ADAPTER", MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME));
-        assertEquals(ONAPLogConstants.ResponseStatus.INPROGRESS.toString(),
-                MDC.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE));
-    }
-
-    @Test
-    public void setElapsedTimeTest() {
-        MDC.put(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP, "2019-06-18T02:09:06.024Z");
-
-        mdcSetup.setElapsedTime();
-
-        assertNotNull(MDC.get(ONAPLogConstants.MDCs.ELAPSED_TIME));
-    }
-
-    @Test
-    public void setResponseCodeTest() {
-        mdcSetup.setResponseCode(ONAPLogConstants.ResponseStatus.INPROGRESS.toString());
-
-        assertEquals(ONAPLogConstants.ResponseStatus.INPROGRESS.toString(),
-                MDC.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE));
-        assertEquals(ONAPLogConstants.ResponseStatus.INPROGRESS.toString(),
-                MDC.get(MdcConstants.OPENSTACK_STATUS_CODE));
-    }
-
-    @Test
-    public void clearClientMDCsTest() {
-        MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, ONAPLogConstants.ResponseStatus.INPROGRESS.toString());
-        MDC.put(MdcConstants.OPENSTACK_STATUS_CODE, ONAPLogConstants.ResponseStatus.INPROGRESS.toString());
-        MDC.put(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP, "2019-06-18T02:09:06.024Z");
-        MDC.put(ONAPLogConstants.MDCs.ELAPSED_TIME, "318");
-        MDC.put(ONAPLogConstants.MDCs.PARTNER_NAME, "SO.OPENSTACK_ADAPTER");
-
-        mdcSetup.clearClientMDCs();
-
-        assertNull(MDC.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE));
-        assertNull(MDC.get(MdcConstants.OPENSTACK_STATUS_CODE));
-        assertNull(MDC.get(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP));
-        assertNull(MDC.get(ONAPLogConstants.MDCs.ELAPSED_TIME));
-        assertNull(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME));
-
-    }
-
-}
diff --git a/common/src/test/java/org/onap/so/logging/tasks/MDCSetupTest.java b/common/src/test/java/org/onap/so/logging/tasks/MDCSetupTest.java
new file mode 100644
index 0000000000..929db79910
--- /dev/null
+++ b/common/src/test/java/org/onap/so/logging/tasks/MDCSetupTest.java
@@ -0,0 +1,92 @@
+package org.onap.so.logging.tasks;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.mockito.Mockito.doReturn;
+import org.camunda.bpm.client.task.ExternalTask;
+import org.junit.After;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.onap.logging.ref.slf4j.ONAPLogConstants;
+import org.onap.so.logger.MdcConstants;
+import org.slf4j.MDC;
+import org.mockito.junit.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+public class MDCSetupTest {
+
+    @Mock
+    private org.onap.logging.filter.base.MDCSetup mdcSet;
+
+    @Mock
+    private ExternalTask externalTask;
+
+    private String requestId = "9bb86b8d-a02f-4a0b-81a9-2eb963850009";
+    private String serviceName = "testServiceName";
+
+    @Spy
+    @InjectMocks
+    AuditMDCSetup setup = new AuditMDCSetup();
+
+    @After
+    public void tearDown() {
+        MDC.clear();
+    }
+
+    @Test
+    public void setupMDCTest() {
+        doReturn(requestId).when(externalTask).getVariable("mso-request-id");
+        doReturn(serviceName).when(externalTask).getTopicName();
+
+        setup.setupMDC(externalTask);
+
+        assertNotNull(MDC.get(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP));
+        assertEquals(requestId, MDC.get(ONAPLogConstants.MDCs.REQUEST_ID));
+        assertEquals(serviceName, MDC.get(ONAPLogConstants.MDCs.SERVICE_NAME));
+        assertEquals("SO.OPENSTACK_ADAPTER", MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME));
+        assertEquals(ONAPLogConstants.ResponseStatus.INPROGRESS.toString(),
+                MDC.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE));
+    }
+
+    @Test
+    public void setElapsedTimeTest() {
+        MDC.put(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP, "2019-06-18T02:09:06.024Z");
+
+        setup.setElapsedTime();
+
+        assertNotNull(MDC.get(ONAPLogConstants.MDCs.ELAPSED_TIME));
+    }
+
+    @Test
+    public void setResponseCodeTest() {
+        setup.setResponseCode(ONAPLogConstants.ResponseStatus.INPROGRESS.toString());
+
+        assertEquals(ONAPLogConstants.ResponseStatus.INPROGRESS.toString(),
+                MDC.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE));
+        assertEquals(ONAPLogConstants.ResponseStatus.INPROGRESS.toString(),
+                MDC.get(MdcConstants.OPENSTACK_STATUS_CODE));
+    }
+
+    @Test
+    public void clearClientMDCsTest() {
+        MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, ONAPLogConstants.ResponseStatus.INPROGRESS.toString());
+        MDC.put(MdcConstants.OPENSTACK_STATUS_CODE, ONAPLogConstants.ResponseStatus.INPROGRESS.toString());
+        MDC.put(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP, "2019-06-18T02:09:06.024Z");
+        MDC.put(ONAPLogConstants.MDCs.ELAPSED_TIME, "318");
+        MDC.put(ONAPLogConstants.MDCs.PARTNER_NAME, "SO.OPENSTACK_ADAPTER");
+
+        setup.clearClientMDCs();
+
+        assertNull(MDC.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE));
+        assertNull(MDC.get(MdcConstants.OPENSTACK_STATUS_CODE));
+        assertNull(MDC.get(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP));
+        assertNull(MDC.get(ONAPLogConstants.MDCs.ELAPSED_TIME));
+        assertNull(MDC.get(ONAPLogConstants.MDCs.PARTNER_NAME));
+
+    }
+
+}
diff --git a/common/src/test/java/org/onap/so/utils/ExternalTaskUtilsTest.java b/common/src/test/java/org/onap/so/utils/ExternalTaskUtilsTest.java
index e27caa6458..6c2dbb666c 100644
--- a/common/src/test/java/org/onap/so/utils/ExternalTaskUtilsTest.java
+++ b/common/src/test/java/org/onap/so/utils/ExternalTaskUtilsTest.java
@@ -1,17 +1,22 @@
 package org.onap.so.utils;
 
 import static org.junit.Assert.assertEquals;
+import org.camunda.bpm.client.task.ExternalTask;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
+import org.mockito.Spy;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.springframework.core.env.Environment;
 
 @RunWith(MockitoJUnitRunner.class)
 public class ExternalTaskUtilsTest {
 
+    @Mock
+    private ExternalTask externalTask;
+
     @Mock
     private Environment mockenv;
 
-- 
cgit