Uploaded image for project: 'Confluence Data Center'
  1. Confluence Data Center
  2. CONFSERVER-101324

Upgrading to Confluence 9.2.9 will fail with "Deep copy failed" if SMTP configuration includes lastSuccessful field

XMLWordPrintable

      Version info

      • Upgrading to Confluence 9.2.9 from any prior version

      Description

      Issue Summary

      When upgrading to Confluence 9.2.9, if the SMTP mail server configuration in Bandana includes the lastSuccessful field, the upgrade will fail with the error message "Deep copy failed for mail server config", preventing Confluence from starting.

      Steps to Reproduce

      1. Install Confluence version X (e.g., 8.5.x).
      2. Run the following against Confluence's database:
        INSERT INTO bandana (bandanaid, bandanacontext, bandanakey, bandanavalue)
        VALUES (
            9076763, 
            '_GLOBAL', 
            'atlassian.confluence.smtp.mail.accounts', 
            '<linked-hash-map>
              <entry>
                <long>1705372565455</long>
                <com.atlassian.confluence.jmx.JmxSMTPMailServer serialization="custom">
                  <com.atlassian.mail.server.AbstractMailServer>
                    <default>
                      <connectionTimeout>10000</connectionTimeout>
                      <debug>false</debug>
                      <isAuthenticating>true</isAuthenticating>
                      <timeout>10000</timeout>
                      <tlsRequired>false</tlsRequired>
                      <hostname>localhost</hostname>
                      <id>1705372565455</id>
                      <mailProtocol>SMTP</mailProtocol>
                      <name>localhost</name>
                      <password>password123</password>
                      <port>25</port>
                      <props>
                        <property name="mail.debug" value="false"/>
                        <property name="mail.transport.protocol" value="smtp"/>
                        <property name="mail.smtp.port" value="25"/>
                        <property name="mail.smtp.quitwait" value="false"/>
                        <property name="mail.smtp.timeout" value="10000"/>
                        <property name="mail.smtp.auth" value="true"/>
                        <property name="mail.smtp.host" value="localhost"/>
                        <property name="mail.smtp.connectiontimeout" value="10000"/>
                      </props>
                      <username>admin@localhost.local</username>
                    </default>
                  </com.atlassian.mail.server.AbstractMailServer>
                  <com.atlassian.mail.server.impl.SMTPMailServerImpl>
                    <default>
                      <isSessionServer>false</isSessionServer>
                      <removePrecedence>false</removePrecedence>
                      <tlsHostnameCheckRequired>true</tlsHostnameCheckRequired>
                      <defaultFrom>admin@localhost.local</defaultFrom>
                      <prefix>Confluenceserver</prefix>
                    </default>
                  </com.atlassian.mail.server.impl.SMTPMailServerImpl>
                  <com.atlassian.confluence.jmx.JmxSMTPMailServer>
                    <default>
                      <emailsAttempted>
                        <value>1541</value>
                      </emailsAttempted>
                      <emailsSent>
                        <value>1</value>
                      </emailsSent>
                      <fromName>Confluence</fromName>
                      <lastSuccessful>2024-01-23 06:49:13.18 UTC</lastSuccessful>
                    </default>
                  </com.atlassian.confluence.jmx.JmxSMTPMailServer>
                </com.atlassian.confluence.jmx.JmxSMTPMailServer>
              </entry>
            </linked-hash-map>'
        );
        
      3. Upgrade Confluence to version 9.2.9

      Expected Results

      Confluence upgrades successfully to version 9.2.9 without errors (and starts up as expected).

      Actual Results

      Confluence fails to start after the upgrade with the below error:

      atlassian-confluence.log
      2025-10-27 12:40:28,034 ERROR [Catalina-utility-1] [atlassian.confluence.plugin.PluginFrameworkContextListener] launchUpgrades Upgrade failed, application will not start: java.lang.RuntimeException: Deep copy failed for mail server config.
      com.atlassian.confluence.upgrade.UpgradeException: java.lang.RuntimeException: Deep copy failed for mail server config.
      	at com.atlassian.confluence.upgrade.impl.DefaultUpgradeFinalizationManager.finalizeIfNeeded(DefaultUpgradeFinalizationManager.java:130)
      	at com.atlassian.confluence.upgrade.impl.DefaultUpgradeFinalizationManager.finalizeIfNeeded(DefaultUpgradeFinalizationManager.java:104)
      	at com.atlassian.confluence.upgrade.impl.DefaultUpgradeManager.finalizeIfNeeded(DefaultUpgradeManager.java:109)
      	at com.atlassian.confluence.upgrade.AbstractUpgradeManager.runAllUpgradeTasks(AbstractUpgradeManager.java:185)
      	at com.atlassian.confluence.upgrade.AbstractUpgradeManager.upgrade(AbstractUpgradeManager.java:140)
      	at com.atlassian.confluence.plugin.PluginFrameworkContextListener.launchUpgrades(PluginFrameworkContextListener.java:127)
      	at com.atlassian.confluence.plugin.PluginFrameworkContextListener.contextInitialized(PluginFrameworkContextListener.java:83)
      	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4057)
      	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4501)
      	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
      	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
      	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
      	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
      	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
      	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
      	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
      	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
      	at java.base/java.lang.Thread.run(Thread.java:1583)
      Caused by: java.lang.RuntimeException: Deep copy failed for mail server config.
      	at com.atlassian.confluence.mail.MailServerSerializationService.deepCopy(MailServerSerializationService.java:38)
      	at com.atlassian.confluence.mail.ConfluenceMailServerManager.deepCopyUsingSerialisation(ConfluenceMailServerManager.java:381)
      	at com.atlassian.confluence.mail.ConfluenceMailServerManager.saveServerMap(ConfluenceMailServerManager.java:250)
      	at com.atlassian.confluence.upgrade.upgradetask.SecureMailServerSecretUpgradeTask.doUpgrade(SecureMailServerSecretUpgradeTask.java:66)
      	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
      	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
      	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
      	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379)
      	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
      	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223)
      	at jdk.proxy4/jdk.proxy4.$Proxy294.doUpgrade(Unknown Source)
      	at com.atlassian.confluence.upgrade.impl.DefaultUpgradeFinalizationManager.actionOnUpgradeTask(DefaultUpgradeFinalizationManager.java:156)
      	at com.atlassian.confluence.upgrade.impl.DefaultUpgradeFinalizationManager.finalizeIfNeeded(DefaultUpgradeFinalizationManager.java:122)
      	... 17 more
      Caused by: com.atlassian.confluence.impl.util.serialize.exception.DisallowedClassException: Unexpected class in serialized data: java.util.Date
      	at com.atlassian.confluence.impl.util.serialize.SecureClassLoaderAwareObjectInputStream.resolveClass(SecureClassLoaderAwareObjectInputStream.java:30)
      	at java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2061)
      	at java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1927)
      	at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2252)
      	at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1762)
      	at java.base/java.io.ObjectInputStream$FieldValues.<init>(ObjectInputStream.java:2618)
      	at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2469)
      	at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2284)
      	at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1762)
      	at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:540)
      	at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:498)
      	at java.base/java.util.HashMap.readObject(HashMap.java:1560)
      	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
      	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
      	at java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1102)
      	at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2444)
      	at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2284)
      	at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1762)
      	at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:540)
      	at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:498)
      	at com.atlassian.confluence.impl.util.serialize.SecureObjectSerializer.deserialize(SecureObjectSerializer.java:35)
      	at com.atlassian.confluence.mail.MailServerSerializationService.deepCopy(MailServerSerializationService.java:35)
      	... 32 more
      

      Workaround

      1. Shut down Confluence
      2. Take a full database backup
      3. Run the following against Confluence's Postgres database:
        UPDATE bandana
        SET bandanavalue = REGEXP_REPLACE(
            bandanavalue, 
            '<lastSuccessful>[^<]*</lastSuccessful>', 
            '', 
            'g')
        WHERE bandanacontext = '_GLOBAL'
          AND bandanakey = 'atlassian.confluence.smtp.mail.accounts';
        
        • For other databases, work with your DBA to remove the lastSuccessful entry in atlassian.confluence.smtp.mail.accounts:
          select * from bandana WHERE BANDANAKEY = 'atlassian.confluence.smtp.mail.accounts';
      4. Start Confluence again

              d98760591ce3 Sagar Deshmukh
              10fa531f7f9c Harrison
              Votes:
              8 Vote for this issue
              Watchers:
              13 Start watching this issue

                Created:
                Updated: