This is an automated email from the ASF dual-hosted git repository. yasith pushed a commit to branch feat/grpc-armeria-migration in repository https://gitbox.apache.org/repos/asf/airavata.git
commit bf605ac9804466fe42b44c424d3c75c4c7fe46b0 Author: yasithdev <[email protected]> AuthorDate: Tue Mar 31 12:25:08 2026 -0400 fix: replace Thrift types with proto types and service layer in sub-modules Migrate agent-service from Airavata.Iface (Thrift handler) to direct service layer calls (ExperimentService, ProjectService, etc.) with RequestContext for auth. Switch all remaining Thrift model imports to proto equivalents across agent-service, file-server, grpc, and rest modules. Build proto AuthzToken via builder instead of Thrift constructor. --- .../service/controllers/ExperimentController.java | 4 +- .../service/handlers/AgentManagementHandler.java | 230 +++++++++++---------- .../service/services/AiravataFileService.java | 8 +- .../service/services/AiravataService.java | 111 ++++++---- .../file/server/service/ProcessDataManager.java | 2 +- .../server/grpc/AiravataArmeriaConfig.java | 2 +- .../server/grpc/config/GrpcAuthInterceptor.java | 9 +- .../services/ApplicationCatalogGrpcService.java | 12 +- .../grpc/services/CredentialGrpcService.java | 50 +++-- .../grpc/services/DataProductGrpcService.java | 2 +- .../grpc/services/ExperimentGrpcService.java | 18 +- .../server/grpc/services/GatewayGrpcService.java | 2 +- .../GatewayResourceProfileGrpcService.java | 8 +- .../services/GroupResourceProfileGrpcService.java | 10 +- .../server/grpc/services/GrpcRequestContext.java | 2 +- .../grpc/services/NotificationGrpcService.java | 2 +- .../server/grpc/services/ParserGrpcService.java | 4 +- .../server/grpc/services/ProjectGrpcService.java | 4 +- .../server/grpc/services/ResourceGrpcService.java | 16 +- .../server/grpc/services/SharingGrpcService.java | 2 +- .../services/UserResourceProfileGrpcService.java | 8 +- .../server/rest/config/SecurityConfig.java | 9 +- 22 files changed, 302 insertions(+), 213 deletions(-) diff --git a/airavata-api/agent-service/src/main/java/org/apache/airavata/agent/connection/service/controllers/ExperimentController.java b/airavata-api/agent-service/src/main/java/org/apache/airavata/agent/connection/service/controllers/ExperimentController.java index d18f064177..c7fa7bb74a 100644 --- a/airavata-api/agent-service/src/main/java/org/apache/airavata/agent/connection/service/controllers/ExperimentController.java +++ b/airavata-api/agent-service/src/main/java/org/apache/airavata/agent/connection/service/controllers/ExperimentController.java @@ -24,8 +24,8 @@ import org.apache.airavata.agent.connection.service.handlers.AgentManagementHand import org.apache.airavata.agent.connection.service.models.AgentLaunchRequest; import org.apache.airavata.agent.connection.service.models.AgentLaunchResponse; import org.apache.airavata.agent.connection.service.models.AgentTerminateResponse; -import org.apache.airavata.model.experiment.ExperimentModel; -import org.apache.airavata.model.process.ProcessModel; +import org.apache.airavata.model.experiment.proto.ExperimentModel; +import org.apache.airavata.model.process.proto.ProcessModel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.MediaType; diff --git a/airavata-api/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentManagementHandler.java b/airavata-api/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentManagementHandler.java index cb58e23601..b5b8cb8d69 100644 --- a/airavata-api/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentManagementHandler.java +++ b/airavata-api/agent-service/src/main/java/org/apache/airavata/agent/connection/service/handlers/AgentManagementHandler.java @@ -29,22 +29,22 @@ import org.apache.airavata.agent.connection.service.models.AgentLaunchRequest; import org.apache.airavata.agent.connection.service.models.AgentLaunchResponse; import org.apache.airavata.agent.connection.service.models.AgentTerminateResponse; import org.apache.airavata.agent.connection.service.services.AiravataService; -import org.apache.airavata.api.Airavata; import org.apache.airavata.common.security.UserContext; -import org.apache.airavata.model.appcatalog.groupresourceprofile.EnvironmentSpecificPreferences; -import org.apache.airavata.model.appcatalog.groupresourceprofile.GroupComputeResourcePreference; -import org.apache.airavata.model.appcatalog.groupresourceprofile.GroupResourceProfile; -import org.apache.airavata.model.appcatalog.groupresourceprofile.ResourceType; -import org.apache.airavata.model.application.io.InputDataObjectType; -import org.apache.airavata.model.experiment.ExperimentModel; -import org.apache.airavata.model.experiment.ExperimentStatistics; -import org.apache.airavata.model.experiment.ExperimentType; -import org.apache.airavata.model.experiment.UserConfigurationDataModel; -import org.apache.airavata.model.process.ProcessModel; -import org.apache.airavata.model.scheduling.ComputationalResourceSchedulingModel; -import org.apache.airavata.model.security.AuthzToken; +import org.apache.airavata.execution.service.RequestContext; +import org.apache.airavata.execution.service.ServiceException; +import org.apache.airavata.model.appcatalog.groupresourceprofile.proto.EnvironmentSpecificPreferences; +import org.apache.airavata.model.appcatalog.groupresourceprofile.proto.GroupComputeResourcePreference; +import org.apache.airavata.model.appcatalog.groupresourceprofile.proto.GroupResourceProfile; +import org.apache.airavata.model.appcatalog.groupresourceprofile.proto.ResourceType; +import org.apache.airavata.model.application.io.proto.InputDataObjectType; +import org.apache.airavata.model.application.io.proto.OutputDataObjectType; +import org.apache.airavata.model.experiment.proto.ExperimentModel; +import org.apache.airavata.model.experiment.proto.ExperimentStatistics; +import org.apache.airavata.model.experiment.proto.ExperimentType; +import org.apache.airavata.model.experiment.proto.UserConfigurationDataModel; +import org.apache.airavata.model.process.proto.ProcessModel; +import org.apache.airavata.model.scheduling.proto.ComputationalResourceSchedulingModel; import org.apache.commons.lang3.StringUtils; -import org.apache.thrift.TException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; @@ -72,10 +72,8 @@ public class AgentManagementHandler { public AgentTerminateResponse terminateExperiment(String experimentId) { try { - Airavata.Iface airavata = airavataService.airavata(); - ExperimentModel experiment = airavata.getExperiment(UserContext.authzToken(), experimentId); - airavata.terminateExperiment( - UserContext.authzToken(), experiment.getExperimentId(), experiment.getGatewayId()); + RequestContext ctx = airavataService.requestContext(); + airavataService.experimentService().terminateExperiment(ctx, experimentId); return new AgentTerminateResponse(experimentId, true); } catch (Exception e) { LOGGER.error("Error terminating experiment {}", experimentId, e); @@ -85,28 +83,37 @@ public class AgentManagementHandler { public ExperimentModel getExperiment(String experimentId) { try { - Airavata.Iface airavata = airavataService.airavata(); - ExperimentModel experiment = airavata.getExperiment(UserContext.authzToken(), experimentId); - GroupResourceProfile groupResourceProfile = airavata.getGroupResourceProfile( - UserContext.authzToken(), - experiment.getUserConfigurationData().getGroupResourceProfileId()); + RequestContext ctx = airavataService.requestContext(); + ExperimentModel experiment = airavataService.experimentService().getExperiment(ctx, experimentId); + GroupResourceProfile groupResourceProfile = airavataService + .groupResourceProfileService() + .getGroupResourceProfile( + ctx, experiment.getUserConfigurationData().getGroupResourceProfileId()); // Always get the Default allocation if (!"Default".equalsIgnoreCase(groupResourceProfile.getGroupResourceProfileName())) { - List<GroupResourceProfile> groupResourceList = - airavata.getGroupResourceList(UserContext.authzToken(), experiment.getGatewayId()); + List<GroupResourceProfile> groupResourceList = airavataService + .groupResourceProfileService() + .getGroupResourceList(ctx, experiment.getGatewayId()); - groupResourceList.stream() + final ExperimentModel exp = experiment; + java.util.Optional<GroupResourceProfile> defaultProfile = groupResourceList.stream() .filter(profile -> "Default".equalsIgnoreCase(profile.getGroupResourceProfileName())) - .findFirst() - .ifPresent(profile -> experiment - .getUserConfigurationData() - .setGroupResourceProfileId(profile.getGroupResourceProfileId())); + .findFirst(); + + if (defaultProfile.isPresent()) { + UserConfigurationDataModel updatedConfig = experiment.getUserConfigurationData().toBuilder() + .setGroupResourceProfileId(defaultProfile.get().getGroupResourceProfileId()) + .build(); + experiment = experiment.toBuilder() + .setUserConfigurationData(updatedConfig) + .build(); + } } return experiment; - } catch (TException e) { + } catch (ServiceException e) { LOGGER.error("Error while extracting the experiment with the id: {}", experimentId); throw new RuntimeException("Error while extracting the experiment with the id: " + experimentId, e); } @@ -123,12 +130,13 @@ public class AgentManagementHandler { AgentLaunchRequest sortedLaunchRequest = launchRequests.get(0); for (AgentLaunchRequest req : launchRequests) { + RequestContext ctx = airavataService.requestContext(); String appInterfaceId = clusterApplicationConfig.getApplicationInterfaceId(); ExperimentStatistics experimentStatistics = airavataService - .airavata() + .experimentService() .getExperimentStatistics( - UserContext.authzToken(), - UserContext.gatewayId(), + ctx, + ctx.getGatewayId(), System.currentTimeMillis() - 60 * 60 * 1000, System.currentTimeMillis(), null, @@ -164,15 +172,14 @@ public class AgentManagementHandler { LOGGER.info("Creating an Airavata Experiment for {} with agent id {}", req.getExperimentName(), agentId); ExperimentModel experiment = generateExperiment(req, agentId, envName); - String experimentId = airavataService - .airavata() - .createExperiment(UserContext.authzToken(), experiment.getGatewayId(), experiment); + RequestContext ctx = airavataService.requestContext(); + String experimentId = airavataService.experimentService().createExperiment(ctx, experiment); LOGGER.info("Launching the application, Id: {}, Name: {}", experimentId, experiment.getExperimentName()); airavataService - .airavata() - .launchExperiment(UserContext.authzToken(), experimentId, experiment.getGatewayId()); + .experimentService() + .launchExperiment(ctx, experimentId, experiment.getGatewayId()); return new AgentLaunchResponse(agentId, experimentId, envName); - } catch (TException e) { + } catch (ServiceException e) { LOGGER.error("Error while creating the experiment with the name: {}", req.getExperimentName(), e); throw new RuntimeException( "Error while creating the experiment with the name: " + req.getExperimentName(), e); @@ -182,7 +189,8 @@ public class AgentManagementHandler { public void terminateApplication(String gatewayId, String experimentId) { try { LOGGER.info("Terminating the application with experiment Id: {}", experimentId); - airavataService.airavata().terminateExperiment(UserContext.authzToken(), experimentId, gatewayId); + RequestContext ctx = airavataService.requestContext(); + airavataService.experimentService().terminateExperiment(ctx, experimentId); } catch (Exception e) { LOGGER.error("Error while terminating the application with the experiment Id: {}", experimentId); throw new RuntimeException( @@ -193,109 +201,119 @@ public class AgentManagementHandler { public ProcessModel getEnvProcessModel(String expId) { try { LOGGER.info("Extracting the process model for experiment id: {}", expId); - ExperimentModel expModel = - airavataService.airavata().getDetailedExperimentTree(UserContext.authzToken(), expId); - if (expModel.getProcesses() != null && !expModel.getProcesses().isEmpty()) { - return expModel.getProcesses().get(0); + RequestContext ctx = airavataService.requestContext(); + ExperimentModel expModel = airavataService.experimentService().getDetailedExperimentTree(ctx, expId); + if (expModel.getProcessesList() != null && !expModel.getProcessesList().isEmpty()) { + return expModel.getProcessesList().get(0); } else { LOGGER.error("No process found for experiment id: {}", expId); return null; } - } catch (TException e) { + } catch (ServiceException e) { LOGGER.error("Error while extracting the process model for experiment id: {}", expId, e); throw new RuntimeException(e); } } private ExperimentModel generateExperiment(AgentLaunchRequest req, String agentId, String envName) - throws TException { - Airavata.Iface airavataClient = airavataService.airavata(); + throws ServiceException { + RequestContext ctx = airavataService.requestContext(); String experimentName = req.getExperimentName(); String projectName = req.getProjectName() != null ? req.getProjectName() : "Default Project"; String projectDir = projectName.replace(" ", "_"); - String projectId = airavataService.getProjectId(airavataClient, projectName); - AuthzToken authzToken = UserContext.authzToken(); + String projectId = airavataService.getProjectId(projectName); String userName = UserContext.userId(); String gatewayId = UserContext.gatewayId(); String appInterfaceId = clusterApplicationConfig.getApplicationInterfaceId(); - ExperimentModel experimentModel = new ExperimentModel(); - experimentModel.setExperimentName(experimentName); - experimentModel.setProjectId(projectId); - experimentModel.setUserName(userName); - experimentModel.setGatewayId(gatewayId); - experimentModel.setExecutionId(appInterfaceId); + + GroupComputeResourcePreference groupCompResourcePref = + airavataService.extractGroupComputeResourcePreference(req.getGroup(), req.getRemoteCluster()); ComputationalResourceSchedulingModel computationalResourceSchedulingModel = - new ComputationalResourceSchedulingModel(); - GroupComputeResourcePreference groupCompResourcePref = airavataService.extractGroupComputeResourcePreference( - airavataClient, req.getGroup(), req.getRemoteCluster()); - computationalResourceSchedulingModel.setQueueName(req.getQueue()); - computationalResourceSchedulingModel.setNodeCount(req.getNodeCount()); - computationalResourceSchedulingModel.setTotalCPUCount(req.getCpuCount()); - computationalResourceSchedulingModel.setWallTimeLimit(req.getWallTime()); - computationalResourceSchedulingModel.setTotalPhysicalMemory(req.getMemory()); - computationalResourceSchedulingModel.setResourceHostId(groupCompResourcePref.getComputeResourceId()); - // TODO - Support for both HPC & Cloud services --> Need to change the ComputationalResourceSchedulingModel - computationalResourceSchedulingModel.setOverrideScratchLocation(groupCompResourcePref.getScratchLocation()); - computationalResourceSchedulingModel.setOverrideAllocationProjectNumber( - extractSlurmAllocationProject(groupCompResourcePref)); - computationalResourceSchedulingModel.setOverrideLoginUserName(groupCompResourcePref.getLoginUserName()); + ComputationalResourceSchedulingModel.newBuilder() + .setQueueName(req.getQueue()) + .setNodeCount(req.getNodeCount()) + .setTotalCpuCount(req.getCpuCount()) + .setWallTimeLimit(req.getWallTime()) + .setTotalPhysicalMemory(req.getMemory()) + .setResourceHostId(groupCompResourcePref.getComputeResourceId()) + .setOverrideScratchLocation(groupCompResourcePref.getScratchLocation()) + .setOverrideAllocationProjectNumber(extractSlurmAllocationProject(groupCompResourcePref)) + .setOverrideLoginUserName(groupCompResourcePref.getLoginUserName()) + .build(); - UserConfigurationDataModel userConfigurationDataModel = new UserConfigurationDataModel(); - userConfigurationDataModel.setComputationalResourceScheduling(computationalResourceSchedulingModel); - userConfigurationDataModel.setAiravataAutoSchedule(false); - userConfigurationDataModel.setOverrideManualScheduledParams(false); - userConfigurationDataModel.setInputStorageResourceId( - StringUtils.isNotBlank(req.getInputStorageId()) - ? req.getInputStorageId() - : agentProperties.getStorageResourceId()); - userConfigurationDataModel.setOutputStorageResourceId( - StringUtils.isNotBlank(req.getOutputStorageId()) - ? req.getInputStorageId() - : agentProperties.getStorageResourceId()); String experimentDataDir = Paths.get( agentProperties.getStoragePath(), gatewayId, userName, projectDir, experimentName) .toString(); - userConfigurationDataModel.setExperimentDataDir(experimentDataDir); - userConfigurationDataModel.setGroupResourceProfileId(groupCompResourcePref.getGroupResourceProfileId()); - experimentModel.setUserConfigurationData(userConfigurationDataModel); + UserConfigurationDataModel userConfigurationDataModel = UserConfigurationDataModel.newBuilder() + .setComputationalResourceScheduling(computationalResourceSchedulingModel) + .setAiravataAutoSchedule(false) + .setOverrideManualScheduledParams(false) + .setInputStorageResourceId( + StringUtils.isNotBlank(req.getInputStorageId()) + ? req.getInputStorageId() + : agentProperties.getStorageResourceId()) + .setOutputStorageResourceId( + StringUtils.isNotBlank(req.getOutputStorageId()) + ? req.getInputStorageId() + : agentProperties.getStorageResourceId()) + .setExperimentDataDir(experimentDataDir) + .setGroupResourceProfileId(groupCompResourcePref.getGroupResourceProfileId()) + .build(); - List<InputDataObjectType> applicationInputs = airavataClient.getApplicationInputs(authzToken, appInterfaceId); + List<InputDataObjectType> applicationInputs = + airavataService.applicationCatalogService().getApplicationInputs(ctx, appInterfaceId); List<InputDataObjectType> experimentInputs = applicationInputs.stream() - .peek(input -> { - if (input != null && input.getName() != null) { - switch (input.getName()) { - case "agent_id" -> input.setValue(agentId); - case "env_name" -> input.setValue(envName); - case "server_url" -> input.setValue(grpcHost); - case "libraries" -> - input.setValue(req.getLibraries() != null ? String.join(",", req.getLibraries()) : ""); - case "pip" -> input.setValue(req.getPip() != null ? String.join(",", req.getPip()) : ""); - case "mounts" -> - input.setValue(req.getMounts() != null ? String.join(",", req.getMounts()) : ""); - default -> {} - } + .map(input -> { + if (input != null && !input.getName().isEmpty()) { + return switch (input.getName()) { + case "agent_id" -> input.toBuilder().setValue(agentId).build(); + case "env_name" -> input.toBuilder().setValue(envName).build(); + case "server_url" -> input.toBuilder().setValue(grpcHost).build(); + case "libraries" -> input.toBuilder() + .setValue(req.getLibraries() != null ? String.join(",", req.getLibraries()) : "") + .build(); + case "pip" -> input.toBuilder() + .setValue(req.getPip() != null ? String.join(",", req.getPip()) : "") + .build(); + case "mounts" -> input.toBuilder() + .setValue(req.getMounts() != null ? String.join(",", req.getMounts()) : "") + .build(); + default -> input; + }; } + return input; }) .collect(Collectors.toList()); - experimentModel.setExperimentInputs(experimentInputs); - experimentModel.setExperimentOutputs(airavataClient.getApplicationOutputs(authzToken, appInterfaceId)); - experimentModel.setExperimentType(ExperimentType.SINGLE_APPLICATION); - LOGGER.info("Generated the experiment: {}", experimentModel.getExperimentId()); + List<OutputDataObjectType> applicationOutputs = + airavataService.applicationCatalogService().getApplicationOutputs(ctx, appInterfaceId); + ExperimentModel experimentModel = ExperimentModel.newBuilder() + .setExperimentName(experimentName) + .setProjectId(projectId) + .setUserName(userName) + .setGatewayId(gatewayId) + .setExecutionId(appInterfaceId) + .setUserConfigurationData(userConfigurationDataModel) + .addAllExperimentInputs(experimentInputs) + .addAllExperimentOutputs(applicationOutputs) + .setExperimentType(ExperimentType.SINGLE_APPLICATION) + .build(); + + LOGGER.info("Generated the experiment: {}", experimentModel.getExperimentId()); return experimentModel; } private String extractSlurmAllocationProject(GroupComputeResourcePreference pref) { - if (pref.getResourceType() == ResourceType.SLURM && pref.isSetSpecificPreferences()) { + if (pref.getResourceType() == ResourceType.SLURM && pref.hasSpecificPreferences()) { EnvironmentSpecificPreferences esp = pref.getSpecificPreferences(); - if (esp.isSetSlurm()) { + if (esp.hasSlurm()) { return esp.getSlurm().getAllocationProjectNumber(); } } - return null; + return ""; } } diff --git a/airavata-api/agent-service/src/main/java/org/apache/airavata/agent/connection/service/services/AiravataFileService.java b/airavata-api/agent-service/src/main/java/org/apache/airavata/agent/connection/service/services/AiravataFileService.java index 89992c058c..1f95979357 100644 --- a/airavata-api/agent-service/src/main/java/org/apache/airavata/agent/connection/service/services/AiravataFileService.java +++ b/airavata-api/agent-service/src/main/java/org/apache/airavata/agent/connection/service/services/AiravataFileService.java @@ -31,12 +31,11 @@ import org.apache.airavata.agent.ServerMessage; import org.apache.airavata.agent.connection.service.models.DirectoryInfo; import org.apache.airavata.agent.connection.service.models.ExperimentStorageResponse; import org.apache.airavata.agent.connection.service.models.FileInfo; -import org.apache.airavata.api.Airavata; import org.apache.airavata.common.security.UserContext; +import org.apache.airavata.execution.service.ServiceException; import org.apache.airavata.fuse.DirEntry; import org.apache.airavata.fuse.ReadDirReq; import org.apache.airavata.fuse.ReadDirRes; -import org.apache.thrift.TException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpEntity; @@ -63,14 +62,13 @@ public class AiravataFileService { } public void handleReadDirRequest(ReadDirReq request, StreamObserver<ServerMessage> responseObserver) { - Airavata.Iface airavataClient = airavataService.airavata(); String fusePath = request.getName(); ReadDirRes.Builder readDirResBuilder = ReadDirRes.newBuilder(); try { if ("/".equals(fusePath)) { - List<String> experimentIds = airavataService.getUserExperimentIDs(airavataClient); + List<String> experimentIds = airavataService.getUserExperimentIDs(); // Handle root directory for (String expId : experimentIds) { @@ -108,7 +106,7 @@ public class AiravataFileService { .build()); } } - } catch (TException | ExecutionException e) { + } catch (ServiceException | ExecutionException e) { LOGGER.error("Failed to fetch experiments when trying to read the directory"); responseObserver.onError(Status.INTERNAL .withDescription("Failed to fetch experiments when trying to read the directory") diff --git a/airavata-api/agent-service/src/main/java/org/apache/airavata/agent/connection/service/services/AiravataService.java b/airavata-api/agent-service/src/main/java/org/apache/airavata/agent/connection/service/services/AiravataService.java index 57284a29be..400c4ff767 100644 --- a/airavata-api/agent-service/src/main/java/org/apache/airavata/agent/connection/service/services/AiravataService.java +++ b/airavata-api/agent-service/src/main/java/org/apache/airavata/agent/connection/service/services/AiravataService.java @@ -20,19 +20,28 @@ package org.apache.airavata.agent.connection.service.services; import io.micrometer.common.util.StringUtils; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.apache.airavata.api.Airavata; import org.apache.airavata.common.security.UserContext; -import org.apache.airavata.model.appcatalog.groupresourceprofile.GroupComputeResourcePreference; -import org.apache.airavata.model.appcatalog.groupresourceprofile.GroupResourceProfile; -import org.apache.airavata.model.experiment.ExperimentSearchFields; -import org.apache.airavata.model.experiment.ExperimentSummaryModel; -import org.apache.airavata.model.workspace.Project; -import org.apache.thrift.TException; +import org.apache.airavata.compute.service.ApplicationCatalogService; +import org.apache.airavata.compute.service.GroupResourceProfileService; +import org.apache.airavata.execution.service.ExperimentService; +import org.apache.airavata.execution.service.ProjectService; +import org.apache.airavata.execution.service.RequestContext; +import org.apache.airavata.execution.service.ServiceException; +import org.apache.airavata.model.appcatalog.groupresourceprofile.proto.GroupComputeResourcePreference; +import org.apache.airavata.model.appcatalog.groupresourceprofile.proto.GroupResourceProfile; +import org.apache.airavata.model.application.io.proto.InputDataObjectType; +import org.apache.airavata.model.application.io.proto.OutputDataObjectType; +import org.apache.airavata.model.experiment.proto.ExperimentModel; +import org.apache.airavata.model.experiment.proto.ExperimentSearchFields; +import org.apache.airavata.model.experiment.proto.ExperimentStatistics; +import org.apache.airavata.model.experiment.proto.ExperimentSummaryModel; +import org.apache.airavata.model.workspace.proto.Project; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -42,29 +51,65 @@ public class AiravataService { private static final Logger LOGGER = LoggerFactory.getLogger(AiravataService.class); - private final Airavata.Iface airavataHandler; + private final ExperimentService experimentService; + private final ProjectService projectService; + private final GroupResourceProfileService groupResourceProfileService; + private final ApplicationCatalogService applicationCatalogService; - public AiravataService(Airavata.Iface airavataHandler) { - this.airavataHandler = airavataHandler; + public AiravataService( + ExperimentService experimentService, + ProjectService projectService, + GroupResourceProfileService groupResourceProfileService, + ApplicationCatalogService applicationCatalogService) { + this.experimentService = experimentService; + this.projectService = projectService; + this.groupResourceProfileService = groupResourceProfileService; + this.applicationCatalogService = applicationCatalogService; } - public Airavata.Iface airavata() { - return airavataHandler; + public ExperimentService experimentService() { + return experimentService; } - public String getProjectId(Airavata.Iface airavataClient, String projectName) throws TException { + public ProjectService projectService() { + return projectService; + } + + public GroupResourceProfileService groupResourceProfileService() { + return groupResourceProfileService; + } + + public ApplicationCatalogService applicationCatalogService() { + return applicationCatalogService; + } + + public RequestContext requestContext() { + var token = UserContext.authzToken(); + Map<String, String> claims = (token != null) ? token.getClaimsMap() : Collections.emptyMap(); + if (claims == null) { + claims = Collections.emptyMap(); + } + return new RequestContext( + UserContext.userId(), + UserContext.gatewayId(), + token != null ? token.getAccessToken() : null, + claims); + } + + public String getProjectId(String projectName) throws ServiceException { + RequestContext ctx = requestContext(); int limit = 10; int offset = 0; while (true) { - List<Project> userProjects = airavataClient.getUserProjects( - UserContext.authzToken(), UserContext.gatewayId(), UserContext.userId(), limit, offset); + List<Project> userProjects = + projectService.getUserProjects(ctx, ctx.getGatewayId(), ctx.getUserId(), limit, offset); Optional<Project> defaultProject = userProjects.stream() .filter(project -> projectName.equals(project.getName())) .findFirst(); if (defaultProject.isPresent()) { - return defaultProject.get().getProjectID(); + return defaultProject.get().getProjectId(); } if (userProjects.size() < limit) { break; @@ -72,41 +117,37 @@ public class AiravataService { offset += limit; } - throw new RuntimeException("Could not find project: " + projectName + " for the user: " + UserContext.userId()); + throw new RuntimeException("Could not find project: " + projectName + " for the user: " + ctx.getUserId()); } public GroupComputeResourcePreference extractGroupComputeResourcePreference( - Airavata.Iface airavataClient, String group, String remoteCluster) throws TException { + String group, String remoteCluster) throws ServiceException { + RequestContext ctx = requestContext(); List<GroupResourceProfile> groupResourceList = - airavataClient.getGroupResourceList(UserContext.authzToken(), UserContext.gatewayId()); + groupResourceProfileService.getGroupResourceList(ctx, ctx.getGatewayId()); String groupProfileName = StringUtils.isNotBlank(group) ? group : "Default"; return groupResourceList.stream() .filter(profile -> groupProfileName.equalsIgnoreCase(profile.getGroupResourceProfileName())) - .flatMap(profile -> profile.getComputePreferences().stream() + .flatMap(profile -> profile.getComputePreferencesList().stream() .filter(preference -> preference.getComputeResourceId().startsWith(remoteCluster))) .findFirst() .orElseThrow(() -> new RuntimeException("Could not find a matching Compute Resource Preference in the " - + groupProfileName + " group resource profile for the user: " + UserContext.userId())); + + groupProfileName + " group resource profile for the user: " + ctx.getUserId())); } - public List<String> getUserExperimentIDs(Airavata.Iface airavataClient) throws TException { + public List<String> getUserExperimentIDs() throws ServiceException { + RequestContext ctx = requestContext(); int limit = 100; - Map<ExperimentSearchFields, String> filters = - Map.of(ExperimentSearchFields.PROJECT_ID, getProjectId(airavataClient, "Default Project")); + String projectId = getProjectId("Default Project"); + Map<ExperimentSearchFields, String> filters = Map.of(ExperimentSearchFields.PROJECT_ID, projectId); - return Stream.iterate(0, offset -> offset + limit) - .map(offset -> { + return Stream.iterate(0, o -> o + limit) + .map(o -> { try { - return airavataClient.searchExperiments( - UserContext.authzToken(), - UserContext.gatewayId(), - UserContext.userId(), - filters, - limit, - offset); - } catch (TException e) { - // Handle exception gracefully + return experimentService.searchExperiments( + ctx, ctx.getGatewayId(), ctx.getUserId(), filters, limit, o); + } catch (ServiceException e) { throw new RuntimeException(e); } }) diff --git a/airavata-api/file-server/src/main/java/org/apache/airavata/file/server/service/ProcessDataManager.java b/airavata-api/file-server/src/main/java/org/apache/airavata/file/server/service/ProcessDataManager.java index 3b55d3598c..180f8e073d 100644 --- a/airavata-api/file-server/src/main/java/org/apache/airavata/file/server/service/ProcessDataManager.java +++ b/airavata-api/file-server/src/main/java/org/apache/airavata/file/server/service/ProcessDataManager.java @@ -25,7 +25,7 @@ import org.apache.airavata.compute.util.AgentAdaptor; import org.apache.airavata.compute.util.AgentUtils; import org.apache.airavata.compute.util.SSHJAgentAdaptor; import org.apache.airavata.execution.orchestrator.AdaptorSupport; -import org.apache.airavata.model.appcatalog.groupresourceprofile.ResourceType; +import org.apache.airavata.model.appcatalog.groupresourceprofile.proto.ResourceType; import org.apache.airavata.model.credential.store.SSHCredential; import org.apache.airavata.model.experiment.ExperimentModel; import org.apache.airavata.model.process.ProcessModel; diff --git a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/AiravataArmeriaConfig.java b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/AiravataArmeriaConfig.java index a6bf9b5edf..283087af38 100644 --- a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/AiravataArmeriaConfig.java +++ b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/AiravataArmeriaConfig.java @@ -59,7 +59,7 @@ public class AiravataArmeriaConfig { .allowRequestMethods(HttpMethod.GET, HttpMethod.POST, HttpMethod.PUT, HttpMethod.DELETE, HttpMethod.OPTIONS) .allowRequestHeaders("Authorization", "Content-Type", "X-Claims") - .build()); + .newDecorator()); }; } } diff --git a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/config/GrpcAuthInterceptor.java b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/config/GrpcAuthInterceptor.java index c73b22ef7e..3155eb7147 100644 --- a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/config/GrpcAuthInterceptor.java +++ b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/config/GrpcAuthInterceptor.java @@ -31,7 +31,7 @@ import java.util.HashMap; import java.util.Map; import org.apache.airavata.common.security.UserContext; import org.springframework.stereotype.Component; -import org.apache.airavata.model.security.AuthzToken; +import org.apache.airavata.model.security.proto.AuthzToken; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -61,8 +61,6 @@ public class GrpcAuthInterceptor implements ServerInterceptor { return new ServerCall.Listener<>() {}; } - AuthzToken authzToken = new AuthzToken(accessToken); - Map<String, String> claimsMap = new HashMap<>(); String claimsHeader = headers.get(X_CLAIMS_KEY); if (claimsHeader != null && !claimsHeader.isBlank()) { @@ -73,7 +71,10 @@ public class GrpcAuthInterceptor implements ServerInterceptor { } } - authzToken.setClaimsMap(claimsMap); + AuthzToken authzToken = AuthzToken.newBuilder() + .setAccessToken(accessToken) + .putAllClaimsMap(claimsMap) + .build(); UserContext.setAuthzToken(authzToken); ServerCall.Listener<ReqT> delegate = next.startCall(call, headers); diff --git a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ApplicationCatalogGrpcService.java b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ApplicationCatalogGrpcService.java index d7c1279432..3e11b27b14 100644 --- a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ApplicationCatalogGrpcService.java +++ b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ApplicationCatalogGrpcService.java @@ -26,11 +26,11 @@ import java.util.Map; import org.apache.airavata.api.appcatalog.*; import org.apache.airavata.compute.service.ApplicationCatalogService; import org.apache.airavata.execution.service.RequestContext; -import org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription; -import org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule; -import org.apache.airavata.model.appcatalog.appinterface.ApplicationInterfaceDescription; -import org.apache.airavata.model.application.io.InputDataObjectType; -import org.apache.airavata.model.application.io.OutputDataObjectType; +import org.apache.airavata.model.appcatalog.appdeployment.proto.ApplicationDeploymentDescription; +import org.apache.airavata.model.appcatalog.appdeployment.proto.ApplicationModule; +import org.apache.airavata.model.appcatalog.appinterface.proto.ApplicationInterfaceDescription; +import org.apache.airavata.model.application.io.proto.InputDataObjectType; +import org.apache.airavata.model.application.io.proto.OutputDataObjectType; import org.apache.airavata.server.grpc.GrpcStatusMapper; import org.springframework.stereotype.Component; @@ -210,7 +210,7 @@ public class ApplicationCatalogGrpcService List<ApplicationDeploymentDescription> deployments = applicationCatalogService.getAccessibleApplicationDeployments( ctx, request.getGatewayId(), - org.apache.airavata.model.group.ResourcePermissionType.READ); + org.apache.airavata.model.group.proto.ResourcePermissionType.READ); observer.onNext(GetAccessibleApplicationDeploymentsResponse.newBuilder() .addAllApplicationDeployments(deployments).build()); observer.onCompleted(); diff --git a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/CredentialGrpcService.java b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/CredentialGrpcService.java index 50c3b76901..a44c68be0b 100644 --- a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/CredentialGrpcService.java +++ b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/CredentialGrpcService.java @@ -22,12 +22,13 @@ package org.apache.airavata.server.grpc.services; import com.google.protobuf.Empty; import io.grpc.stub.StreamObserver; import java.util.List; +import java.util.stream.Collectors; import org.apache.airavata.api.credential.*; import org.apache.airavata.credential.service.CredentialService; import org.apache.airavata.credential.service.SSHAccountService; import org.apache.airavata.execution.service.RequestContext; -import org.apache.airavata.model.credential.store.CredentialSummary; -import org.apache.airavata.model.credential.store.SummaryType; +import org.apache.airavata.model.credential.store.proto.CredentialSummary; +import org.apache.airavata.model.credential.store.proto.SummaryType; import org.apache.airavata.server.grpc.GrpcStatusMapper; import org.springframework.stereotype.Component; @@ -60,8 +61,6 @@ public class CredentialGrpcService extends CredentialServiceGrpc.CredentialServi StreamObserver<RegisterPwdCredentialResponse> observer) { try { RequestContext ctx = GrpcRequestContext.current(); - // TODO: The service layer expects loginUserName, password, description separately - // but the proto sends a PasswordCredential message. Need mapper. var pwdCred = request.getPasswordCredential(); String token = credentialService.registerPwdCredential( ctx, pwdCred.getLoginUserName(), pwdCred.getPassword(), pwdCred.getDescription()); @@ -77,8 +76,8 @@ public class CredentialGrpcService extends CredentialServiceGrpc.CredentialServi StreamObserver<CredentialSummary> observer) { try { RequestContext ctx = GrpcRequestContext.current(); - CredentialSummary result = credentialService.getCredentialSummary(ctx, request.getTokenId()); - observer.onNext(result); + var thriftResult = credentialService.getCredentialSummary(ctx, request.getTokenId()); + observer.onNext(toProto(thriftResult)); observer.onCompleted(); } catch (Exception e) { observer.onError(GrpcStatusMapper.toStatusException(e)); @@ -90,11 +89,14 @@ public class CredentialGrpcService extends CredentialServiceGrpc.CredentialServi StreamObserver<GetAllCredentialSummariesResponse> observer) { try { RequestContext ctx = GrpcRequestContext.current(); - // TODO: Map proto SummaryType enum to Thrift SummaryType — needs mapper - SummaryType type = SummaryType.valueOf(request.getType().name()); - List<CredentialSummary> summaries = credentialService.getAllCredentialSummaries(ctx, type); + var thriftType = org.apache.airavata.model.credential.store.SummaryType.valueOf( + request.getType().name()); + var thriftSummaries = credentialService.getAllCredentialSummaries(ctx, thriftType); + List<CredentialSummary> protoSummaries = thriftSummaries.stream() + .map(this::toProto) + .collect(Collectors.toList()); observer.onNext(GetAllCredentialSummariesResponse.newBuilder() - .addAllCredentialSummaries(summaries).build()); + .addAllCredentialSummaries(protoSummaries).build()); observer.onCompleted(); } catch (Exception e) { observer.onError(GrpcStatusMapper.toStatusException(e)); @@ -147,8 +149,6 @@ public class CredentialGrpcService extends CredentialServiceGrpc.CredentialServi StreamObserver<IsSSHSetupCompleteResponse> observer) { try { RequestContext ctx = GrpcRequestContext.current(); - // TODO: The service layer expects airavataCredStoreToken but the proto - // doesn't include it. Passing empty string — revisit when mappers are added. boolean isComplete = sshAccountService.isSSHSetupCompleteForUserComputeResourcePreference( ctx, request.getComputeResourceId(), ""); observer.onNext(IsSSHSetupCompleteResponse.newBuilder() @@ -164,8 +164,6 @@ public class CredentialGrpcService extends CredentialServiceGrpc.CredentialServi StreamObserver<SetupSSHAccountResponse> observer) { try { RequestContext ctx = GrpcRequestContext.current(); - // TODO: The service layer expects airavataCredStoreToken but the proto - // doesn't include it. Passing empty string — revisit when mappers are added. sshAccountService.setupUserComputeResourcePreferencesForSSH( ctx, request.getComputeResourceId(), request.getUsername(), ""); observer.onNext(SetupSSHAccountResponse.newBuilder().setSuccess(true).build()); @@ -174,4 +172,28 @@ public class CredentialGrpcService extends CredentialServiceGrpc.CredentialServi observer.onError(GrpcStatusMapper.toStatusException(e)); } } + + // Thrift-to-proto conversion for CredentialSummary + private CredentialSummary toProto(org.apache.airavata.model.credential.store.CredentialSummary thrift) { + CredentialSummary.Builder builder = CredentialSummary.newBuilder(); + if (thrift.getType() != null) { + builder.setType(SummaryType.valueOf(thrift.getType().name())); + } + if (thrift.getGatewayId() != null) { + builder.setGatewayId(thrift.getGatewayId()); + } + if (thrift.getUsername() != null) { + builder.setUsername(thrift.getUsername()); + } + if (thrift.getPublicKey() != null) { + builder.setPublicKey(thrift.getPublicKey()); + } + if (thrift.getToken() != null) { + builder.setToken(thrift.getToken()); + } + if (thrift.getDescription() != null) { + builder.setDescription(thrift.getDescription()); + } + return builder.build(); + } } diff --git a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/DataProductGrpcService.java b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/DataProductGrpcService.java index 590dc4e6ce..256e84edd0 100644 --- a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/DataProductGrpcService.java +++ b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/DataProductGrpcService.java @@ -23,7 +23,7 @@ import io.grpc.stub.StreamObserver; import java.util.List; import org.apache.airavata.api.dataproduct.*; import org.apache.airavata.execution.service.RequestContext; -import org.apache.airavata.model.data.replica.DataProductModel; +import org.apache.airavata.model.data.replica.proto.DataProductModel; import org.apache.airavata.server.grpc.GrpcStatusMapper; import org.apache.airavata.storage.service.DataProductService; import org.springframework.stereotype.Component; diff --git a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ExperimentGrpcService.java b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ExperimentGrpcService.java index 7c44562630..e18c9bd0de 100644 --- a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ExperimentGrpcService.java +++ b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ExperimentGrpcService.java @@ -27,15 +27,15 @@ import java.util.Map; import org.apache.airavata.api.experiment.*; import org.apache.airavata.execution.service.ExperimentService; import org.apache.airavata.execution.service.RequestContext; -import org.apache.airavata.model.application.io.OutputDataObjectType; -import org.apache.airavata.model.experiment.ExperimentModel; -import org.apache.airavata.model.experiment.ExperimentSearchFields; -import org.apache.airavata.model.experiment.ExperimentStatistics; -import org.apache.airavata.model.experiment.ExperimentSummaryModel; -import org.apache.airavata.model.job.JobModel; -import org.apache.airavata.model.status.ExperimentStatus; -import org.apache.airavata.model.status.JobStatus; -import org.apache.airavata.model.status.ProcessStatus; +import org.apache.airavata.model.application.io.proto.OutputDataObjectType; +import org.apache.airavata.model.experiment.proto.ExperimentModel; +import org.apache.airavata.model.experiment.proto.ExperimentSearchFields; +import org.apache.airavata.model.experiment.proto.ExperimentStatistics; +import org.apache.airavata.model.experiment.proto.ExperimentSummaryModel; +import org.apache.airavata.model.job.proto.JobModel; +import org.apache.airavata.model.status.proto.ExperimentStatus; +import org.apache.airavata.model.status.proto.JobStatus; +import org.apache.airavata.model.status.proto.ProcessStatus; import org.apache.airavata.server.grpc.GrpcStatusMapper; import org.springframework.stereotype.Component; diff --git a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/GatewayGrpcService.java b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/GatewayGrpcService.java index 0842a48526..9ac8d62b84 100644 --- a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/GatewayGrpcService.java +++ b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/GatewayGrpcService.java @@ -25,7 +25,7 @@ import java.util.List; import org.apache.airavata.api.gateway.*; import org.apache.airavata.execution.service.GatewayService; import org.apache.airavata.execution.service.RequestContext; -import org.apache.airavata.model.workspace.Gateway; +import org.apache.airavata.model.workspace.proto.Gateway; import org.apache.airavata.server.grpc.GrpcStatusMapper; import org.springframework.stereotype.Component; diff --git a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/GatewayResourceProfileGrpcService.java b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/GatewayResourceProfileGrpcService.java index 8067a20e61..d5595dd02a 100644 --- a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/GatewayResourceProfileGrpcService.java +++ b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/GatewayResourceProfileGrpcService.java @@ -25,10 +25,10 @@ import java.util.List; import org.apache.airavata.api.gatewayprofile.*; import org.apache.airavata.compute.service.GatewayResourceProfileService; import org.apache.airavata.execution.service.RequestContext; -import org.apache.airavata.model.appcatalog.accountprovisioning.SSHAccountProvisioner; -import org.apache.airavata.model.appcatalog.gatewayprofile.ComputeResourcePreference; -import org.apache.airavata.model.appcatalog.gatewayprofile.GatewayResourceProfile; -import org.apache.airavata.model.appcatalog.gatewayprofile.StoragePreference; +import org.apache.airavata.model.appcatalog.accountprovisioning.proto.SSHAccountProvisioner; +import org.apache.airavata.model.appcatalog.gatewayprofile.proto.ComputeResourcePreference; +import org.apache.airavata.model.appcatalog.gatewayprofile.proto.GatewayResourceProfile; +import org.apache.airavata.model.appcatalog.gatewayprofile.proto.StoragePreference; import org.apache.airavata.server.grpc.GrpcStatusMapper; import org.springframework.stereotype.Component; diff --git a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/GroupResourceProfileGrpcService.java b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/GroupResourceProfileGrpcService.java index ce19ebcb8f..5159ad915a 100644 --- a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/GroupResourceProfileGrpcService.java +++ b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/GroupResourceProfileGrpcService.java @@ -25,11 +25,11 @@ import java.util.List; import org.apache.airavata.api.groupprofile.*; import org.apache.airavata.compute.service.GroupResourceProfileService; import org.apache.airavata.execution.service.RequestContext; -import org.apache.airavata.model.appcatalog.gatewaygroups.GatewayGroups; -import org.apache.airavata.model.appcatalog.groupresourceprofile.BatchQueueResourcePolicy; -import org.apache.airavata.model.appcatalog.groupresourceprofile.ComputeResourcePolicy; -import org.apache.airavata.model.appcatalog.groupresourceprofile.GroupComputeResourcePreference; -import org.apache.airavata.model.appcatalog.groupresourceprofile.GroupResourceProfile; +import org.apache.airavata.model.appcatalog.gatewaygroups.proto.GatewayGroups; +import org.apache.airavata.model.appcatalog.groupresourceprofile.proto.BatchQueueResourcePolicy; +import org.apache.airavata.model.appcatalog.groupresourceprofile.proto.ComputeResourcePolicy; +import org.apache.airavata.model.appcatalog.groupresourceprofile.proto.GroupComputeResourcePreference; +import org.apache.airavata.model.appcatalog.groupresourceprofile.proto.GroupResourceProfile; import org.apache.airavata.server.grpc.GrpcStatusMapper; import org.springframework.stereotype.Component; diff --git a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/GrpcRequestContext.java b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/GrpcRequestContext.java index f004490069..c1a6e57b4a 100644 --- a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/GrpcRequestContext.java +++ b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/GrpcRequestContext.java @@ -23,7 +23,7 @@ import java.util.Collections; import java.util.Map; import org.apache.airavata.common.security.UserContext; import org.apache.airavata.execution.service.RequestContext; -import org.apache.airavata.model.security.AuthzToken; +import org.apache.airavata.model.security.proto.AuthzToken; /** * Utility to create a {@link RequestContext} from the thread-local diff --git a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/NotificationGrpcService.java b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/NotificationGrpcService.java index 120c24f3ae..fececd51e2 100644 --- a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/NotificationGrpcService.java +++ b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/NotificationGrpcService.java @@ -25,7 +25,7 @@ import java.util.List; import org.apache.airavata.api.notification.*; import org.apache.airavata.execution.service.NotificationService; import org.apache.airavata.execution.service.RequestContext; -import org.apache.airavata.model.workspace.Notification; +import org.apache.airavata.model.workspace.proto.Notification; import org.apache.airavata.server.grpc.GrpcStatusMapper; import org.springframework.stereotype.Component; diff --git a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ParserGrpcService.java b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ParserGrpcService.java index a97579bed7..6aac4b8a43 100644 --- a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ParserGrpcService.java +++ b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ParserGrpcService.java @@ -25,8 +25,8 @@ import java.util.List; import org.apache.airavata.api.parser.*; import org.apache.airavata.compute.service.ParserService; import org.apache.airavata.execution.service.RequestContext; -import org.apache.airavata.model.appcatalog.parser.Parser; -import org.apache.airavata.model.appcatalog.parser.ParsingTemplate; +import org.apache.airavata.model.appcatalog.parser.proto.Parser; +import org.apache.airavata.model.appcatalog.parser.proto.ParsingTemplate; import org.apache.airavata.server.grpc.GrpcStatusMapper; import org.springframework.stereotype.Component; diff --git a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ProjectGrpcService.java b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ProjectGrpcService.java index 9e960c8434..1c2da3b11d 100644 --- a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ProjectGrpcService.java +++ b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ProjectGrpcService.java @@ -27,8 +27,8 @@ import java.util.Map; import org.apache.airavata.api.project.*; import org.apache.airavata.execution.service.ProjectService; import org.apache.airavata.execution.service.RequestContext; -import org.apache.airavata.model.experiment.ProjectSearchFields; -import org.apache.airavata.model.workspace.Project; +import org.apache.airavata.model.experiment.proto.ProjectSearchFields; +import org.apache.airavata.model.workspace.proto.Project; import org.apache.airavata.server.grpc.GrpcStatusMapper; import org.springframework.stereotype.Component; diff --git a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ResourceGrpcService.java b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ResourceGrpcService.java index ee21473b93..e85a5a200e 100644 --- a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ResourceGrpcService.java +++ b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/ResourceGrpcService.java @@ -25,9 +25,17 @@ import java.util.Map; import org.apache.airavata.api.resource.*; import org.apache.airavata.compute.service.ResourceService; import org.apache.airavata.execution.service.RequestContext; -import org.apache.airavata.model.appcatalog.computeresource.*; -import org.apache.airavata.model.appcatalog.storageresource.StorageResourceDescription; -import org.apache.airavata.model.data.movement.*; +import org.apache.airavata.model.appcatalog.computeresource.proto.CloudJobSubmission; +import org.apache.airavata.model.appcatalog.computeresource.proto.ComputeResourceDescription; +import org.apache.airavata.model.appcatalog.computeresource.proto.LOCALSubmission; +import org.apache.airavata.model.appcatalog.computeresource.proto.SSHJobSubmission; +import org.apache.airavata.model.appcatalog.computeresource.proto.UnicoreJobSubmission; +import org.apache.airavata.model.appcatalog.storageresource.proto.StorageResourceDescription; +import org.apache.airavata.model.data.movement.proto.DMType; +import org.apache.airavata.model.data.movement.proto.GridFTPDataMovement; +import org.apache.airavata.model.data.movement.proto.LOCALDataMovement; +import org.apache.airavata.model.data.movement.proto.SCPDataMovement; +import org.apache.airavata.model.data.movement.proto.UnicoreDataMovement; import org.apache.airavata.server.grpc.GrpcStatusMapper; import org.springframework.stereotype.Component; @@ -477,7 +485,7 @@ public class ResourceGrpcService extends ResourceServiceGrpc.ResourceServiceImpl // TODO: The service layer expects a DMType but the proto doesn't include it. // Passing COMPUTE as default — revisit when mappers are added. resourceService.deleteDataMovementInterface( - request.getComputeResourceId(), request.getDataMovementId(), DMType.COMPUTE); + request.getComputeResourceId(), request.getDataMovementId(), DMType.COMPUTE_RESOURCE); observer.onNext(Empty.getDefaultInstance()); observer.onCompleted(); } catch (Exception e) { diff --git a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/SharingGrpcService.java b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/SharingGrpcService.java index bedffa7345..7ba648c0d7 100644 --- a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/SharingGrpcService.java +++ b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/SharingGrpcService.java @@ -26,7 +26,7 @@ import java.util.List; import java.util.Map; import org.apache.airavata.api.sharing.*; import org.apache.airavata.execution.service.RequestContext; -import org.apache.airavata.model.group.ResourcePermissionType; +import org.apache.airavata.model.group.proto.ResourcePermissionType; import org.apache.airavata.server.grpc.GrpcStatusMapper; import org.apache.airavata.sharing.service.ResourceSharingService; import org.springframework.stereotype.Component; diff --git a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/UserResourceProfileGrpcService.java b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/UserResourceProfileGrpcService.java index 8a16e7709d..7e0226087d 100644 --- a/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/UserResourceProfileGrpcService.java +++ b/airavata-server/grpc/src/main/java/org/apache/airavata/server/grpc/services/UserResourceProfileGrpcService.java @@ -25,10 +25,10 @@ import java.util.List; import org.apache.airavata.api.userprofile.*; import org.apache.airavata.compute.service.UserResourceProfileService; import org.apache.airavata.execution.service.RequestContext; -import org.apache.airavata.model.appcatalog.userresourceprofile.UserComputeResourcePreference; -import org.apache.airavata.model.appcatalog.userresourceprofile.UserResourceProfile; -import org.apache.airavata.model.appcatalog.userresourceprofile.UserStoragePreference; -import org.apache.airavata.model.status.QueueStatusModel; +import org.apache.airavata.model.appcatalog.userresourceprofile.proto.UserComputeResourcePreference; +import org.apache.airavata.model.appcatalog.userresourceprofile.proto.UserResourceProfile; +import org.apache.airavata.model.appcatalog.userresourceprofile.proto.UserStoragePreference; +import org.apache.airavata.model.status.proto.QueueStatusModel; import org.apache.airavata.server.grpc.GrpcStatusMapper; import org.springframework.stereotype.Component; diff --git a/airavata-server/rest/src/main/java/org/apache/airavata/server/rest/config/SecurityConfig.java b/airavata-server/rest/src/main/java/org/apache/airavata/server/rest/config/SecurityConfig.java index c31d1b279b..e03d12115d 100644 --- a/airavata-server/rest/src/main/java/org/apache/airavata/server/rest/config/SecurityConfig.java +++ b/airavata-server/rest/src/main/java/org/apache/airavata/server/rest/config/SecurityConfig.java @@ -34,7 +34,7 @@ import java.util.Map; import java.util.Set; import org.apache.airavata.common.config.Constants; import org.apache.airavata.common.security.UserContext; -import org.apache.airavata.model.security.AuthzToken; +import org.apache.airavata.model.security.proto.AuthzToken; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.web.servlet.FilterRegistrationBean; @@ -93,8 +93,6 @@ public class SecurityConfig { return; } - AuthzToken authzToken = new AuthzToken(accessToken); - // Parse X-Claims header if present (JSON map of claim key-values) String claimsHeader = httpReq.getHeader("X-Claims"); Map<String, String> claimsMap = new HashMap<>(); @@ -120,7 +118,10 @@ public class SecurityConfig { } } - authzToken.setClaimsMap(claimsMap); + AuthzToken authzToken = AuthzToken.newBuilder() + .setAccessToken(accessToken) + .putAllClaimsMap(claimsMap) + .build(); UserContext.setAuthzToken(authzToken); chain.doFilter(request, response);
