Utilized the original util method with boolean argument.
inventory audit: adapter client should not retry on openstack failures.
Change-Id: Ibdcec58c662f54ccef887e74f17634baa9df2457
Issue-ID: SO-2016
Signed-off-by: Benjamin, Max (mb388a) <mb388a@us.att.com>
             // list is set to false, otherwise an invalid URL is appended
             OpenStackRequest<Volumes> request =
                     cinderClient.volumes().list(false).queryParam("limit", limit).queryParam("marker", marker);
-            return executeAndRecordOpenstackRequest(request);
+            return executeAndRecordOpenstackRequest(request, false);
         } catch (MsoException e) {
             logger.error("Error building Cinder Client", e);
             throw new CinderClientException("Error building Cinder Client", e);
             Cinder cinderClient = getCinderClient(cloudSiteId, tenantId);
             // list is set to false, otherwise an invalid URL is appended
             OpenStackRequest<Volume> request = cinderClient.volumes().show(volumeId);
-            return executeAndRecordOpenstackRequest(request);
+            return executeAndRecordOpenstackRequest(request, false);
         } catch (MsoException e) {
             logger.error("Error building Cinder Client", e);
             throw new CinderClientException("Error building Cinder Client", e);
 
             // list is set to false, otherwise an invalid URL is appended
             OpenStackRequest<Images> request = glanceClient.images().list(false).queryParam("visibility", visibility)
                     .queryParam("limit", limit).queryParam("marker", marker).queryParam("name", name);
-            return executeAndRecordOpenstackRequest(request);
+            return executeAndRecordOpenstackRequest(request, false);
         } catch (MsoException e) {
             logger.error("Error building Glance Client", e);
             throw new GlanceClientException("Error building Glance Client", e);
 
      */
 
     protected <T> T executeAndRecordOpenstackRequest(OpenStackRequest<T> request) {
+        return executeAndRecordOpenstackRequest(request, true);
+    }
 
-        String requestType;
-        if (request.getClass().getEnclosingClass() != null) {
-            requestType =
-                    request.getClass().getEnclosingClass().getSimpleName() + "." + request.getClass().getSimpleName();
-        } else {
-            requestType = request.getClass().getSimpleName();
-        }
+    /*
+     * Method to execute an Openstack command and track its execution time. For the metrics log, a category of
+     * "Openstack" is used along with a sub-category that identifies the specific call (using the real
+     * openstack-java-sdk classname of the OpenStackRequest<T> parameter). boolean isNoRetry - true if No retry; and
+     * false if Retry.
+     */
 
+    protected <T> T executeAndRecordOpenstackRequest(OpenStackRequest<T> request, boolean shouldRetry) {
         int retryDelay = poConfig.getRetryDelay();
         int retryCount = poConfig.getRetryCount();
         String retryCodes = poConfig.getRetryCodes();
-
+        if (!shouldRetry) {
+            retryCodes = null;
+        }
         // Run the actual command. All exceptions will be propagated
         while (true) {
             try {
 
         Heat heatClient = getHeatClient(cloudSiteId, tenantId);
         OpenStackRequest<Resources> request =
                 heatClient.getResources().listResources(stackName).queryParam("nested_depth", nestedDepth);
-        return executeAndRecordOpenstackRequest(request);
+        return executeAndRecordOpenstackRequest(request, false);
     }
 
     public Events queryStackEvents(String cloudSiteId, String tenantId, String stackName, String stackId,
         Heat heatClient = getHeatClient(cloudSiteId, tenantId);
         OpenStackRequest<Events> request =
                 heatClient.getEvents().listEvents(stackName, stackId).queryParam("nested_depth", nestedDepth);
-        return executeAndRecordOpenstackRequest(request);
+        return executeAndRecordOpenstackRequest(request, false);
     }
 
     public Stacks queryStacks(String cloudSiteId, String tenantId, int limit, String marker)
         }
         OpenStackRequest<Stacks> request =
                 heatClient.getStacks().list().queryParam("limit", limit).queryParam("marker", marker);
-        return executeAndRecordOpenstackRequest(request);
+        return executeAndRecordOpenstackRequest(request, false);
     }
 
     public <R> R executeHeatClientRequest(String url, String cloudSiteId, String tenantId, Class<R> returnType)
             throws MsoException {
         Heat heatClient = getHeatClient(cloudSiteId, tenantId);
         OpenStackRequest<R> request = heatClient.get(url, returnType);
-        return executeAndRecordOpenstackRequest(request);
+        return executeAndRecordOpenstackRequest(request, false);
     }
 
     protected void sleep(long time) {
 
                 Authentication credentials = authenticationMethodFactory.getAuthenticationFor(cloudIdentity);
                 OpenStackRequest<Access> request =
                         keystoneTenantClient.tokens().authenticate(credentials).withTenantId(tenantId);
-                access = executeAndRecordOpenstackRequest(request);
+                access = executeAndRecordOpenstackRequest(request, true);
 
 
                 try {
 
         try {
             OpenStackRequest<Port> request = neutronClient.ports().show(neutronPortId);
-            Port port = executeAndRecordOpenstackRequest(request);
+            Port port = executeAndRecordOpenstackRequest(request, false);
             return port;
         } catch (OpenStackResponseException e) {
             if (e.getStatus() == 404) {
 
             Quantum neutronClient = getNeutronClient(cloudSiteId, tenantId);
             OpenStackRequest<Networks> request = neutronClient.networks().list().queryParam("id", id)
                     .queryParam("limit", limit).queryParam("marker", marker).queryParam("name", name);
-            return executeAndRecordOpenstackRequest(request);
+            return executeAndRecordOpenstackRequest(request, false);
         } catch (MsoException e) {
             logger.error("Error building Neutron Client", e);
             throw new NeutronClientException("Error building Neutron Client", e);
             Quantum neutronClient = getNeutronClient(cloudSiteId, tenantId);
             OpenStackRequest<Subnets> request = neutronClient.subnets().list().queryParam("id", id)
                     .queryParam("limit", limit).queryParam("marker", marker).queryParam("name", name);
-            return executeAndRecordOpenstackRequest(request);
+            return executeAndRecordOpenstackRequest(request, false);
         } catch (MsoException e) {
             logger.error("Error building Neutron Client", e);
             throw new NeutronClientException("Error building Neutron Client", e);
 
             Nova novaClient = getNovaClient(cloudSiteId, tenantId);
             OpenStackRequest<Flavors> request =
                     novaClient.flavors().list(false).queryParam("limit", limit).queryParam("marker", marker);
-            return executeAndRecordOpenstackRequest(request);
+            return executeAndRecordOpenstackRequest(request, false);
         } catch (MsoException e) {
             logger.error("Error building Nova Client", e);
             throw new NovaClientException("Error building Nova Client", e);
             Nova novaClient = getNovaClient(cloudSiteId, tenantId);
             novaClient = getNovaClient(cloudSiteId, tenantId);
             OpenStackRequest<Flavor> request = novaClient.flavors().show(id);
-            return executeAndRecordOpenstackRequest(request);
+            return executeAndRecordOpenstackRequest(request, false);
         } catch (MsoException e) {
             logger.error("Error building Nova Client", e);
             throw new NovaClientException("Error building Nova Client", e);
             Nova novaClient = getNovaClient(cloudSiteId, tenantId);
             OpenStackRequest<HostAggregates> request =
                     novaClient.aggregates().list().queryParam("limit", limit).queryParam("marker", marker);
-            return executeAndRecordOpenstackRequest(request);
+            return executeAndRecordOpenstackRequest(request, false);
         } catch (MsoException e) {
             logger.error("Error building Nova Client", e);
             throw new NovaClientException("Error building Nova Client", e);
         try {
             Nova novaClient = getNovaClient(cloudSiteId, tenantId);
             OpenStackRequest<HostAggregate> request = novaClient.aggregates().showAggregate(id);
-            return executeAndRecordOpenstackRequest(request);
+            return executeAndRecordOpenstackRequest(request, false);
         } catch (MsoException e) {
             logger.error("Error building Nova Client", e);
             throw new NovaClientException("Error building Nova Client", e);
         try {
             Nova novaClient = getNovaClient(cloudSiteId, tenantId);
             OpenStackRequest<QuotaSet> request = novaClient.quotaSets().showQuota(tenantId);
-            return executeAndRecordOpenstackRequest(request);
+            return executeAndRecordOpenstackRequest(request, false);
         } catch (MsoException e) {
             logger.error("Error building Nova Client", e);
             throw new NovaClientException("Error building Nova Client", e);
         try {
             Nova novaClient = getNovaClient(cloudSiteId, tenantId);
             OpenStackRequest<Void> request = novaClient.keyPairs().delete(keyPairName);
-            executeAndRecordOpenstackRequest(request);
+            executeAndRecordOpenstackRequest(request, false);
         } catch (MsoException e) {
             logger.error("Error building Nova Client", e);
             throw new NovaClientException("Error building Nova Client", e);
 
         Mockito.when(openstackRequest.path()).thenReturn("/test");
         // TODO:Must try a real connection
         assertNull(commonUtils.executeAndRecordOpenstackRequest(openstackRequest));
+        assertNull(commonUtils.executeAndRecordOpenstackRequest(openstackRequest, true));
     }
 
     @Test
         doThrow(OpenStackResponseException.class).when(openstackRequest).execute();
 
         commonUtils.executeAndRecordOpenstackRequest(openstackRequest);
+        commonUtils.executeAndRecordOpenstackRequest(openstackRequest, true);
     }
 
     @Test
 
         doThrow(OpenStackConnectException.class).when(openstackRequest).execute();
 
-        commonUtils.executeAndRecordOpenstackRequest(openstackRequest);
+        commonUtils.executeAndRecordOpenstackRequest(openstackRequest, true);
     }
 
     @Test