Setting expiry time for http download requests
diff --git a/agent/src/main/java/org/apache/airavata/mft/agent/MFTAgent.java b/agent/src/main/java/org/apache/airavata/mft/agent/MFTAgent.java
index 19a0dfb..611f2f7 100644
--- a/agent/src/main/java/org/apache/airavata/mft/agent/MFTAgent.java
+++ b/agent/src/main/java/org/apache/airavata/mft/agent/MFTAgent.java
@@ -63,10 +63,19 @@
@org.springframework.beans.factory.annotation.Value("${agent.id}")
private String agentId;
+
@org.springframework.beans.factory.annotation.Value("${agent.host}")
private String agentHost;
+
@org.springframework.beans.factory.annotation.Value("${agent.user}")
private String agentUser;
+
+ @org.springframework.beans.factory.annotation.Value("${agent.http.port}")
+ private Integer agentHttpPort;
+
+ @org.springframework.beans.factory.annotation.Value("${agent.https.enabled}")
+ private boolean agentHttpsEnabled;
+
@org.springframework.beans.factory.annotation.Value("${agent.supported.protocols}")
private String supportedProtocols;
@@ -230,7 +239,7 @@
logger.info("Starting the HTTP front end");
new Thread(() -> {
- HttpServer httpServer = new HttpServer(3333, false, transferRequestsStore);
+ HttpServer httpServer = new HttpServer(agentHost, agentHttpPort, agentHttpsEnabled, transferRequestsStore);
try {
httpServer.run();
} catch (Exception e) {
diff --git a/agent/src/main/java/org/apache/airavata/mft/agent/http/HttpServer.java b/agent/src/main/java/org/apache/airavata/mft/agent/http/HttpServer.java
index 4cc0d8a..3fad8fa 100644
--- a/agent/src/main/java/org/apache/airavata/mft/agent/http/HttpServer.java
+++ b/agent/src/main/java/org/apache/airavata/mft/agent/http/HttpServer.java
@@ -27,14 +27,20 @@
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslProvider;
import io.netty.handler.ssl.util.SelfSignedCertificate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class HttpServer {
+ private static final Logger logger = LoggerFactory.getLogger(HttpServer.class);
+
+ private final String host;
private final int port;
private final boolean enableSSL;
private HttpTransferRequestsStore transferRequestsStore;
- public HttpServer(int port, boolean enableSSL, HttpTransferRequestsStore transferRequestsStore) {
+ public HttpServer(String host, int port, boolean enableSSL, HttpTransferRequestsStore transferRequestsStore) {
+ this.host = host;
this.port = port;
this.enableSSL = enableSSL;
this.transferRequestsStore = transferRequestsStore;
@@ -59,10 +65,9 @@
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new HttpServerInitializer(sslCtx, transferRequestsStore));
- Channel ch = b.bind(port).sync().channel();
+ Channel ch = b.bind(host, port).sync().channel();
- System.err.println("Open your web browser and navigate to " +
- (enableSSL? "https" : "http") + "://127.0.0.1:" + port + '/');
+ logger.info("Http endpoint is open on {}://{}:{}", (enableSSL? "https" : "http"), host, port);
ch.closeFuture().sync();
} finally {
diff --git a/agent/src/main/java/org/apache/airavata/mft/agent/http/HttpTransferRequest.java b/agent/src/main/java/org/apache/airavata/mft/agent/http/HttpTransferRequest.java
index dbc807f..367919e 100644
--- a/agent/src/main/java/org/apache/airavata/mft/agent/http/HttpTransferRequest.java
+++ b/agent/src/main/java/org/apache/airavata/mft/agent/http/HttpTransferRequest.java
@@ -25,6 +25,7 @@
private MetadataCollector otherMetadataCollector;
private ConnectorParams connectorParams;
private String targetResourcePath;
+ private long createdTime = System.currentTimeMillis();
public Connector getOtherConnector() {
return otherConnector;
@@ -61,4 +62,13 @@
this.connectorParams = connectorParams;
return this;
}
+
+ public long getCreatedTime() {
+ return createdTime;
+ }
+
+ public HttpTransferRequest setCreatedTime(long createdTime) {
+ this.createdTime = createdTime;
+ return this;
+ }
}
diff --git a/agent/src/main/java/org/apache/airavata/mft/agent/http/HttpTransferRequestsStore.java b/agent/src/main/java/org/apache/airavata/mft/agent/http/HttpTransferRequestsStore.java
index fc38701..0b2bfae 100644
--- a/agent/src/main/java/org/apache/airavata/mft/agent/http/HttpTransferRequestsStore.java
+++ b/agent/src/main/java/org/apache/airavata/mft/agent/http/HttpTransferRequestsStore.java
@@ -17,14 +17,44 @@
package org.apache.airavata.mft.agent.http;
-import java.util.HashMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.util.Map;
import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
public class HttpTransferRequestsStore {
- final private Map<String, HttpTransferRequest> downloadRequestStore = new HashMap<>();
- final private Map<String, HttpTransferRequest> uploadRequestStore = new HashMap<>();
+ private static final Logger logger = LoggerFactory.getLogger(HttpTransferRequestsStore.class);
+
+ final private Map<String, HttpTransferRequest> downloadRequestStore = new ConcurrentHashMap<>();
+ final private Map<String, HttpTransferRequest> uploadRequestStore = new ConcurrentHashMap<>();
+
+ final private ScheduledExecutorService monitor = Executors.newSingleThreadScheduledExecutor();
+ private long entryExpiryTimeMS = 300 * 1000;
+
+ public HttpTransferRequestsStore() {
+ monitor.scheduleWithFixedDelay(()-> {
+ logger.debug("Cleaning up the request store..");
+ downloadRequestStore.keySet().forEach(key -> {
+ if ((System.currentTimeMillis() - downloadRequestStore.get(key).getCreatedTime()) > entryExpiryTimeMS) {
+ downloadRequestStore.remove(key);
+ logger.info("Removed url {} from download cache", key);
+ }
+ });
+
+ uploadRequestStore.keySet().forEach(key -> {
+ if ((System.currentTimeMillis() - uploadRequestStore.get(key).getCreatedTime()) > entryExpiryTimeMS) {
+ uploadRequestStore.remove(key);
+ logger.info("Removed url {} from upload cache", key);
+ }
+ });
+ }, 2, 10, TimeUnit.SECONDS);
+ }
public String addDownloadRequest(HttpTransferRequest request) {
String randomUrl = UUID.randomUUID().toString();
diff --git a/agent/src/main/java/org/apache/airavata/mft/agent/rpc/RPCParser.java b/agent/src/main/java/org/apache/airavata/mft/agent/rpc/RPCParser.java
index dbcc48a..fc1bb2b 100644
--- a/agent/src/main/java/org/apache/airavata/mft/agent/rpc/RPCParser.java
+++ b/agent/src/main/java/org/apache/airavata/mft/agent/rpc/RPCParser.java
@@ -51,6 +51,15 @@
@org.springframework.beans.factory.annotation.Value("${secret.service.port}")
private int secretServicePort;
+ @org.springframework.beans.factory.annotation.Value("${agent.host}")
+ private String agentHost;
+
+ @org.springframework.beans.factory.annotation.Value("${agent.http.port}")
+ private Integer agentHttpPort;
+
+ @org.springframework.beans.factory.annotation.Value("${agent.https.enabled}")
+ private boolean agentHttpsEnabled;
+
@Autowired
private HttpTransferRequestsStore httpTransferRequestsStore;
@@ -143,7 +152,7 @@
transferRequest.setOtherMetadataCollector(metadataCollectorOp.get());
transferRequest.setOtherConnector(connectorOp.get());
String url = httpTransferRequestsStore.addDownloadRequest(transferRequest);
- return url;
+ return (agentHttpsEnabled? "https": "http") + "://" + agentHost + ":" + agentHttpPort + "/" + url;
}
break;
}
diff --git a/agent/src/main/resources/application.properties b/agent/src/main/resources/application.properties
index 33d156e..038ded2 100644
--- a/agent/src/main/resources/application.properties
+++ b/agent/src/main/resources/application.properties
@@ -19,7 +19,10 @@
agent.id=agent0
agent.host=localhost
agent.user=dimuthu
+agent.http.port=3333
+agent.https.enabled=false
agent.supported.protocols=SCP,LOCAL,FTP
+
consul.host=localhost
consul.port=8500