mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
possibly fix concurrent access to entry object in SeaweedOutputStream
This commit is contained in:
parent
b74eced7a3
commit
222f93e816
2
LICENSE
2
LICENSE
|
@ -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/
|
||||||
|
|
||||||
|
|
|
@ -45,28 +45,32 @@ public class SeaweedWrite {
|
||||||
|
|
||||||
String etag = multipartUpload(targetUrl, auth, bytes, bytesOffset, bytesLength, cipherKey);
|
String etag = multipartUpload(targetUrl, auth, bytes, bytesOffset, bytesLength, cipherKey);
|
||||||
|
|
||||||
|
synchronized (entry) {
|
||||||
|
entry.addChunks(FilerProto.FileChunk.newBuilder()
|
||||||
|
.setFileId(fileId)
|
||||||
|
.setOffset(offset)
|
||||||
|
.setSize(bytesLength)
|
||||||
|
.setMtime(System.currentTimeMillis() / 10000L)
|
||||||
|
.setETag(etag)
|
||||||
|
.setCipherKey(cipherKeyString)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// cache fileId ~ bytes
|
// cache fileId ~ bytes
|
||||||
SeaweedRead.chunkCache.setChunk(fileId, bytes);
|
SeaweedRead.chunkCache.setChunk(fileId, bytes);
|
||||||
|
|
||||||
entry.addChunks(FilerProto.FileChunk.newBuilder()
|
|
||||||
.setFileId(fileId)
|
|
||||||
.setOffset(offset)
|
|
||||||
.setSize(bytesLength)
|
|
||||||
.setMtime(System.currentTimeMillis() / 10000L)
|
|
||||||
.setETag(etag)
|
|
||||||
.setCipherKey(cipherKeyString)
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
||||||
filerGrpcClient.getBlockingStub().createEntry(
|
synchronized (entry){
|
||||||
FilerProto.CreateEntryRequest.newBuilder()
|
filerGrpcClient.getBlockingStub().createEntry(
|
||||||
.setDirectory(parentDirectory)
|
FilerProto.CreateEntryRequest.newBuilder()
|
||||||
.setEntry(entry)
|
.setDirectory(parentDirectory)
|
||||||
.build()
|
.setEntry(entry)
|
||||||
);
|
.build()
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String multipartUpload(String targetUrl,
|
private static String multipartUpload(String targetUrl,
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in a new issue