Просмотр исходного кода

Upgrade joni from 2.1.6 to 2.1.29 (#47374)

Changed the Grok class to use searchInterruptible(...) instead of search(...)
otherwise we can't interrupt long running matching via the thread watch
dog.

Joni now also provides another way to interrupt long running matches.
By invoking the interrupt() method on the Matcher. We need then to refactor
the watch thread dog to keep track of Matchers instead of Threads, but
it is a better way of doing this, since interrupting would be more direct
(not every 30k iterations) and efficient (checking a volatile field).
This work needs to be done in a follow up.
Martijn van Groningen 6 лет назад
Родитель
Сommit
785cf6bd44

+ 1 - 8
libs/grok/build.gradle

@@ -18,7 +18,7 @@
  */
 
 dependencies {
-    compile 'org.jruby.joni:joni:2.1.6'
+    compile 'org.jruby.joni:joni:2.1.29'
     // joni dependencies:
     compile 'org.jruby.jcodings:jcodings:1.0.44'
 
@@ -30,10 +30,3 @@ dependencies {
 forbiddenApisMain {
     replaceSignatureFiles 'jdk-signatures'
 }
-
-thirdPartyAudit.ignoreMissingClasses (
-        // joni has AsmCompilerSupport, but that isn't being used:
-        'org.objectweb.asm.ClassWriter',
-        'org.objectweb.asm.MethodVisitor',
-        'org.objectweb.asm.Opcodes'
-)

+ 1 - 0
libs/grok/licenses/joni-2.1.29.jar.sha1

@@ -0,0 +1 @@
+3cb751702e1194ff24259155db4d37e9383d4320

+ 0 - 1
libs/grok/licenses/joni-2.1.6.jar.sha1

@@ -1 +0,0 @@
-0f23c95a06eaecbc8c74c7458a8bfd13e4fd2d3a

+ 9 - 3
libs/grok/src/main/java/org/elasticsearch/grok/Grok.java

@@ -175,7 +175,9 @@ public final class Grok {
         int result;
         try {
             threadWatchdog.register();
-            result = matcher.search(0, grokPatternBytes.length, Option.NONE);
+            result = matcher.searchInterruptible(0, grokPatternBytes.length, Option.NONE);
+        } catch (InterruptedException e) {
+            result = Matcher.INTERRUPTED;
         } finally {
             threadWatchdog.unregister();
         }
@@ -224,7 +226,9 @@ public final class Grok {
         int result;
         try {
             threadWatchdog.register();
-            result = matcher.search(0, text.length(), Option.DEFAULT);
+            result = matcher.searchInterruptible(0, text.length(), Option.DEFAULT);
+        } catch (InterruptedException e) {
+            result = Matcher.INTERRUPTED;
         } finally {
             threadWatchdog.unregister();
         }
@@ -244,7 +248,9 @@ public final class Grok {
         int result;
         try {
             threadWatchdog.register();
-            result = matcher.search(0, textAsBytes.length, Option.DEFAULT);
+            result = matcher.searchInterruptible(0, textAsBytes.length, Option.DEFAULT);
+        } catch (InterruptedException e) {
+            result = Matcher.INTERRUPTED;
         } finally {
             threadWatchdog.unregister();
         }