This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new 98e07ce [CAMEL-13263] Lenient IPFS connection check on startup
98e07ce is described below
commit 98e07ce51041f37b1fe077e3d6d75adc393865aa
Author: Thomas Diesler <[email protected]>
AuthorDate: Tue Feb 26 14:56:25 2019 +0100
[CAMEL-13263] Lenient IPFS connection check on startup
---
.../apache/camel/component/ipfs/IPFSComponent.java | 16 -------
.../apache/camel/component/ipfs/IPFSEndpoint.java | 53 +++++++++++++++++----
.../camel/component/ipfs/SimpleIPFSTest.java | 54 ++++++++--------------
3 files changed, 64 insertions(+), 59 deletions(-)
diff --git
a/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSComponent.java
b/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSComponent.java
index a7260aa..4d162b1 100644
---
a/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSComponent.java
+++
b/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSComponent.java
@@ -19,9 +19,6 @@ package org.apache.camel.component.ipfs;
import java.net.URI;
import java.util.Map;
-import io.nessus.ipfs.client.DefaultIPFSClient;
-import io.nessus.ipfs.client.IPFSClient;
-
import org.apache.camel.Endpoint;
import org.apache.camel.spi.annotations.Component;
import org.apache.camel.support.DefaultComponent;
@@ -29,8 +26,6 @@ import org.apache.camel.support.DefaultComponent;
@Component("ipfs")
public class IPFSComponent extends DefaultComponent {
- private IPFSClient client;
-
@Override
protected Endpoint createEndpoint(String urispec, String remaining,
Map<String, Object> params) throws Exception {
@@ -55,17 +50,6 @@ public class IPFSComponent extends DefaultComponent {
}
config.setIpfsCmd(cmd);
- client = createClient(config);
-
return new IPFSEndpoint(urispec, this, config);
}
-
- public IPFSClient getIPFSClient() {
- return client;
- }
-
- private synchronized IPFSClient createClient(IPFSConfiguration config) {
- IPFSClient ipfsClient = new DefaultIPFSClient(config.getIpfsHost(),
config.getIpfsPort());
- return ipfsClient.connect();
- }
}
diff --git
a/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSEndpoint.java
b/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSEndpoint.java
index 0298143..87eac75 100644
---
a/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSEndpoint.java
+++
b/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSEndpoint.java
@@ -27,7 +27,9 @@ import java.util.concurrent.TimeoutException;
import java.util.stream.Collectors;
import io.ipfs.multihash.Multihash;
+import io.nessus.ipfs.client.DefaultIPFSClient;
import io.nessus.ipfs.client.IPFSClient;
+import io.nessus.ipfs.client.IPFSException;
import org.apache.camel.Consumer;
import org.apache.camel.Processor;
@@ -37,6 +39,8 @@ import
org.apache.camel.component.ipfs.IPFSConfiguration.IPFSCommand;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriParam;
import org.apache.camel.support.DefaultEndpoint;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* The camel-ipfs component provides access to the Interplanetary File System
@@ -45,16 +49,39 @@ import org.apache.camel.support.DefaultEndpoint;
@UriEndpoint(firstVersion = "2.23.0", scheme = "ipfs", title = "IPFS", syntax
= "ipfs:host:port/cmd", producerOnly = true, label = "file,ipfs")
public class IPFSEndpoint extends DefaultEndpoint {
- static long defaultTimeout = 10000L;
+ public static final long DEFAULT_TIMEOUT = 10000L;
+
+ private static final Logger LOG =
LoggerFactory.getLogger(IPFSComponent.class);
@UriParam
- private final IPFSConfiguration configuration;
+ private final IPFSConfiguration config;
+
+ private IPFSClient client;
- public IPFSEndpoint(String uri, IPFSComponent component, IPFSConfiguration
configuration) {
+ public IPFSEndpoint(String uri, IPFSComponent component, IPFSConfiguration
config) {
super(uri, component);
- this.configuration = configuration;
+ this.config = config;
+ this.client = createClient(config);
+ }
+
+ public IPFSClient getIPFSClient() {
+ return client;
}
+ public void setClient(IPFSClient client) {
+ this.client = client;
+ }
+
+ @Override
+ protected void doStart() throws Exception {
+ super.doStart();
+ try {
+ client.connect();
+ } catch (IPFSException ex) {
+ LOG.warn(ex.getMessage());
+ }
+ }
+
@Override
public IPFSComponent getComponent() {
return (IPFSComponent)super.getComponent();
@@ -76,11 +103,11 @@ public class IPFSEndpoint extends DefaultEndpoint {
}
IPFSConfiguration getConfiguration() {
- return configuration;
+ return config;
}
IPFSCommand getCommand() {
- String cmd = configuration.getIpfsCmd();
+ String cmd = config.getIpfsCmd();
try {
return IPFSCommand.valueOf(cmd);
} catch (IllegalArgumentException ex) {
@@ -101,7 +128,7 @@ public class IPFSEndpoint extends DefaultEndpoint {
Multihash mhash = Multihash.fromBase58(cid);
Future<InputStream> future = ipfs().cat(mhash);
try {
- return future.get(defaultTimeout, TimeUnit.MILLISECONDS);
+ return future.get(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS);
} catch (InterruptedException | ExecutionException ex) {
throw new IOException("Cannot obtain: " + cid, ex);
}
@@ -111,13 +138,21 @@ public class IPFSEndpoint extends DefaultEndpoint {
Multihash mhash = Multihash.fromBase58(cid);
Future<Path> future = ipfs().get(mhash, outdir);
try {
- return future.get(defaultTimeout, TimeUnit.MILLISECONDS);
+ return future.get(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS);
} catch (InterruptedException | ExecutionException ex) {
throw new IOException("Cannot obtain: " + cid, ex);
}
}
private IPFSClient ipfs() {
- return getComponent().getIPFSClient();
+ if (!client.hasConnection()) {
+ client.connect();
+ }
+ return client;
+ }
+
+ private IPFSClient createClient(IPFSConfiguration config) {
+ IPFSClient ipfsClient = new DefaultIPFSClient(config.getIpfsHost(),
config.getIpfsPort());
+ return ipfsClient;
}
}
diff --git
a/components/camel-ipfs/src/test/java/org/apache/camel/component/ipfs/SimpleIPFSTest.java
b/components/camel-ipfs/src/test/java/org/apache/camel/component/ipfs/SimpleIPFSTest.java
index 00bcf6a..f375427 100644
---
a/components/camel-ipfs/src/test/java/org/apache/camel/component/ipfs/SimpleIPFSTest.java
+++
b/components/camel-ipfs/src/test/java/org/apache/camel/component/ipfs/SimpleIPFSTest.java
@@ -25,7 +25,6 @@ import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
-
import io.nessus.ipfs.client.DefaultIPFSClient;
import io.nessus.ipfs.client.IPFSClient;
import io.nessus.ipfs.client.IPFSException;
@@ -37,24 +36,10 @@ import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import org.junit.Assert;
import org.junit.Assume;
-import org.junit.Before;
import org.junit.Test;
public class SimpleIPFSTest {
- IPFSClient ipfs;
-
- @Before
- public void before() {
- ipfs = new DefaultIPFSClient("127.0.0.1", 5001);
- try {
- ipfs.connect();
- } catch (IPFSException ex) {
- // ignore
- }
- Assume.assumeTrue(ipfs.hasConnection());
- }
-
@Test
public void ipfsVersion() throws Exception {
@@ -69,8 +54,8 @@ public class SimpleIPFSTest {
});
camelctx.start();
- assumeIPFS(camelctx);
-
+ assumeIPFSAvailable(camelctx);
+
try {
ProducerTemplate producer = camelctx.createProducerTemplate();
String resA = producer.requestBody("direct:startA", null,
String.class);
@@ -97,12 +82,11 @@ public class SimpleIPFSTest {
}
});
- Path path = Paths.get("src/test/resources/html/index.html");
-
camelctx.start();
- assumeIPFS(camelctx);
-
+ assumeIPFSAvailable(camelctx);
+
try {
+ Path path = Paths.get("src/test/resources/html/index.html");
ProducerTemplate producer = camelctx.createProducerTemplate();
String res = producer.requestBody("direct:start", path,
String.class);
Assert.assertEquals(hash, res);
@@ -125,12 +109,11 @@ public class SimpleIPFSTest {
}
});
- Path path = Paths.get("src/test/resources/html");
-
camelctx.start();
- assumeIPFS(camelctx);
-
+ assumeIPFSAvailable(camelctx);
+
try {
+ Path path = Paths.get("src/test/resources/html");
ProducerTemplate producer = camelctx.createProducerTemplate();
List<String> res = producer.requestBody("direct:start", path,
List.class);
Assert.assertEquals(10, res.size());
@@ -154,8 +137,8 @@ public class SimpleIPFSTest {
});
camelctx.start();
- assumeIPFS(camelctx);
-
+ assumeIPFSAvailable(camelctx);
+
try {
ProducerTemplate producer = camelctx.createProducerTemplate();
InputStream res = producer.requestBody("direct:start", hash,
InputStream.class);
@@ -179,8 +162,8 @@ public class SimpleIPFSTest {
});
camelctx.start();
- assumeIPFS(camelctx);
-
+ assumeIPFSAvailable(camelctx);
+
try {
ProducerTemplate producer = camelctx.createProducerTemplate();
Path res = producer.requestBody("direct:start", hash, Path.class);
@@ -205,8 +188,8 @@ public class SimpleIPFSTest {
});
camelctx.start();
- assumeIPFS(camelctx);
-
+ assumeIPFSAvailable(camelctx);
+
try {
ProducerTemplate producer = camelctx.createProducerTemplate();
Path res = producer.requestBody("direct:start", hash, Path.class);
@@ -224,8 +207,11 @@ public class SimpleIPFSTest {
Assert.assertEquals("The quick brown fox jumps over the lazy dog.",
new String(baos.toByteArray()));
}
- private void assumeIPFS(CamelContext camelctx) {
- IPFSComponent comp = camelctx.getComponent("ipfs",
IPFSComponent.class);
- Assume.assumeTrue(comp.getIPFSClient().hasConnection());
+ private void assumeIPFSAvailable(CamelContext camelctx) throws Exception {
+ IPFSEndpoint ipfsEp = camelctx.getEndpoints().stream()
+ .filter(ep -> ep instanceof IPFSEndpoint)
+ .map(ep -> (IPFSEndpoint)ep)
+ .findFirst().get();
+ Assume.assumeTrue(ipfsEp.getIPFSClient().hasConnection());
}
}