There is a bug in the transactional blob store when, in the same transaction, the blob is written then retention or legal hold is set. The second operation incorrectly deletes the transient blob (which is waiting for commit) when it shouldn't.
2020-04-16T19:47:10,688 ERROR [http-nio-0.0.0.0-8080-exec-6] [org.nuxeo.ecm.core.blob.TransactionalBlobStore] Failed to commit update of blob: 4e391e3b-25f5-4d6b-b811-56c96b70ad25@JeZofswO7hfbfb5XvqJ.Ur0Dh8Dypj_8 java.io.IOException: com.amazonaws.services.s3.model.AmazonS3Exception: The specified version does not exist. (Service: Amazon S3; Status Code: 404; Error Code: NoSuchVersion) at org.nuxeo.ecm.blob.s3.S3BlobStore.writeBlobProperties(S3BlobStore.java:696) ~[nuxeo-core-binarymanager-s3-10.10-HF23.jar:?] at org.nuxeo.ecm.core.blob.CachingBlobStore.writeBlobProperties(CachingBlobStore.java:182) ~[nuxeo-core-api-10.10-HF25.jar:?] at org.nuxeo.ecm.core.blob.TransactionalBlobStore.afterCompletion(TransactionalBlobStore.java:337) [nuxeo-core-api-10.10-HF25.jar:?] ... Caused by: com.amazonaws.services.s3.model.AmazonS3Exception: The specified version does not exist. (Service: Amazon S3; Status Code: 404; Error Code: NoSuchVersion) ... at com.amazonaws.services.s3.AmazonS3Client.setObjectLegalHold(AmazonS3Client.java:3202) ~[aws-java-sdk-s3-1.11.738.jar:?] at org.nuxeo.ecm.blob.s3.S3BlobStore.writeBlobProperties(S3BlobStore.java:679) ~[nuxeo-core-binarymanager-s3-10.10-HF23.jar:?] ... 74 more
In addition, when trying to set a retention on a bucket which is configured with a default retention mode of Compliance, the set retention operation fails because it always attempts to use Governance mode.