Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-19422

NullPointerException when searching using select options that have the same name as previously deleted ones

    XMLWordPrintable

Details

    Description

      Symptoms

      Filters affected are only those which:

      • Specify a clause using the "select custom field"
      • The value of the clause references an option which has the same name as an option that was previously deleted from a custom field context

      NullPointerException appears in the logs during upgrade to 4.0 data which contains specific filters:

      2009-10-06 17:48:40,626 Thread-1 WARN [jira.upgrade.tasks.UpgradeTask_Build428] Could not namify the query: 'null'
      com.atlassian.util.concurrent.LazyReference$InitializationException: java.lang.NullPointerException
       at com.atlassian.util.concurrent.LazyReference.getInterruptibly(LazyReference.java:152)
       at com.atlassian.util.concurrent.LazyReference.get(LazyReference.java:115)
       at com.atlassian.jira.issue.customfields.option.LazyLoadedOption.getRelatedCustomField(LazyLoadedOption.java:61)
       at com.atlassian.jira.jql.util.JqlSelectOptionsUtil.getFieldFromOption(JqlSelectOptionsUtil.java:234)
       at com.atlassian.jira.jql.util.JqlSelectOptionsUtil.getOptionFromString(JqlSelectOptionsUtil.java:207)
       at com.atlassian.jira.jql.util.JqlSelectOptionsUtil.getOptions(JqlSelectOptionsUtil.java:134)
       at com.atlassian.jira.jql.context.SelectCustomFieldClauseContextFactory.getContextOptions(SelectCustomFieldClauseContextFactory.java:109)
       at com.atlassian.jira.jql.context.SelectCustomFieldClauseContextFactory.getClauseContext(SelectCustomFieldClauseContextFactory.java:68)
       at com.atlassian.jira.jql.context.MultiClauseDecoratorContextFactory.getClauseContext(MultiClauseDecoratorContextFactory.java:66)
       at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:134)
       at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:36)
       at com.atlassian.query.clause.TerminalClauseImpl.accept(TerminalClauseImpl.java:137)
       at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:80)
       at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:36)
       at com.atlassian.query.clause.AndClause.accept(AndClause.java:34)
       at com.atlassian.jira.jql.context.QueryContextVisitor.createContext(QueryContextVisitor.java:55)
       at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:73)
       at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:36)
       at com.atlassian.query.clause.AndClause.accept(AndClause.java:34)
       at com.atlassian.jira.bc.issue.search.DefaultSearchService.getSimpleQueryContext(DefaultSearchService.java:221)
       at com.atlassian.jira.bc.issue.search.DefaultSearchService.getSearchContext(DefaultSearchService.java:123)
       at com.atlassian.jira.upgrade.tasks.UpgradeTask_Build428.getNamifiedQuery(UpgradeTask_Build428.java:200)
       at com.atlassian.jira.upgrade.tasks.UpgradeTask_Build428.getQueryFromXml(UpgradeTask_Build428.java:312)
       at com.atlassian.jira.upgrade.tasks.UpgradeTask_Build428.upgradeSearchRequests(UpgradeTask_Build428.java:149)
       at com.atlassian.jira.upgrade.tasks.UpgradeTask_Build428.doUpgrade(UpgradeTask_Build428.java:129)
       at com.atlassian.jira.upgrade.UpgradeManagerImpl.doUpgradeTaskSucess(UpgradeManagerImpl.java:508)
       at com.atlassian.jira.upgrade.UpgradeManagerImpl.runUpgradeTasks(UpgradeManagerImpl.java:419)
       at com.atlassian.jira.upgrade.UpgradeManagerImpl.doUpgrade(UpgradeManagerImpl.java:356)
       at com.atlassian.jira.upgrade.UpgradeManagerImpl.doUpgradeIfNeeded(UpgradeManagerImpl.java:307)
       at com.atlassian.jira.upgrade.UpgradeManagerImpl.doUpgradeIfNeededAndAllowed(UpgradeManagerImpl.java:246)
       at com.atlassian.jira.upgrade.UpgradeLauncher.checkIfUpgradeNeeded(UpgradeLauncher.java:100)
       at com.atlassian.jira.upgrade.UpgradeLauncher.contextInitialized(UpgradeLauncher.java:49)
       at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3795)
       at org.apache.catalina.core.StandardContext.start(StandardContext.java:4252)
       at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
       at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
       at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
       at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
       at org.apache.catalina.core.StandardService.start(StandardService.java:448)
       at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
       at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
       at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
      Caused by: java.lang.NullPointerException
       at com.atlassian.jira.issue.fields.config.persistence.FieldConfigPersisterImpl.getFieldConfig(FieldConfigPersisterImpl.java:186)
       at com.atlassian.jira.issue.fields.config.manager.FieldConfigManagerImpl.getFieldConfig(FieldConfigManagerImpl.java:33)
       at com.atlassian.jira.issue.customfields.option.LazyLoadedOption$1.create(LazyLoadedOption.java:30)
       at com.atlassian.jira.issue.customfields.option.LazyLoadedOption$1.create(LazyLoadedOption.java:28)
       at com.atlassian.util.concurrent.LazyReference$1.call(LazyReference.java:79)
       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
       at java.util.concurrent.FutureTask.run(FutureTask.java:138)
       at com.atlassian.util.concurrent.LazyReference.getInterruptibly(LazyReference.java:146)
       at com.atlassian.util.concurrent.LazyReference.get(LazyReference.java:115)
       at com.atlassian.jira.issue.customfields.option.LazyLoadedOption.getRelatedCustomField(LazyLoadedOption.java:61)
       at com.atlassian.jira.jql.util.JqlSelectOptionsUtil.getFieldFromOption(JqlSelectOptionsUtil.java:234)
       at com.atlassian.jira.jql.util.JqlSelectOptionsUtil.getOptionFromString(JqlSelectOptionsUtil.java:207)
       at com.atlassian.jira.jql.util.JqlSelectOptionsUtil.getOptions(JqlSelectOptionsUtil.java:134)
       at com.atlassian.jira.jql.context.SelectCustomFieldClauseContextFactory.getContextOptions(SelectCustomFieldClauseContextFactory.java:109)
       at com.atlassian.jira.jql.context.SelectCustomFieldClauseContextFactory.getClauseContext(SelectCustomFieldClauseContextFactory.java:68)
       at com.atlassian.jira.jql.context.MultiClauseDecoratorContextFactory.getClauseContext(MultiClauseDecoratorContextFactory.java:66)
       at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:134)
       at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:36)
       at com.atlassian.query.clause.TerminalClauseImpl.accept(TerminalClauseImpl.java:137)
       at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:80)
       at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:36)
       at com.atlassian.query.clause.AndClause.accept(AndClause.java:34)
       at com.atlassian.jira.jql.context.QueryContextVisitor.createContext(QueryContextVisitor.java:55)
       at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:73)
       at com.atlassian.jira.jql.context.QueryContextVisitor.visit(QueryContextVisitor.java:36)
       at com.atlassian.query.clause.AndClause.accept(AndClause.java:34)
       at com.atlassian.jira.bc.issue.search.DefaultSearchService.getSimpleQueryContext(DefaultSearchService.java:221)
       at com.atlassian.jira.bc.issue.search.DefaultSearchService.getSearchContext(DefaultSearchService.java:123)
       at com.atlassian.jira.upgrade.tasks.UpgradeTask_Build428.getNamifiedQuery(UpgradeTask_Build428.java:200)
       at com.atlassian.jira.upgrade.tasks.UpgradeTask_Build428.getQueryFromXml(UpgradeTask_Build428.java:312)
       at com.atlassian.jira.upgrade.tasks.UpgradeTask_Build428.upgradeSearchRequests(UpgradeTask_Build428.java:149)
       at com.atlassian.jira.upgrade.tasks.UpgradeTask_Build428.doUpgrade(UpgradeTask_Build428.java:121)
       ... 22 more
      

      NullPointerException appears in a stack trace when running specific JQL filters in the Issue Navigator

      Stack trace is similar to the above

      Diagnosis

      If you're seeing these exceptions, have a look at the customer data and find out if there are any records in the customfieldoption table which reference non-existant fieldconfiguration records. Here is the SQL:

      select * from customfieldoption where customfieldconfig not in (select id from fieldconfiguration)

      If there are records returned, then any search which mentions the customvalue s as the right hand side of a select custom field clause will be affected.

      Cause

      When deleting a custom field context for a select custom field, the options created are not deleted. They remain in the customfieldoption table, with references to a fieldconfiguration (custom field context) that no longer exists (because it was deleted).

      A JQL clause that references the option "NAME" will look up all stored custom field options with that name, and attempt to resolve each option to its related field, in order to calculate the context of the clause. This includes all "dead options". When the related custom field is looked up, the NullPointerException is thrown.

      Attachments

        Activity

          People

            dylan@atlassian.com Dylan Etkin [Atlassian]
            mtokar Michael Tokar
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: