From 319c424224a8fbeffab2dad543ad493fa2e039af Mon Sep 17 00:00:00 2001 From: Dimuthu Wannipurage Date: Sun, 25 Dec 2022 06:52:28 -0500 Subject: [PATCH] Support to initiate transfers through CLI --- .../mft/api/handler/MFTApiHandler.java | 2 +- api/stub/src/main/proto/MFTTransferApi.proto | 8 +- .../transfer/SubmitTransferSubCommand.java | 4 +- .../mft/admin/ControllerRequestBuilder.java | 4 +- python-cli/README.md | 2 +- python-cli/mft_cli/mft_cli/main.py | 133 ++++++++++++++++-- python-sdk/setup.cfg | 2 +- .../airavata_mft_sdk/MFTTransferApi_pb2.py | 60 ++++---- 8 files changed, 164 insertions(+), 51 deletions(-) diff --git a/api/service/src/main/java/org/apache/airavata/mft/api/handler/MFTApiHandler.java b/api/service/src/main/java/org/apache/airavata/mft/api/handler/MFTApiHandler.java index 1ae2139c..a786b6d8 100644 --- a/api/service/src/main/java/org/apache/airavata/mft/api/handler/MFTApiHandler.java +++ b/api/service/src/main/java/org/apache/airavata/mft/api/handler/MFTApiHandler.java @@ -213,7 +213,7 @@ public void submitHttpDownload(HttpDownloadApiRequest request, StreamObserver targetAgents = 8; org.apache.airavata.mft.common.AuthToken mftAuthorizationToken = 9; @@ -43,7 +43,7 @@ message BatchTransferApiResponse { message HttpUploadApiRequest { string destinationStorageId = 1; string resourcePath = 2; - string destinationToken = 3; + string destinationSecretId = 3; string targetAgent = 5; org.apache.airavata.mft.common.AuthToken mftAuthorizationToken = 6; } @@ -56,7 +56,7 @@ message HttpUploadApiResponse { message HttpDownloadApiRequest { string resourcePath = 1; string sourceStorageId = 2; - string sourceToken = 3; + string sourceSecretId = 3; string targetAgent = 5; org.apache.airavata.mft.common.AuthToken mftAuthorizationToken = 6; } diff --git a/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/transfer/SubmitTransferSubCommand.java b/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/transfer/SubmitTransferSubCommand.java index a873b1bd..2787f624 100644 --- a/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/transfer/SubmitTransferSubCommand.java +++ b/command-line/src/main/java/org/apache/airavata/mft/command/line/sub/transfer/SubmitTransferSubCommand.java @@ -52,8 +52,8 @@ public Integer call() throws Exception { } TransferApiResponse transferResp = mftApiClient.getTransferClient().submitTransfer(TransferApiRequest.newBuilder() - .setSourceToken(sourceSecretForStorage.getSecretId()) - .setDestinationToken(destSecretForStorage.getSecretId()) + .setSourceSecretId(sourceSecretForStorage.getSecretId()) + .setDestinationSecretId(destSecretForStorage.getSecretId()) .setDestinationStorageId(destinationStorageId) .setDestinationPath(destinationPath) .setSourceStorageId(sourceStorageId) diff --git a/common/common-clients/src/main/java/org/apache/airavata/mft/admin/ControllerRequestBuilder.java b/common/common-clients/src/main/java/org/apache/airavata/mft/admin/ControllerRequestBuilder.java index 86e48301..d879a0be 100644 --- a/common/common-clients/src/main/java/org/apache/airavata/mft/admin/ControllerRequestBuilder.java +++ b/common/common-clients/src/main/java/org/apache/airavata/mft/admin/ControllerRequestBuilder.java @@ -69,13 +69,13 @@ public AgentTransferRequest createAgentTransferRequest(TransferApiRequest transf agentTransferBuilder.setSourcePath(transferRequest.getSourcePath()); agentTransferBuilder.setDestinationPath(transferRequest.getDestinationPath()); Pair sourceCred = createCredentials(transferRequest.getSourceStorageId(), - transferRequest.getSourceToken()); + transferRequest.getSourceSecretId()); agentTransferBuilder.setSourceStorage(sourceCred.getLeft()); agentTransferBuilder.setSourceSecret(sourceCred.getRight()); Pair destCred = createCredentials(transferRequest.getDestinationStorageId(), - transferRequest.getDestinationToken()); + transferRequest.getDestinationSecretId()); agentTransferBuilder.setDestinationStorage(destCred.getLeft()); agentTransferBuilder.setDestinationSecret(destCred.getRight()); diff --git a/python-cli/README.md b/python-cli/README.md index 2474765d..191450d5 100644 --- a/python-cli/README.md +++ b/python-cli/README.md @@ -18,7 +18,7 @@ Install dependencies ``` pip install grpcio==1.46.3 pip install grpcio-tools==1.46.3 -pip install airavata_mft_sdk==0.0.1-alpha18 +pip install airavata_mft_sdk==0.0.1-alpha19 ``` Build the binary diff --git a/python-cli/mft_cli/mft_cli/main.py b/python-cli/mft_cli/mft_cli/main.py index db1109d4..2c2fccdd 100644 --- a/python-cli/mft_cli/mft_cli/main.py +++ b/python-cli/mft_cli/mft_cli/main.py @@ -5,15 +5,14 @@ from airavata_mft_sdk import MFTTransferApi_pb2 from rich.console import Console from rich.table import Table +from rich.progress import track +import time app = typer.Typer() app.add_typer(mft_cli.storage.app, name="storage") -@app.command("ls") -def list(storage_path): - storage_name = storage_path.split("/")[0] - resource_path = storage_path[len(storage_name) +1 :] +def fetch_storage_and_secret_ids(storage_name): client = mft_client.MFTClient() search_req = StorageCommon_pb2.StorageSearchRequest(storageName=storage_name) storages = client.common_api.searchStorages(search_req) @@ -24,11 +23,11 @@ def list(storage_path): if len(storages.storageList) == 0: print("No storage with name or id " + storage_name + " was found. Please register the storage with command mft-cli storage add") - exit() + raise typer.Abort() if len(storages.storageList) > 1: print("More than one storage with nam " + storage_name + " was found. Please use the storage id. You can fetch it from mft-cli storage list") - exit() + raise typer.Abort() storage = storages.storageList[0] sec_req = StorageCommon_pb2.SecretForStorageGetRequest(storageId = storage.storageId) @@ -36,12 +35,26 @@ def list(storage_path): if sec_resp.error != 0: print("Could not fetch the secret for storage " + storage.storageId) - id_req = MFTTransferApi_pb2.GetResourceMetadataFromIDsRequest(storageId = sec_resp.storageId, - secretId = sec_resp.secretId, - resourcePath = resource_path) + return sec_resp.storageId, sec_resp.secretId +def get_resource_metadata(storage_path, recursive_search = False): + storage_name = storage_path.split("/")[0] + resource_path = storage_path[len(storage_name) +1 :] + + storage_id, secret_id = fetch_storage_and_secret_ids(storage_name) + + id_req = MFTTransferApi_pb2.GetResourceMetadataFromIDsRequest(storageId = storage_id, + secretId = secret_id, + resourcePath = resource_path) resource_medata_req = MFTTransferApi_pb2.FetchResourceMetadataRequest(idRequest = id_req) + client = mft_client.MFTClient() + metadata_resp = client.transfer_api.resourceMetadata(resource_medata_req) + return metadata_resp +@app.command("ls") +def list(storage_path): + + metadata_resp = get_resource_metadata(storage_path) console = Console() table = Table() @@ -65,10 +78,110 @@ def list(storage_path): console.print(table) +def flatten_directories(directory, parent_path, file_list): + for dir in directory.directories: + flatten_directories(dir, parent_path + dir.friendlyName + "/", file_list) + + for file in directory.files: + file_list.append((file, parent_path + file.friendlyName)) + @app.command("cp") def copy(source, destination): - print("Moving data from " + source + " to " + destination) + source_storage_id, source_secret_id = fetch_storage_and_secret_ids(source.split("/")[0]) + dest_storage_id, dest_secret_id = fetch_storage_and_secret_ids(destination.split("/")[0]) + + ## TODO : Check agent availability and deploy cloud agents if required + + file_list = [] + source_metadata = get_resource_metadata(source) + transfer_requests = [] + total_volume = 0 + + if (source_metadata.WhichOneof('metadata') == 'directory') : + if (destination[-1] != "/"): + print("Source is a directory path so destination path should end with /") + raise typer.Abort() + + flatten_directories(source_metadata.directory, "", file_list) + for file_entry in file_list: + file = file_entry[0] + relative_path = file_entry[1] + transfer_requests.append(MFTTransferApi_pb2.TransferApiRequest( + sourcePath = file.resourcePath, + sourceStorageId = source_storage_id, + sourceSecretId = source_secret_id, + destinationPath = destination[len(destination.split("/")[0]) +1 :] + relative_path, + destinationStorageId = dest_storage_id, + destinationSecretId = dest_secret_id)) + total_volume += file.resourceSize + + elif (source_metadata.WhichOneof('metadata') == 'file'): + file_list.append((source_metadata.file, source_metadata.file.friendlyName)) + + if destination[-1] == "/": + destination = destination + source_metadata.file.friendlyName + + transfer_requests.append(MFTTransferApi_pb2.TransferApiRequest( + sourcePath = source_metadata.file.resourcePath, + sourceStorageId = source_storage_id, + sourceSecretId = source_secret_id, + destinationPath = destination[len(destination.split("/")[0]) +1 :], + destinationStorageId = dest_storage_id, + destinationSecretId = dest_secret_id)) + + total_volume += source_metadata.file.resourceSize + + elif (source_metadata.WhichOneof('metadata') == 'error'): + print("Failed while fetching source details") + print(metadata_resp.error) + raise typer.Abort() + + batch_transfer_request = MFTTransferApi_pb2.BatchTransferApiRequest() + batch_transfer_request.transferRequests.extend(transfer_requests) + + confirm = typer.confirm("Total number of " + str(len(transfer_requests)) + + " files to be transferred. Total volume is " + str(total_volume) + + " bytes. Do you want to start the transfer? ", True) + + client = mft_client.MFTClient() + batch_transfer_resp = client.transfer_api.submitBatchTransfer(batch_transfer_request) + + if not confirm: + raise typer.Abort() + + transfer_ids = batch_transfer_resp.transferIds + + state_requests = [] + for transfer_id in transfer_ids: + state_requests.append(MFTTransferApi_pb2.TransferStateApiRequest(transferId=transfer_id)) + + ## TODO: This has to be optimized and avoid frequent polling of all transfer ids in each iteration + ## Possible fix is to introduce a parent batch transfer id at the API level and fetch child trnasfer id + # summaries in a single API call + + completed = 0 + failed = 0 + + with typer.progressbar(length=len(transfer_ids)) as progress: + + while 1: + completed = 0 + failed = 0 + for state_request in state_requests: + state_resp = client.transfer_api.getTransferState(state_request) + if state_resp.state == "COMPLETED": + completed += 1 + elif state_resp.state == "FAILED": + failed += 1 + + total = completed + failed + progress.update(total) + if (total == len(transfer_ids)): + break + time.sleep(1) + + print(f"Processed {completed + failed} files. Completed {completed}, Failed {failed}.") if __name__ == "__main__": app() \ No newline at end of file diff --git a/python-sdk/setup.cfg b/python-sdk/setup.cfg index 0a18af5c..7843b726 100644 --- a/python-sdk/setup.cfg +++ b/python-sdk/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = airavata_mft_sdk -version = 0.0.1-alpha18 +version = 0.0.1-alpha19 author = Airavata MFT Developers author_email = dev@airavata.apache.org description = Python SDK for Apache Airavata Managed File Transfers (MFT) diff --git a/python-sdk/src/airavata_mft_sdk/MFTTransferApi_pb2.py b/python-sdk/src/airavata_mft_sdk/MFTTransferApi_pb2.py index ccfb3ff5..623d5dd2 100644 --- a/python-sdk/src/airavata_mft_sdk/MFTTransferApi_pb2.py +++ b/python-sdk/src/airavata_mft_sdk/MFTTransferApi_pb2.py @@ -16,7 +16,7 @@ import airavata_mft_sdk.MFTAgentStubs_pb2 as MFTAgentStubs__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14MFTTransferApi.proto\x12#org.apache.airavata.mft.api.service\x1a\x10\x43redCommon.proto\x1a\x13MFTAgentStubs.proto\"\x9b\x01\n\x10\x43\x61llbackEndpoint\x12P\n\x04type\x18\x01 \x01(\x0e\x32\x42.org.apache.airavata.mft.api.service.CallbackEndpoint.CallbackType\x12\x10\n\x08\x65ndpoint\x18\x02 \x01(\t\"#\n\x0c\x43\x61llbackType\x12\x08\n\x04HTTP\x10\x00\x12\t\n\x05KAFKA\x10\x01\"\xf3\x03\n\x12TransferApiRequest\x12\x12\n\nsourcePath\x18\x01 \x01(\t\x12\x17\n\x0fsourceStorageId\x18\x02 \x01(\t\x12\x13\n\x0bsourceToken\x18\x03 \x01(\t\x12\x17\n\x0f\x64\x65stinationPath\x18\x04 \x01(\t\x12\x1c\n\x14\x64\x65stinationStorageId\x18\x05 \x01(\t\x12\x18\n\x10\x64\x65stinationToken\x18\x06 \x01(\t\x12\x18\n\x10\x61\x66\x66inityTransfer\x18\x07 \x01(\x08\x12_\n\x0ctargetAgents\x18\x08 \x03(\x0b\x32I.org.apache.airavata.mft.api.service.TransferApiRequest.TargetAgentsEntry\x12H\n\x15mftAuthorizationToken\x18\t \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\x12P\n\x11\x63\x61llbackEndpoints\x18\n \x03(\x0b\x32\x35.org.apache.airavata.mft.api.service.CallbackEndpoint\x1a\x33\n\x11TargetAgentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\")\n\x13TransferApiResponse\x12\x12\n\ntransferId\x18\x01 \x01(\t\"l\n\x17\x42\x61tchTransferApiRequest\x12Q\n\x10transferRequests\x18\x01 \x03(\x0b\x32\x37.org.apache.airavata.mft.api.service.TransferApiRequest\"/\n\x18\x42\x61tchTransferApiResponse\x12\x13\n\x0btransferIds\x18\x01 \x03(\t\"\xc3\x01\n\x14HttpUploadApiRequest\x12\x1c\n\x14\x64\x65stinationStorageId\x18\x01 \x01(\t\x12\x14\n\x0cresourcePath\x18\x02 \x01(\t\x12\x18\n\x10\x64\x65stinationToken\x18\x03 \x01(\t\x12\x13\n\x0btargetAgent\x18\x05 \x01(\t\x12H\n\x15mftAuthorizationToken\x18\x06 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"9\n\x15HttpUploadApiResponse\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x13\n\x0btargetAgent\x18\x02 \x01(\t\"\xbb\x01\n\x16HttpDownloadApiRequest\x12\x14\n\x0cresourcePath\x18\x01 \x01(\t\x12\x17\n\x0fsourceStorageId\x18\x02 \x01(\t\x12\x13\n\x0bsourceToken\x18\x03 \x01(\t\x12\x13\n\x0btargetAgent\x18\x05 \x01(\t\x12H\n\x15mftAuthorizationToken\x18\x06 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\";\n\x17HttpDownloadApiResponse\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x13\n\x0btargetAgent\x18\x02 \x01(\t\"w\n\x17TransferStateApiRequest\x12\x12\n\ntransferId\x18\x01 \x01(\t\x12H\n\x15mftAuthorizationToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"j\n\x18TransferStateApiResponse\x12\r\n\x05state\x18\x01 \x01(\t\x12\x16\n\x0eupdateTimeMils\x18\x02 \x01(\x03\x12\x12\n\npercentage\x18\x03 \x01(\x01\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\"1\n\x1cResourceAvailabilityResponse\x12\x11\n\tavailable\x18\x01 \x01(\x08\"w\n!GetResourceMetadataFromIDsRequest\x12\x14\n\x0cresourcePath\x18\x01 \x01(\t\x12\x11\n\tstorageId\x18\x02 \x01(\t\x12\x10\n\x08secretId\x18\x03 \x01(\t\x12\x17\n\x0frecursiveSearch\x18\x04 \x01(\x08\"\xa9\x02\n\x1c\x46\x65tchResourceMetadataRequest\x12W\n\rdirectRequest\x18\x01 \x01(\x0b\x32>.org.apache.airavata.mft.agent.stub.GetResourceMetadataRequestH\x00\x12[\n\tidRequest\x18\x02 \x01(\x0b\x32\x46.org.apache.airavata.mft.api.service.GetResourceMetadataFromIDsRequestH\x00\x12H\n\x15mftAuthorizationToken\x18\x03 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthTokenB\t\n\x07request2\xa4\t\n\x12MFTTransferService\x12\x83\x01\n\x0esubmitTransfer\x12\x37.org.apache.airavata.mft.api.service.TransferApiRequest\x1a\x38.org.apache.airavata.mft.api.service.TransferApiResponse\x12\x92\x01\n\x13submitBatchTransfer\x12<.org.apache.airavata.mft.api.service.BatchTransferApiRequest\x1a=.org.apache.airavata.mft.api.service.BatchTransferApiResponse\x12\x89\x01\n\x10submitHttpUpload\x12\x39.org.apache.airavata.mft.api.service.HttpUploadApiRequest\x1a:.org.apache.airavata.mft.api.service.HttpUploadApiResponse\x12\x8f\x01\n\x12submitHttpDownload\x12;.org.apache.airavata.mft.api.service.HttpDownloadApiRequest\x1a<.org.apache.airavata.mft.api.service.HttpDownloadApiResponse\x12\x92\x01\n\x11getTransferStates\x12<.org.apache.airavata.mft.api.service.TransferStateApiRequest\x1a=.org.apache.airavata.mft.api.service.TransferStateApiResponse0\x01\x12\x8f\x01\n\x10getTransferState\x12<.org.apache.airavata.mft.api.service.TransferStateApiRequest\x1a=.org.apache.airavata.mft.api.service.TransferStateApiResponse\x12\x9f\x01\n\x17getResourceAvailability\x12\x41.org.apache.airavata.mft.api.service.FetchResourceMetadataRequest\x1a\x41.org.apache.airavata.mft.api.service.ResourceAvailabilityResponse\x12\x8b\x01\n\x10resourceMetadata\x12\x41.org.apache.airavata.mft.api.service.FetchResourceMetadataRequest\x1a\x34.org.apache.airavata.mft.agent.stub.ResourceMetadataB\x02P\x01\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14MFTTransferApi.proto\x12#org.apache.airavata.mft.api.service\x1a\x10\x43redCommon.proto\x1a\x13MFTAgentStubs.proto\"\x9b\x01\n\x10\x43\x61llbackEndpoint\x12P\n\x04type\x18\x01 \x01(\x0e\x32\x42.org.apache.airavata.mft.api.service.CallbackEndpoint.CallbackType\x12\x10\n\x08\x65ndpoint\x18\x02 \x01(\t\"#\n\x0c\x43\x61llbackType\x12\x08\n\x04HTTP\x10\x00\x12\t\n\x05KAFKA\x10\x01\"\xf9\x03\n\x12TransferApiRequest\x12\x12\n\nsourcePath\x18\x01 \x01(\t\x12\x17\n\x0fsourceStorageId\x18\x02 \x01(\t\x12\x16\n\x0esourceSecretId\x18\x03 \x01(\t\x12\x17\n\x0f\x64\x65stinationPath\x18\x04 \x01(\t\x12\x1c\n\x14\x64\x65stinationStorageId\x18\x05 \x01(\t\x12\x1b\n\x13\x64\x65stinationSecretId\x18\x06 \x01(\t\x12\x18\n\x10\x61\x66\x66inityTransfer\x18\x07 \x01(\x08\x12_\n\x0ctargetAgents\x18\x08 \x03(\x0b\x32I.org.apache.airavata.mft.api.service.TransferApiRequest.TargetAgentsEntry\x12H\n\x15mftAuthorizationToken\x18\t \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\x12P\n\x11\x63\x61llbackEndpoints\x18\n \x03(\x0b\x32\x35.org.apache.airavata.mft.api.service.CallbackEndpoint\x1a\x33\n\x11TargetAgentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\")\n\x13TransferApiResponse\x12\x12\n\ntransferId\x18\x01 \x01(\t\"l\n\x17\x42\x61tchTransferApiRequest\x12Q\n\x10transferRequests\x18\x01 \x03(\x0b\x32\x37.org.apache.airavata.mft.api.service.TransferApiRequest\"/\n\x18\x42\x61tchTransferApiResponse\x12\x13\n\x0btransferIds\x18\x01 \x03(\t\"\xc6\x01\n\x14HttpUploadApiRequest\x12\x1c\n\x14\x64\x65stinationStorageId\x18\x01 \x01(\t\x12\x14\n\x0cresourcePath\x18\x02 \x01(\t\x12\x1b\n\x13\x64\x65stinationSecretId\x18\x03 \x01(\t\x12\x13\n\x0btargetAgent\x18\x05 \x01(\t\x12H\n\x15mftAuthorizationToken\x18\x06 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"9\n\x15HttpUploadApiResponse\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x13\n\x0btargetAgent\x18\x02 \x01(\t\"\xbe\x01\n\x16HttpDownloadApiRequest\x12\x14\n\x0cresourcePath\x18\x01 \x01(\t\x12\x17\n\x0fsourceStorageId\x18\x02 \x01(\t\x12\x16\n\x0esourceSecretId\x18\x03 \x01(\t\x12\x13\n\x0btargetAgent\x18\x05 \x01(\t\x12H\n\x15mftAuthorizationToken\x18\x06 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\";\n\x17HttpDownloadApiResponse\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x13\n\x0btargetAgent\x18\x02 \x01(\t\"w\n\x17TransferStateApiRequest\x12\x12\n\ntransferId\x18\x01 \x01(\t\x12H\n\x15mftAuthorizationToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"j\n\x18TransferStateApiResponse\x12\r\n\x05state\x18\x01 \x01(\t\x12\x16\n\x0eupdateTimeMils\x18\x02 \x01(\x03\x12\x12\n\npercentage\x18\x03 \x01(\x01\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\"1\n\x1cResourceAvailabilityResponse\x12\x11\n\tavailable\x18\x01 \x01(\x08\"w\n!GetResourceMetadataFromIDsRequest\x12\x14\n\x0cresourcePath\x18\x01 \x01(\t\x12\x11\n\tstorageId\x18\x02 \x01(\t\x12\x10\n\x08secretId\x18\x03 \x01(\t\x12\x17\n\x0frecursiveSearch\x18\x04 \x01(\x08\"\xa9\x02\n\x1c\x46\x65tchResourceMetadataRequest\x12W\n\rdirectRequest\x18\x01 \x01(\x0b\x32>.org.apache.airavata.mft.agent.stub.GetResourceMetadataRequestH\x00\x12[\n\tidRequest\x18\x02 \x01(\x0b\x32\x46.org.apache.airavata.mft.api.service.GetResourceMetadataFromIDsRequestH\x00\x12H\n\x15mftAuthorizationToken\x18\x03 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthTokenB\t\n\x07request2\xa4\t\n\x12MFTTransferService\x12\x83\x01\n\x0esubmitTransfer\x12\x37.org.apache.airavata.mft.api.service.TransferApiRequest\x1a\x38.org.apache.airavata.mft.api.service.TransferApiResponse\x12\x92\x01\n\x13submitBatchTransfer\x12<.org.apache.airavata.mft.api.service.BatchTransferApiRequest\x1a=.org.apache.airavata.mft.api.service.BatchTransferApiResponse\x12\x89\x01\n\x10submitHttpUpload\x12\x39.org.apache.airavata.mft.api.service.HttpUploadApiRequest\x1a:.org.apache.airavata.mft.api.service.HttpUploadApiResponse\x12\x8f\x01\n\x12submitHttpDownload\x12;.org.apache.airavata.mft.api.service.HttpDownloadApiRequest\x1a<.org.apache.airavata.mft.api.service.HttpDownloadApiResponse\x12\x92\x01\n\x11getTransferStates\x12<.org.apache.airavata.mft.api.service.TransferStateApiRequest\x1a=.org.apache.airavata.mft.api.service.TransferStateApiResponse0\x01\x12\x8f\x01\n\x10getTransferState\x12<.org.apache.airavata.mft.api.service.TransferStateApiRequest\x1a=.org.apache.airavata.mft.api.service.TransferStateApiResponse\x12\x9f\x01\n\x17getResourceAvailability\x12\x41.org.apache.airavata.mft.api.service.FetchResourceMetadataRequest\x1a\x41.org.apache.airavata.mft.api.service.ResourceAvailabilityResponse\x12\x8b\x01\n\x10resourceMetadata\x12\x41.org.apache.airavata.mft.api.service.FetchResourceMetadataRequest\x1a\x34.org.apache.airavata.mft.agent.stub.ResourceMetadataB\x02P\x01\x62\x06proto3') @@ -154,33 +154,33 @@ _CALLBACKENDPOINT_CALLBACKTYPE._serialized_start=221 _CALLBACKENDPOINT_CALLBACKTYPE._serialized_end=256 _TRANSFERAPIREQUEST._serialized_start=259 - _TRANSFERAPIREQUEST._serialized_end=758 - _TRANSFERAPIREQUEST_TARGETAGENTSENTRY._serialized_start=707 - _TRANSFERAPIREQUEST_TARGETAGENTSENTRY._serialized_end=758 - _TRANSFERAPIRESPONSE._serialized_start=760 - _TRANSFERAPIRESPONSE._serialized_end=801 - _BATCHTRANSFERAPIREQUEST._serialized_start=803 - _BATCHTRANSFERAPIREQUEST._serialized_end=911 - _BATCHTRANSFERAPIRESPONSE._serialized_start=913 - _BATCHTRANSFERAPIRESPONSE._serialized_end=960 - _HTTPUPLOADAPIREQUEST._serialized_start=963 - _HTTPUPLOADAPIREQUEST._serialized_end=1158 - _HTTPUPLOADAPIRESPONSE._serialized_start=1160 - _HTTPUPLOADAPIRESPONSE._serialized_end=1217 - _HTTPDOWNLOADAPIREQUEST._serialized_start=1220 - _HTTPDOWNLOADAPIREQUEST._serialized_end=1407 - _HTTPDOWNLOADAPIRESPONSE._serialized_start=1409 - _HTTPDOWNLOADAPIRESPONSE._serialized_end=1468 - _TRANSFERSTATEAPIREQUEST._serialized_start=1470 - _TRANSFERSTATEAPIREQUEST._serialized_end=1589 - _TRANSFERSTATEAPIRESPONSE._serialized_start=1591 - _TRANSFERSTATEAPIRESPONSE._serialized_end=1697 - _RESOURCEAVAILABILITYRESPONSE._serialized_start=1699 - _RESOURCEAVAILABILITYRESPONSE._serialized_end=1748 - _GETRESOURCEMETADATAFROMIDSREQUEST._serialized_start=1750 - _GETRESOURCEMETADATAFROMIDSREQUEST._serialized_end=1869 - _FETCHRESOURCEMETADATAREQUEST._serialized_start=1872 - _FETCHRESOURCEMETADATAREQUEST._serialized_end=2169 - _MFTTRANSFERSERVICE._serialized_start=2172 - _MFTTRANSFERSERVICE._serialized_end=3360 + _TRANSFERAPIREQUEST._serialized_end=764 + _TRANSFERAPIREQUEST_TARGETAGENTSENTRY._serialized_start=713 + _TRANSFERAPIREQUEST_TARGETAGENTSENTRY._serialized_end=764 + _TRANSFERAPIRESPONSE._serialized_start=766 + _TRANSFERAPIRESPONSE._serialized_end=807 + _BATCHTRANSFERAPIREQUEST._serialized_start=809 + _BATCHTRANSFERAPIREQUEST._serialized_end=917 + _BATCHTRANSFERAPIRESPONSE._serialized_start=919 + _BATCHTRANSFERAPIRESPONSE._serialized_end=966 + _HTTPUPLOADAPIREQUEST._serialized_start=969 + _HTTPUPLOADAPIREQUEST._serialized_end=1167 + _HTTPUPLOADAPIRESPONSE._serialized_start=1169 + _HTTPUPLOADAPIRESPONSE._serialized_end=1226 + _HTTPDOWNLOADAPIREQUEST._serialized_start=1229 + _HTTPDOWNLOADAPIREQUEST._serialized_end=1419 + _HTTPDOWNLOADAPIRESPONSE._serialized_start=1421 + _HTTPDOWNLOADAPIRESPONSE._serialized_end=1480 + _TRANSFERSTATEAPIREQUEST._serialized_start=1482 + _TRANSFERSTATEAPIREQUEST._serialized_end=1601 + _TRANSFERSTATEAPIRESPONSE._serialized_start=1603 + _TRANSFERSTATEAPIRESPONSE._serialized_end=1709 + _RESOURCEAVAILABILITYRESPONSE._serialized_start=1711 + _RESOURCEAVAILABILITYRESPONSE._serialized_end=1760 + _GETRESOURCEMETADATAFROMIDSREQUEST._serialized_start=1762 + _GETRESOURCEMETADATAFROMIDSREQUEST._serialized_end=1881 + _FETCHRESOURCEMETADATAREQUEST._serialized_start=1884 + _FETCHRESOURCEMETADATAREQUEST._serialized_end=2181 + _MFTTRANSFERSERVICE._serialized_start=2184 + _MFTTRANSFERSERVICE._serialized_end=3372 # @@protoc_insertion_point(module_scope)