This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit de31975e0a6d10050b5deacd65b8c3dd050d2080
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Mon Oct 21 17:31:10 2019 +0700

    JAMES-2927 Prevent attachments to create tumbstones
    
    A tumbstone is created when a null value is specified in a prepared 
statement.
    
    This is due to the fact that null has the meaning `remove` and not the 
meaning `unspecified`, which is represented by no binding at all.
    
    Of course unwanted tumbstones occurs with a performance cost.
    
    The recommended method for fixing on the latest version of cassandra is to 
not bind the null value.
    
    Read this for further information: 
https://thelastpickle.com/blog/2016/09/15/Null-bindings-on-prepared-statements-and-undesired-tombstone-creation.html
---
 .../apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
index 2848c69..0899903 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
@@ -213,12 +213,15 @@ public class CassandraMessageDAO {
     }
 
     private UDTValue toUDT(MessageAttachment messageAttachment) {
-        return typesProvider.getDefinedUserType(ATTACHMENTS)
+        UDTValue result = typesProvider.getDefinedUserType(ATTACHMENTS)
             .newValue()
             .setString(Attachments.ID, 
messageAttachment.getAttachmentId().getId())
-            .setString(Attachments.NAME, 
messageAttachment.getName().orElse(null))
-            .setString(Attachments.CID, 
messageAttachment.getCid().map(Cid::getValue).orElse(null))
             .setBool(Attachments.IS_INLINE, messageAttachment.isInline());
+        messageAttachment.getName()
+            .ifPresent(name -> result.setString(Attachments.NAME, name));
+        messageAttachment.getCid()
+            .ifPresent(cid -> result.setString(Attachments.CID, 
cid.getValue()));
+        return result;
     }
 
     private List<UDTValue> buildPropertiesUdt(MailboxMessage message) {


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to