I recently used the user import plugin to batch-load a number of users. The batch load seemed to work, and the users could log into their designated accounts. Unfortunately, the presence information on other users would not update.
For example, let’'s say I have three users, A, B, and C. All three were batch loaded using the user import plugin. A, B and C each login using Spark clients. A sees B and C in the offline group, despite the fact that B and C have logged in. Same experience for B and C. In our experience, the only way for A to be able to see the real presence of B and C is to (1) invite B and C, and then (2) reboot the client. At that point B and C show up correctly.
I have to assume that there was some data issue with the batch load, whether human error or something else, I don’‘t know. I don’'t know enough about the data model yet to try to identify differences between “working” contacts and non-working. Has anyone else seen this problem? Any ideas where I should start looking?
FYI- here’'s a snippet of the XML load file (the xyz.com is not really the server):
I haven’'t played with that plugin but here are a few questions/tips.
Have you changed the domain of Wildfire? In your example Wildfire’'s domain must be xyz.com.
Have you restarted the server after importing the users and their rosters?
Have you verified what you have in the jiveRoster table?
Could you open a debugger window to collect the roster that the client is receiving? Could you paste that info here and also the packets exchanged during the login/authentication process of the client?
Have you changed the domain of Wildfire? In your example Wildfire’'s domain must be xyz.com.
Wildfire is indeed xyz.com and matches what’'s in the XML.
Have you restarted the server after importing the users and their rosters?
Just tried- didn’'t seem to help.
Have you verified what you have in the jiveRoster table?
I’‘m certainly no expert at the jiveRoster table, but when I look at (for example) A’‘s rows with B and C, they logically match B’‘s and C’'s rows to eachother, regardless of who can actually see eachother.
Could you open a debugger window to collect the roster that the client is receiving? Could you paste that info here and also the packets exchanged during the login/authentication process of the client?
I tried the debugger window but it doesn’'t appear to show the roster retrieval in either the successful or unsuccessful cases. I started it from the Help menu on the client after login, so maybe I missed it. Can I run the debugger prior to login?
I also turned on audit logging on the server. I see the roster coming to A, but even though certain users are in the roster (call them B and C), they are not showing up on the GUI if they are logged in at the time. I see the presence packets coming to A from B and C. So is this maybe some display issue? Is there a log or DB dump I can send you to have a look?
I’'ve done some more testing and here are the details:
A, B, C, and D are all batch loaded and each has the other 2 users in it’'s roster.
A, B and C all login. Each sees ONLY D in their rosters (as logged out). The other logged in users don’'t show up.
If C logs out, A and B will hear the logout chime, but will not see C show up in the Offline Group.
If D then logs in, A and B will see D disappear from the Offline Group, but D will not appear anywhere else.
If A searches for B using the search function and then invited B, nothing will happen (no invite will be sent) and A still cannot see B. If A then logs out and logs back in, A will see B in the Online Group. B will still not see A until B performs the same function.
I know that’'s a lot of info, but I hope it helps…
Sorry for the info-flood, but here’'re a couple of final observations:
In the jiverostergroups table, almost all of the rows look like this: 1008,0,(blank or some name). For the few relationships that I know are visible to eachother (e.g. A->B above), the jiverostergroup row that corresponds to the A->B jiveroster row looks like this: 1007,1,(some name). Do I need to batch update the “rank” column to equal “1”? If so, any idea why that wasn’'t populated by the batch loader.
If I add A and B to a newly create “group” on the wildfire admin web, I see them appear in the jivegroupuser table and they become visible to one-another after login/logout.
After a little of experimenting this appears to be the same issue that I ran into awhile back with Spark. Out of curiosity, have you tried connecting with another client such as Psi?
It does appear to be the same issue- I guess the code change you recommended has not yet been implemented?
I was able to “fix” the problem by doing two things- (1) changing all of the “rank” values in jiverostergroups to ‘‘1’’ and (2) ensuring all entries in that table had a value in the ‘‘groupName’’ field. Everything seems to be solid now.
A couple of wrapup questions:
Should the import plugin be populating these fields, or was my XML wrong?
Is there a data dictionary somewhere that describes the tables in some detail?
Thanks everyone- your comments and questions certainly helped!
It does appear to be the same issue- I guess the code change you recommended has not yet been implemented?
No, it hasn’‘t. But in all fairness I should submit a patch; the temperature here in Denver isn’'t suppose to make it out of the single digits all weekend so this might be a good time to work up a solution.
I was able to “fix” the problem by doing two things- (1) changing all of the “rank” values in jiverostergroups to ‘‘1’’ and (2) ensuring all entries in that table had a value in the ‘‘groupName’’ field. Everything seems to be solid now.
Good to hear.
A couple of wrapup questions:
Should the import plugin be populating these fields, or was my XML wrong?
No. According to jabber:iq:roster schema outlined in the RFC 3921 the group element is optional (minOccurs=’‘0’’). So, while the plugin could certainly force users to populate the group element or populate it automatically with some generic group name that really isn’'t the right solution.
Is there a data dictionary somewhere that describes the tables in some detail?
Yes, take a look at the Database Schema Guide that is part of the Wildfire documentation.