Skip to content
This repository was archived by the owner on Feb 28, 2022. It is now read-only.

Can't load default exceptions list in TurkishStemmerTokenFilterFactory #26

Open
ptanov opened this issue Feb 8, 2022 · 0 comments
Open

Comments

@ptanov
Copy link
Contributor

ptanov commented Feb 8, 2022

It seems that newer version of ES may return null from Analysis.getWordList():

    public static List<String> getWordList(Environment env, Settings settings,
                                           String settingPath, String settingList, boolean removeComments) {
        String wordListPath = settings.get(settingPath, null);

        if (wordListPath == null) {
            List<String> explicitWordList = settings.getAsList(settingList, null);
            if (explicitWordList == null) {
                return null;
//(...)

and this is causing NPE in .isEmpty() check:

  private CharArraySet parseExceptions(Environment env, Settings settings, String settingPrefix) {
    List<String> exceptionsList  = Analysis.getWordList(env, settings, settingPrefix);
    if (exceptionsList.isEmpty()) {

In ES 5.x this was not an issue because getReaderFromFile() was used and there was a check for null:

      exceptionsReader = Analysis.getReaderFromFile(env, settings, settingPrefix);
    } catch (InvalidPathException e) {
      logger.info("failed to find the " + settingPrefix + ", using the default set");
    }

    if (exceptionsReader != null) {
      try {
        exceptionsList = Analysis.loadWordList(exceptionsReader, "#");

The whole exception:

java.lang.NullPointerException: Cannot invoke "java.util.List.isEmpty()" because "exceptionsList" is null
	at org.elasticsearch.index.analysis.TurkishStemmerTokenFilterFactory.parseExceptions(TurkishStemmerTokenFilterFactory.java:98) ~[?:?]
	at org.elasticsearch.index.analysis.TurkishStemmerTokenFilterFactory.parseProtectedWords(TurkishStemmerTokenFilterFactory.java:52) ~[?:?]
	at org.elasticsearch.index.analysis.TurkishStemmerTokenFilterFactory.<init>(TurkishStemmerTokenFilterFactory.java:30) ~[?:?]
	at org.elasticsearch.index.analysis.AnalysisRegistry.buildMapping(AnalysisRegistry.java:444) ~[elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.index.analysis.AnalysisRegistry.buildTokenFilterFactories(AnalysisRegistry.java:280) ~[elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.index.analysis.AnalysisRegistry.build(AnalysisRegistry.java:215) ~[elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.index.IndexModule.newIndexService(IndexModule.java:438) ~[elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.indices.IndicesService.createIndexService(IndicesService.java:655) ~[elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.indices.IndicesService.createIndex(IndicesService.java:558) ~[elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.cluster.metadata.MetadataIndexTemplateService.validateTemplate(MetadataIndexTemplateService.java:1196) ~[elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.cluster.metadata.MetadataIndexTemplateService.validateTemplate(MetadataIndexTemplateService.java:1149) ~[elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.cluster.metadata.MetadataIndexTemplateService.addComponentTemplate(MetadataIndexTemplateService.java:265) ~[elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.cluster.metadata.MetadataIndexTemplateService$2.execute(MetadataIndexTemplateService.java:188) ~[elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.cluster.ClusterStateUpdateTask.execute(ClusterStateUpdateTask.java:47) ~[elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.cluster.service.MasterService.executeTasks(MasterService.java:702) ~[elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.cluster.service.MasterService.calculateTaskOutputs(MasterService.java:324) ~[elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.cluster.service.MasterService.runTasks(MasterService.java:219) [elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.cluster.service.MasterService.access$000(MasterService.java:73) [elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.cluster.service.MasterService$Batcher.run(MasterService.java:151) [elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.cluster.service.TaskBatcher.runIfNotProcessed(TaskBatcher.java:150) [elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.cluster.service.TaskBatcher$BatchedTask.run(TaskBatcher.java:188) [elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:684) [elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:252) [elasticsearch-7.10.2.jar:7.10.2]
	at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:215) [elasticsearch-7.10.2.jar:7.10.2]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) [?:?]
	at java.lang.Thread.run(Thread.java:832) [?:?]

@ptanov ptanov changed the title Can't load exceptions list in TurkishStemmerTokenFilterFactory Can't load default exceptions list in TurkishStemmerTokenFilterFactory Feb 8, 2022
ptanov added a commit to ptanov/elasticsearch-analysis-turkishstemmer that referenced this issue Feb 18, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant