This issue has been created
 
 
Replication / cid:jira-generated-image-avatar-c3569966-07fe-48a4-a767-123c2589f477 REPLICAT-231 Open

Possible ConcurrentModificationException when serializing sending a complete update

 
View issue   ยท   Add comment
 

Issue created

 
cid:jira-generated-image-avatar-7c2a230b-2bc6-4dff-91b6-eceb4ac9f93b Thomas Mortagne created this issue on 24/Feb/26 12:28
 
Summary: Possible ConcurrentModificationException when serializing sending a complete update
Issue Type: cid:jira-generated-image-avatar-c3569966-07fe-48a4-a767-123c2589f477 Bug
Affects Versions: 2.3.7
Assignee: Unassigned
Components: Entity
Created: 24/Feb/26 12:28
Priority: cid:jira-generated-image-static-major-b70c18db-9d8a-49e8-a11b-f6615631bae3 Major
Reporter: Thomas Mortagne
Description:

The following was found in the log:

2026-02-19 06:52:36,271 [Replication serializing] ERROR r.i.m.DefaultReplicationSender - Failed to store the message [id = [19f419a7-1dc2-4bac-87ff-0676718e71c5], type = [entity_update], source = [<null>], date = [Thu Feb 19 06:52:36 GMT 2026], receivers = [<null>], ...] on disk. It will be lost. 
org.xwiki.contrib.replication.ReplicationException: Failed to store sender message with id [19f419a7-1dc2-4bac-87ff-0676718e71c5]
	at org.xwiki.contrib.replication.internal.message.ReplicationSenderMessageQueue.add(ReplicationSenderMessageQueue.java:230)
	at org.xwiki.contrib.replication.internal.message.DefaultReplicationSender.addSend(DefaultReplicationSender.java:148)
	at org.xwiki.contrib.replication.internal.message.DefaultReplicationSender.syncStore(DefaultReplicationSender.java:243)
	at org.xwiki.contrib.replication.internal.message.DefaultReplicationSender.store(DefaultReplicationSender.java:204)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: org.xwiki.contrib.replication.ReplicationException: Failed to write on disk the data of the message with id [19f419a7-1dc2-4bac-87ff-0676718e71c5]
	at org.xwiki.contrib.replication.internal.message.AbstractReplicationMessageStore.storeMessage(AbstractReplicationMessageStore.java:256)
	at org.xwiki.contrib.replication.internal.message.ReplicationSenderMessageStore.store(ReplicationSenderMessageStore.java:136)
	at org.xwiki.contrib.replication.internal.message.ReplicationSenderMessageQueue.add(ReplicationSenderMessageQueue.java:228)
	... 4 common frames omitted
Caused by: java.io.IOException: Failed to serialize the document with reference [wiki:Docs.908d75c4-0d5f-11f1-add4-bdd1bf7811a0.WebHome()] and version [8.1]
	at org.xwiki.contrib.replication.entity.internal.update.DocumentUpdateReplicationMessage.write(DocumentUpdateReplicationMessage.java:211)
	at org.xwiki.contrib.replication.internal.WrappingMutableReplicationSenderMessage.write(WrappingMutableReplicationSenderMessage.java:38)
	at org.xwiki.contrib.replication.internal.message.ReplicationSenderMessageStore.storeData(ReplicationSenderMessageStore.java:119)
	at org.xwiki.contrib.replication.internal.message.ReplicationSenderMessageStore.storeData(ReplicationSenderMessageStore.java:48)
	at org.xwiki.contrib.replication.internal.message.AbstractReplicationMessageStore.storeMessage(AbstractReplicationMessageStore.java:253)
	... 6 common frames omitted
Caused by: com.xpn.xwiki.XWikiException: Error number 2001 in 2: Error serializing document to XML
	at org.xwiki.contrib.replication.entity.internal.update.DocumentUpdateReplicationMessage.toXML(DocumentUpdateReplicationMessage.java:237)
	at org.xwiki.contrib.replication.entity.internal.update.DocumentUpdateReplicationMessage.write(DocumentUpdateReplicationMessage.java:209)
	... 10 common frames omitted
Caused by: com.xpn.xwiki.XWikiException: Error number 2001 in 2: Error serializing XML
	at com.xpn.xwiki.doc.XWikiDocument.toXML(XWikiDocument.java:5226)
	at org.xwiki.contrib.replication.entity.internal.update.DocumentUpdateReplicationMessage.toXML(DocumentUpdateReplicationMessage.java:235)
	... 11 common frames omitted
Caused by: java.util.ConcurrentModificationException: null
	at java.base/java.util.TreeMap$PrivateEntryIterator.nextEntry(TreeMap.java:1208)
	at java.base/java.util.TreeMap$ValueIterator.next(TreeMap.java:1253)
	at com.xpn.xwiki.doc.rcs.XWikiRCSArchive.<init>(XWikiRCSArchive.java:77)
	at com.xpn.xwiki.doc.XWikiDocumentArchive.getArchive(XWikiDocumentArchive.java:248)
	at com.xpn.xwiki.internal.filter.input.XWikiDocumentLocaleEventGenerator.write(XWikiDocumentLocaleEventGenerator.java:129)
	at com.xpn.xwiki.internal.filter.input.XWikiDocumentLocaleEventGenerator.write(XWikiDocumentLocaleEventGenerator.java:62)
	at org.xwiki.filter.instance.internal.input.AbstractBeanEntityEventGenerator.write(AbstractBeanEntityEventGenerator.java:131)
	at com.xpn.xwiki.internal.filter.XWikiDocumentFilterUtils.exportEntity(XWikiDocumentFilterUtils.java:334)
	at com.xpn.xwiki.doc.XWikiDocument.toXML(XWikiDocument.java:5223)
	... 12 common frames omitted

It seems to suggest that the XWikiDocumentArchive in the document cache was modified while Replication was serializing it.

This is clearly an XWiki Standard bug (probably somewhere we modify the archive without cloning it), but to be safe we could make sure to clone the XWikiDocument before serializing it.