Hello,
I made a test that gave me a weird behavior and I don’'t know if it is a bug or if it is a normal behavior.
First lets describe the situation
I have a WF running for domain domain.org.
I create 3 users in my server: a1, a2, a3, and I set all of them in a shared group aGroup. In this group I add also a non existent user: b@somewhere.else.org
If I connect my clients a1, a2 and a3, they can see each other in the aGroup list and they can also see b disconnected.
Now a2 adds a3 in its own roster Friend list for example.
Then I call with a personal plugin deleteUser(a3). The operation deletes a3 from Users but not from sharedGroups. I saw in the JSP page that there are several steps to remove totally a user.
My plugin then removes only user a3 from the jiveuser table and it remains defined in the aGroup shared group but like a remote user: a3@domain.org
If I restart my clients, a1 sees a2 and b disconnected while a2 sees a1 and b disconnected but also a3.
1- Is it normal? I expected that any user of the shared group should see the same things, either all should see a3 or none as it is the case to b.
2- It could be clean to have a deleteUser with a propagate flag to remove users and its associated dependencies (rosters, groups, offline messages, …).
Having a look inside the constructor of Roster class, we have:
if (item.getSubStatus() != RosterItem.SUB_FROM) {
item.setNickname(UserNameManager.getUserName(jid));
rosterItems.put(item.getJid().toBareJID(), item);
}
In a1 case it throws an Exception (UserNotFoundException) while in a2 case, we skip this test.
What is your opinion about that ?