Error 500 returned when setting entity property value more than 255 characters if the type is 'string'

XMLWordPrintable

    • Type: Bug
    • Resolution: Won't Fix
    • Priority: Low
    • Component/s: Ecosystem
    • None
    • 1
    • Severity 2 - Major

      NOTE: This bug report is for JIRA Cloud. Using JIRA Server? See the corresponding bug report.

      Summary

      Setting an entity property value to a string longer than 255 characters fails returning error 500 if the property type is set to 'string'.

      This is because, as mentioned in below documentation page:

      text: tokenized before indexing and allows for searching for particular words.
      string: indexed as-is and allows for searching for the exact phrase only.

      It should be documented than the limit is 255 characters when using the type 'string' and a better error message should be returned in case a bigger value is provided.

      Steps to Reproduce

      1. Set the entity property type to 'string'
      2. Send a text longer than 255 character as the property value. E.g. I have sent below body in a REST request as described in: 
        https://docs.atlassian.com/jira/REST/cloud/#api/2/issue/{issueIdOrKey}/properties-setProperty
        
        {  
           "cachedItems":"[{\"id\":\"57dbe48fc0e1d6f6570ccdca\",\"summary\":\"--- template 1\",\"fixed\":false,\"order\":0,\"toggleUser\":\"Mario Thor\",\"toggleDate\":1474028687137},{\"id\":\"57dbe48fc0e1d6f6570ccdcb\",\"summary\":\"abc\",\"fixed\":true,\"order\":1,\"toggleUser\":\"Mario Thor\",\"toggleDate\":1474028704728}]"
        }
        

      Expected Results

      Either 200 OK, or a meaningful error message

      Actual Results

      You get Error 500 (internal server error) in the REST response and the below exception is thrown in JIRA logs.
      The same body is accepted without any problem when the type is set to 'text'.

      2016-09-26 18:26:15.207066500 2016-09-26 18:26:15,194 http-nio-2991-exec-34 ERROR sysadmin 1106x17978x1 ua82jq 193.240.188.96 /rest/api/2/issue/DEMO-22/properties/cachedchecklist [c.a.j.r.exception.ExceptionInterceptor.privacy-safe] Returning internal server error in response
      2016-09-26 18:26:15.207068500 java.lang.reflect.InvocationTargetException
      2016-09-26 18:26:15.207068500 	at sun.reflect.GeneratedMethodAccessor1239.invoke(Unknown Source)
      2016-09-26 18:26:15.207069500 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      2016-09-26 18:26:15.207108500 	at java.lang.reflect.Method.invoke(Method.java:498)
      2016-09-26 18:26:15.207108500 	at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$ResponseOutInvoker$1.invoke(DispatchProviderHelper.java:192)
      2016-09-26 18:26:15.207109500 	at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$1.intercept(DispatchProviderHelper.java:83)
      2016-09-26 18:26:15.207109500 	... 3 filtered
      2016-09-26 18:26:15.207114500 	at com.atlassian.jira.rest.exception.ExceptionInterceptor.intercept(ExceptionInterceptor.java:55)
      2016-09-26 18:26:15.207115500 	... 1 filtered
      2016-09-26 18:26:15.207115500 	at com.atlassian.jira.rest.v2.issue.scope.RequestScopeInterceptor.intercept(RequestScopeInterceptor.java:39)
      2016-09-26 18:26:15.207116500 	... 15 filtered
      2016-09-26 18:26:15.207116500 	at com.atlassian.plugins.rest.module.RestDelegatingServletFilter$JerseyOsgiServletContainer.doFilter(RestDelegatingServletFilter.java:159)
      2016-09-26 18:26:15.207122500 	... 1 filtered
      2016-09-26 18:26:15.207122500 	at com.atlassian.plugins.rest.module.RestDelegatingServletFilter.doFilter(RestDelegatingServletFilter.java:69)
      2016-09-26 18:26:15.207123500 	... 16 filtered
      2016-09-26 18:26:15.207123500 	at com.atlassian.servicedesk.internal.web.OperationalStatusAwareHttpFilter.doFilterWhenNotLicensed(OperationalStatusAwareHttpFilter.java:71)
      2016-09-26 18:26:15.207128500 	at com.atlassian.servicedesk.internal.web.OperationalStatusAwareHttpFilter.doFilter(OperationalStatusAwareHttpFilter.java:33)
      2016-09-26 18:26:15.207128500 	... 19 filtered
      2016-09-26 18:26:15.207128500 	at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
      2016-09-26 18:26:15.207129500 	... 42 filtered
      2016-09-26 18:26:15.207133500 	at com.atlassian.plugin.connect.plugin.auth.scope.ApiScopingFilter.doFilter(ApiScopingFilter.java:81)
      2016-09-26 18:26:15.207134500 	... 14 filtered
      2016-09-26 18:26:15.207134500 	at com.atlassian.jira.security.JiraSecurityFilter.lambda$doFilter$0(JiraSecurityFilter.java:76)
      2016-09-26 18:26:15.207134500 	... 1 filtered
      2016-09-26 18:26:15.207134500 	at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:74)
      2016-09-26 18:26:15.207135500 	... 16 filtered
      2016-09-26 18:26:15.207140500 	at com.atlassian.plugins.rest.module.servlet.RestSeraphFilter.doFilter(RestSeraphFilter.java:37)
      2016-09-26 18:26:15.207140500 	... 16 filtered
      2016-09-26 18:26:15.207141500 	at com.atlassian.studio.jira.homepage.CloudHomepageFilter$Action.lambda$nextInFilterChain$1(CloudHomepageFilter.java:110)
      2016-09-26 18:26:15.207141500 	at com.atlassian.studio.jira.homepage.CloudHomepageFilter.doFilter(CloudHomepageFilter.java:68)
      2016-09-26 18:26:15.207141500 	... 19 filtered
      2016-09-26 18:26:15.207146500 	at com.atlassian.plugin.connect.plugin.auth.oauth2.DefaultSalAuthenticationFilter.doFilter(DefaultSalAuthenticationFilter.java:76)
      2016-09-26 18:26:15.207146500 	... 3 filtered
      2016-09-26 18:26:15.207147500 	at com.atlassian.plugin.connect.plugin.auth.user.ThreeLeggedAuthFilter.doFilter(ThreeLeggedAuthFilter.java:110)
      2016-09-26 18:26:15.207147500 	... 3 filtered
      2016-09-26 18:26:15.207147500 	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.lambda$invokeFilterChain$0(CustomerContextSettingFilter.java:181)
      2016-09-26 18:26:15.207155500 	at com.atlassian.servicedesk.internal.utils.context.ReentrantThreadLocalBasedCodeContext.rteInvoke(ReentrantThreadLocalBasedCodeContext.java:139)
      2016-09-26 18:26:15.207156500 	at com.atlassian.servicedesk.internal.utils.context.ReentrantThreadLocalBasedCodeContext.runOutOfContext(ReentrantThreadLocalBasedCodeContext.java:92)
      2016-09-26 18:26:15.207164500 	at com.atlassian.servicedesk.internal.utils.context.CustomerContextServiceImpl.runOutOfCustomerContext(CustomerContextServiceImpl.java:64)
      2016-09-26 18:26:15.207165500 	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.outOfCustomerContext(CustomerContextSettingFilter.java:174)
      2016-09-26 18:26:15.207165500 	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilterImpl(CustomerContextSettingFilter.java:130)
      2016-09-26 18:26:15.207170500 	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilter(CustomerContextSettingFilter.java:121)
      2016-09-26 18:26:15.207171500 	... 4 filtered
      2016-09-26 18:26:15.207171500 	at com.atlassian.jwt.internal.servlet.JwtAuthFilter.doFilter(JwtAuthFilter.java:32)
      2016-09-26 18:26:15.207172500 	... 8 filtered
      2016-09-26 18:26:15.207172500 	at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
      2016-09-26 18:26:15.207176500 	... 4 filtered
      2016-09-26 18:26:15.207176500 	at com.atlassian.web.servlet.plugin.LocationCleanerFilter.doFilter(LocationCleanerFilter.java:36)
      2016-09-26 18:26:15.207177500 	... 40 filtered
      2016-09-26 18:26:15.207177500 	at com.atlassian.jira.util.zipkin.ZipkinTracingFilter.lambda$doFilter$1(ZipkinTracingFilter.java:53)
      2016-09-26 18:26:15.207182500 	at com.github.kristofa.brave.servlet.BraveServletFilter.doFilter(BraveServletFilter.java:59)
      2016-09-26 18:26:15.207183500 	at com.atlassian.jira.util.zipkin.ZipkinTracingFilter.doFilter(ZipkinTracingFilter.java:41)
      2016-09-26 18:26:15.207183500 	... 21 filtered
      2016-09-26 18:26:15.207183500 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      2016-09-26 18:26:15.207188500 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      2016-09-26 18:26:15.207188500 	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
      2016-09-26 18:26:15.207189500 	at java.lang.Thread.run(Thread.java:745)
      2016-09-26 18:26:15.207189500 Caused by: com.querydsl.core.QueryException: Caught PSQLException for insert into public.entity_property_value (property_index_id, value_string, id)
      2016-09-26 18:26:15.207193500 values (?, ?, ?)
      2016-09-26 18:26:15.207194500 	at com.querydsl.sql.DefaultSQLExceptionTranslator.translate(DefaultSQLExceptionTranslator.java:50)
      2016-09-26 18:26:15.207194500 	at com.querydsl.sql.Configuration.translate(Configuration.java:453)
      2016-09-26 18:26:15.207194500 	at com.querydsl.sql.dml.SQLInsertClause.execute(SQLInsertClause.java:396)
      2016-09-26 18:26:15.207199500 	at com.atlassian.jira.database.IdGeneratingSQLInsertClause.executeWithId(IdGeneratingSQLInsertClause.java:73)
      2016-09-26 18:26:15.207204500 	at com.atlassian.jira.database.DefaultQueryDslAccessor.lambda$execute$1(DefaultQueryDslAccessor.java:69)
      2016-09-26 18:26:15.207204500 	at com.atlassian.jira.database.DatabaseAccessorImpl.lambda$runInTransaction$0(DatabaseAccessorImpl.java:98)
      2016-09-26 18:26:15.207205500 	at com.atlassian.jira.database.DatabaseAccessorImpl.executeQuery(DatabaseAccessorImpl.java:67)
      2016-09-26 18:26:15.207209500 	at com.atlassian.jira.database.DatabaseAccessorImpl.runInTransaction(DatabaseAccessorImpl.java:93)
      2016-09-26 18:26:15.207210500 	at com.atlassian.jira.database.DefaultQueryDslAccessor.execute(DefaultQueryDslAccessor.java:68)
      2016-09-26 18:26:15.207210500 	at com.atlassian.jira.index.property.database.SQLEntityPropertyIndexManagerImpl.indexProperty(SQLEntityPropertyIndexManagerImpl.java:132)
      2016-09-26 18:26:15.207217500 	at com.atlassian.jira.index.property.database.SQLEntityPropertyIndexManagerImpl.indexStringProperty(SQLEntityPropertyIndexManagerImpl.java:104)
      2016-09-26 18:26:15.207218500 	at com.atlassian.jira.entity.property.JsonEntityPropertyDbIndexer.indexNewProperties(JsonEntityPropertyDbIndexer.java:108)
      2016-09-26 18:26:15.207218500 	at com.atlassian.jira.entity.property.JsonEntityPropertyDbIndexer.lambda$addEntityPropertyToIndex$0(JsonEntityPropertyDbIndexer.java:53)
      2016-09-26 18:26:15.207223500 	at io.atlassian.fugue.Option$Some.forEach(Option.java:454)
      2016-09-26 18:26:15.207224500 	at com.atlassian.jira.entity.property.JsonEntityPropertyDbIndexer.addEntityPropertyToIndex(JsonEntityPropertyDbIndexer.java:41)
      2016-09-26 18:26:15.207224500 	at com.atlassian.jira.entity.property.JsonEntityPropertyManagerImpl.lambda$put$1(JsonEntityPropertyManagerImpl.java:143)
      2016-09-26 18:26:15.207229500 	at com.atlassian.jira.database.DefaultQueryDslAccessor.lambda$execute$1(DefaultQueryDslAccessor.java:69)
      2016-09-26 18:26:15.207229500 	at com.atlassian.jira.database.DatabaseAccessorImpl.lambda$runInTransaction$0(DatabaseAccessorImpl.java:98)
      2016-09-26 18:26:15.207230500 	at com.atlassian.jira.database.DatabaseAccessorImpl.executeQuery(DatabaseAccessorImpl.java:67)
      2016-09-26 18:26:15.207234500 	at com.atlassian.jira.database.DatabaseAccessorImpl.runInTransaction(DatabaseAccessorImpl.java:93)
      2016-09-26 18:26:15.207234500 	at com.atlassian.jira.database.DefaultQueryDslAccessor.execute(DefaultQueryDslAccessor.java:68)
      2016-09-26 18:26:15.207235500 	at com.atlassian.jira.entity.property.JsonEntityPropertyManagerImpl.put(JsonEntityPropertyManagerImpl.java:132)
      2016-09-26 18:26:15.207235500 	at com.atlassian.jira.entity.property.JsonEntityPropertyManagerImpl.put(JsonEntityPropertyManagerImpl.java:150)
      2016-09-26 18:26:15.207241500 	at com.atlassian.jira.entity.property.BaseEntityPropertyService.setProperty(BaseEntityPropertyService.java:101)
      2016-09-26 18:26:15.207242500 	at com.atlassian.jira.entity.property.DelegatingEntityPropertyService.setProperty(DelegatingEntityPropertyService.java:41)
      2016-09-26 18:26:15.207242500 	... 2 filtered
      2016-09-26 18:26:15.207243500 	at java.lang.reflect.Method.invoke(Method.java:498)
      2016-09-26 18:26:15.207247500 	at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26)
      2016-09-26 18:26:15.207248500 	at com.sun.proxy.$Proxy489.setProperty(Unknown Source)
      2016-09-26 18:26:15.207248500 	... 2 filtered
      2016-09-26 18:26:15.207248500 	at java.lang.reflect.Method.invoke(Method.java:498)
      2016-09-26 18:26:15.207249500 	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302)
      2016-09-26 18:26:15.207253500 	at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56)
      2016-09-26 18:26:15.207253500 	at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60)
      2016-09-26 18:26:15.207254500 	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      2016-09-26 18:26:15.207283500 	at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
      2016-09-26 18:26:15.207283500 	at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
      2016-09-26 18:26:15.207284500 	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      2016-09-26 18:26:15.207290500 	at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:70)
      2016-09-26 18:26:15.207290500 	at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:53)
      2016-09-26 18:26:15.207291500 	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      2016-09-26 18:26:15.207295500 	at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57)
      2016-09-26 18:26:15.207296500 	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      2016-09-26 18:26:15.207296500 	at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
      2016-09-26 18:26:15.207304500 	at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
      2016-09-26 18:26:15.207305500 	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      2016-09-26 18:26:15.207305500 	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
      2016-09-26 18:26:15.207310500 	at com.sun.proxy.$Proxy2657.setProperty(Unknown Source)
      2016-09-26 18:26:15.207310500 	at com.atlassian.jira.rest.v2.entity.property.BasePropertyResource.setProperty(BasePropertyResource.java:140)
      2016-09-26 18:26:15.207310500 	at com.atlassian.jira.rest.v2.issue.IssuePropertyResource.setProperty(IssuePropertyResource.java:91)
      2016-09-26 18:26:15.207311500 	... 283 more
      2016-09-26 18:26:15.207311500 Caused by: org.postgresql.util.PSQLException: ERROR: value too long for type character varying(255)
      2016-09-26 18:26:15.207316500 	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)
      2016-09-26 18:26:15.207316500 	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)
      2016-09-26 18:26:15.207316500 	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
      2016-09-26 18:26:15.207322500 	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555)
      2016-09-26 18:26:15.207323500 	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417)
      2016-09-26 18:26:15.207323500 	... 2 filtered
      2016-09-26 18:26:15.207323500 	at java.lang.reflect.Method.invoke(Method.java:498)
      2016-09-26 18:26:15.207324500 	at org.vibur.dbcp.proxy.AbstractInvocationHandler.targetInvoke(AbstractInvocationHandler.java:109)
      2016-09-26 18:26:15.207328500 	at org.vibur.dbcp.proxy.StatementInvocationHandler.processExecute(StatementInvocationHandler.java:126)
      2016-09-26 18:26:15.207329500 	at org.vibur.dbcp.proxy.StatementInvocationHandler.doInvoke(StatementInvocationHandler.java:75)
      2016-09-26 18:26:15.207329500 	at org.vibur.dbcp.proxy.StatementInvocationHandler.doInvoke(StatementInvocationHandler.java:40)
      2016-09-26 18:26:15.207330500 	at org.vibur.dbcp.proxy.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:80)
      2016-09-26 18:26:15.207334500 	at com.sun.proxy.$Proxy4301.executeUpdate(Unknown Source)
      2016-09-26 18:26:15.207334500 	at com.querydsl.sql.dml.SQLInsertClause.execute(SQLInsertClause.java:382)
      2016-09-26 18:26:15.207335500 	... 333 more
      
      
      
      

      Notes

      This is happening because the value provided is a string longer than 256 characters and "value_string" is set to character varying(255) in the DB.
      When using type text the single words from the string are added to "value_string".

      jira=> \d public.entity_property_value
                                             Table "public.entity_property_value"
            Column       |           Type           |                             Modifiers                              
      -------------------+--------------------------+--------------------------------------------------------------------
       id                | numeric(18,0)            | not null default nextval('entity_property_value_id_seq'::regclass)
       property_index_id | numeric(18,0)            | 
       value_date        | timestamp with time zone | 
       value_string      | character varying(255)   | 
       value_number      | numeric(24,6)            | 
      Indexes:
          "pk_entity_property_value" PRIMARY KEY, btree (id)  
      
      
      
      

      Workaround

      Set the property type to 'text'

            Assignee:
            Unassigned
            Reporter:
            Dario B
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: