This is an automated email from the ASF dual-hosted git repository.

weizhou pushed a commit to branch 4.20
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.20 by this push:
     new 90681df1b5b Primera: Delete session after key expiration (#11487)
90681df1b5b is described below

commit 90681df1b5b90f31a8aa3b21c0e2fe9b5693c363
Author: shrikantjoshi-hpe <sjo...@hpe.com>
AuthorDate: Mon Sep 8 13:14:33 2025 +0530

    Primera: Delete session after key expiration (#11487)
---
 .../datastore/adapter/primera/PrimeraAdapter.java  | 38 ++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git 
a/plugins/storage/volume/primera/src/main/java/org/apache/cloudstack/storage/datastore/adapter/primera/PrimeraAdapter.java
 
b/plugins/storage/volume/primera/src/main/java/org/apache/cloudstack/storage/datastore/adapter/primera/PrimeraAdapter.java
index 445799f0c04..19c4b53222b 100644
--- 
a/plugins/storage/volume/primera/src/main/java/org/apache/cloudstack/storage/datastore/adapter/primera/PrimeraAdapter.java
+++ 
b/plugins/storage/volume/primera/src/main/java/org/apache/cloudstack/storage/datastore/adapter/primera/PrimeraAdapter.java
@@ -121,6 +121,10 @@ public class PrimeraAdapter implements ProviderAdapter {
     public void disconnect() {
         logger.info("PrimeraAdapter:disconnect(): closing session");
         try {
+            //Delete session safely without triggering refreshSession
+            if (key != null && _client != null) {
+                logout();
+            }
             _client.close();
         } catch (IOException e) {
             logger.warn("PrimeraAdapter:refreshSession(): Error closing client 
connection", e);
@@ -130,6 +134,40 @@ public class PrimeraAdapter implements ProviderAdapter {
         }
         return;
     }
+    /**
+     * Delete session directly without going through refreshSession to avoid 
infinite recursion
+     */
+    private void logout() {
+        CloseableHttpResponse response = null;
+        try {
+            logger.debug("PrimeraAdapter:logout(): Delete session directly");
+            HttpDelete request = new HttpDelete(url + "/credentials/" + key);
+            request.addHeader("Content-Type", "application/json");
+            request.addHeader("Accept", "application/json");
+            request.addHeader("X-HP3PAR-WSAPI-SessionKey", key);
+
+            response = (CloseableHttpResponse) _client.execute(request);
+            final int statusCode = response.getStatusLine().getStatusCode();
+
+            if (statusCode == 200 || statusCode == 404) {
+                logger.debug("PrimeraAdapter:logout(): Session deleted 
successfully or was already expired");
+            } else if (statusCode == 401 || statusCode == 403) {
+                logger.warn("PrimeraAdapter:logout(): Session already invalid 
or expired during deletion");
+            } else {
+                logger.warn("PrimeraAdapter:logout(): Unexpected response when 
deleting session: {}", statusCode);
+            }
+        } catch (IOException e) {
+            logger.warn("PrimeraAdapter:logout(): Error deleting session: {}", 
e.getMessage());
+        } finally {
+            if (response != null) {
+                try {
+                    response.close();
+                } catch (IOException e) {
+                    logger.debug("PrimeraAdapter:logout(): Error closing 
response from session deletion", e);
+                }
+            }
+        }
+    }
 
     @Override
     public ProviderVolume create(ProviderAdapterContext context, 
ProviderAdapterDataObject dataIn,

Reply via email to