Skip to content

Commit cfced50

Browse files
shrikantjoshi-hpedhslove
authored andcommitted
Primera: Delete session after key expiration (apache#11487)
1 parent b90cb30 commit cfced50

File tree

1 file changed

+38
-0
lines changed
  • plugins/storage/volume/primera/src/main/java/org/apache/cloudstack/storage/datastore/adapter/primera

1 file changed

+38
-0
lines changed

plugins/storage/volume/primera/src/main/java/org/apache/cloudstack/storage/datastore/adapter/primera/PrimeraAdapter.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,10 @@ public void validate() {
121121
public void disconnect() {
122122
logger.info("PrimeraAdapter:disconnect(): closing session");
123123
try {
124+
//Delete session safely without triggering refreshSession
125+
if (key != null && _client != null) {
126+
logout();
127+
}
124128
_client.close();
125129
} catch (IOException e) {
126130
logger.warn("PrimeraAdapter:refreshSession(): Error closing client connection", e);
@@ -130,6 +134,40 @@ public void disconnect() {
130134
}
131135
return;
132136
}
137+
/**
138+
* Delete session directly without going through refreshSession to avoid infinite recursion
139+
*/
140+
private void logout() {
141+
CloseableHttpResponse response = null;
142+
try {
143+
logger.debug("PrimeraAdapter:logout(): Delete session directly");
144+
HttpDelete request = new HttpDelete(url + "/credentials/" + key);
145+
request.addHeader("Content-Type", "application/json");
146+
request.addHeader("Accept", "application/json");
147+
request.addHeader("X-HP3PAR-WSAPI-SessionKey", key);
148+
149+
response = (CloseableHttpResponse) _client.execute(request);
150+
final int statusCode = response.getStatusLine().getStatusCode();
151+
152+
if (statusCode == 200 || statusCode == 404) {
153+
logger.debug("PrimeraAdapter:logout(): Session deleted successfully or was already expired");
154+
} else if (statusCode == 401 || statusCode == 403) {
155+
logger.warn("PrimeraAdapter:logout(): Session already invalid or expired during deletion");
156+
} else {
157+
logger.warn("PrimeraAdapter:logout(): Unexpected response when deleting session: {}", statusCode);
158+
}
159+
} catch (IOException e) {
160+
logger.warn("PrimeraAdapter:logout(): Error deleting session: {}", e.getMessage());
161+
} finally {
162+
if (response != null) {
163+
try {
164+
response.close();
165+
} catch (IOException e) {
166+
logger.debug("PrimeraAdapter:logout(): Error closing response from session deletion", e);
167+
}
168+
}
169+
}
170+
}
133171

134172
@Override
135173
public ProviderVolume create(ProviderAdapterContext context, ProviderAdapterDataObject dataIn,

0 commit comments

Comments
 (0)