Browse Source

add format ExtendedMap key in Java FilerClient

pull/5490/head
stillmoon 9 months ago
parent
commit
ccae573cb1
  1. 50
      other/java/client/src/main/java/seaweedfs/client/ExtendedFormatUtil.java
  2. 3
      other/java/client/src/main/java/seaweedfs/client/FilerClient.java
  3. 1
      other/java/client/src/main/java/seaweedfs/client/SeaweedWrite.java

50
other/java/client/src/main/java/seaweedfs/client/ExtendedFormatUtil.java

@ -0,0 +1,50 @@
package seaweedfs.client;
import com.google.protobuf.ByteString;
import java.util.HashMap;
import java.util.Map;
/**
* A tool class for uniformly formatting the keys of Entry's ExtendedMap <br>@date 2024/4/9 10:44<br>
* Process "Seaweed-" prefix, consistent with http upload file situation
* <br>
*
* <b>Premise:</b>
* <br>
* curl -H "Seaweed-name1: value1" -F file=to/path "http://localhost:8888/"
* <br>
* When uploading files using Http, you must add the "Seaweed-" prefix to the key of Extended. As shown above,
* the final storage result is Seaweed-name1, The name of key that actual users understand should be name1
* <br>
* The key of Extended is not forced to add the "Seaweed-" prefix when uploading files using FilerClient.
* This causes inconsistency in the key of Extended format of the two file upload methods.
* <br>
* <b>solution:</b>
* When storing Entry, add the "Seaweed-" prefix to the Extended key,
* and remove the "Seaweed-" prefix when reading Entry information.
* Users will not be aware of the "Seaweed-" prefix when using it,
* and the format of the Extended key in the two upload methods will be unified.
*
* @author stillmoon
*/
public class ExtendedFormatUtil {
public static void addKeyPrefix(FilerProto.Entry.Builder entry) {
Map<String, ByteString> extendedMap = new HashMap<>(entry.getExtendedCount());
entry.getExtendedMap().forEach((key, val) -> {
extendedMap.put("Seaweed-" + key, val);
});
entry.clearExtended();
entry.putAllExtended(extendedMap);
}
public static void removeKeyPrefix(FilerProto.Entry.Builder entry) {
Map<String, ByteString> extendedMap = new HashMap<>(entry.getExtendedCount());
entry.getExtendedMap().forEach((key, val) -> {
extendedMap.put(key.replace("Seaweed-", ""), val);
});
entry.clearExtended();
entry.putAllExtended(extendedMap);
}
}

3
other/java/client/src/main/java/seaweedfs/client/FilerClient.java

@ -61,6 +61,9 @@ public class FilerClient extends FilerGrpcClient {
}
public static FilerProto.Entry afterEntryDeserialization(FilerProto.Entry entry) {
FilerProto.Entry.Builder builder = entry.toBuilder();
ExtendedFormatUtil.removeKeyPrefix(builder);
entry = builder.build();
if (entry.getChunksList().size() <= 0) {
if (entry.getContent().isEmpty()) {
return entry;

1
other/java/client/src/main/java/seaweedfs/client/SeaweedWrite.java

@ -113,6 +113,7 @@ public class SeaweedWrite {
List<FilerProto.FileChunk> chunks = FileChunkManifest.maybeManifestize(filerClient, entry.getChunksList(), parentDirectory);
entry.clearChunks();
entry.addAllChunks(chunks);
ExtendedFormatUtil.addKeyPrefix(entry);
filerClient.getBlockingStub().createEntry(
FilerProto.CreateEntryRequest.newBuilder()
.setDirectory(parentDirectory)

Loading…
Cancel
Save