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 8918482b10027814e8d5d2ffda0cda3d96e03498 Author: Benoit Tellier <[email protected]> AuthorDate: Mon May 24 00:21:30 2021 +0700 [PERFORMANCE] Further improve things by passing codecs For Row types they are already known, and their lookup takes and additional 0.5% of CPU. --- .../james/mailbox/cassandra/mail/CassandraMessageDAOV3.java | 10 +++++++--- .../apache/james/mailbox/cassandra/mail/FlagsExtractor.java | 8 ++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java index e981078..b044020 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java @@ -78,10 +78,12 @@ import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder; import com.datastax.driver.core.BoundStatement; import com.datastax.driver.core.CodecRegistry; import com.datastax.driver.core.ConsistencyLevel; +import com.datastax.driver.core.DataType; import com.datastax.driver.core.PreparedStatement; import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; +import com.datastax.driver.core.TypeCodec; import com.datastax.driver.core.TypeTokens; import com.datastax.driver.core.UDTValue; import com.datastax.driver.core.querybuilder.QueryBuilder; @@ -98,7 +100,9 @@ public class CassandraMessageDAOV3 { public static final long DEFAULT_LONG_VALUE = 0L; private static final byte[] EMPTY_BYTE_ARRAY = {}; private static final TypeToken<Map<String, String>> MAP_OF_STRING = TypeTokens.mapOf(String.class, String.class); + private static final TypeCodec<Map<String, String>> MAP_OF_STRINGS_CODEC = CodecRegistry.DEFAULT_INSTANCE.codecFor(DataType.frozenMap(DataType.text(), DataType.text()), MAP_OF_STRING); private static final TypeToken<List<String>> LIST_OF_STRINGS = TypeTokens.listOf(String.class); + private static final TypeCodec<List<String>> LIST_OF_STRINGS_CODEC = CodecRegistry.DEFAULT_INSTANCE.codecFor(DataType.frozenList(DataType.text()), LIST_OF_STRINGS); private static final TypeToken<List<UDTValue>> LIST_OF_UDT = TypeTokens.listOf(UDTValue.class); private final CassandraAsyncExecutor cassandraAsyncExecutor; @@ -333,9 +337,9 @@ public class CassandraMessageDAOV3 { property.setContentMD5(row.getString(CONTENT_MD5)); property.setContentTransferEncoding(row.getString(CONTENT_TRANSFER_ENCODING)); property.setContentLocation(row.getString(CONTENT_LOCATION)); - property.setContentLanguage(row.get(CONTENT_LANGUAGE, LIST_OF_STRINGS)); - property.setContentDispositionParameters(row.get(CONTENT_DISPOSITION_PARAMETERS, MAP_OF_STRING)); - property.setContentTypeParameters(row.get(CONTENT_TYPE_PARAMETERS, MAP_OF_STRING)); + property.setContentLanguage(row.get(CONTENT_LANGUAGE, LIST_OF_STRINGS_CODEC)); + property.setContentDispositionParameters(row.get(CONTENT_DISPOSITION_PARAMETERS, MAP_OF_STRINGS_CODEC)); + property.setContentTypeParameters(row.get(CONTENT_TYPE_PARAMETERS, MAP_OF_STRINGS_CODEC)); property.setTextualLineCount(row.getLong(TEXTUAL_LINE_COUNT)); return property.build(); } diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/FlagsExtractor.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/FlagsExtractor.java index 1ae4608..89a9f04 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/FlagsExtractor.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/FlagsExtractor.java @@ -24,12 +24,16 @@ import javax.mail.Flags; import org.apache.james.mailbox.cassandra.table.Flag; +import com.datastax.driver.core.CodecRegistry; +import com.datastax.driver.core.DataType; import com.datastax.driver.core.Row; +import com.datastax.driver.core.TypeCodec; import com.datastax.driver.core.TypeTokens; import com.google.common.reflect.TypeToken; public class FlagsExtractor { public static final TypeToken<Set<String>> STRING_SET = TypeTokens.setOf(String.class); + public static final TypeCodec<Set<String>> SET_OF_STRINGS_CODEC = CodecRegistry.DEFAULT_INSTANCE.codecFor(DataType.set(DataType.text()), STRING_SET); public static Flags getFlags(Row row) { Flags flags = new Flags(); @@ -38,14 +42,14 @@ public class FlagsExtractor { flags.add(Flag.JAVAX_MAIL_FLAG.get(flag)); } } - row.get(Flag.USER_FLAGS, STRING_SET) + row.get(Flag.USER_FLAGS, SET_OF_STRINGS_CODEC) .forEach(flags::add); return flags; } public static Flags getApplicableFlags(Row row) { Flags flags = new Flags(); - row.get(Flag.USER_FLAGS, STRING_SET) + row.get(Flag.USER_FLAGS, SET_OF_STRINGS_CODEC) .forEach(flags::add); return flags; } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
