This is an automated email from the ASF dual-hosted git repository. aduprat pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit ed91ea3e94f57cf14719a199dcd3f15f7ad38f01 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Fri Dec 7 14:47:30 2018 +0700 Position data length when possible --- .../james/blob/objectstorage/AESPayloadCodec.java | 5 +++++ .../james/blob/objectstorage/DefaultPayloadCodec.java | 9 +++++++++ .../blob/objectstorage/ObjectStorageBlobsDAO.java | 18 ++++++++++-------- .../apache/james/blob/objectstorage/PayloadCodec.java | 2 ++ 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java index 2b0eaee..e19e51d 100644 --- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java +++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java @@ -72,6 +72,11 @@ public class AESPayloadCodec implements PayloadCodec { } @Override + public Payload write(byte[] bytes) { + return write(new ByteArrayInputStream(bytes)); + } + + @Override public Payload write(InputStream inputStream) { try (FileBackedOutputStream outputStream = new FileBackedOutputStream(MAX_BYTES.intValue())) { outputStream.write(aead.encrypt(IOUtils.toByteArray(inputStream), EMPTY_ASSOCIATED_DATA)); diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/DefaultPayloadCodec.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/DefaultPayloadCodec.java index 6f56b26..9a6fcc3 100644 --- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/DefaultPayloadCodec.java +++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/DefaultPayloadCodec.java @@ -19,6 +19,7 @@ package org.apache.james.blob.objectstorage; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Optional; @@ -32,6 +33,14 @@ public class DefaultPayloadCodec implements PayloadCodec { } @Override + public Payload write(byte[] bytes) { + if (bytes.length == 0) { + return write(new ByteArrayInputStream(bytes)); + } + return new Payload(Payloads.newByteArrayPayload(bytes), Optional.of(new Long(bytes.length))); + } + + @Override public InputStream read(Payload payload) throws IOException { return payload.getPayload().openStream(); } diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java index fb22164..c38ea12 100644 --- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java +++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java @@ -19,7 +19,6 @@ package org.apache.james.blob.objectstorage; -import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Optional; @@ -93,15 +92,18 @@ public class ObjectStorageBlobsDAO implements BlobStore { } @Override - public Mono<BlobId> save(byte[] data) { + public Mono<BlobId> save(BucketName bucketName, byte[] data) { + Preconditions.checkNotNull(data); BlobId blobId = blobIdFactory.forPayload(data); + Payload payload = payloadCodec.write(data); Blob blob = blobStore.blobBuilder(blobId.asString()) - .payload(payloadCodec.write(new ByteArrayInputStream(data))) + .payload(payload.getPayload()) + .contentLength(payload.getLength().orElse(new Long(data.length))) .build(); return save(bucketName, blob) - .thenApply(any -> blobId); + .thenReturn(blobId); } @Override @@ -109,7 +111,7 @@ public class ObjectStorageBlobsDAO implements BlobStore { Preconditions.checkNotNull(data); BlobId tmpId = blobIdFactory.randomId(); - return save(data, tmpId) + return save(bucketName, data, tmpId) .flatMap(id -> updateBlobId(tmpId, id)); } @@ -121,18 +123,18 @@ public class ObjectStorageBlobsDAO implements BlobStore { .thenReturn(to); } - private Mono<BlobId> save(InputStream data, BlobId id) { + private Mono<BlobId> save(BucketName bucketName, InputStream data, BlobId id) { HashingInputStream hashingInputStream = new HashingInputStream(Hashing.sha256(), data); Payload payload = payloadCodec.write(hashingInputStream); Blob blob = blobStore.blobBuilder(id.asString()) .payload(payload.getPayload()) .build(); - return save(blob) + return save(bucketName, blob) .then(Mono.fromCallable(() -> blobIdFactory.from(hashingInputStream.hash().toString()))); } - private Mono<String> save(Blob blob) { + private Mono<String> save(BucketName bucketName, Blob blob) { String containerName = this.containerName.value(); return Mono.fromCallable(() -> blobStore.putBlob(containerName, blob)); } diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/PayloadCodec.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/PayloadCodec.java index debb9fb..4bbbd0e 100644 --- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/PayloadCodec.java +++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/PayloadCodec.java @@ -25,6 +25,8 @@ import java.io.InputStream; public interface PayloadCodec { Payload write(InputStream is); + Payload write(byte[] bytes); + InputStream read(Payload payload) throws IOException; PayloadCodec DEFAULT_CODEC = new DefaultPayloadCodec(); --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org