My experimentation on another problem led me to this discovery about how Wildfire (2.6.2 at least) processes offline messages.
Assuming the offline storage limit is set large enough to store them. Send 70,000 small messages to an offline user.
Wildfire receives all the messages, then writes the messages into offline storage (the SQL DB).
When the recipient comes online, all 70,000 messages are removed from storage and queued to be sent to the user.
Anytime the recipient terminates prior to receiving all messages in the servers send queue, the messages are disposed. Since the “offline” messages became “online” messages, that means them also.
From console page:
“, offline messages, like email, can take up a significant amount of space on a server.”
Unlike email, if you don’'t read them when you come online, they will be disposed of.
With such number of offline message, besides the message disposing problem, you may end up with a huge memory waste, due to the collection that OfflineMessageStore.getMessages() will return.
At the same time, I dont know if some kind of signaling must be implemented (it would slow down the message retrieval but help preventing memory usage and partly solve the message queueing issue) or if the offline message must be considered a commodity and even implement a due timeout for them as strategy.
It may be due to the admin to decide what to enforce relating to offline messages.
Just my 2c.
The test were an extreme case. A limit of 65,535 in the Smack client is certainly reasonable. Why does it not also limit sending?
Although offline storage is limited in server configuration, there are no other limits per user as far as normal messaging goes. The ability for a normal user to bring down any type of server software is a great weakness.