diff --git a/README.md b/README.md
index 078cdca..691c07e 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,26 @@
# SeaweedFS Client For Java
-[](https://search.maven.org/#artifactdetails%7Corg.lokra.seaweedfs%7Cseaweedfs-client%7C0.7.3.RELEASE%7Cjar)
-[](https://github.com/lokra-platform/seaweedfs-client/releases/tag/0.7.3.RELEASE)
+[](https://search.maven.org/#artifactdetails%7Corg.lokra.seaweedfs%7Cseaweedfs-client%7C0.7.3.RELEASE%7Cjar)
+[](https://github.com/lokra-platform/seaweedfs-client/releases/tag/0.7.3.RELEASE)
[](http://opensource.org/licenses/Apache)
+# Note:
+Forked from https://github.com/Shuyun123/seaweedfs-java-client.
+
+Currently only support the old version of SeaweedFS.
# Quick Start
+##### Add dependency
+```xml
+
+ io.github.doraemonandrat
+ seaweedfs-java-client
+ 0.0.4.1.RELEASE
+
+```
+
##### Create a connection manager
```java
FileSource fileSource = new FileSource();
diff --git a/pom.xml b/pom.xml
index 4464a0e..124e2a8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,141 +1,230 @@
-
- 4.0.0
+
+ 4.0.0
- net.anumbrella.seaweedfs
- seaweedfs-java-client
- 0.0.3.RELEASE
- jar
+ io.github.doraemonandrat
+ seaweedfs-java-client
+ 0.0.4.1.RELEASE
+ jar
- seaweedfs-java-client
- http://maven.apache.org
+ seaweedfs-java-client
+ http://maven.apache.org
-
- org.sonatype.oss
- oss-parent
- 7
-
+
+ org.sonatype.oss
+ oss-parent
+ 7
+
-
-
- The Apache Software License, Version 2.0
- http://www.apache.org/licenses/LICENSE-2.0.txt
- repo
-
-
+
+
+ The Apache Software License, Version 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.txt
+ repo
+
+
-
- https://github.com/Shuyun123/seaweedfs-java-client
- git@github.com:Shuyun123/seaweedfs-java-client.git
- http://blog.anumbrella.net
-
+
+ https://github.com/DoraemonAndRat/seaweedfs-java-client/tree/master
+ git@github.com:DoraemonAndRat/seaweedfs-java-client.git
+
-
-
- anumbrella
- 1197173684@qq.com
- http://blog.anumbrella.net
-
-
+
+
+ anumbrella
+ 1197173684@qq.com
+ http://blog.anumbrella.net
+ https://github.com/Shuyun123/seaweedfs-java-client
+
+ founder
+
+
+
+ DoraemonAndRat
+ https://github.com/DoraemonAndRat
+
+
-
- UTF-8
- 2.10.3
- 4.5.10
- 3.1.1
- 4.3.1.RELEASE
- 4.11
-
+
+ UTF-8
+ 2.10.3
+ 4.5.10
+ 3.1.1
+ 4.3.1.RELEASE
+ 4.11
+
-
-
- commons-io
- commons-io
- 2.6
-
-
- com.google.code.gson
- gson
- 2.8.6
-
+
+
+ commons-io
+ commons-io
+ 2.6
+
+
+ com.google.code.gson
+ gson
+ 2.8.6
+
-
- com.fasterxml.jackson.core
- jackson-databind
- ${jackson.version}
-
-
- com.fasterxml.jackson.core
- jackson-core
- ${jackson.version}
-
-
- org.apache.httpcomponents
- httpclient
- ${httpclient.version}
-
-
- org.apache.httpcomponents
- httpmime
- ${httpclient.version}
-
-
- org.apache.httpcomponents
- httpclient-cache
- ${httpclient.version}
-
-
- org.ehcache
- ehcache
- 3.8.1
-
-
- org.springframework
- spring-beans
- 4.3.26.RELEASE
-
-
- junit
- junit
- ${junit.version}
-
-
- org.apache.commons
- commons-lang3
- 3.9
-
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ ${jackson.version}
+
+
+ org.apache.httpcomponents
+ httpclient
+ ${httpclient.version}
+
+
+ org.apache.httpcomponents
+ httpmime
+ ${httpclient.version}
+
+
+ org.apache.httpcomponents
+ httpclient-cache
+ ${httpclient.version}
+
+
+ org.ehcache
+ ehcache
+ 3.8.1
+
+
+ org.springframework
+ spring-beans
+ 4.3.26.RELEASE
+
+
+ junit
+ junit
+ ${junit.version}
+
+
+ org.apache.commons
+ commons-lang3
+ 3.9
+
-
- com.google.guava
- guava
- 28.2-jre
-
+
+ com.google.guava
+ guava
+ 28.2-jre
+
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.6.2
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-source-plugin
- 3.0.1
-
-
- attach-sources
-
- jar
-
-
-
-
-
-
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.6.2
+
+ 1.8
+ 1.8
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 3.0.1
+
+
+ attach-sources
+
+ jar
+
+
+
+
+
+
+ org.codehaus.mojo
+ flatten-maven-plugin
+ 1.5.0
+
+ true
+ oss
+
+
+
+ flatten
+ process-resources
+
+ flatten
+
+
+
+ flatten.clean
+ clean
+
+ clean
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 3.1.0
+ true
+
+
+ bundle-sources
+ package
+
+ jar
+
+
+
+
+ 1024
+ UTF-8
+ protected
+ true
+
+
+ false
+ none
+
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ 1.6
+
+
+ D:\Program Files (x86)\GnuPG\bin\gpg.exe
+
+
+
+ sign-artifacts
+ verify
+
+ sign
+
+
+
+
+
+
+ org.sonatype.central
+ central-publishing-maven-plugin
+ 0.4.0
+ true
+
+ central
+ true
+ published
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/net/anumbrella/seaweedfs/core/Connection.java b/src/main/java/net/anumbrella/seaweedfs/core/Connection.java
index eb98be5..c252ac0 100644
--- a/src/main/java/net/anumbrella/seaweedfs/core/Connection.java
+++ b/src/main/java/net/anumbrella/seaweedfs/core/Connection.java
@@ -50,6 +50,8 @@ public class Connection {
private String leaderUrl;
private long statusExpiry;
private int connectionTimeout;
+ private int readTimeout;
+ private int connectionRequestTimeout;
private boolean connectionClose = true;
private boolean enableFileStreamCache;
private int fileStreamCacheEntries;
@@ -66,15 +68,18 @@ public class Connection {
private PoolingHttpClientConnectionManager clientConnectionManager;
private IdleConnectionMonitorThread idleConnectionMonitorThread;
private CloseableHttpClient httpClient;
+ private CloseableHttpClient statusHttpClient;
private CacheManager cacheManager = null;
- public Connection(String leaderUrl, int connectionTimeout, long statusExpiry, long idleConnectionExpiry,
+ public Connection(String leaderUrl, int connectionTimeout,int readTimeout,int connectionRequestTimeout, long statusExpiry, long idleConnectionExpiry,
int maxConnection, int maxConnectionsPreRoute, boolean enableLookupVolumeCache,
long lookupVolumeCacheExpiry, int lookupVolumeCacheEntries, boolean enableFileStreamCache,
int fileStreamCacheEntries, long fileStreamCacheSize, HttpCacheStorage fileStreamCacheStorage) {
this.leaderUrl = leaderUrl;
this.statusExpiry = statusExpiry;
this.connectionTimeout = connectionTimeout;
+ this.readTimeout = readTimeout;
+ this.connectionRequestTimeout=connectionRequestTimeout;
this.idleConnectionExpiry = idleConnectionExpiry;
this.enableLookupVolumeCache = enableLookupVolumeCache;
this.lookupVolumeCacheExpiry = lookupVolumeCacheExpiry;
@@ -95,9 +100,10 @@ public Connection(String leaderUrl, int connectionTimeout, long statusExpiry, lo
*/
public void startup() {
final RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(this.connectionTimeout)
- .setSocketTimeout(connectionTimeout)
+ .setSocketTimeout(readTimeout)
// 一个connection可以有多个request
- .setConnectionRequestTimeout(connectionTimeout).build();
+ .setConnectionRequestTimeout(connectionRequestTimeout)
+ .setConnectTimeout(connectionTimeout).build();
// Create socket configuration
SocketConfig socketConfig = SocketConfig.custom().setTcpNoDelay(true).setSoKeepAlive(true)
.setSoTimeout(connectionTimeout).build();
@@ -119,6 +125,8 @@ public void startup() {
this.httpClient = HttpClients.custom().setConnectionManager(this.clientConnectionManager)
.setDefaultRequestConfig(requestConfig).build();
}
+ this.statusHttpClient = HttpClients.custom().setConnectionManager(this.clientConnectionManager)
+ .setDefaultRequestConfig(requestConfig).build();
initCache();
this.pollClusterStatusThread.updateSystemStatus(true, true);
this.pollClusterStatusThread.start();
@@ -260,7 +268,6 @@ void updateSystemStatus(boolean immediate, boolean disposable) {
}
}
} catch (IOException e) {
- e.printStackTrace();
log.error("unable connect to the seaweedfs core leader");
}
@@ -314,7 +321,7 @@ private String findLeaderUriByPeers(List peers) throws IOException
if (responseMap.get("Leader") != null) {
result = ConnectionUtil.convertUrlWithScheme((String) responseMap.get("Leader"));
- if (ConnectionUtil.checkUriAlive(this.httpClient, result))
+ if (ConnectionUtil.checkUriAlive(this.statusHttpClient, result))
return result;
}
}
@@ -334,6 +341,9 @@ private SystemClusterStatus fetchSystemClusterStatus(String masterUrl) throws IO
ArrayList peers;
final HttpGet request = new HttpGet(masterUrl + RequestPathStrategy.checkClusterStatus);
final JsonResponse jsonResponse = fetchJsonResultByRequest(request);
+ if(jsonResponse==null){
+ throw new IOException("read cluster status failed");
+ }
Map map = objectMapper.readValue(jsonResponse.json, Map.class);
// 不应该直接指定leader,应该先判断是否leader
@@ -474,7 +484,7 @@ public JsonResponse fetchJsonResultByRequest(HttpRequestBase request) throws IOE
JsonResponse jsonResponse = null;
try {
- response = httpClient.execute(request, HttpClientContext.create());
+ response = statusHttpClient.execute(request, HttpClientContext.create());
HttpEntity entity = response.getEntity();
if (entity != null) {
jsonResponse = new JsonResponse(EntityUtils.toString(entity), response.getStatusLine().getStatusCode());
diff --git a/src/main/java/net/anumbrella/seaweedfs/core/ConnectionProperties.java b/src/main/java/net/anumbrella/seaweedfs/core/ConnectionProperties.java
index 4210943..bc1cd6d 100644
--- a/src/main/java/net/anumbrella/seaweedfs/core/ConnectionProperties.java
+++ b/src/main/java/net/anumbrella/seaweedfs/core/ConnectionProperties.java
@@ -43,6 +43,8 @@ public class ConnectionProperties {
private int fileStreamCacheEntries;
private long fileStreamCacheSize;
private HttpCacheStorage fileStreamCacheStorage;
+ private int readTimeout;
+ private int connectionRequestTimeout;
private ConnectionProperties(Builder builder) {
this.host = builder.host;
@@ -59,6 +61,8 @@ private ConnectionProperties(Builder builder) {
this.fileStreamCacheEntries = builder.fileStreamCacheEntries;
this.fileStreamCacheSize = builder.fileStreamCacheSize;
this.fileStreamCacheStorage = builder.fileStreamCacheStorage;
+ this.readTimeout = builder.readTimeout;
+ this.connectionRequestTimeout = builder.connectionRequestTimeout;
}
public String getHost() {
@@ -117,6 +121,14 @@ public HttpCacheStorage getFileStreamCacheStorage() {
return fileStreamCacheStorage;
}
+ public int getReadTimeout() {
+ return readTimeout;
+ }
+
+ public int getConnectionRequestTimeout() {
+ return connectionRequestTimeout;
+ }
+
public static class Builder {
/**
* seaweedfs master地址,默认localhost
@@ -158,6 +170,9 @@ public static class Builder {
private long fileStreamCacheSize = 8192;
private HttpCacheStorage fileStreamCacheStorage = null;
+ private int readTimeout=-1;
+ private int connectionRequestTimeout=-1;
+
public Builder() {
}
@@ -175,6 +190,14 @@ public Builder connectionTimeout(int connectionTimeout) {
this.connectionTimeout = connectionTimeout;
return this;
}
+ public Builder readTimeout(int readTimeout) {
+ this.readTimeout = readTimeout;
+ return this;
+ }
+ public Builder connectionRequestTimeout(int connectionRequestTimeout) {
+ this.connectionRequestTimeout = connectionRequestTimeout;
+ return this;
+ }
public Builder statusExpiry(int statusExpiry) {
this.statusExpiry = statusExpiry;
diff --git a/src/main/java/net/anumbrella/seaweedfs/core/FileSource.java b/src/main/java/net/anumbrella/seaweedfs/core/FileSource.java
index d4877d7..332c682 100644
--- a/src/main/java/net/anumbrella/seaweedfs/core/FileSource.java
+++ b/src/main/java/net/anumbrella/seaweedfs/core/FileSource.java
@@ -44,6 +44,8 @@ public void startup() {
if (this.connection == null) {
this.connection = new Connection(ConnectionUtil.convertUrlWithScheme(serverUrl),
this.connectionProperties.getConnectionTimeout(),
+ this.connectionProperties.getReadTimeout(),
+ this.connectionProperties.getConnectionRequestTimeout(),
this.connectionProperties.getStatusExpiry(),
this.connectionProperties.getIdleConnectionExpiry(),
this.connectionProperties.getMaxConnection(),