[
https://issues.apache.org/jira/browse/NUTCH-2585?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16832542#comment-16832542
]
Sebastian Nagel commented on NUTCH-2585:
----------------------------------------
Ok, this is reproduced using parallel streams (see
[615b20e|https://github.com/sebastian-nagel/nutch/commit/615b20eafe947bf75abee836ddd3a9b67706c49f]):
{noformat}
Testing thread-safety (NUTCH-2585) with 1000 iterations:
Cycle 908 : 7 matches
Exception in thread "main" java.lang.NullPointerException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at
java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:598)
at
java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:677)
at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:735)
at
java.util.stream.ReduceOps$ReduceOp.evaluateParallel(ReduceOps.java:714)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233)
at java.util.stream.LongPipeline.reduce(LongPipeline.java:438)
at java.util.stream.LongPipeline.sum(LongPipeline.java:396)
at java.util.stream.ReferencePipeline.count(ReferencePipeline.java:526)
at
org.apache.nutch.util.PrefixStringMatcher.main(PrefixStringMatcher.java:130)
Caused by: java.lang.NullPointerException
at
org.apache.nutch.util.TrieStringMatcher$TrieNode.getChild(TrieStringMatcher.java:106)
at
org.apache.nutch.util.PrefixStringMatcher.matches(PrefixStringMatcher.java:65)
at
java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)
at
java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at
java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:747)
at java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:721)
at java.util.stream.AbstractTask.compute(AbstractTask.java:316)
at java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:731)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at
java.util.concurrent.ForkJoinPool$WorkQueue.execLocalTasks(ForkJoinPool.java:1040)
at
java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1058)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at
java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
{noformat}
As solution I would propose to add a {{compile()}} method and call it in the
constructors of PrefixStringMatcher and SuffixStringMatcher. That would avoid
the lazy conversion and sorting of the trie nodes. Making the {{getChild(char
nextChar)}} method synchronized would also help but would make the matching
potentially slower.
> NPE in TrieStringMatcher
> ------------------------
>
> Key: NUTCH-2585
> URL: https://issues.apache.org/jira/browse/NUTCH-2585
> Project: Nutch
> Issue Type: Bug
> Affects Versions: 1.14
> Reporter: Markus Jelsma
> Priority: Major
> Fix For: 1.16
>
>
> Stumbled on this one just now:
> {code}
> 2018-05-25 14:29:31,844 INFO [FetcherThread]
> org.apache.nutch.fetcher.FetcherThread: FetcherThread 42 fetch of
> http://www.ndcmediagroep.nl/wp-content/uploads/2017/03/Leaflet-Noflik-Wenje.pdf
> failed with: java.lang.NullPointerException
> at
> org.apache.nutch.util.TrieStringMatcher$TrieNode.getChild(TrieStringMatcher.java:107)
> at
> org.apache.nutch.util.SuffixStringMatcher.shortestMatch(SuffixStringMatcher.java:74)
> at
> org.apache.nutch.urlfilter.suffix.SuffixURLFilter.filter(SuffixURLFilter.java:164)
> at org.apache.nutch.net.URLFilters.filter(URLFilters.java:43)
> at
> org.apache.nutch.fetcher.FetcherThread.handleRedirect(FetcherThread.java:487)
> at org.apache.nutch.fetcher.FetcherThread.run(FetcherThread.java:404)
> {code}
> Edit - added on 1 may 2019, i got a slightly different strack trace and using
> PrefixURLFilter this time:
> {code}
> 2019-05-01 08:50:07,282 INFO [FetcherThread]
> org.apache.nutch.fetcher.FetcherThread: FetcherThread 38 fetch of
> https://kanaalstreek.nl/fzh/2018/06/04/vijf-maal-goud-voor-pegasus-op-nk
> failed with: java.lang.NullPointerException
> at
> org.apache.nutch.util.TrieStringMatcher$TrieNode.getChild(TrieStringMatcher.java:107)
> at
> org.apache.nutch.util.PrefixStringMatcher.shortestMatch(PrefixStringMatcher.java:79)
> at
> org.apache.nutch.urlfilter.prefix.PrefixURLFilter.filter(PrefixURLFilter.java:73)
> at org.apache.nutch.net.URLFilters.filter(URLFilters.java:43)
> at
> org.apache.nutch.fetcher.FetcherThread.handleRedirect(FetcherThread.java:487)
> at org.apache.nutch.fetcher.FetcherThread.run(FetcherThread.java:404)
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)