Capability CUSTOMER_INVITE_EMAIL_SUPPRESSED is set more than once for service desk project

Symptoms:

During CMJ snapshot creation / Integrity Check a similar error is reported:

Capability CUSTOMER_INVITE_EMAIL_SUPPRESSED is set more than once for service desk project 'XXX'. Remove unnecessary entries from the database.
com.botronsoft.jira.jiraservicedeskintegration.api.ServiceDeskIntegrationException: Capability CUSTOMER_INVITE_EMAIL_SUPPRESSED is set more than once for service desk project 'XXX'. Remove unnecessary entries from the database.
at com.botronsoft.jira.jiraservicedeskintegration.proxy.impl.CustomerNotificationSettingsProxyImpl310.getCustomerInviteEmailSuppressed(CustomerNotificationSettingsProxyImpl310.java:278)
at com.botronsoft.jira.jiraservicedeskintegration.proxy.impl.CustomerNotificationSettingsProxyImpl310.getCustomerNotificationSettings(CustomerNotificationSettingsProxyImpl310.java:261)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.botronsoft.jira.jiraservicedeskintegration.util.InvocationHandlerImplementation.invoke(InvocationHandlerImplementation.java:20)
at com.sun.proxy.$Proxy5359.getCustomerNotificationSettings(Unknown Source)
at com.botronsoft.jira.jiraservicedeskintegration.proxy.impl.ServiceDeskProxyImpl.getServiceDesk(ServiceDeskProxyImpl.java:134)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.botronsoft.jira.jiraservicedeskintegration.util.InvocationHandlerImplementation.invoke(InvocationHandlerImplementation.java:20)
at com.sun.proxy.$Proxy5363.getServiceDesk(Unknown Source)
at com.botronsoft.jira.jiraservicedeskintegration.ServiceDeskServiceImpl.getServiceDesk(ServiceDeskServiceImpl.java:53)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.botronsoft.jira.jiraservicedeskintegration.util.InvocationHandlerImplementation.invoke(InvocationHandlerImplementation.java:20)
at com.sun.proxy.$Proxy5365.getServiceDesk(Unknown Source)
at com.botronsoft.jira.jiraservicedeskintegration.ServiceDeskServiceFacade.getServiceDesk(ServiceDeskServiceFacade.java:71)
at com.botronsoft.jira.rollout.impl.convert.servicedesk.ServiceDeskTransformer.transform(ServiceDeskTransformer.java:94)
at com.botronsoft.jira.rollout.jobs.IntegrityCheckProgressInterceptor.invoke(IntegrityCheckProgressInterceptor.java:83)
at com.botronsoft.jira.rollout.impl.integrity.DuplicateObjectInterceptor.invoke(DuplicateObjectInterceptor.java:48)
at com.botronsoft.jira.rollout.impl.integrity.ConversionInterceptor.invoke(ConversionInterceptor.java:41)
at com.botronsoft.jira.rollout.impl.configuration.AbstractConfigurationExportStrategy.exportServiceDesks(AbstractConfigurationExportStrategy.java:243)
at com.botronsoft.jira.rollout.impl.configuration.AbstractConfigurationExportStrategy.doExportAdditionalConfiguration(AbstractConfigurationExportStrategy.java:99)
at com.botronsoft.jira.rollout.impl.configuration.FullConfigurationExportStrategy.doExportAdditionalConfiguration(FullConfigurationExportStrategy.java:27)
at com.botronsoft.jira.rollout.impl.configuration.AbstractConfigurationExportStrategy.exportConfiguration(AbstractConfigurationExportStrategy.java:84)
at com.botronsoft.jira.rollout.impl.snapshot.ConfigurationIntegrityCheckServiceImpl.performIntegrityCheck(ConfigurationIntegrityCheckServiceImpl.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302)
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56)
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:70)
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:53)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
at com.sun.proxy.$Proxy5260.performIntegrityCheck(Unknown Source)
at com.botronsoft.jira.rollout.jobs.IntegrityCheckJob.call(IntegrityCheckJob.java:43)
at com.botronsoft.jira.rollout.jobs.IntegrityCheckJob.call(IntegrityCheckJob.java:18)
at com.botronsoft.jira.rollout.impl.jobs.JobSchedulingServiceImpl$ClusterTask.call(JobSchedulingServiceImpl.java:55)

Cause:

There's a DB inconsistency in the AO_54307E_CAPABILITY table: CUSTOMER_INVITE_EMAIL_SUPPRESSED is set more than once for the 'XXX' project.

That looks like a known JSD issue: https://jira.atlassian.com/browse/JSDSERVER-5972.


Resolution:

There are a couple of ways to go about this:

  1. Try to toggle that option on-off/off-on - this will not change the settings in the project but will force an update in the DB. Ensure that the setting has been saved successfully by changing the page and going back to Customer Notifications page. 
  2. Delete the duplicate row directly from the DB. The name of the table is AO_54307E_CAPABILITY. Note that this will require a DB access. After you delete the row in the DB, the internal Jira caches have to be refreshed. You can do this from the Advanced menu in CMJ.