aboutsummaryrefslogtreecommitdiff
path: root/other
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2020-07-22 22:54:06 -0700
committerChris Lu <chris.lu@gmail.com>2020-07-22 22:54:06 -0700
commit648ef566c42a90f961472a57efe4a1f1d4978b13 (patch)
tree6e3b6b436efe06d9f58dc32783da147ecaf496c2 /other
parent6839f96c0cd417a2f05d5ce999030c5e314dce84 (diff)
downloadseaweedfs-648ef566c42a90f961472a57efe4a1f1d4978b13.tar.xz
seaweedfs-648ef566c42a90f961472a57efe4a1f1d4978b13.zip
HCFS: avoid lock bottleneck
Diffstat (limited to 'other')
-rw-r--r--other/java/client/src/main/java/seaweedfs/client/SeaweedWrite.java14
1 files changed, 10 insertions, 4 deletions
diff --git a/other/java/client/src/main/java/seaweedfs/client/SeaweedWrite.java b/other/java/client/src/main/java/seaweedfs/client/SeaweedWrite.java
index fd54453a1..5f4d888bd 100644
--- a/other/java/client/src/main/java/seaweedfs/client/SeaweedWrite.java
+++ b/other/java/client/src/main/java/seaweedfs/client/SeaweedWrite.java
@@ -6,6 +6,8 @@ import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -15,6 +17,8 @@ import java.util.List;
public class SeaweedWrite {
+ private static final Logger LOG = LoggerFactory.getLogger(SeaweedWrite.class);
+
private static final SecureRandom random = new SecureRandom();
public static void writeData(FilerProto.Entry.Builder entry,
@@ -23,8 +27,10 @@ public class SeaweedWrite {
final long offset,
final byte[] bytes,
final long bytesOffset, final long bytesLength) throws IOException {
+ FilerProto.FileChunk.Builder chunkBuilder = writeChunk(
+ replication, filerGrpcClient, offset, bytes, bytesOffset, bytesLength);
synchronized (entry) {
- entry.addChunks(writeChunk(replication, filerGrpcClient, offset, bytes, bytesOffset, bytesLength));
+ entry.addChunks(chunkBuilder);
}
}
@@ -58,6 +64,8 @@ public class SeaweedWrite {
// cache fileId ~ bytes
SeaweedRead.chunkCache.setChunk(fileId, bytes);
+ LOG.debug("write file chunk {} size {}", targetUrl, bytesLength);
+
return FilerProto.FileChunk.newBuilder()
.setFileId(fileId)
.setOffset(offset)
@@ -71,10 +79,8 @@ public class SeaweedWrite {
final String parentDirectory,
final FilerProto.Entry.Builder entry) throws IOException {
- int chunkSize = entry.getChunksCount();
- List<FilerProto.FileChunk> chunks = FileChunkManifest.maybeManifestize(filerGrpcClient, entry.getChunksList());
-
synchronized (entry) {
+ List<FilerProto.FileChunk> chunks = FileChunkManifest.maybeManifestize(filerGrpcClient, entry.getChunksList());
entry.clearChunks();
entry.addAllChunks(chunks);
filerGrpcClient.getBlockingStub().createEntry(