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,