chibenwa opened a new pull request, #3002:
URL: https://github.com/apache/james-project/pull/3002
A broken mail could not be taken out of the spooler and ended up being
dead-lettered.
This simple fix makes it possible to process it.
**Performance gain**: in the fast path (source != null &&
!isBodyModified()), saveChanges() was called every time a mailet had modified a
header — for example the Received: header added on reception. Yet
saveChanges():
1. Recursively traverses the entire MIME tree (MimeMultipart →
MimeBodyPart → sub-parts...)
2. For each part, re-parses Content-Type, Content-Disposition,
recalculates encodings...
3. Regenerates automatic headers
...only to end up writing the already-in-memory headers (this.headers) and
copying the body from the raw source unchanged. Completely wasted work.
The fast path was introduced precisely to avoid parsing the message. But the
saveChanges() call was negating a large part of that benefit for every mail
that had any header modified — which is essentially every mail James processes
(at minimum the Received header is always added).
For large multipart messages with many attachments, the saving can be
substantial.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]