aboutsummaryrefslogtreecommitdiff
path: root/other/java/client
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2020-12-02 23:45:39 -0800
committerChris Lu <chris.lu@gmail.com>2020-12-02 23:45:39 -0800
commit3857f9c8404c6f251135268e42c79bb83c13b2b0 (patch)
treec656c40a9dc9ec47b05eadb3ed0f90005bfd9ef6 /other/java/client
parent003b6245e701bfb6b7f118552a2b4e82d1d7de67 (diff)
downloadseaweedfs-3857f9c8404c6f251135268e42c79bb83c13b2b0.tar.xz
seaweedfs-3857f9c8404c6f251135268e42c79bb83c13b2b0.zip
Hadoop: switch to ByteBuffer
fix https://github.com/chrislusf/seaweedfs/issues/1645
Diffstat (limited to 'other/java/client')
-rw-r--r--other/java/client/pom_debug.xml5
-rw-r--r--other/java/client/src/main/java/seaweedfs/client/SeaweedRead.java20
2 files changed, 16 insertions, 9 deletions
diff --git a/other/java/client/pom_debug.xml b/other/java/client/pom_debug.xml
index acdf621a5..078778b6c 100644
--- a/other/java/client/pom_debug.xml
+++ b/other/java/client/pom_debug.xml
@@ -68,6 +68,11 @@
<version>4.13.1</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>javax.annotation</groupId>
+ <artifactId>javax.annotation-api</artifactId>
+ <version>1.3.2</version>
+ </dependency>
</dependencies>
<build>
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 2b530d2dd..c45987bed 100644
--- a/other/java/client/src/main/java/seaweedfs/client/SeaweedRead.java
+++ b/other/java/client/src/main/java/seaweedfs/client/SeaweedRead.java
@@ -12,6 +12,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
+import java.nio.ByteBuffer;
import java.util.*;
public class SeaweedRead {
@@ -23,10 +24,9 @@ public class SeaweedRead {
// returns bytesRead
public static long read(FilerGrpcClient filerGrpcClient, List<VisibleInterval> visibleIntervals,
- final long position, final byte[] buffer, final int bufferOffset,
- final int bufferLength, final long fileSize) throws IOException {
+ final long position, final ByteBuffer buf, final long fileSize) throws IOException {
- List<ChunkView> chunkViews = viewFromVisibles(visibleIntervals, position, bufferLength);
+ List<ChunkView> chunkViews = viewFromVisibles(visibleIntervals, position, buf.remaining());
Map<String, FilerProto.Locations> knownLocations = new HashMap<>();
@@ -59,6 +59,7 @@ public class SeaweedRead {
if (startOffset < chunkView.logicOffset) {
long gap = chunkView.logicOffset - startOffset;
LOG.debug("zero [{},{})", startOffset, startOffset + gap);
+ buf.position(buf.position()+ (int)gap);
readCount += gap;
startOffset += gap;
}
@@ -70,7 +71,7 @@ public class SeaweedRead {
return 0;
}
- int len = readChunkView(startOffset, buffer, bufferOffset + readCount, chunkView, locations);
+ int len = readChunkView(startOffset, buf, chunkView, locations);
LOG.debug("read [{},{}) {} size {}", startOffset, startOffset + len, chunkView.fileId, chunkView.size);
@@ -79,11 +80,12 @@ public class SeaweedRead {
}
- long limit = Math.min(bufferOffset + bufferLength, fileSize);
+ long limit = Math.min(buf.limit(), fileSize);
if (startOffset < limit) {
long gap = limit - startOffset;
LOG.debug("zero2 [{},{})", startOffset, startOffset + gap);
+ buf.position(buf.position()+ (int)gap);
readCount += gap;
startOffset += gap;
}
@@ -91,7 +93,7 @@ public class SeaweedRead {
return readCount;
}
- private static int readChunkView(long startOffset, byte[] buffer, long bufOffset, ChunkView chunkView, FilerProto.Locations locations) throws IOException {
+ private static int readChunkView(long startOffset, ByteBuffer buf, ChunkView chunkView, FilerProto.Locations locations) throws IOException {
byte[] chunkData = chunkCache.getChunk(chunkView.fileId);
@@ -101,9 +103,9 @@ public class SeaweedRead {
}
int len = (int) chunkView.size;
- LOG.debug("readChunkView fid:{} chunkData.length:{} chunkView.offset:{} chunkView[{};{}) buf[{},{})/{} startOffset:{}",
- chunkView.fileId, chunkData.length, chunkView.offset, chunkView.logicOffset, chunkView.logicOffset + chunkView.size, bufOffset, bufOffset + len, buffer.length, startOffset);
- System.arraycopy(chunkData, (int) (startOffset - chunkView.logicOffset + chunkView.offset), buffer, (int) bufOffset, len);
+ LOG.debug("readChunkView fid:{} chunkData.length:{} chunkView.offset:{} chunkView[{};{}) startOffset:{}",
+ chunkView.fileId, chunkData.length, chunkView.offset, chunkView.logicOffset, chunkView.logicOffset + chunkView.size, startOffset);
+ buf.put(chunkData, (int) (startOffset - chunkView.logicOffset + chunkView.offset), len);
return len;
}