possibly fix concurrent access to entry object in SeaweedOutputStream

This commit is contained in:
Chris Lu
2020-06-17 14:59:43 -07:00
parent b74eced7a3
commit 222f93e816
4 changed files with 20 additions and 22 deletions

View File

@@ -1,4 +1,4 @@
Apache License g Apache License
Version 2.0, January 2004 Version 2.0, January 2004
http://www.apache.org/licenses/ http://www.apache.org/licenses/

View File

@@ -45,9 +45,7 @@ public class SeaweedWrite {
String etag = multipartUpload(targetUrl, auth, bytes, bytesOffset, bytesLength, cipherKey); String etag = multipartUpload(targetUrl, auth, bytes, bytesOffset, bytesLength, cipherKey);
// cache fileId ~ bytes synchronized (entry) {
SeaweedRead.chunkCache.setChunk(fileId, bytes);
entry.addChunks(FilerProto.FileChunk.newBuilder() entry.addChunks(FilerProto.FileChunk.newBuilder()
.setFileId(fileId) .setFileId(fileId)
.setOffset(offset) .setOffset(offset)
@@ -56,11 +54,16 @@ public class SeaweedWrite {
.setETag(etag) .setETag(etag)
.setCipherKey(cipherKeyString) .setCipherKey(cipherKeyString)
); );
}
// cache fileId ~ bytes
SeaweedRead.chunkCache.setChunk(fileId, bytes);
} }
public static void writeMeta(final FilerGrpcClient filerGrpcClient, public static void writeMeta(final FilerGrpcClient filerGrpcClient,
final String parentDirectory, final FilerProto.Entry.Builder entry) { final String parentDirectory, final FilerProto.Entry.Builder entry) {
synchronized (entry){
filerGrpcClient.getBlockingStub().createEntry( filerGrpcClient.getBlockingStub().createEntry(
FilerProto.CreateEntryRequest.newBuilder() FilerProto.CreateEntryRequest.newBuilder()
.setDirectory(parentDirectory) .setDirectory(parentDirectory)
@@ -68,6 +71,7 @@ public class SeaweedWrite {
.build() .build()
); );
} }
}
private static String multipartUpload(String targetUrl, private static String multipartUpload(String targetUrl,
String auth, String auth,

View File

@@ -69,9 +69,6 @@ public class SeaweedOutputStream extends OutputStream {
} }
private synchronized void flushWrittenBytesToServiceInternal(final long offset) throws IOException { private synchronized void flushWrittenBytesToServiceInternal(final long offset) throws IOException {
LOG.debug("SeaweedWrite.writeMeta path: {} entry:{}", path, entry);
try { try {
SeaweedWrite.writeMeta(filerGrpcClient, getParentDirectory(path), entry); SeaweedWrite.writeMeta(filerGrpcClient, getParentDirectory(path), entry);
} catch (Exception ex) { } catch (Exception ex) {

View File

@@ -78,9 +78,6 @@ public class SeaweedOutputStream extends OutputStream implements Syncable, Strea
} }
private synchronized void flushWrittenBytesToServiceInternal(final long offset) throws IOException { private synchronized void flushWrittenBytesToServiceInternal(final long offset) throws IOException {
LOG.debug("SeaweedWrite.writeMeta path: {} entry:{}", path, entry);
try { try {
SeaweedWrite.writeMeta(filerGrpcClient, getParentDirectory(path), entry); SeaweedWrite.writeMeta(filerGrpcClient, getParentDirectory(path), entry);
} catch (Exception ex) { } catch (Exception ex) {