igniterealtime/openfire-monitoring-plugin

MAM queries fail on MUC when stanza archiving disabled

Closed this issue · 2 comments

fenuz commented

When stanza archiving for MUC is disabled, MAM queries to MUC rooms fail with the following exception in the error log:

2021.01.20 13:31:25 com.reucon.openfire.plugin.archive.impl.PaginatedMucMessageDatabaseQuery - Unable to parse 'stanza' value as valid XMPP for room room1@conference.orphu, message owner frank@orphu 
org.dom4j.DocumentException: Error on line 1 of document  : Premature end of file.
	at org.dom4j.io.SAXReader.read(SAXReader.java:511) ~[dom4j-2.1.3.jar:?]
	at org.dom4j.DocumentHelper.parseText(DocumentHelper.java:279) ~[dom4j-2.1.3.jar:?]
	at com.reucon.openfire.plugin.archive.model.ArchivedMessage.<init>(ArchivedMessage.java:81) ~[?:?]
	at com.reucon.openfire.plugin.archive.impl.JdbcPersistenceManager.asArchivedMessage(JdbcPersistenceManager.java:616) ~[?:?]
	at com.reucon.openfire.plugin.archive.impl.JdbcPersistenceManager.extractMessage(JdbcPersistenceManager.java:551) ~[?:?]
	at com.reucon.openfire.plugin.archive.impl.PaginatedMucMessageDatabaseQuery.getPage(PaginatedMucMessageDatabaseQuery.java:174) ~[?:?]
	at com.reucon.openfire.plugin.archive.impl.MucMamPersistenceManager.findMessages(MucMamPersistenceManager.java:118) ~[?:?]
	at com.reucon.openfire.plugin.archive.xep0313.IQQueryHandler.retrieveMessages(IQQueryHandler.java:446) ~[?:?]
	at com.reucon.openfire.plugin.archive.xep0313.IQQueryHandler.lambda$handleIQ$2(IQQueryHandler.java:269) ~[?:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
	at java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: org.xml.sax.SAXParseException: Premature end of file.
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204) ~[?:?]
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178) ~[?:?]
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400) ~[?:?]
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327) ~[?:?]
	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1471) ~[?:?]
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1013) ~[?:?]
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605) ~[?:?]
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112) ~[?:?]
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534) ~[?:?]
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888) ~[?:?]
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824) ~[?:?]
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) ~[?:?]
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216) ~[?:?]
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635) ~[?:?]
	at org.dom4j.io.SAXReader.read(SAXReader.java:494) ~[dom4j-2.1.3.jar:?]
	... 13 more

An attempt is made to read the empty stanza field as XML, which naturally fails. After clearing the message archive, and turning on archiving of stanza's, the newly archived messages can be queried.

Using Openfire 4.6.1 with Monitoring Plugin 2.2.0. Version 2.0.0 and 2.1.0 of the plugin do not exhibit this behavior.

This occurs even when archiving is enabled, but messages are stored from older versions that didn't trap the stanza (something that got fixed in 2.2.0)

Is there a larger discussion to be had here, around these issues?

  • Does it make sense to have separate options for 'Archive group chats' and 'Archive stanzas for group chats'?
  • If it does, why don't we have an 'Archive stanzas for one-on-one chats' option?
  • When 'archive stanzas' is disabled, should we even be responding to MAM queries (other than with an error)?

I wonder if there's a difference in XEP-0136 and XEP-0313, with regards to requiring an archived stanza to be able to properly answer a query.

As a side-note: We should not lose track of the "Log Room Conversions" configuration option that is specific to each room.