Copilot commented on code in PR #3123:
URL: https://github.com/apache/tika/pull/3123#discussion_r3925846689


##########
tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractProfileRunner.java:
##########
@@ -124,8 +124,8 @@ private static String getJdbcConnectionString(String 
dbPath) {
         }
         //default to h2
         Path p = Paths.get(dbPath);
-        return "jdbc:h2:file:" + p.toAbsolutePath();
-
+        // drop the 45s MVStore chunk retention (bloat + growing compaction 
cost); CACHE_SIZE is KB
+        return "jdbc:h2:file:" + p.toAbsolutePath() + 
";RETENTION_TIME=0;CACHE_SIZE=1048576";

Review Comment:
   The default H2 JDBC URL hard-codes a very large page cache 
(CACHE_SIZE=1048576 KB = 1 GiB). This can significantly increase memory usage 
for users running tika-eval on constrained machines/CI. Consider making 
RETENTION_TIME/CACHE_SIZE configurable (e.g., via system properties) rather 
than always forcing these values.



##########
tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractComparerRunner.java:
##########
@@ -183,8 +183,8 @@ private static String getJdbcConnectionString(String 
dbPath) {
         }
         //default to h2
         Path p = Paths.get(dbPath);
-        return "jdbc:h2:file:" + p.toAbsolutePath();
-
+        // drop the 45s MVStore chunk retention (bloat + growing compaction 
cost); CACHE_SIZE is KB
+        return "jdbc:h2:file:" + p.toAbsolutePath() + 
";RETENTION_TIME=0;CACHE_SIZE=1048576";

Review Comment:
   The default H2 JDBC URL hard-codes a very large page cache 
(CACHE_SIZE=1048576 KB = 1 GiB). This can significantly increase memory usage 
for users running tika-eval on constrained machines/CI. Consider making 
RETENTION_TIME/CACHE_SIZE configurable (e.g., via system properties) rather 
than always forcing these values.



##########
tika-langdetect/tika-langdetect-charsoup/src/test/java/org/apache/tika/langdetect/charsoup/core/CharSoupFeatureExtractorTest.java:
##########
@@ -93,6 +98,87 @@ public void testNFCNormalization() {
         assertArrayEquals(countsC, countsD);
     }
 
+    @Test
+    public void testUrlMailStrippingMatchesGreedyRegexReference() {
+        // TIKA-4875: the scanners must stay byte-identical to the regexes 
they replaced --
+        // the langdetect and junkdetect models were trained on this exact 
preprocessing.
+        // Inputs are NFC-stable, so preprocessNoTruncate's NFC step is an 
identity here.
+        Pattern greedyUrl = 
Pattern.compile("https?://[-_.?&~;+=/#0-9A-Za-z]{10,10000}");
+        Pattern greedyMail = 
Pattern.compile("[-_.0-9A-Za-z]{1,100}@[-_0-9A-Za-z]{1,100}[-_.0-9A-Za-z]{1,100}");
+
+        List<String> cases = new ArrayList<>();
+        // middle mail repeat must backtrack to feed the dot-class tail
+        cases.add("a@bb");
+        cases.add("a@b");
+        cases.add("[email protected]");
+        cases.add("[email protected]");
+        cases.add("a@" + "b".repeat(250));
+        cases.add("a".repeat(150) + "@x.y");
+        cases.add("a".repeat(200) + "@");
+        cases.add("local@local@local");
+        cases.add("[email protected] a@bb [email protected]");
+        cases.add("@@@@@@");
+        cases.add("a@a@a@a@a@a@");
+        // mail caps: head {1,100} then tail {1,100} over one long run
+        cases.add("a@" + "b".repeat(100) + "." + "c".repeat(150));
+        cases.add("a@" + "b".repeat(99) + "." + "c".repeat(99));
+        cases.add("a@" + "b".repeat(300));
+        // find() resumes after a match: leftover run chars are not a fresh 
local part
+        cases.add("aa@bb cc@dd ee@ff");
+        cases.add("a@bb@cc@dd");
+        // URL length boundaries: min 10 after scheme, cap 10000
+        cases.add("http://"; + "a".repeat(9));
+        cases.add("http://"; + "a".repeat(10));
+        cases.add("https://"; + "a".repeat(10000));
+        cases.add("https://"; + "a".repeat(10001));
+        cases.add("https://"; + "a".repeat(10005) + "@bb");
+        cases.add("http://http://aaaaaaaaaa";);
+        cases.add("http://aaaahttp://bbbbbbbbbb";);
+        cases.add("hhttp://aaaaaaaaaaa";);
+        cases.add("http:/notaurl http//nope https:/x");
+        // the URL pass runs first; its replacement is a barrier for the mail 
pass
+        cases.add("http://aaaaaaaaaa@bb";);
+        cases.add("a@http://aaaaaaaaaa";);
+        cases.add("[email protected]");
+        cases.add("[email protected]/http://foobarbazqux";);
+        // non-ASCII neighbors exercise the < 128 guards
+        cases.add("é@bb");
+        cases.add("aé@bb");
+        cases.add("a@büc.d");
+        cases.add("http://aéaaaaaaaaaa";);
+        cases.add("see http://example.com/a/b?q=1#f and mail 
bob.smith@sub-domain_x.example.org.");
+
+        long seed = new Random().nextLong();
+        Random random = new Random(seed);

Review Comment:
   This test uses a non-deterministic random seed (`new Random().nextLong()`), 
which can make CI failures hard to reproduce (reruns likely generate different 
cases). Use a fixed default seed (optionally overridable via a system property) 
so any failure is reliably repeatable.



-- 
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]

Reply via email to