Java: FilerProto.Entry can read size via attributes

This commit is contained in:
Chris Lu 2021-08-23 12:19:02 -07:00
parent 00c4e06caa
commit 2ead7adaff

View File

@ -59,24 +59,43 @@ public class FilerClient extends FilerGrpcClient {
public static FilerProto.Entry afterEntryDeserialization(FilerProto.Entry entry) { public static FilerProto.Entry afterEntryDeserialization(FilerProto.Entry entry) {
if (entry.getChunksList().size() <= 0) { if (entry.getChunksList().size() <= 0) {
return entry; if (entry.getContent().isEmpty()) {
} return entry;
String fileId = entry.getChunks(0).getFileId(); } else {
if (fileId != null && fileId.length() != 0) { if (entry.getAttributes().getFileSize() <= 0) {
return entry; FilerProto.Entry.Builder entryBuilder = entry.toBuilder();
} FilerProto.FuseAttributes.Builder attrBuilder = entry.getAttributes().toBuilder();
FilerProto.Entry.Builder entryBuilder = entry.toBuilder(); attrBuilder.setFileSize(entry.getContent().size());
entryBuilder.clearChunks(); entryBuilder.setAttributes(attrBuilder);
for (FilerProto.FileChunk chunk : entry.getChunksList()) { return entryBuilder.build();
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); return entry;
} 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);
}
return entryBuilder.build();
} }
return entryBuilder.build();
} }
public boolean mkdirs(String path, int mode) { public boolean mkdirs(String path, int mode) {