-
Type:
Bug
-
Resolution: Fixed
-
Priority:
High
-
Affects Version/s: 10.2.11, 10.2.13, 10.2.14, 10.2.15, 10.2.16, 10.2.17
-
Component/s: Universal Plugin Manager / Manage apps
-
4
-
Severity 2 - Major
-
2
-
RtB - Service ops & Tech entropy
Issue Summary
From Confluence 10.2.11+, apps and modules enabled status are persisted in PLUGIN_SETTING.
Updating apps in Confluence Administration » Manage Apps in a multi-node Cluster can revert apps and modules back to their default state.
Example:
- Without an entry in PLUGIN_SETTING for namespace=plugin.manager.state.Map:
- Apps revert to Enabled
- Some internal modules such as confluence.macros.html:html-include revert to disabled
Steps to Reproduce
This issue can manifest itself in two different ways.
App Update
- Install Confluence Data Center with at least 3 nodes (the more nodes, the more likely the issue will occur)
- Install several Apps that are older than the latest (so that the Update button appears). e.g.
- https://marketplace.atlassian.com/download/app/com.gliffy.integration.confluence/9003001007761/DATACENTER/artifact
- https://marketplace.atlassian.com/download/app/nl.avisi.confluence.plugins.numberedheadings/300002270/DATACENTER/artifact
- https://marketplace.atlassian.com/download/app/de.scandio.confluence.plugins.hideelements-macro/500100100/DATACENTER/artifact
- https://marketplace.atlassian.com/download/app/com.onresolve.confluence.groovy.groovyrunner/400300108460/DATACENTER/artifact
- https://marketplace.atlassian.com/download/app/com.mxgraph.confluence.plugins.diagramly/1600000100/DATACENTER/artifact
- https://marketplace.atlassian.com/download/app/biz.artemissoftware.confluence.multiexcerpt.MultiExcerptMacro/5002003210/DATACENTER/artifact
- https://marketplace.atlassian.com/download/app/com.adaptavist.confluence.contentFormattingMacros/900002301/DATACENTER/artifact
- https://marketplace.atlassian.com/download/app/com.simplenia.confluence.plugins.polls/400000080/DATACENTER/artifact
- https://marketplace.atlassian.com/download/app/de.scandio.confluence.plugins.task-reminder/400000000/DATACENTER/artifact
- https://marketplace.atlassian.com/download/app/tableau-plugin/734/DATACENTER/artifact
- https://marketplace.atlassian.com/download/app/de.griffel.confluence.plugins.plant-uml/90202601011/DATACENTER/artifact
- Once installed, disable all the Apps in Manage Apps screen

- Once all the apps are disabled, pick any outdated app (such as Confluence Cloud Migration Assistant) and press Update
- Perform a rolling restart of Confluence
- Check the app status in Confluence Administration » Manage Apps
Simultaneous Node Restart
In a multi-node environment, start up all nodes simultaneously or within the time it takes for the node to normally start up and be ready for service.
Expected Results
App Update
All the installed third party apps (that were disabled) should remain as disabled.
Simultaneous Node Restart
All system plugins should be enabled after start up.
Actual Results
App Update
- Once an app is updated, it will broadcast for other nodes to update the app on their local nodes.
- This occurs simultaneously across the cluster, leading to conflicts when nodes read from or write to PLUGIN_SETTING
with random rows inadvertently removed
- This occurs simultaneously across the cluster, leading to conflicts when nodes read from or write to PLUGIN_SETTING
- Random apps are inadvertently re-enabled
- Checking atlassian-confluence.log will show either of these errors:
2026-09-04 06:55:23,766 WARN [nc.confluence.event-1] [confluence.impl.hibernate.ConfluenceHibernateTransactionManager] doCommit Commit failed. Rolling back. Error: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; statement executed: delete from PLUGIN_SETTING where NAMESPACE=? and SETTING_KEY=? 2026-09-04 06:55:23,772 WARN [nc.confluence.event-1] [confluence.impl.hibernate.ConfluenceHibernateTransactionManager] doRollback Performing rollback. Transactions:\n ->[org.springframework.data.jpa.repository.support.SimpleJpaRepository.deleteById]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT (Session #2140378009) 2026-09-04 06:55:23,796 ERROR [nc.confluence.event-1] [confluence.impl.plugin.PluginSettingsPluginStateStore] save Exception when saving plugins state to the database. Saving to in memory state. org.springframework.orm.hibernate5.HibernateOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; statement executed: delete from PLUGIN_SETTING where NAMESPACE=? and SETTING_KEY=? at org.springframework.orm.hibernate5.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:247) at org.springframework.orm.hibernate5.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:788) at org.springframework.orm.hibernate5.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:658) .. at jdk.proxy4/jdk.proxy4.$Proxy239.deleteById(Unknown Source) at com.atlassian.confluence.impl.settings.ConfluencePluginSettings.removeActual(ConfluencePluginSettings.java:202) at com.atlassian.sal.core.pluginsettings.AbstractStringPluginSettings.remove(AbstractStringPluginSettings.java:166) at com.atlassian.confluence.impl.settings.ConfluencePluginSettings.remove(ConfluencePluginSettings.java:192) .. at com.atlassian.plugin.manager.store.DelegatingPluginPersistentStateStore.save(DelegatingPluginPersistentStateStore.java:21) at com.atlassian.confluence.impl.plugin.CachingPluginPersistentStateStore.save(CachingPluginPersistentStateStore.java:32) .. at com.atlassian.confluence.impl.plugin.ConfluencePluginManager.processClusteredInstallEvent(ConfluencePluginManager.java:225) at com.atlassian.confluence.impl.plugin.ConfluencePluginManager.processPluginEvent(ConfluencePluginManager.java:187) at com.atlassian.confluence.impl.plugin.ConfluencePluginManager.onClusterEvent(ConfluencePluginManager.java:152)
2026-09-04 08:27:59,366 WARN [nc.confluence.event-1] [confluence.impl.plugin.PluginSettingsPluginStateStore] lambda$load$1 Unable to deserialize plugin state entry for key hash d18349d2ec626b530312c5ee7a3039ca. Skipping entry. Error: Cannot invoke \"com.atlassian.confluence.impl.plugin.PluginSettingsPluginStateStore$PluginStateStoreEntry.getKey()\" because \"stateEntry\" is null
Simultaneous Node Restart
Within the application logs, an entry like the following will be recorded indicating that Confluence couldn't persist the state of a given plugin most likely due to a concurrent race condition:
2026-07-21 01:05:05,084 ERROR [Catalina-utility-1] [confluence.impl.plugin.PluginSettingsPluginStateStore] save Exception when saving plugins state to the database. Saving to in memory state. org.springframework.orm.hibernate5.HibernateOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; statement executed: delete from PLUGIN_SETTING where NAMESPACE=? and SETTING_KEY=? at org.springframework.orm.hibernate5.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:247) ... Caused by: org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; statement executed: delete from PLUGIN_SETTING where NAMESPACE=? and SETTING_KEY=?
As a result of not being able to persist the plugin state, Confluence then disables the affected plugin:
2026-07-21 01:05:05,104 ERROR [Catalina-utility-1] [atlassian.plugin.manager.DefaultPluginManager] lambda$enableConfiguredPluginModule$32 There was an error loading the descriptor 'mention-hipchat-notification-template' of plugin 'com.atlassian.confluence.plugins.confluence-mentions-plugin'. Disabling. org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:938) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:754) ... at jdk.proxy4/jdk.proxy4.$Proxy355.enablePluginModule(Unknown Source)
This manifestation of the issue has been seen to affect the following plugins:
- confluence-notifications-batch-plugin
- confluence-mentions-plugin
- confluence-app-monitoring
- share-page
- confluence-inline-tasks
- confluence-content-notifications-plugin
- confluence-inline-comments
Workarounds
App Update
- Scale the Cluster down to one node before updating Apps.
- Once all the required apps are updated, scale Confluence back to the required number of nodes
Simultaneous Node Restart
Stagger start the nodes by allowing each node several minutes of time to complete it's individual start up.