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 -[![Maven Central](http://img.shields.io/badge/maven_central-0.0.2.RELEASE-brightgreen.svg)](https://search.maven.org/#artifactdetails%7Corg.lokra.seaweedfs%7Cseaweedfs-client%7C0.7.3.RELEASE%7Cjar) -[![GitHub Release](http://img.shields.io/badge/Release-0.0.2.RELEASE-brightgreen.svg)](https://github.com/lokra-platform/seaweedfs-client/releases/tag/0.7.3.RELEASE) +[![Maven Central](http://img.shields.io/badge/maven_central-0.0.4.1.RELEASE-brightgreen.svg)](https://search.maven.org/#artifactdetails%7Corg.lokra.seaweedfs%7Cseaweedfs-client%7C0.7.3.RELEASE%7Cjar) +[![GitHub Release](http://img.shields.io/badge/Release-0.0.4.1.RELEASE-brightgreen.svg)](https://github.com/lokra-platform/seaweedfs-client/releases/tag/0.7.3.RELEASE) [![Apache license](https://img.shields.io/badge/license-Apache-blue.svg)](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(),