in server/src/main/java/com/epam/aidial/core/server/service/codeinterpreter/CodeInterpreterService.java [150:191]
public CodeInterpreterSession openSession(ProxyContext context, String sessionId) {
verifyActive();
if (sessionId == null) {
sessionId = idGenerator.get();
}
ResourceDescriptor resource = sessionResource(context, sessionId);
CodeInterpreterSession session = new CodeInterpreterSession();
session.setSessionId(sessionId);
session.setDeploymentId(idGenerator.get());
boolean cleanup = false;
try (LockService.Lock lock = resourceService.lockResource(resource)) {
String json = resourceService.getResource(resource, EtagHeader.ANY, false);
CodeInterpreterSession existing = convertToObject(json, CodeInterpreterSession.class);
if (existing != null) {
throw new IllegalArgumentException("Session already exists: " + session.getSessionId());
}
cleanup = true;
session.setUsedAt(System.currentTimeMillis());
activeSessions.add(session.getUsedAt() + sessionTtl, resource.getUrl());
resourceService.putResource(resource, convertToString(session), EtagHeader.ANY, false);
String deploymentUrl = operatorService.createCodeInterpreterDeployment(session.getDeploymentId(), sessionImage);
session.setDeploymentUrl(deploymentUrl);
session.setUsedAt(System.currentTimeMillis());
activeSessions.add(session.getUsedAt() + sessionTtl, resource.getUrl());
resourceService.putResource(resource, convertToString(session), EtagHeader.ANY, false);
} catch (Throwable error) {
if (cleanup) {
Predicate<CodeInterpreterSession> ifMatch = candidate -> Objects.equals(candidate.getDeploymentId(), session.getDeploymentId());
cleanupSession(resource, ifMatch);
}
throw error;
}
return session;
}