From 35ba277a976b583f486e4beb0a1dde3ccff5c433 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Fri, 5 Feb 2021 22:43:56 -0800 Subject: [PATCH] Java: fix filerProxy mode --- .../seaweedfs/client/FilerGrpcClient.java | 28 +++++++++++++------ .../java/seaweedfs/client/SeaweedRead.java | 8 +----- .../java/seaweedfs/client/SeaweedWrite.java | 8 +----- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/other/java/client/src/main/java/seaweedfs/client/FilerGrpcClient.java b/other/java/client/src/main/java/seaweedfs/client/FilerGrpcClient.java index 8a37827f1..6c57e2e0d 100644 --- a/other/java/client/src/main/java/seaweedfs/client/FilerGrpcClient.java +++ b/other/java/client/src/main/java/seaweedfs/client/FilerGrpcClient.java @@ -9,16 +9,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.net.ssl.SSLException; -import java.util.Map; import java.util.HashMap; +import java.util.Map; import java.util.concurrent.TimeUnit; public class FilerGrpcClient { - public final int VOLUME_SERVER_ACCESS_DIRECT = 0; - public final int VOLUME_SERVER_ACCESS_PUBLIC_URL = 1; - public final int VOLUME_SERVER_ACCESS_FILER_PROXY = 2; - private static final Logger logger = LoggerFactory.getLogger(FilerGrpcClient.class); static SslContext sslContext; @@ -30,6 +26,9 @@ public class FilerGrpcClient { } } + public final int VOLUME_SERVER_ACCESS_DIRECT = 0; + public final int VOLUME_SERVER_ACCESS_PUBLIC_URL = 1; + public final int VOLUME_SERVER_ACCESS_FILER_PROXY = 2; public final Map vidLocations = new HashMap<>(); private final ManagedChannel channel; private final SeaweedFilerGrpc.SeaweedFilerBlockingStub blockingStub; @@ -55,7 +54,7 @@ public class FilerGrpcClient { .negotiationType(NegotiationType.TLS) .sslContext(sslContext)); - filerAddress = String.format("%s:%d", host, grpcPort-10000); + filerAddress = String.format("%s:%d", host, grpcPort - 10000); FilerProto.GetFilerConfigurationResponse filerConfigurationResponse = this.getBlockingStub().getFilerConfiguration( @@ -104,23 +103,36 @@ public class FilerGrpcClient { public void setAccessVolumeServerDirectly() { this.volumeServerAccess = VOLUME_SERVER_ACCESS_DIRECT; } + public boolean isAccessVolumeServerDirectly() { return this.volumeServerAccess == VOLUME_SERVER_ACCESS_DIRECT; } + public void setAccessVolumeServerByPublicUrl() { this.volumeServerAccess = VOLUME_SERVER_ACCESS_PUBLIC_URL; } + public boolean isAccessVolumeServerByPublicUrl() { return this.volumeServerAccess == VOLUME_SERVER_ACCESS_PUBLIC_URL; } + public void setAccessVolumeServerByFilerProxy() { this.volumeServerAccess = VOLUME_SERVER_ACCESS_FILER_PROXY; } + public boolean isAccessVolumeServerByFilerProxy() { return this.volumeServerAccess == VOLUME_SERVER_ACCESS_FILER_PROXY; } - public String getFilerAddress() { - return this.filerAddress; + + public String getChunkUrl(String chunkId, String url, String publicUrl) { + switch (this.volumeServerAccess) { + case VOLUME_SERVER_ACCESS_PUBLIC_URL: + return String.format("http://%s/%s", publicUrl, chunkId); + case VOLUME_SERVER_ACCESS_FILER_PROXY: + return String.format("http://%s/?proxyChunkId=%s", this.filerAddress, chunkId); + default: + return String.format("http://%s/%s", url, chunkId); + } } } diff --git a/other/java/client/src/main/java/seaweedfs/client/SeaweedRead.java b/other/java/client/src/main/java/seaweedfs/client/SeaweedRead.java index a70553762..e55c5b7aa 100644 --- a/other/java/client/src/main/java/seaweedfs/client/SeaweedRead.java +++ b/other/java/client/src/main/java/seaweedfs/client/SeaweedRead.java @@ -116,13 +116,7 @@ public class SeaweedRead { IOException lastException = null; for (long waitTime = 1000L; waitTime < 10 * 1000; waitTime += waitTime / 2) { for (FilerProto.Location location : locations.getLocationsList()) { - String host = location.getUrl(); - if (filerGrpcClient.isAccessVolumeServerByPublicUrl()) { - host = location.getPublicUrl(); - } else if (filerGrpcClient.isAccessVolumeServerByFilerProxy()) { - host = filerGrpcClient.getFilerAddress(); - } - String url = String.format("http://%s/%s", host, chunkView.fileId); + String url = filerGrpcClient.getChunkUrl(chunkView.fileId, location.getUrl(), location.getPublicUrl()); try { data = doFetchOneFullChunkData(chunkView, url); lastException = null; diff --git a/other/java/client/src/main/java/seaweedfs/client/SeaweedWrite.java b/other/java/client/src/main/java/seaweedfs/client/SeaweedWrite.java index 3cc11e21c..db3cc3931 100644 --- a/other/java/client/src/main/java/seaweedfs/client/SeaweedWrite.java +++ b/other/java/client/src/main/java/seaweedfs/client/SeaweedWrite.java @@ -53,13 +53,7 @@ public class SeaweedWrite { String fileId = response.getFileId(); String auth = response.getAuth(); - String host = response.getUrl(); - if (filerGrpcClient.isAccessVolumeServerByPublicUrl()) { - host = response.getPublicUrl(); - } else if (filerGrpcClient.isAccessVolumeServerByFilerProxy()) { - host = filerGrpcClient.getFilerAddress(); - } - String targetUrl = String.format("http://%s/%s", host, fileId); + String targetUrl = filerGrpcClient.getChunkUrl(fileId, response.getUrl(), response.getPublicUrl()); ByteString cipherKeyString = com.google.protobuf.ByteString.EMPTY; byte[] cipherKey = null;