Support to initiate transfers through CLI
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 1ae2139..a786b6d 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 @@
.withMethod("submitHttpDownload")
.withParameter("resourcePath", request.getResourcePath())
.withParameter("sourceStorageId", request.getSourceStorageId())
- .withParameter("sourceToken", request.getSourceToken())
+ .withParameter("sourceToken", request.getSourceSecretId())
.withParameter("mftAuthorizationToken", JsonFormat.printer().print(request.getMftAuthorizationToken()));
SyncRPCResponse rpcResponse = agentRPCClient.sendSyncRequest(requestBuilder.build());
diff --git a/api/stub/src/main/proto/MFTTransferApi.proto b/api/stub/src/main/proto/MFTTransferApi.proto
index ca21459..813a203 100644
--- a/api/stub/src/main/proto/MFTTransferApi.proto
+++ b/api/stub/src/main/proto/MFTTransferApi.proto
@@ -18,10 +18,10 @@
message TransferApiRequest {
string sourcePath = 1;
string sourceStorageId = 2;
- string sourceToken = 3;
+ string sourceSecretId = 3;
string destinationPath = 4;
string destinationStorageId = 5;
- string destinationToken = 6;
+ string destinationSecretId = 6;
bool affinityTransfer = 7;
map<string, int32> targetAgents = 8;
org.apache.airavata.mft.common.AuthToken mftAuthorizationToken = 9;
@@ -43,7 +43,7 @@
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 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 a873b1b..2787f62 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 @@
}
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 86e4830..d879a0b 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 @@
agentTransferBuilder.setSourcePath(transferRequest.getSourcePath());
agentTransferBuilder.setDestinationPath(transferRequest.getDestinationPath());
Pair<StorageWrapper, SecretWrapper> sourceCred = createCredentials(transferRequest.getSourceStorageId(),
- transferRequest.getSourceToken());
+ transferRequest.getSourceSecretId());
agentTransferBuilder.setSourceStorage(sourceCred.getLeft());
agentTransferBuilder.setSourceSecret(sourceCred.getRight());
Pair<StorageWrapper, SecretWrapper> 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 2474765..191450d 100644
--- a/python-cli/README.md
+++ b/python-cli/README.md
@@ -18,7 +18,7 @@
```
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 db1109d..2c2fccd 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 @@
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 @@
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 @@
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 0a18af5..7843b72 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 ccfb3ff..623d5dd 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)