refactor: gRPC/Armeria migration with full module boundary enforcement#612
Merged
Conversation
73ff17e to
e838c4d
Compare
76915fd to
f1c6024
Compare
f03e1d2 to
52dacc8
Compare
Complete modernization of Airavata's service architecture. Server starts and serves gRPC + REST on port 9090. All tests pass. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
52dacc8 to
b3ab528
Compare
yasithdev
added a commit
to yasithdev/airavata
that referenced
this pull request
Apr 12, 2026
* refactor: gRPC/Armeria migration with full module boundary enforcement (apache#612) Complete modernization of Airavata's service architecture. Server starts and serves gRPC + REST on port 9090. All tests pass. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: airavata server fixes, SDK facades, auto-generated SFTP keys - Fix sharing EntityRepository null-safe casting - Fix ResearchMapper projectId/projectID mapping - Update credential store encryption and key generation - SDK facade clients updated for gRPC service alignment - Tiltfile auto-generates SSH keypair for SFTP container (no static keys in repo) - DevStorageInitializer reads keypair from conf/sftp/ instead of generating - Keycloak custom theme for dev login - Gitignore conf/sftp/id_* generated keys * fix: use proc check instead of ss for SFTP healthcheck (ss not available in image) * fix: map DataMovementInterfaceEntity to STORAGE_INTERFACE table instead of DATA_MOVEMENT_INTERFACE --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Complete modernization of Airavata's service architecture — replaces Thrift with gRPC/Armeria, consolidates entities (-107K lines net), enforces module boundaries, adds server-side user storage API, and provides a transport-agnostic Python SDK facade.
1,681 files changed | 88,340 insertions | 193,478 deletions
What Changed
Service Communication: Thrift → gRPC/Armeria
GrpcStatusMapperfor consistent error codes across all handlersGrpcAuthInterceptorfor Bearer token authentication/docsEntity Consolidation
Module Boundary Enforcement
~45 entities/repositories relocated to correct bounded-context modules. All cross-module access via shared interfaces.
Server-Side User Storage API (NEW)
New
UserStorageServicegRPC API (13 RPCs) for managing user files on any registered storage resource:/api/v1/user-storage/{id}/files/{path}/api/v1/user-storage/{id}/files/{path}/api/v1/user-storage/{id}/files/{path}:exists/api/v1/user-storage/{id}/dirs/{path}:exists/api/v1/user-storage/{id}/dirs/{path}/api/v1/user-storage/{id}/files/{path}/api/v1/user-storage/{id}/dirs/{path}/api/v1/user-storage/{id}/files/{path}:move/api/v1/user-storage/{id}/dirs/{path}/api/v1/user-storage/{id}/files/{path}:symlink/api/v1/user-storage/{id}/files/{path}:metadata/api/v1/user-storage/experiments/{id}/dirs/{path}/api/v1/user-storage/default-storage-resourceEliminates client-side storage backends — portal just calls the SDK.
Python SDK: Transport-Agnostic Facade
client.computeclient.storageclient.credentialclient.researchclient.iamclient.sharingclient.agentInfrastructure
/internal/actuator/health@Tableannotations on all entitiesModules After Refactor
agent-servicecompute-servicecredential-servicestorage-serviceresearch-serviceiam-servicesharing-serviceorchestration-serviceTest Plan
mvn clean compile -T4— BUILD SUCCESSmvn test -T4— 23/23 tests passtilt up— verify health athttp://localhost:9090/internal/actuator/healthmvn test -pl airavata-api -Dgroups=runtime🤖 Generated with Claude Code