When a room occupant sends an availability update to a host in an Openfire cluster, other users cannot join the room from other hosts in the cluster. The availability update causes the other hosts to lose an occupant's role and affiliation. New occupants encounter an NPE when joining and are prevented from joining the room. Specifically, the NPE occurs when Openfire attempts to send initial presences for current occupants.
Remote hosts in the cluster lose the occupant's association because the local room simply broadcasts the presence packet for the occupant's availability update. Because it is from the client, this packet does not have the occupant's role or affiliation. The remote hosts treat the presence packet as the occupant's presence without modification.
This fix changes the order in which Openfire handles an availability update. First, it updates its local view of an occupant's presence. This populates the correct association. Then, it broadcasts the updated presence to remote hosts in the cluster.
https://github.com/igniterealtime/Openfire/pull/536
When a room occupant sends an availability update to a host in an
Openfire cluster, other users cannot join the room from other hosts in
the cluster. The availability update causes the other hosts to lose an
occupant's role and affiliation. New occupants encounter an NPE when
joining and are prevented from joining the room. Specifically, the NPE
occurs when Openfire attempts to send initial presences for current
occupants.
Remote hosts in the cluster lose the occupant's association because the
local room simply broadcasts the presence packet for the occupant's
availability update. Because it is from the client, this packet does not
have the occupant's role or affiliation. The remote hosts treat the
presence packet as the occupant's presence without modification.
This fix changes the order in which Openfire handles an availability
update. First, it updates its local view of an occupant's presence. This
populates the correct association. Then, it broadcasts the updated
presence to remote hosts in the cluster.