This is an automated email from the ASF dual-hosted git repository. tballison pushed a commit to branch TIKA-4868-performance-improvements in repository https://gitbox.apache.org/repos/asf/tika.git
commit 17e67b4d311d83ae298c3cdefbc19d287ef7e889 Author: tallison <[email protected]> AuthorDate: Tue Sep 1 17:11:18 2026 -0400 don't double detect --- CHANGES.txt | 7 +++++++ .../src/main/java/org/apache/tika/detect/CompositeDetector.java | 2 +- .../src/main/java/org/apache/tika/detect/DefaultDetector.java | 9 +++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 397b2915b8..8c2b56af66 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,12 @@ Release 4.1.0 - unreleased + * DefaultDetector honors CONTENT_TYPE_USER_OVERRIDE and + CONTENT_TYPE_PARSER_OVERRIDE before running magic detection, matching + CompositeDetector's contract. Removes the second full magic scan every + pipes parse paid per document. Compat note: with a user override set, + DefaultDetector no longer lets a more specific magic result overrule + the override (TIKA-4868). + * Markdown output is ~4x faster on large documents: ToMarkdownContentHandler now buffers the commonmark renderer's per-character writes instead of paying the synchronized diff --git a/tika-core/src/main/java/org/apache/tika/detect/CompositeDetector.java b/tika-core/src/main/java/org/apache/tika/detect/CompositeDetector.java index 027b6f4c6d..158dbdeaec 100644 --- a/tika-core/src/main/java/org/apache/tika/detect/CompositeDetector.java +++ b/tika-core/src/main/java/org/apache/tika/detect/CompositeDetector.java @@ -96,7 +96,7 @@ public class CompositeDetector implements Detector { * @param metadata * @return mediaType if a parseable mediatype was sent in via user or parser overrides */ - private static MediaType detectOverrides(Metadata metadata) { + protected static MediaType detectOverrides(Metadata metadata) { String override = metadata.get(TikaCoreProperties.CONTENT_TYPE_USER_OVERRIDE); if (!StringUtils.isBlank(override)) { MediaType mt = MediaType.parse(override); diff --git a/tika-core/src/main/java/org/apache/tika/detect/DefaultDetector.java b/tika-core/src/main/java/org/apache/tika/detect/DefaultDetector.java index 6b19b87867..bda7f5e6f9 100644 --- a/tika-core/src/main/java/org/apache/tika/detect/DefaultDetector.java +++ b/tika-core/src/main/java/org/apache/tika/detect/DefaultDetector.java @@ -135,6 +135,15 @@ public class DefaultDetector extends CompositeDetector { @Override public MediaType detect(TikaInputStream tis, Metadata metadata, ParseContext parseContext) throws IOException { + // 0. An override short-circuits detection entirely, as in CompositeDetector. + // Without this check the magic scan below runs even when a prior detect pass + // recorded its result as CONTENT_TYPE_PARSER_OVERRIDE -- doubling detection + // cost on every pipes parse. + MediaType override = detectOverrides(metadata); + if (override != null) { + return override; + } + // 1. Magic detection via MimeTypes MediaType magicType = mimeTypes.detect(tis, metadata, parseContext); metadata.set(TikaCoreProperties.CONTENT_TYPE_MAGIC_DETECTED, magicType.toString());
