3.3.3 -> 3.4.1 upgrade results in conference rooms being unavailable

Same here yesterday.

My solution:

  • disable all plugins (maybe only the search plugin is enough). I just delete the *.jar file.

  • reenable the plugins. Copy *.jar files back to the plugin directory.

  • restart the openfire server.

After that, everything works fine for me.

No dice, I cleared out all plugins other than admin.

The sever seems to forget about the rooms that were created, only offering ‘lobby’ but trying to connect to that fails.

Via the web console, it only lists ‘lobby’, I try to add, oh ‘confluence’, and it says '!http://auk:9590/images/error-16x16.gif!

Error creating the room. A room with the request ID already exists.’, strange.

Even stranger, I now use the client to browse group chat and there is another group ‘confluence’, but I cant join it because apparently it doenst exist.

I think there are some problems with 3.4.1 , Ill wait for the next revision

Hi Andy! Are you seeing any exceptions or anything interesting in the logs when you try to join the room that does exist but doesn’t exist? How about when you try to add it? On my personal install, I tried running through this and I’m getting a different behavior … basically it’s saying I don’t have access to perform this action. Trying to track down why that’s occurring, but do you have this installed in a place where you could help us try to track down what’s going on?

Ok, it turns out my issue was due to overprotective access controls. =) I can not reproduce the issue you are running into at all. I’ve added and removed and edit groups to my hearts content. Nothing appears to be misbehaving. =/

I can confirm that search does not work “Unable to contact search service”. Logs on the client machine show:

SEVERE: Unable to load search services.

service-unavailable(503)

But I don’t see any errors on the server side of things.

-Joe

Hey Joe,

Do you have the search plugin installed in your server? Which client are you using? The Openfire server running in jivesoftware.com has the search plugin and you can use it for testing. I just used it from Exodus and it worked fine. You might also want to check the error logs on the server.

Thanks,

– Gato

yes, the search plugin is installed and configured correctly. (In fact I tested this with only that plugin installed)

Is there another way to connect to the search function to see if the issue is Openfire or Spark?

We are using Spark 2.5.7 and openfire 3.4.1 (spark 2.5.7 was working fine with openfire 3.3)

-Joe

Hey Joe,

As a quick test could you run Exodus and tell us what you see when you press F11? In Spark there is a similar browser that can be opened when pressing F8. In both cases you should see the User Search service. If you do then click on the magnifier button in Exodus and check if it works for you.

Thanks,

– Gato

I have the same problem, I think I have tried every possible thing, removing plugins, importing exporting database, deletint, removing, creating group chat, nothing. And when group chat is created I try to edit some values i got this:

org.jivesoftware.openfire.muc.ConflictException
     at org.jivesoftware.openfire.muc.spi.IQOwnerHandler.processConfigurationForm(IQOwnerHandler.java:365)
     at org.jivesoftware.openfire.muc.spi.IQOwnerHandler.handleDataFormElement(IQOwnerHandler.java:311)
     at org.jivesoftware.openfire.muc.spi.IQOwnerHandler.handleIQ(IQOwnerHandler.java:89)
     at org.jivesoftware.openfire.admin.muc_002droom_002dedit_002dform_jsp._jspService(muc_002droom_002dedit_002dform_jsp.java:288)
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
     at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
     at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
     at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
     at org.jivesoftware.util.LocaleFilter.doFilter(LocaleFilter.java:65)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
     at org.jivesoftware.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:41)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
     at org.jivesoftware.admin.PluginFilter.doFilter(PluginFilter.java:69)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
     at org.jivesoftware.admin.AuthCheckFilter.doFilter(AuthCheckFilter.java:98)
     at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
     at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
     at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
     at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
     at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
     at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
     at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)
     at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
     at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
     at org.mortbay.jetty.Server.handle(Server.java:313)
     at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
     at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:830)
     at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
     at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
     at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
     at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396)
     at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)

Hey Zvonimir,

I don’t think the problem you are having is related to the upgrade process. You are trying to configure a room and leave it without owners. Since you are editing the room from the admin console, the edit room page will just keep the list of room owners that the room previously had. That means that the room owners were empty before you edit the room. Could you edit the room from a client instead? Make sure that you specify a room owner and then edit it from the admin console to verify that you can edit rooms from the admin console.

Thanks,

– Gato

I even tried that, but when I delete room, then create the same room it says:

Error creating the room. A room with the request ID already exists

But room will be created anyway, then I try to “Allow Occupants to invite Others” or something else then it throws an Exception.

I cant reach group chat from client either… it says error 404 from miranda

Exodus shows the following:

Spark Updater, Yahoo! Transport, Socks 5 Bytestream, Public Chatrooms, Publish-Subscribe service, User Search, and AIM Transport.

Spark shows:

nothing.

-Joe

Hey Joe,

It seems to be a problem in Spark then. Yo should have been able to search users from Exodus then. BTW, which Spark version are you using? And how are you connecting to the server? Are you using the advanced window to indicate the server? Is the XMPP domain of your server registered in a DNS server? If you open the Spark debugger window and post here the XML that you exchange with the server at the moment of login and also when doing the server will probably help a lot.

Thanks,

– Gato

Oh, I did notice something. We usually log in with just the server name (IMSERVER) and not the FQDN of the server. If I put in the FQDN, then search seems to start working…but only on the windows build of SPARK…

Hey Zvonimir,

Just as a quick test. Could you create an entirely new room from the admin console and edit it? Also when you delete the room can you check that the room was in fact removed from the database (if it was persistent)?

Thanks,

– Gato

I can search via Exodus.

Spark version is 2.5.7 on mac, windows, and linux

We are not using the Advanced window. The Openfire server is listed in DNS but there are no SRV records (should there be?)

Again, this was all working with the earlier version of Openfire and the same versions of Spark.

Do you want the Raw Sent Packet output?

-Joe

Oh, I somehow managed to get it work. I deleted from database, then created some other room, then deleted it, then created another, and whoh it worked!

Thank you for your time, now everything is fine!

Hi, I work with Joe. The problem seems to be related to the fact that there now appear to be two jabber::iq:searches on the server. One for conference rooms and one for users. The conference room appears to win in this situation, and there doesnt seem to be a way to pick the search in spark.

Sam.

The query is:

<iq id=“4CNRo-30” to=“conference.imserver.spimageworks.com” type=“get”>

<query xmlns=“jabber:iq:search”/>

</iq>

The Response is:

<iq id=“4CNRo-30” to="sam@imserver.spimageworks.com/spark" from=“conference.imserver.spimageworks.com” type=“result”>

<query xmlns=“jabber:iq:search”>

<x xmlns=“jabber:x:data” type=“form”>

<title>Chat Rooms Search</title>

<instructions>instrunctions</instructions>

<field var=“FORM_TYPE” type=“hidden”>

<value>jabber:iq:search</value>

</field>

<field label=“Name” var=“name” type=“text-single”/>

<field label=“Name must match exactly” var=“name_is_exact_match” type=“boolean”/>

<field label=“Subject” var=“subject” type=“text-single”/>

<field label=“Number of users” var=“num_users” type=“text-single”/>

<field label=“Max number allowed of users” var=“num_max_users” type=“text-single”/>

<field label=“Include password protected rooms” var=“include_password_protected” type=“boolean”/>

</x>

</query>

</iq>

Hey Sam,

That is a good analysis. When you send an IQ to a component (like in your XML example) the component should be the one answering the IQ packet. If the IQ packet has no TO attribute or the TO attribute matches the server’s domain then the IQ packet will be handled by the server (in this case should be the IQ search module).

In summary, it is fine (in your example) that the MUC service is receiving the IQ packet. If you send another IQ packet with no TO or TO equals imserver.spimageworks.com then the IQ search handler will handle the IQ packet.

Regards,

– Gato

This is sounding like a spark issue, so I may repost. So what I am seeing is that spark isnt expecting the chatroom search. So what I have done is to modify the Service discovery search from:

if (info.containsFeature(“jabber:iq:search”)) {

searchServices.add(item.getEntityID());

}

to:

if (info.containsFeature(“jabber:iq:search”) && !info.containsFeature(“http://jabber.org/protocol/muc”)) {

searchServices.add(item.getEntityID());

}

Does that make sense?

Sam.