You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/05/21 07:10:36 UTC

[james-project] branch master updated (5e52bc4 -> 3eba5ad)

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

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


    from 5e52bc4  JAMES-3028 Allow setting up S3 HTTP concurrency at the Netty level
     new 27da8d7  [PERFORMANCE] JMAP draft was parsing, formatting then re-parsing JSON
     new 3eba5ad  [PERFORMANCE] JsoupHtmlTextExtractor should use Collectors.joiner

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../jmap/draft/methods/integration/GetMailboxesMethodTest.java   | 2 +-
 .../jmap/draft/methods/integration/SetMessagesMethodTest.java    | 2 +-
 .../apache/james/jmap/draft/methods/JmapRequestParserImpl.java   | 5 ++++-
 .../james/jmap/draft/methods/UpdateMessagePatchValidator.java    | 2 +-
 .../apache/james/jmap/draft/utils/JsoupHtmlTextExtractor.java    | 3 ++-
 .../james/jmap/draft/methods/JmapRequestParserImplTest.java      | 9 ++++++---
 .../jmap/draft/methods/UpdateMessagePatchValidatorTest.java      | 3 ++-
 7 files changed, 17 insertions(+), 9 deletions(-)

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org


[james-project] 01/02: [PERFORMANCE] JMAP draft was parsing, formatting then re-parsing JSON

Posted by bt...@apache.org.
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 27da8d78f38ac4c43268bf0afc55bbe2ba0d4bcd
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue May 18 12:54:46 2021 +0700

    [PERFORMANCE] JMAP draft was parsing, formatting then re-parsing JSON
---
 .../jmap/draft/methods/integration/GetMailboxesMethodTest.java   | 2 +-
 .../jmap/draft/methods/integration/SetMessagesMethodTest.java    | 2 +-
 .../apache/james/jmap/draft/methods/JmapRequestParserImpl.java   | 5 ++++-
 .../james/jmap/draft/methods/UpdateMessagePatchValidator.java    | 2 +-
 .../james/jmap/draft/methods/JmapRequestParserImplTest.java      | 9 ++++++---
 .../jmap/draft/methods/UpdateMessagePatchValidatorTest.java      | 3 ++-
 6 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMailboxesMethodTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMailboxesMethodTest.java
index 1261e75..982c401 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMailboxesMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMailboxesMethodTest.java
@@ -343,7 +343,7 @@ public abstract class GetMailboxesMethodTest {
             .body(NAME, equalTo("error"))
             .body(ARGUMENTS + ".type", equalTo("invalidArguments"))
             .body(ARGUMENTS + ".description", containsString("Cannot deserialize value of type `java.util.ArrayList<org.apache.james.mailbox.model.MailboxId>` from Boolean value (token `JsonToken.VALUE_TRUE`)"))
-            .body(ARGUMENTS + ".description", containsString("{\"ids\":true}"));
+            .body(ARGUMENTS + ".description", containsString("(through reference chain: org.apache.james.jmap.draft.model.GetMailboxesRequest$Builder[\"ids\"])"));
     }
 
     @Category(BasicFeature.class)
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
index 1ecc01e..1e25586 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
@@ -889,7 +889,7 @@ public abstract class SetMessagesMethodTest {
             .body(NOT_UPDATED + "[\"" + messageId + "\"].type", equalTo("invalidProperties"))
             .body(NOT_UPDATED + "[\"" + messageId + "\"].properties[0]", equalTo("isUnread"))
             .body(NOT_UPDATED + "[\"" + messageId + "\"].description", containsString("isUnread: Cannot deserialize value of type `java.lang.Boolean` from String \"123\": only \"true\" or \"false\" recognized"))
-            .body(NOT_UPDATED + "[\"" + messageId + "\"].description", containsString("{\"isUnread\":\"123\"}"))
+            .body(NOT_UPDATED + "[\"" + messageId + "\"].description", containsString("(through reference chain: org.apache.james.jmap.draft.model.UpdateMessagePatch$Builder[\"isUnread\"])"))
             .body(ARGUMENTS + ".updated", hasSize(0));
     }
 
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapRequestParserImpl.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapRequestParserImpl.java
index 273efdd..5c77c2c 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapRequestParserImpl.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapRequestParserImpl.java
@@ -29,6 +29,7 @@ import org.apache.james.jmap.draft.model.InvocationRequest;
 import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.base.Preconditions;
 
 public class JmapRequestParserImpl implements JmapRequestParser {
 
@@ -42,6 +43,8 @@ public class JmapRequestParserImpl implements JmapRequestParser {
     @Override
     public <T extends JmapRequest> T extractJmapRequest(InvocationRequest request, Class<T> requestClass)
             throws IOException, JsonParseException, JsonMappingException {
-        return objectMapper.readValue(request.getParameters().toString(), requestClass);
+        Preconditions.checkNotNull(requestClass, "requestClass should not be null");
+
+        return objectMapper.treeToValue(request.getParameters(), requestClass);
     }
 }
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidator.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidator.java
index da4264e..5701ba2 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidator.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidator.java
@@ -53,7 +53,7 @@ public class UpdateMessagePatchValidator implements Validator<ObjectNode> {
     @Override
     public Set<ValidationResult> validate(ObjectNode json) {
         try {
-            parser.readValue(json.toString(), UpdateMessagePatch.class);
+            parser.treeToValue(json, UpdateMessagePatch.class);
         } catch (JsonMappingException e) {
             return ImmutableSet.of(ValidationResult.builder()
                     .property(firstFieldFrom(e.getPath()).orElse(ValidationResult.UNDEFINED_PROPERTY))
diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/JmapRequestParserImplTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/JmapRequestParserImplTest.java
index 2a64b59..7356d1e 100644
--- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/JmapRequestParserImplTest.java
+++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/JmapRequestParserImplTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.jmap.draft.methods;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
 import org.apache.james.jmap.draft.json.ObjectMapperFactory;
 import org.apache.james.jmap.draft.model.InvocationRequest;
 import org.apache.james.mailbox.inmemory.InMemoryId;
@@ -38,13 +40,14 @@ public class JmapRequestParserImplTest {
         testee = new JmapRequestParserImpl(new ObjectMapperFactory(new InMemoryId.Factory(), new InMemoryMessageId.Factory()));
     }
     
-    @Test(expected = IllegalArgumentException.class)
-    public void extractJmapRequestShouldThrowWhenNullRequestClass() throws Exception {
+    @Test
+    public void extractJmapRequestShouldThrowWhenNullRequestClass() {
         JsonNode[] nodes = new JsonNode[] { new ObjectNode(new JsonNodeFactory(false)).textNode("unknwonMethod"),
                 new ObjectNode(new JsonNodeFactory(false)).putObject("{\"id\": \"id\"}"),
                 new ObjectNode(new JsonNodeFactory(false)).textNode("#1")};
 
-        testee.extractJmapRequest(InvocationRequest.deserialize(nodes), null);
+        assertThatThrownBy(() -> testee.extractJmapRequest(InvocationRequest.deserialize(nodes), null))
+            .isInstanceOf(NullPointerException.class);
     }
 
     @Test
diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidatorTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidatorTest.java
index 7355f3d..500cf0f 100644
--- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidatorTest.java
+++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidatorTest.java
@@ -20,6 +20,7 @@
 package org.apache.james.jmap.draft.methods;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
@@ -82,7 +83,7 @@ public class UpdateMessagePatchValidatorTest {
 
         ObjectMapper mapper = mock(ObjectMapper.class);
         JsonGenerator jsonGenerator = null;
-        when(mapper.readValue(anyString(), eq(UpdateMessagePatch.class)))
+        when(mapper.treeToValue(any(), eq(UpdateMessagePatch.class)))
             .thenThrow(JsonMappingException.from(jsonGenerator, "Exception when parsing"));
 
         when(objectMapperFactory.forParsing())

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org


[james-project] 02/02: [PERFORMANCE] JsoupHtmlTextExtractor should use Collectors.joiner

Posted by bt...@apache.org.
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 3eba5ad4cc1ea7edba424d6fbd71be38ab583fe0
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue May 18 20:48:53 2021 +0700

    [PERFORMANCE] JsoupHtmlTextExtractor should use Collectors.joiner
    
    Reduce and concats was responsible of 2% of total memory allocation of a
    production server...
---
 .../java/org/apache/james/jmap/draft/utils/JsoupHtmlTextExtractor.java | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/JsoupHtmlTextExtractor.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/JsoupHtmlTextExtractor.java
index b4ea0c0..4fb4204 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/JsoupHtmlTextExtractor.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/JsoupHtmlTextExtractor.java
@@ -21,6 +21,7 @@ package org.apache.james.jmap.draft.utils;
 
 import java.util.Optional;
 import java.util.function.Predicate;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.apache.commons.lang3.StringUtils;
@@ -56,7 +57,7 @@ public class JsoupHtmlTextExtractor implements HtmlTextExtractor {
 
             return flatten(body, INITIAL_LIST_NESTED_LEVEL)
                 .map(this::convertNodeToText)
-                .reduce("", (s1, s2) -> s1 + s2);
+                .collect(Collectors.joining());
         } catch (Exception e) {
             LOGGER.warn("Failed extracting text from html", e);
             return html;

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org