[FIX] Solve Netty native buffer leak

When using the AES blobStore, switching the S3 object consumption out of
the eventLoop causes the allocation of ByteBuf items onto the boundedElastic
scheduler. As ByteBuf allocation relies on ThreadLocal, this in turn causes
the instantiation of a way-too-large count of Netty ByteBuf arena and can
be perceived as a Native memory leak (far over 1GB allocation, while before
usage was limited to ~150MB).

As we cannot rely on the previous patch that did block on the S3 driver
Netty event loop, and as we cannot keep the current native memory
over-consumption, this patch disables the intermediary file buffering
when using the AESBlobStore. This was introduced in the first place
to mitigate the lack of IMAP backpressure. That being solved we can afford
paying a bit of HEAP onto the AES blob store.

Note the approximate pre-sizing of the output stream in order to limit
allocation.
1 file changed