aboutsummaryrefslogtreecommitdiff
path: root/other/java
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2021-08-23 12:19:02 -0700
committerChris Lu <chris.lu@gmail.com>2021-08-23 12:19:02 -0700
commit2ead7adaff5e4136df870e357ec1246b71f86f87 (patch)
tree08db26452f24629ee1e76baf9072188c9be9cf68 /other/java
parent00c4e06caad6f5960c3acfdd07106e2d8e3577c5 (diff)
downloadseaweedfs-2ead7adaff5e4136df870e357ec1246b71f86f87.tar.xz
seaweedfs-2ead7adaff5e4136df870e357ec1246b71f86f87.zip
Java: FilerProto.Entry can read size via attributes
Diffstat (limited to 'other/java')
-rw-r--r--other/java/client/src/main/java/seaweedfs/client/FilerClient.java49
1 files changed, 34 insertions, 15 deletions
diff --git a/other/java/client/src/main/java/seaweedfs/client/FilerClient.java b/other/java/client/src/main/java/seaweedfs/client/FilerClient.java
index 0a8356258..dae7753a4 100644
--- a/other/java/client/src/main/java/seaweedfs/client/FilerClient.java
+++ b/other/java/client/src/main/java/seaweedfs/client/FilerClient.java
@@ -59,24 +59,43 @@ public class FilerClient extends FilerGrpcClient {
public static FilerProto.Entry afterEntryDeserialization(FilerProto.Entry entry) {
if (entry.getChunksList().size() <= 0) {
+ if (entry.getContent().isEmpty()) {
+ return entry;
+ } else {
+ if (entry.getAttributes().getFileSize() <= 0) {
+ FilerProto.Entry.Builder entryBuilder = entry.toBuilder();
+ FilerProto.FuseAttributes.Builder attrBuilder = entry.getAttributes().toBuilder();
+ attrBuilder.setFileSize(entry.getContent().size());
+ entryBuilder.setAttributes(attrBuilder);
+ return entryBuilder.build();
+ }
+ }
return entry;
- }
- String fileId = entry.getChunks(0).getFileId();
- if (fileId != null && fileId.length() != 0) {
- return entry;
- }
- FilerProto.Entry.Builder entryBuilder = entry.toBuilder();
- entryBuilder.clearChunks();
- for (FilerProto.FileChunk chunk : entry.getChunksList()) {
- FilerProto.FileChunk.Builder chunkBuilder = chunk.toBuilder();
- chunkBuilder.setFileId(toFileId(chunk.getFid()));
- String sourceFileId = toFileId(chunk.getSourceFid());
- if (sourceFileId != null) {
- chunkBuilder.setSourceFileId(sourceFileId);
+ } else {
+ String fileId = entry.getChunks(0).getFileId();
+ if (fileId != null && fileId.length() != 0) {
+ return entry;
+ }
+ FilerProto.Entry.Builder entryBuilder = entry.toBuilder();
+ entryBuilder.clearChunks();
+ long fileSize = 0;
+ for (FilerProto.FileChunk chunk : entry.getChunksList()) {
+ fileSize = Math.max(fileSize, chunk.getOffset()+chunk.getSize());
+ FilerProto.FileChunk.Builder chunkBuilder = chunk.toBuilder();
+ chunkBuilder.setFileId(toFileId(chunk.getFid()));
+ String sourceFileId = toFileId(chunk.getSourceFid());
+ if (sourceFileId != null) {
+ chunkBuilder.setSourceFileId(sourceFileId);
+ }
+ entryBuilder.addChunks(chunkBuilder);
+ }
+ if (entry.getAttributes().getFileSize() <= 0) {
+ FilerProto.FuseAttributes.Builder attrBuilder = entry.getAttributes().toBuilder();
+ attrBuilder.setFileSize(fileSize);
+ entryBuilder.setAttributes(attrBuilder);
}
- entryBuilder.addChunks(chunkBuilder);
+ return entryBuilder.build();
}
- return entryBuilder.build();
}
public boolean mkdirs(String path, int mode) {