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 <[email protected]>
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,