Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import static org.eclipse.theia.cloud.common.util.NamingUtil.asValidName;

import java.time.Instant;
import java.util.UUID;

import org.eclipse.theia.cloud.common.k8s.resource.workspace.Workspace;

Expand All @@ -31,8 +32,9 @@ private WorkspaceUtil() {
}

public static String generateUniqueWorkspaceName(String user, String appDefinitionName) {
return asValidName((WORKSPACE_PREFIX + Instant.now().toEpochMilli() + getWorkspaceDescription(appDefinitionName)
+ "-" + user).toLowerCase(), WORKSPACE_NAME_LIMIT);
String suffix = UUID.randomUUID().toString().substring(0, 8);
return asValidName((WORKSPACE_PREFIX + Instant.now().toEpochMilli() + "-" + suffix
+ getWorkspaceDescription(appDefinitionName) + "-" + user).toLowerCase(), WORKSPACE_NAME_LIMIT);
}

public static String generateNonUniqueWorkspaceName(String user, String appDefinitionName) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,10 @@ public Optional<Session> findSession(String sessionName) {
return CLIENT.sessions().get(sessionName);
}

public String launchEphemeralSession(String correlationId, String appDefinition, String user, int timeout,
EnvironmentVars env) {
SessionSpec sessionSpec = new SessionSpec(getSessionName(user, appDefinition, false), appDefinition, user);
public String launchEphemeralSession(String correlationId, String appDefinition, String user,
boolean reuseExistingSession, int timeout, EnvironmentVars env) {
SessionSpec sessionSpec = new SessionSpec(getSessionName(user, appDefinition, !reuseExistingSession),
appDefinition, user);
sessionSpec = sessionSpecWithEnv(sessionSpec, env);

return launchSession(correlationId, sessionSpec, timeout);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ public class LaunchRequest extends UserScopedServiceRequest {
@Schema(description = "If true no workspace will be created for the session.", required = false)
public boolean ephemeral;

@Schema(description = "If false, ephemeral launches will always create a fresh session instead of reusing an existing one for the same user and app definition.", required = false)
public boolean reuseExistingSession = true;

@Schema(description = "Number of minutes to wait for session launch. Default is 3 Minutes.", required = false)
public int timeout = 3;

Expand Down Expand Up @@ -61,8 +64,9 @@ public boolean isCreateWorkspace() {
@Override
public String toString() {
return "LaunchRequest [user=" + user + ", appDefinition=" + appDefinition + ", workspaceName=" + workspaceName
+ ", label=" + label + ", ephemeral=" + ephemeral + ", appId=" + appId + ", kind=" + kind + ", timeout="
+ timeout + ", " + env + "]";
+ ", label=" + label + ", ephemeral=" + ephemeral + ", reuseExistingSession="
+ reuseExistingSession + ", appId=" + appId + ", kind=" + kind + ", timeout=" + timeout + ", " + env
+ "]";
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,8 @@ public String launch(LaunchRequest request) {

if (request.isEphemeral()) {
info(correlationId, "Launching ephemeral session " + request);
return k8sUtil.launchEphemeralSession(correlationId, request.appDefinition, user, request.timeout,
request.env);
return k8sUtil.launchEphemeralSession(correlationId, request.appDefinition, user,
request.reuseExistingSession, request.timeout, request.env);
}
Comment on lines 98 to 102

if (request.isExistingWorkspace()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public String start(SessionStartRequest request) {

info(correlationId, "Launching session " + request);
if (request.isEphemeral()) {
return k8sUtil.launchEphemeralSession(correlationId, request.appDefinition, user, request.timeout,
return k8sUtil.launchEphemeralSession(correlationId, request.appDefinition, user, true, request.timeout,
request.env);
}

Expand Down
Loading