diff options
| author | Chris Lu <chris.lu@gmail.com> | 2021-08-23 12:19:02 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2021-08-23 12:19:02 -0700 |
| commit | 2ead7adaff5e4136df870e357ec1246b71f86f87 (patch) | |
| tree | 08db26452f24629ee1e76baf9072188c9be9cf68 /other/java/client/src | |
| parent | 00c4e06caad6f5960c3acfdd07106e2d8e3577c5 (diff) | |
| download | seaweedfs-2ead7adaff5e4136df870e357ec1246b71f86f87.tar.xz seaweedfs-2ead7adaff5e4136df870e357ec1246b71f86f87.zip | |
Java: FilerProto.Entry can read size via attributes
Diffstat (limited to 'other/java/client/src')
| -rw-r--r-- | other/java/client/src/main/java/seaweedfs/client/FilerClient.java | 49 |
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) { |
