Content Filter: Notifications Not Working?

Content Filter has stopped sending notifications, and I can’t figure out why. I’ve tested and verified that all other features work fine. Just no email or IM notifications. We migrated from the embedded DB to SQL Server. We’ve also made some changes to our Exchange server, but not sure if exactly what’s causing the problem.

Turned on debug logging, hoping to get some answers (personal details masked):


2013.04.22 10:34:35 org.jivesoftware.openfire.plugin.ContentFilterPlugin - Content filter: intercepted packet:

unicorn

krK384

<offline/>

<composing/>

2013.04.22 10:34:35 org.jivesoftware.openfire.plugin.ContentFilterPlugin - Content filter: content matched? true

2013.04.22 10:34:35 org.jivesoftware.openfire.plugin.ContentFilterPlugin - Content filter: sending violation notification

2013.04.22 10:34:35 org.jivesoftware.openfire.plugin.ContentFilterPlugin - Content filter: include original msg? true

2013.04.22 10:34:35 org.jivesoftware.openfire.plugin.ContentFilterPlugin - Content filter: sending email notification

2013.04.22 10:34:35 org.jivesoftware.openfire.plugin.ContentFilterPlugin - Content filter: allowed content:

***

krK384

<offline/>

<composing/>

So, it looks like it’s working. It says sending email notification, but nothing comes through. Thinking about digging thru the Exchange server logs, see if I can find anything. What’s weird is when I test SMTP under Server > Server Manager > Email Settings, it works perfectly.

I understand this plugin is no longer being updated, and the developer fell of the face of the planet, but that doesn’t help me. Hopefully someone else here can at least point me in the right direction. Thanks in advance guys.

Pulled this from the error.log:


2013.04.22 10:32:03 org.jivesoftware.openfire.plugin.ContentFilterPlugin - Content Filter: Failed to send email, please review Openfire setup

java.lang.OutOfMemoryError: unable to create new native thread

at java.lang.Thread.start0(Native Method)

at java.lang.Thread.start(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor.addIfUnderMaximumPoolSize(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor.execute(Unknown Source)

at java.util.concurrent.AbstractExecutorService.submit(Unknown Source)

at org.jivesoftware.util.TaskEngine.submit(TaskEngine.java:92)

at org.jivesoftware.util.EmailService.sendMessages(EmailService.java:161)

at org.jivesoftware.util.EmailService.sendMessage(EmailService.java:143)

at org.jivesoftware.util.EmailService.sendMessage(EmailService.java:258)

at org.jivesoftware.openfire.plugin.ContentFilterPlugin.sendViolationNotificationE mail(ContentFilterPlugin.java:650)

at org.jivesoftware.openfire.plugin.ContentFilterPlugin.sendViolationNotification( ContentFilterPlugin.java:622)

at org.jivesoftware.openfire.plugin.ContentFilterPlugin.interceptPacket(ContentFil terPlugin.java:528)

at org.jivesoftware.openfire.interceptor.InterceptorManager.invokeInterceptors(Int erceptorManager.java:239)

at org.jivesoftware.openfire.MessageRouter.route(MessageRouter.java:83)

at org.jivesoftware.openfire.plugin.ContentFilterPlugin.sendViolationNotificationI M(ContentFilterPlugin.java:632)

at org.jivesoftware.openfire.plugin.ContentFilterPlugin.sendViolationNotification( ContentFilterPlugin.java:614)

at org.jivesoftware.openfire.plugin.ContentFilterPlugin.interceptPacket(ContentFil terPlugin.java:528)

at org.jivesoftware.openfire.interceptor.InterceptorManager.invokeInterceptors(Int erceptorManager.java:239)

at org.jivesoftware.openfire.MessageRouter.route(MessageRouter.java:83)


Looks like it keeps looping the last 4-5 lines over and over.

Found this article on it:

the more memory you give to the JVM the more likely you are to get java.lang.OutOfMemoryError: unable to create new native thread exceptions when you have many threads.”

I’m wondering now if migrating the DB to SQL Server has anything to do with this, since it seems Java has more available memory now:

Java Memory


305.86 MB of 1484.81 MB (20.6%) used

The embedded database is an in.-memory database. So it will consume “Java Mameory”. The more data the database contains (users, offline messages, archives, …) the more memory is needed.

the more memory you give to the JVM the more likely you are to get java.lang.OutOfMemoryError: unable to create new native thread exceptions when you have many threads.”

This is true as the amount of physical / native memory is limited. Setting Xmx to more than the half size of the physical memory may cause problems as the native memory contains the operating system, Java code cache, Java PermGen, and the Java native thread and memory management.

Haven’t had time to dedicate to this problem due to other higher priority projects, but now I do.

So to summarize the current status:

  • reject/allow and mask both work
  • reject notification message appears correctly in spark
  • mask appears correctly in spark
  • content match notification: notify by email does not work

We migrated from embedded DB to SQL Server. This is when the email notifications stopped working. Everything else, all other plugs, openfire features, etc. work fine. Just no email notifications.

Before I start digging thru source code (I’m a SysAdm, java code is new territory), does anyone have experience with this issue, or have any suggestions?