Build: #1218 was successful Manual run by daryl herzmann

Code commits

Showing 100 of 102 code changes

Openfire (master)

  • Guus der Kinderen

    Guus der Kinderen 4c3dff606fb7dfd994f688f37371c5ae146e7652

    Add diagnostics for RoutingTableImpl-maintained user and anonuser route state
    Whenever a clustered cache is used, two supporting data structures are typically needed:
    - one that can be used to 'repopulate' the cache after it flips between clustered and non-clustered, that holds local data.
    - one that is used after a cluster breakage, that holds non-local data.

    These three data structures (cache, local, non-local) have some degree of data duplication between them. It is therefor important that these data structures remain consistent.

    This commit introduces a method that checks for consistency, reporting its detailed findings as text. A JSP page (that isn't linked in a menu, you need to know its URL) is also added, to easily look at the data in a running server.

    There's much to be improved here (I should've used a better data structure for this reporting), and much to be added (basically, all other caches in Openfire), but this is a start, based on which I've already been able to squash some bugs.

    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version 4c3dff606fb7dfd994f688f37371c5ae146e7652)
    • xmppserver/src/main/webapp/system-clustering-data-consistency-check.jsp (version 4c3dff606fb7dfd994f688f37371c5ae146e7652)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 2982df530f44f35a16cae1fef7301dc547c8ef97

    Refactored the not-triggering of cache entry events on the local node to event listener registration. Removes code duplication in listener implementations.

    • xmppserver/src/main/java/org/jivesoftware/openfire/handler/PresenceUpdateHandler.java (version 2982df530f44f35a16cae1fef7301dc547c8ef97)
    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version 2982df530f44f35a16cae1fef7301dc547c8ef97)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/Cache.java (version 2982df530f44f35a16cae1fef7301dc547c8ef97)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/CacheWrapper.java (version 2982df530f44f35a16cae1fef7301dc547c8ef97)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/CaffeineCache.java (version 2982df530f44f35a16cae1fef7301dc547c8ef97)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/DefaultCache.java (version 2982df530f44f35a16cae1fef7301dc547c8ef97)
  • Guus der Kinderen

    Guus der Kinderen 751edcdfafda6faf5a6d2cc4bf3e6cf6461db768

    OF-2280: Prevent more than one cluster node from establishing outgoing S2S to same domain
    Openfire was designed (perhaps needlessly) to not have more than one cluster node establish a connection to any particular remote domain. This commit helps ensure that this is the case, by causing an exception to be thrown when a second registration is attempted.

    • xmppserver/src/main/java/org/jivesoftware/openfire/session/LocalOutgoingServerSession.java (version 751edcdfafda6faf5a6d2cc4bf3e6cf6461db768)
    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version 751edcdfafda6faf5a6d2cc4bf3e6cf6461db768)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> c84a7b04ba362c6492a72ffae737548cb7686fe2

    Register MUCService with cluster manager to get updates on cluster status.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version c84a7b04ba362c6492a72ffae737548cb7686fe2)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 5ee60c8683b8d0df14e7cf8639c71a42ed1b1b94

    Migrated cleanup handling of client session info cache from hazelcast plugin ClusterListener to openfire core SessionManager.

    • xmppserver/src/main/java/org/jivesoftware/openfire/SessionManager.java (version 5ee60c8683b8d0df14e7cf8639c71a42ed1b1b94)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/ClientSessionInfo.java (version 5ee60c8683b8d0df14e7cf8639c71a42ed1b1b94)
  • Guus der Kinderen

    Guus der Kinderen 4a1caed37c279828920a65f9be05a4708e176499

    WIP: Support caches for which entries are not directly relatable to exactly one cluster node.
    A lot of caches hold information that relate to exactly one cluster node (eg: a client session that is physically connected to a server). This is not always the case. The Components cache, for example, tracks component connections (either external or internal). Components of the same name are allowed to connect to multiple cluster nodes.

    The entry listener that we've been using so far assumes the former scenario, and breaks on the latter. This commit introduces a potential fix, that is based on a Function that takes the new entry value, and determines based on that to which cluster nodes the entry now relates.

    The change in this commit is a work in progress, and should be taken only for its principle, but needs to be modified:
    - It's probably not working correctly in this implementation
    - It should be moved to a dedicated class.

    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/ReverseLookupUpdatingCacheEntryListener.java (version 4a1caed37c279828920a65f9be05a4708e176499)
  • Guus der Kinderen

    Guus der Kinderen b7420d73e9cbe2ec3d572a8c7960b8625a7e1b03

    OF-2272: Remove MUC-room state syncing tasks
    Now that clustering is based on a clustered datastructure, there's no need any more to send cluster tasks to update state of a room.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version b7420d73e9cbe2ec3d572a8c7960b8625a7e1b03)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MultiUserChatService.java (version b7420d73e9cbe2ec3d572a8c7960b8625a7e1b03)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/RoomAvailableEvent.java (version b7420d73e9cbe2ec3d572a8c7960b8625a7e1b03)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/RoomRemovedEvent.java (version b7420d73e9cbe2ec3d572a8c7960b8625a7e1b03)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/RoomUpdatedEvent.java (version b7420d73e9cbe2ec3d572a8c7960b8625a7e1b03)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/IQOwnerHandler.java (version b7420d73e9cbe2ec3d572a8c7960b8625a7e1b03)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version b7420d73e9cbe2ec3d572a8c7960b8625a7e1b03)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> ec9a23c706ec1c45836c9f3104eda0b4f8fec781

    Some cleaning up in preparation for creating a PR.

    • i18n/src/main/resources/openfire_i18n.properties (version ec9a23c706ec1c45836c9f3104eda0b4f8fec781)
    • xmppserver/src/main/java/org/jivesoftware/openfire/PresenceRouter.java (version ec9a23c706ec1c45836c9f3104eda0b4f8fec781)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version ec9a23c706ec1c45836c9f3104eda0b4f8fec781)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/OccupantManager.java (version ec9a23c706ec1c45836c9f3104eda0b4f8fec781)
    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/LocalRoutingTable.java (version ec9a23c706ec1c45836c9f3104eda0b4f8fec781)
    • xmppserver/src/main/resources/admin-sidebar.xml (version ec9a23c706ec1c45836c9f3104eda0b4f8fec781)
    • xmppserver/src/main/webapp/muc-room-cache.jsp (version ec9a23c706ec1c45836c9f3104eda0b4f8fec781)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> aef247a7024388e02b4992b3865f8e83025c782d

    Add MUC consistency check to the monitor.

    • xmppserver/src/main/java/org/jivesoftware/util/cache/ConsistencyMonitor.java (version aef247a7024388e02b4992b3865f8e83025c782d)
  • Guus der Kinderen

    Guus der Kinderen ceffe4e9a7573070ac1a5818f38a6f6b07b37627

    Refactoring: move methods that perform cache consistency checks to different class, to reduce code complexity.

    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version ceffe4e9a7573070ac1a5818f38a6f6b07b37627)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/ConsistencyChecks.java (version ceffe4e9a7573070ac1a5818f38a6f6b07b37627)
  • Guus der Kinderen

    Guus der Kinderen 9084e70d8e434c7e7d4b9c225c4d1df578d6da37

    OF-2272: Remove 'DestoryRoomRequest' cluster task
    Now that clustering is based on a clustered datastructure, there's no need any more to send cluster tasks to update state on individual cluster nodes.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version 9084e70d8e434c7e7d4b9c225c4d1df578d6da37)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/DestroyRoomRequest.java (version 9084e70d8e434c7e7d4b9c225c4d1df578d6da37)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 273ed49a3c9ba05ebaf0593bf1de5c46473dbc5b

    Fixed incorrect documentation and log statement.

    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version 273ed49a3c9ba05ebaf0593bf1de5c46473dbc5b)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> b8dfb7318b90e87b1831619fcf5e64d03ceb72e5

    Improved MUC related consistency checks. Now displays a section for every available MUC service.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MultiUserChatManager.java (version b8dfb7318b90e87b1831619fcf5e64d03ceb72e5)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/OccupantManager.java (version b8dfb7318b90e87b1831619fcf5e64d03ceb72e5)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/ConsistencyChecks.java (version b8dfb7318b90e87b1831619fcf5e64d03ceb72e5)
    • xmppserver/src/main/webapp/system-clustering-data-consistency-check.jsp (version b8dfb7318b90e87b1831619fcf5e64d03ceb72e5)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 3f7c6c6e378b21697f2b760600567a8ec6398135

    Event (listener) mechanism for cache entry updates. Can potentially be used from (hazelcast) plugin code.

    • xmppserver/src/main/java/org/jivesoftware/openfire/cluster/ClusteredCacheEntryListener.java (version 3f7c6c6e378b21697f2b760600567a8ec6398135)
    • xmppserver/src/main/java/org/jivesoftware/openfire/cluster/ClusteredCacheEventManager.java (version 3f7c6c6e378b21697f2b760600567a8ec6398135)
    • xmppserver/src/main/java/org/jivesoftware/openfire/handler/PresenceUpdateHandler.java (version 3f7c6c6e378b21697f2b760600567a8ec6398135)
    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version 3f7c6c6e378b21697f2b760600567a8ec6398135)
  • Guus der Kinderen

    Guus der Kinderen 9a94b620e3f0f6059f3d87ccadd345060516b3da

    Rework how ClusteredCacheEntryListeners are registered

    • xmppserver/src/main/java/org/jivesoftware/openfire/cluster/ClusteredCacheEntryListener.java (version 9a94b620e3f0f6059f3d87ccadd345060516b3da)
    • xmppserver/src/main/java/org/jivesoftware/openfire/cluster/ClusteredCacheEventManager.java (version 9a94b620e3f0f6059f3d87ccadd345060516b3da)
    • xmppserver/src/main/java/org/jivesoftware/openfire/handler/PresenceUpdateHandler.java (version 9a94b620e3f0f6059f3d87ccadd345060516b3da)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/Cache.java (version 9a94b620e3f0f6059f3d87ccadd345060516b3da)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/CacheWrapper.java (version 9a94b620e3f0f6059f3d87ccadd345060516b3da)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/CaffeineCache.java (version 9a94b620e3f0f6059f3d87ccadd345060516b3da)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/DefaultCache.java (version 9a94b620e3f0f6059f3d87ccadd345060516b3da)
  • Guus der Kinderen

    Guus der Kinderen 58632fa6fc6b1925be3a7d5338b4a1fb9c89f236

    Add diagnostics for RoutingTableImpl-maintained component state
    Whenever a clustered cache is used, two supporting data structures are typically needed:
    - one that can be used to 'repopulate' the cache after it flips between clustered and non-clustered, that holds local data.
    - one that is used after a cluster breakage, that holds non-local data.

    These three data structures (cache, local, non-local) have some degree of data duplication between them. It is therefor important that these data structures remain consistent.

    This commit introduces a method that checks for consistency, reporting its detailed findings as text. A JSP page (that isn't linked in a menu, you need to know its URL) is also added, to easily look at the data in a running server.

    There's much to be improved here (I should've used a better data structure for this reporting), and much to be added (basically, all other caches in Openfire), but this is a start, based on which I've already been able to squash some bugs.

    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version 58632fa6fc6b1925be3a7d5338b4a1fb9c89f236)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/ConsistencyChecks.java (version 58632fa6fc6b1925be3a7d5338b4a1fb9c89f236)
    • xmppserver/src/main/webapp/system-clustering-data-consistency-check.jsp (version 58632fa6fc6b1925be3a7d5338b4a1fb9c89f236)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 9e4d75f5664e545b51873b5516d1a451256bd1d7

    Guard against unintended cluster entry removals in node disconnect situations.

    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version 9e4d75f5664e545b51873b5516d1a451256bd1d7)
  • Guus der Kinderen

    Guus der Kinderen 28ff9e51d5c438c1127cc957e57de7b3455436bc

    OF-2272: Test MUCRole externalizable
    When, instead of using a Remote and Local variant of MUCUser, the instance is going to be shared in a clustered datastructure (a Hazelcast cache), then it is vitally important that serialization and deserialization of an instance works. This commit adds a unit test that verifies this.

    • xmppserver/src/test/java/org/jivesoftware/openfire/muc/MUCRoleTest.java (version 28ff9e51d5c438c1127cc957e57de7b3455436bc)
  • Guus der Kinderen

    Guus der Kinderen 2fc05bbd7e73a4f0362cac71db20c69bfc5a6bcb

    Fixes RoutingTableImpl maintained datastructure for remote data
    The datastructure that keeps track of data 'on remote nodes' should not be populated with data 'from the local node'.

    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version 2fc05bbd7e73a4f0362cac71db20c69bfc5a6bcb)
  • Guus der Kinderen

    Guus der Kinderen 106be6619982f3773e0ccf7bb9d8cf1a4c56ee45

    OF-2272: Making MUCRoom clusterable by applying Externalizable
    This adds the option to serialize MUCRoom instances to the implementation. A significant part of the changes involve making the message-history related classes used by MUCRoom serializable.

    As serialization is an key concept used by clustering, unit tests have been added to verify the serialization implementation.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/HistoryStrategy.java (version 106be6619982f3773e0ccf7bb9d8cf1a4c56ee45)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version 106be6619982f3773e0ccf7bb9d8cf1a4c56ee45)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoomHistory.java (version 106be6619982f3773e0ccf7bb9d8cf1a4c56ee45)
    • xmppserver/src/test/java/org/jivesoftware/openfire/muc/HistoryStrategyTest.java (version 106be6619982f3773e0ccf7bb9d8cf1a4c56ee45)
    • xmppserver/src/test/java/org/jivesoftware/openfire/muc/MUCRoomTest.java (version 106be6619982f3773e0ccf7bb9d8cf1a4c56ee45)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 13c84b1d8b24c6eb6aa85f1c1695dddf325de391

    Today's changes. Doesn't compile (yet).

    • xmppserver/src/main/java/org/jivesoftware/openfire/cluster/ClusterManager.java (version 13c84b1d8b24c6eb6aa85f1c1695dddf325de391)
    • xmppserver/src/main/java/org/jivesoftware/openfire/cluster/ClusteredCacheEntryListener.java (version 13c84b1d8b24c6eb6aa85f1c1695dddf325de391)
    • xmppserver/src/main/java/org/jivesoftware/openfire/handler/PresenceUpdateHandler.java (version 13c84b1d8b24c6eb6aa85f1c1695dddf325de391)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 13c84b1d8b24c6eb6aa85f1c1695dddf325de391)
    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version 13c84b1d8b24c6eb6aa85f1c1695dddf325de391)
  • Guus der Kinderen

    Guus der Kinderen 0bde3d57c1077ddff0a69715258095c4ac1030b3

    OF-2220: Ensure that MUC entity changes are explicity re-added to Cache
    When an entity that's in a Cache is being modified, these modifications will only become visible to other cluster nodes after the entity has been updated in the cache. This commit ensures that this happens for MUC-related entities.

    After all Local- and Remote MUC entities have been replaced by a singular entity (OF-2272), and those entities were shared across the cluster, the need to work with (String-based) references to those entities (eg: room name, instead of MUCRoom) has greatly diminished. This commit contains changes that pass around MUCRoom entities instead of room names (which are then used to look up the corresponding MUCRoom instance in various places). This reduces the amount of code locations where MUCRooms are being obtain from (and put in) a Cache.

    This commit ensures that all code that obtain a MUCRoom from a Cache takes responsibility for 'putting back' the instance in the Cache if modification are (likely to have been) made.

    To simplify the implementation, a MUCRoom-based, cluster-wide lock is obtained when there is any interaction with a MUC room. This is largely, but not exclusively, done when a stanza arrives to be processed by the room. Before releasing the lock, the Cache entry is updated/synced (as stated above).

    There are a few exceptions, where a Lock is _not_ obtained, for example when code iterates over all rooms in the server, while performing read-only operations on them. The cost of locking all rooms is deemed to high for the benefit of transaction safety that they bring, in these cases.

    • xmppserver/src/main/java/org/jivesoftware/openfire/commands/admin/muc/CreateMUCRoom.java (version 0bde3d57c1077ddff0a69715258095c4ac1030b3)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRole.java (version 0bde3d57c1077ddff0a69715258095c4ac1030b3)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version 0bde3d57c1077ddff0a69715258095c4ac1030b3)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCUser.java (version 0bde3d57c1077ddff0a69715258095c4ac1030b3)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MultiUserChatService.java (version 0bde3d57c1077ddff0a69715258095c4ac1030b3)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/FMUCHandler.java (version 0bde3d57c1077ddff0a69715258095c4ac1030b3)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/IQMUCRegisterHandler.java (version 0bde3d57c1077ddff0a69715258095c4ac1030b3)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/IQMUCvCardHandler.java (version 0bde3d57c1077ddff0a69715258095c4ac1030b3)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRoomManager.java (version 0bde3d57c1077ddff0a69715258095c4ac1030b3)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MUCPersistenceManager.java (version 0bde3d57c1077ddff0a69715258095c4ac1030b3)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 0bde3d57c1077ddff0a69715258095c4ac1030b3)
    • xmppserver/src/main/webapp/muc-room-affiliations.jsp (version 0bde3d57c1077ddff0a69715258095c4ac1030b3)
    • xmppserver/src/main/webapp/muc-room-delete.jsp (version 0bde3d57c1077ddff0a69715258095c4ac1030b3)
    • xmppserver/src/main/webapp/muc-room-edit-form.jsp (version 0bde3d57c1077ddff0a69715258095c4ac1030b3)
    • xmppserver/src/main/webapp/muc-room-federation.jsp (version 0bde3d57c1077ddff0a69715258095c4ac1030b3)
    • xmppserver/src/main/webapp/muc-room-occupants.jsp (version 0bde3d57c1077ddff0a69715258095c4ac1030b3)
    • xmppserver/src/main/webapp/muc-service-delete.jsp (version 0bde3d57c1077ddff0a69715258095c4ac1030b3)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 58b6f9037eb048803875d6deaa59df88e9171156

    Improved logging of occupant manager state.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/OccupantManager.java (version 58b6f9037eb048803875d6deaa59df88e9171156)
  • Guus der Kinderen

    Guus der Kinderen 767be4001596542518bffd8ebc6b33e7e1dccb3d

    OF-2272: Do not keep MUCRoles in a distinct cache
    The migration from Remote- and LocalMUC entities to Cacheable entities introduced a cache for MUCRoles. As these instances are always very specific to exactly one MUCRoom, which already is in a Cache itself, the corresponding MUCRoles can be stored in a field of a MUCRoom, and be shared across a cluster as part of the room that they belong to.

    The benefit of this is that the complexity of the solution significantly reduces. There's a lot less room for discrepancies between the state of different classes, and applying mutexes to prevent concurrent modification of cached entities could, in theory, be as simple as: lock the room whenever it gets a stanza to be processed (or is modified through another process, like a timer task or the admin console). There no longer is a need to lock different caches, which easily leads to deadlocks, if multiple cluster nodes each hold a different lock, and are waiting to acquire a lock currently held by another node.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version 767be4001596542518bffd8ebc6b33e7e1dccb3d)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/CacheFactory.java (version 767be4001596542518bffd8ebc6b33e7e1dccb3d)
    • xmppserver/src/test/java/org/jivesoftware/openfire/muc/MUCRoomTest.java (version 767be4001596542518bffd8ebc6b33e7e1dccb3d)
  • Guus der Kinderen

    Guus der Kinderen 4a7de8899e51f15a77b641614888caab669c5ab2

    OF-2272: Making MUCUser clusterable: use server's PacketRouter
    Instead of using a passed-around instance of PackdetRouter, use the one from the server, which is the same instance as that's being passed around anyway. This makes it easier to share a MUCUser instance in a clustered cache.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/FMUCHandler.java (version 4a7de8899e51f15a77b641614888caab669c5ab2)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCUser.java (version 4a7de8899e51f15a77b641614888caab669c5ab2)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 4a7de8899e51f15a77b641614888caab669c5ab2)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 62225bf2531852c1de43612c40fc3fb0b3290a00

    Don't stop sending unavailable presences when one of them fails.

    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version 62225bf2531852c1de43612c40fc3fb0b3290a00)
  • Guus der Kinderen

    Guus der Kinderen 06a22655211c5678bc2bf2da8ed7a1a4af6cd711

    Added javadoc describing what datastructures are supporting what caches in RoutingTableImpl

    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version 06a22655211c5678bc2bf2da8ed7a1a4af6cd711)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/ConsistencyChecks.java (version 06a22655211c5678bc2bf2da8ed7a1a4af6cd711)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> e0c0df5c92a5755c6105ffff26328e25ee80a1d3

    Less logging and some more documentation.

    • xmppserver/src/main/java/org/jivesoftware/openfire/SessionManager.java (version e0c0df5c92a5755c6105ffff26328e25ee80a1d3)
    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/LocalRoutingTable.java (version e0c0df5c92a5755c6105ffff26328e25ee80a1d3)
    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version e0c0df5c92a5755c6105ffff26328e25ee80a1d3)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 49dffa23e2c2beedbedd628df6f923d635c4bd40

    Implemented consistency checks for session infos.

    • xmppserver/src/main/java/org/jivesoftware/openfire/SessionManager.java (version 49dffa23e2c2beedbedd628df6f923d635c4bd40)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/ConsistencyChecks.java (version 49dffa23e2c2beedbedd628df6f923d635c4bd40)
    • xmppserver/src/main/webapp/system-clustering-data-consistency-check.jsp (version 49dffa23e2c2beedbedd628df6f923d635c4bd40)
  • Guus der Kinderen

    Guus der Kinderen 99a72d1f52b84a02d85b9342e3c2f0df6e8fd86a

    Work-around (WIP) for never sycing an out-of-date MUCUser isntance

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version 99a72d1f52b84a02d85b9342e3c2f0df6e8fd86a)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCUser.java (version 99a72d1f52b84a02d85b9342e3c2f0df6e8fd86a)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/FMUCHandler.java (version 99a72d1f52b84a02d85b9342e3c2f0df6e8fd86a)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCUserManager.java (version 99a72d1f52b84a02d85b9342e3c2f0df6e8fd86a)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 99a72d1f52b84a02d85b9342e3c2f0df6e8fd86a)
  • Guus der Kinderen

    Guus der Kinderen 11d7696f476d24c73a894598fe1f0faa0b02bdd0

    OF-2272: Making MUCUser clusterable: replace service with name
    Instead of keeping a reference to the complex MultiUserChatService instance, the MUCUser implementation now keeps a reference to its name, using that to look up the desired instance when needed. This makes it easier to share a MUCUser instance in a clustered cache.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCUser.java (version 11d7696f476d24c73a894598fe1f0faa0b02bdd0)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 30de91db44d0d2d31d43bcafaf03710468de32fa

    Fix bug in MUC consistency check, which relied too much on the local copy of the room cache.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MultiUserChatManager.java (version 30de91db44d0d2d31d43bcafaf03710468de32fa)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/ConsistencyChecks.java (version 30de91db44d0d2d31d43bcafaf03710468de32fa)
    • xmppserver/src/main/webapp/system-clustering-data-consistency-check.jsp (version 30de91db44d0d2d31d43bcafaf03710468de32fa)
  • Guus der Kinderen

    Guus der Kinderen 94e94877d98a69c9f77e275f0cfdc069cec60248

    OF-2272: Fix serialization of MUCRoomHistory
    Serialization of MUCRoomHistory fails when a field of the serialized data is the MUCRoom, that in turn has the MUCRoomHistory instance as part of it's serialized data (a loop will occur when deserializing this tangle).

    This code modifies MUCRoomHistory to serialize only a reference to the room, instead the room itself, which prevents this loop.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoomHistory.java (version 94e94877d98a69c9f77e275f0cfdc069cec60248)
    • xmppserver/src/test/java/org/jivesoftware/openfire/muc/MUCRoomTest.java (version 94e94877d98a69c9f77e275f0cfdc069cec60248)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> a65fc46cc1ed75a790332b4714959752bdc6454a

    Restore the users sessions cache after cluster events, so presence updates about 'lost' users can be sent effectively to the remaining nodes. Removed some debug logging that was temporary.

    • xmppserver/src/main/java/org/jivesoftware/openfire/roster/Roster.java (version a65fc46cc1ed75a790332b4714959752bdc6454a)
    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version a65fc46cc1ed75a790332b4714959752bdc6454a)
  • Guus der Kinderen

    Guus der Kinderen 7b6a763ce5bd7e7194ff405e3df995913b28246b

    Migrating session-based classes from Hazelcast plugin to Openfire core
    This commit adds to Openfire 4.7.0 some classes that existed in the Hazelcast plugin, but were removed there.

    See https://github.com/igniterealtime/openfire-hazelcast-plugin/issues/50

    • xmppserver/src/main/java/org/jivesoftware/openfire/cluster/BroadcastMessage.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/cluster/ClusterPacketRouter.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/cluster/RemotePacketExecution.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/ClientSessionTask.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/ComponentSessionTask.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/ConnectionMultiplexerSessionTask.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/DeliverRawTextTask.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/IncomingServerSessionTask.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/OutgoingServerSessionTask.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/ProcessPacketTask.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/RemoteClientSession.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/RemoteComponentSession.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/RemoteConnectionMultiplexerSession.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/RemoteIncomingServerSession.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/RemoteOutgoingServerSession.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/RemoteSession.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/RemoteSessionLocatorImpl.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/RemoteSessionTask.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/CacheFactory.java (version 7b6a763ce5bd7e7194ff405e3df995913b28246b)
  • Guus der Kinderen

    Guus der Kinderen 0d99edc80fc590316fc61c1cc453f95c68cdda51

    OF-2283: Show distinct servers when looking at remote S2S details on admin console
    The existing implementation assumes that the remote XMPP domain consists of exactly one server. That needs not be the case. The admin console should show server-specific details.

    • i18n/src/main/resources/openfire_i18n.properties (version 0d99edc80fc590316fc61c1cc453f95c68cdda51)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/RemoteSession.java (version 0d99edc80fc590316fc61c1cc453f95c68cdda51)
    • xmppserver/src/main/java/org/jivesoftware/openfire/session/RemoteSessionTask.java (version 0d99edc80fc590316fc61c1cc453f95c68cdda51)
    • xmppserver/src/main/webapp/server-session-details.jsp (version 0d99edc80fc590316fc61c1cc453f95c68cdda51)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 9a34b6a7b57106616cb49baaceef60734643109c

    Changes from todays testing: - More logging. - MUCServiceImpl now broadcasts occupant unavailable to all remaining nodes instead of only to self. - Prevent removing items from users cache while streaming those same items in RoutingTableImpl.

    • xmppserver/src/main/java/org/jivesoftware/openfire/PresenceRouter.java (version 9a34b6a7b57106616cb49baaceef60734643109c)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRole.java (version 9a34b6a7b57106616cb49baaceef60734643109c)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 9a34b6a7b57106616cb49baaceef60734643109c)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/OccupantManager.java (version 9a34b6a7b57106616cb49baaceef60734643109c)
    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version 9a34b6a7b57106616cb49baaceef60734643109c)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> f31eb8e5b0e283c2ab0fe2d015b6b7b3cdcc7846

    Implemented consistency checks for incoming server sessions registration.

    • xmppserver/src/main/java/org/jivesoftware/openfire/SessionManager.java (version f31eb8e5b0e283c2ab0fe2d015b6b7b3cdcc7846)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/ConsistencyChecks.java (version f31eb8e5b0e283c2ab0fe2d015b6b7b3cdcc7846)
    • xmppserver/src/main/webapp/system-clustering-data-consistency-check.jsp (version f31eb8e5b0e283c2ab0fe2d015b6b7b3cdcc7846)
  • Guus der Kinderen

    Guus der Kinderen 9d87f2eaebbaaf110e9867b44ea434c335e02009

    OF-2272: Ensure that non-persistent room is destroyed after last occupant leaves.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version 9d87f2eaebbaaf110e9867b44ea434c335e02009)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRoomManager.java (version 9d87f2eaebbaaf110e9867b44ea434c335e02009)
  • Guus der Kinderen

    Guus der Kinderen fb076b901fbb0c526ba3777a7013e9a8f8dc8598

    OF-2272: Remove cluster tasks that sync MUC room state
    Now that clustering is based on a clustered datastructure, there's no need any more to send cluster tasks to update state on individual cluster nodes.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/HistoryStrategy.java (version fb076b901fbb0c526ba3777a7013e9a8f8dc8598)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version fb076b901fbb0c526ba3777a7013e9a8f8dc8598)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/GetNewMemberRoomsRequest.java (version fb076b901fbb0c526ba3777a7013e9a8f8dc8598)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/MUCRoomTask.java (version fb076b901fbb0c526ba3777a7013e9a8f8dc8598)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/OccupantAddedEvent.java (version fb076b901fbb0c526ba3777a7013e9a8f8dc8598)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/OccupantLeftEvent.java (version fb076b901fbb0c526ba3777a7013e9a8f8dc8598)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/QueuedTasksManager.java (version fb076b901fbb0c526ba3777a7013e9a8f8dc8598)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/RoomInfo.java (version fb076b901fbb0c526ba3777a7013e9a8f8dc8598)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/UpdateHistoryStrategy.java (version fb076b901fbb0c526ba3777a7013e9a8f8dc8598)
  • Guus der Kinderen

    Guus der Kinderen c712c32d00763e7566765606e7e5a1df291da3cb

    Removed log statement that was used for debugging

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRole.java (version c712c32d00763e7566765606e7e5a1df291da3cb)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 0d2f40fa8a912c4660c10224d142670f304e87ca

    Fix jsp imports that were not properly updated in merge.

    • xmppserver/src/main/webapp/muc-room-cache.jsp (version 0d2f40fa8a912c4660c10224d142670f304e87ca)
  • Guus der Kinderen

    Guus der Kinderen 2df2b4b089d26b5cc577ac94bc830816b1ac67ab

    Clean up 'local' stored MUC data when room is destroyed
    When a room is destroyed, then the cluster node on which this occurs will clean up the cache, as well as its locally stored data. Any locally stored data on other cluster nodes should also be cleaned up.

    This commit introduces a cache entry event listener that performs this clean up when it detects that a cache entry is removed.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRoomManager.java (version 2df2b4b089d26b5cc577ac94bc830816b1ac67ab)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/OccupantManager.java (version 2df2b4b089d26b5cc577ac94bc830816b1ac67ab)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/ConsistencyChecks.java (version 2df2b4b089d26b5cc577ac94bc830816b1ac67ab)
  • Guus der Kinderen

    Guus der Kinderen f26f13b7acfcf2bbef3697d8a0b485e285b9da8a

    OF-2229 OF-2230: Send presence leave when cluster nodes leave
    When observing another cluster node leaving the cluster, or when the local node leaves the cluster, occupants of MUC rooms that are connected to the local node will no longer be able to communicate with occupants of the same chat room that are connected to the now disconnected cluster node(s). For these occupants, presence 'leave' stanzas should be sent to the local occupants, so that their clients properly display that these occupants have now 'left'.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version f26f13b7acfcf2bbef3697d8a0b485e285b9da8a)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/OccupantManager.java (version f26f13b7acfcf2bbef3697d8a0b485e285b9da8a)
  • Guus der Kinderen

    Guus der Kinderen 73cf0f6612ca10293ca399e9bd0b1d0e3583f9bb

    OF-2272: Making MUCRole clusterable: replace room with name
    Instead of keeping a reference to the complex MUCRoom instance, the MUCRole implementation now keeps a reference to its name, using that to look up the desired instance when needed. This makes it easier to share a MUCRole instance in a clustered cache.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRole.java (version 73cf0f6612ca10293ca399e9bd0b1d0e3583f9bb)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> e65efd30739c4acf1808b8199b04cc5453660edb

    Several changes for debugging and improving. Not all of this should be pushed, needs attention.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version e65efd30739c4acf1808b8199b04cc5453660edb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/OccupantManager.java (version e65efd30739c4acf1808b8199b04cc5453660edb)
    • xmppserver/src/main/webapp/muc-room-cache.jsp (version e65efd30739c4acf1808b8199b04cc5453660edb)
  • Guus der Kinderen

    Guus der Kinderen 9130a6b633a74ae3983e484c47d6ed49c320e40d

    Remove surplus logging that also caused LGTM failure

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version 9130a6b633a74ae3983e484c47d6ed49c320e40d)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 9e6994392bb116f947d3da3ba63eab09bede7d3b

    Migrate routing table cache maintenance from Hazelcast plugin to Openfire core.

    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version 9e6994392bb116f947d3da3ba63eab09bede7d3b)
  • Guus der Kinderen

    Guus der Kinderen bbfa59cdf346bd0c420e971bf6742a13666b1e95

    Renamed confusingly-named field.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRoomManager.java (version bbfa59cdf346bd0c420e971bf6742a13666b1e95)
  • Guus der Kinderen

    Guus der Kinderen 8486f964bcda1de2b503d2e0939bb163eaf7ff98

    OF-2224 OF-2227 OF-2228 OF-2229 OF-2230 OF-2231 OF-2233
    First stab at reconciliation of ROOM_CACHE and the local equivalents on each node, when cluster nodes join or leave a cluster.

    Additionally, this commit should send out appropriate 'join' and 'leave' presence stanzas for occupants of rooms that are now, or no longer, in the room as a result of their cluster node joining or leaving the cluster.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/SyncLocalOccupantsAndSendJoinPresenceTask.java (version 8486f964bcda1de2b503d2e0939bb163eaf7ff98)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRoomManager.java (version 8486f964bcda1de2b503d2e0939bb163eaf7ff98)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 8486f964bcda1de2b503d2e0939bb163eaf7ff98)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/OccupantManager.java (version 8486f964bcda1de2b503d2e0939bb163eaf7ff98)
  • Guus der Kinderen

    Guus der Kinderen 40775b3262e03d23dcb8cc40b19a7834f30baf6f

    OF-2224: Maintain minimal data for all occupants in the cluster
    There's a need to maintain some data that can be used to 'clean up' after a clusternode leaves the cluster. Primarily, this is needed to send presence unavailable stanzas to locally connected occupants of MUC rooms for occupants that are connected on cluster nodes that are now no longer available. As a cluster-composition event causes a clustered cache to be reset/cleaned, this data needs to be maintained _outside_ of such a cache. This commit introduces an OccupantManager that maintains this data, which uses ClusterTasks to update data across the the cluster.

    This code needs further work, as it currently assumes that the cluster is fully operational, but not yet used (population of OccupantManager data upon joining/leaving a cluster that's already in active use needs to be added).

    The data maintained by the new OccupantManager is a neccesary duplicate of some data that is maintained in the cache that maintains all MUCRoom instances, for the reason described above. It, however, also is a duplcate of the data that was maintained by MUCUser instances (and the corresponding cache). To avoid the need to maintain additional data duplication, this commit removes MUCUser. The state that it maintained is now obtained from the new OccupantManger. Most of the functionality that it possessed is now merged with MultiUserChatServiceImpl.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version 40775b3262e03d23dcb8cc40b19a7834f30baf6f)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCUser.java (version 40775b3262e03d23dcb8cc40b19a7834f30baf6f)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MultiUserChatService.java (version 40775b3262e03d23dcb8cc40b19a7834f30baf6f)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/OccupantAddedTask.java (version 40775b3262e03d23dcb8cc40b19a7834f30baf6f)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/OccupantRemovedTask.java (version 40775b3262e03d23dcb8cc40b19a7834f30baf6f)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/OccupantUpdatedTask.java (version 40775b3262e03d23dcb8cc40b19a7834f30baf6f)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/FMUCHandler.java (version 40775b3262e03d23dcb8cc40b19a7834f30baf6f)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCUserManager.java (version 40775b3262e03d23dcb8cc40b19a7834f30baf6f)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 40775b3262e03d23dcb8cc40b19a7834f30baf6f)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/OccupantManager.java (version 40775b3262e03d23dcb8cc40b19a7834f30baf6f)
    • xmppserver/src/main/webapp/muc-room-cache.jsp (version 40775b3262e03d23dcb8cc40b19a7834f30baf6f)
    • xmppserver/src/test/java/org/jivesoftware/openfire/muc/MUCUserTest.java (version 40775b3262e03d23dcb8cc40b19a7834f30baf6f)
  • Guus der Kinderen

    Guus der Kinderen 04d6e2b5ac260fe5fe399c39e9f616966acaaebd

    OF-2272: Making MUCRole clusterable: Remove unused MUC Service field
    After the last commit, the MultiUserService field of MUCRole was no longer used. This commit removes that field.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/FMUCHandler.java (version 04d6e2b5ac260fe5fe399c39e9f616966acaaebd)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRole.java (version 04d6e2b5ac260fe5fe399c39e9f616966acaaebd)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRoom.java (version 04d6e2b5ac260fe5fe399c39e9f616966acaaebd)
  • Guus der Kinderen

    Guus der Kinderen 1bbd148cb7ca09e01cb75bc20656466837bb3991

    OF-2272: Making MUCRoom clusterable: use server's PacketRouter
    Instead of using a passed-around instance of PacketRouter, use the one from the server, which is the same instance as that's being passed around anyway. This makes it easier to share a MUCRoom instance in a clustered cache.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version 1bbd148cb7ca09e01cb75bc20656466837bb3991)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/FMUCHandler.java (version 1bbd148cb7ca09e01cb75bc20656466837bb3991)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/IQAdminHandler.java (version 1bbd148cb7ca09e01cb75bc20656466837bb3991)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/IQOwnerHandler.java (version 1bbd148cb7ca09e01cb75bc20656466837bb3991)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MUCPersistenceManager.java (version 1bbd148cb7ca09e01cb75bc20656466837bb3991)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 1bbd148cb7ca09e01cb75bc20656466837bb3991)
  • Guus der Kinderen

    Guus der Kinderen 092d3b817c18ec1daa90c24720ae9dd74551d245

    OF-2220: Ensure that MUCUser is updated in cache after changes
    When an instance that 'lives' in a clustered cache is being modified, the modified instance needs to be put back in the cache explicitly. If that's not done, the changes will not be visible when the object is re-obtained from the cache (eg: by other cluster nodes).

    This commit introduces changes that:
    - adds functionality to update/sunc the state of a MUCUser instance back to the cache;
    - explicitly document that code that obtains a MUCUser from a cache is responsible for syncing it's modified state back in;
    - make existing users fo MUCUser sync back any modified instances to the cache.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version 092d3b817c18ec1daa90c24720ae9dd74551d245)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCUser.java (version 092d3b817c18ec1daa90c24720ae9dd74551d245)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MultiUserChatService.java (version 092d3b817c18ec1daa90c24720ae9dd74551d245)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/FMUCHandler.java (version 092d3b817c18ec1daa90c24720ae9dd74551d245)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 092d3b817c18ec1daa90c24720ae9dd74551d245)
  • Guus der Kinderen

    Guus der Kinderen aec94d68f0fb435b8c5c1a1edaeb4f892bdbcd55

    Make AbstractCacheEntryListener work for cache entries not owned by one cluster node
    Up until now, all cache entries that we've processed in this rewrite were 'owned' by one specific cluster node (eg: a client is connected to exactly one server, hence it's routing table cache entry can be linked to that one cluster node).

    This, however, is not always the case. Components, for example, can connect to multiple server nodes. For the AbstractCacheEntryListener to work with these caches, cache updates (that can relate the cache entry to a different set of cluster nodes), need to be processed.

    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/ReverseLookupUpdatingCacheEntryListener.java (version aec94d68f0fb435b8c5c1a1edaeb4f892bdbcd55)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> c7de5a6ae632754e96b2604838cb636f4a158294

    Migrate routing table component cache maintenance from Hazelcast plugin to Openfire core.

    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version c7de5a6ae632754e96b2604838cb636f4a158294)
  • Guus der Kinderen

    Guus der Kinderen ba044ef36c19e2500a3ffe532219e09ea0198784

    OF-2219: MUC-refactoring: Temporarily removing clustering functionality
    Removing most implementations of ClusterEventListener in MUC context. This is likely to be replaced by a significantly different solution.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MultiUserChatManager.java (version ba044ef36c19e2500a3ffe532219e09ea0198784)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRoomManager.java (version ba044ef36c19e2500a3ffe532219e09ea0198784)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version ba044ef36c19e2500a3ffe532219e09ea0198784)
  • Guus der Kinderen

    Guus der Kinderen 9cd7c1e3f378320d6bc38e1dee7c3e5b1bb37a64

    Add null/nonnull annotations to new ClusteredCacheEntryListener.

    • xmppserver/src/main/java/org/jivesoftware/openfire/cluster/ClusteredCacheEntryListener.java (version 9cd7c1e3f378320d6bc38e1dee7c3e5b1bb37a64)
    • xmppserver/src/main/java/org/jivesoftware/openfire/handler/PresenceUpdateHandler.java (version 9cd7c1e3f378320d6bc38e1dee7c3e5b1bb37a64)
  • Guus der Kinderen

    Guus der Kinderen 9f9c453ff9458de51825628838cbc63658ba8214

    Support caches for which entries are not directly relatable to exactly one cluster node.
    A lot of caches hold information that relate to exactly one cluster node (eg: a client session that is physically connected to a server). This is not always the case. The Components cache, for example, tracks component connections (either external or internal). Components of the same name are allowed to connect to multiple cluster nodes.

    The entry listener that we've been using so far assumes the former scenario, and breaks on the latter. This commit introduces a potential fix, that is based on a Function that takes the new entry value, and determines based on that to which cluster nodes the entry now relates.

    • xmppserver/src/main/java/org/jivesoftware/openfire/SessionManager.java (version 9f9c453ff9458de51825628838cbc63658ba8214)
    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version 9f9c453ff9458de51825628838cbc63658ba8214)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/ReverseLookupComputingCacheEntryListener.java (version 9f9c453ff9458de51825628838cbc63658ba8214)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/ReverseLookupUpdatingCacheEntryListener.java (version 9f9c453ff9458de51825628838cbc63658ba8214)
    • xmppserver/src/test/java/org/jivesoftware/util/cache/ReverseLookupComputingCacheEntryListenerTest.java (version 9f9c453ff9458de51825628838cbc63658ba8214)
  • Guus der Kinderen

    Guus der Kinderen 56d0454fe795558e33366a173de02e88b8c4e364

    Add diagnostics for RoutingTableImpl-maintained s2s connection state
    Whenever a clustered cache is used, two supporting data structures are typically needed:
    - one that can be used to 'repopulate' the cache after it flips between clustered and non-clustered, that holds local data.
    - one that is used after a cluster breakage, that holds non-local data.

    These three data structures (cache, local, non-local) have some degree of data duplication between them. It is therefor important that these data structures remain consistent.

    This commit introduces a method that checks for consistency, reporting its detailed findings as text. A JSP page (that isn't linked in a menu, you need to know its URL) is also added, to easily look at the data in a running server.

    There's much to be improved here (I should've used a better data structure for this reporting), and much to be added (basically, all other caches in Openfire), but this is a start, based on which I've already been able to squash some bugs.

    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version 56d0454fe795558e33366a173de02e88b8c4e364)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/ConsistencyChecks.java (version 56d0454fe795558e33366a173de02e88b8c4e364)
    • xmppserver/src/main/webapp/system-clustering-data-consistency-check.jsp (version 56d0454fe795558e33366a173de02e88b8c4e364)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> b4b25536f1121b3b3252ab58587edc532bafc67e

    Fixed bug in initial population of sessionInfoKeysByClusterNode upon cluster join. Thanks Guus for finding it :)

    • xmppserver/src/main/java/org/jivesoftware/openfire/SessionManager.java (version b4b25536f1121b3b3252ab58587edc532bafc67e)
  • Guus der Kinderen

    Guus der Kinderen 0a2e09b136f663185874bf7cc3e94b65abaf3528

    Cleanup MUC Eventing (removing deprecated method)

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCEventDispatcher.java (version 0a2e09b136f663185874bf7cc3e94b65abaf3528)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCEventListener.java (version 0a2e09b136f663185874bf7cc3e94b65abaf3528)
  • Guus der Kinderen

    Guus der Kinderen f8aa48ab590aeb8f7023fa50e1f5f4f10437394e

    OF-2272: No longer use MUCRole in MUCUser
    MUCRole and MUCUser are both going to exist in (clustered) caches. To avoid sending duplicated data, they should no longer exist as field values of each-other.

    This commit removes the MUCRole collection that was maintained in MUCUser, replacing it with a collection of room names in which the MUCUser has some kind of MUCRole.

    It is important that the content of MUCUser#roomNames and MUCRoom#ROOM_OCCUPANTS_CACHE (which are MUCRoles) are kept in sync. This commit attempts to enforce that by making methods that add or remove content from MUCRoom#ROOM_OCCUPANTS_CACHE (such as MUCRoom#removeOccupantRole(MUCRole)}) _uniquely_ responsible for maintaining the content of MUCUser's 'roomNames'.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRole.java (version f8aa48ab590aeb8f7023fa50e1f5f4f10437394e)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version f8aa48ab590aeb8f7023fa50e1f5f4f10437394e)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCUser.java (version f8aa48ab590aeb8f7023fa50e1f5f4f10437394e)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/FMUCHandler.java (version f8aa48ab590aeb8f7023fa50e1f5f4f10437394e)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version f8aa48ab590aeb8f7023fa50e1f5f4f10437394e)
  • Guus der Kinderen

    Guus der Kinderen 1890cc2d402e23615092834231d5d6f263ddaab4

    New periodic check for cache consistency
    Added a monitor that can be used to periodically execute all cache consistency checks.

    In this initial implementation, any irregularities are reported in the logs, and as a chat message to Openfire admins. No correctional measure is taken.

    • i18n/src/main/resources/openfire_i18n.properties (version 1890cc2d402e23615092834231d5d6f263ddaab4)
    • i18n/src/main/resources/openfire_i18n_nl.properties (version 1890cc2d402e23615092834231d5d6f263ddaab4)
    • xmppserver/src/main/java/org/jivesoftware/openfire/SessionManager.java (version 1890cc2d402e23615092834231d5d6f263ddaab4)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/CacheFactory.java (version 1890cc2d402e23615092834231d5d6f263ddaab4)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/ConsistencyMonitor.java (version 1890cc2d402e23615092834231d5d6f263ddaab4)
    • xmppserver/src/main/webapp/system-clustering-data-consistency-check.jsp (version 1890cc2d402e23615092834231d5d6f263ddaab4)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> b070ba3b735e777598a3d3739fe0170421755d1d

    Introduced MUC related consistency checks.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MultiUserChatService.java (version b070ba3b735e777598a3d3739fe0170421755d1d)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRoomManager.java (version b070ba3b735e777598a3d3739fe0170421755d1d)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version b070ba3b735e777598a3d3739fe0170421755d1d)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/OccupantManager.java (version b070ba3b735e777598a3d3739fe0170421755d1d)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/ConsistencyChecks.java (version b070ba3b735e777598a3d3739fe0170421755d1d)
    • xmppserver/src/main/webapp/system-clustering-data-consistency-check.jsp (version b070ba3b735e777598a3d3739fe0170421755d1d)
  • Guus der Kinderen

    Guus der Kinderen 848379843cecebe2a850b149b7a0092df2b75dfb

    OF-2272: Replace Local- and Remote- MUC entities with one generic implementation.
    An issue arises from having a concept of “local” and “remote” MUC users and roles. In this context, ‘local’ refers to a entity that is connected to the local cluster node, while “remote” refers to an entity connected to another node in the cluster. This distinction cannot be made for entities that join a MUC room from remote domains (through server-to-server functionality). Server-to-server connectivity can arbitrarily be established to any one, but also multiple, nodes of the cluster. Worse, a server-to-server connection can be teared down, and re-established to a new cluster node. Because of this, it’s not possible to uniquely qualify a MUC user that is a user from another XMPP domain as a ‘remote’ or ‘local’ MUC user. It can be either, or both, but also change over time.

    This commit broadly removes the concept of having “local” and “remote” entities, replacing them with a singular representation.

    More work is needed to properly maintain a singular collection of entities in a shared memory datastructure.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRole.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCUser.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MultiUserChatManager.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MultiUserChatService.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/AddAffiliation.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/AddMember.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/BroadcastMessageRequest.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/BroadcastPresenceRequest.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/ChangeNickname.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/DestroyRoomRequest.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/GetNewMemberRoomsRequest.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/GetNumberConnectedUsers.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/MUCRoomTask.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/OccupantAddedEvent.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/OccupantLeftEvent.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/RoomAvailableEvent.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/RoomInfo.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/RoomRemovedEvent.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/RoomUpdatedEvent.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/ServiceInfo.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/UpdateOccupant.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/UpdateOccupantRequest.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/UpdatePresence.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/FMUCHandler.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/IQAdminHandler.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/IQOwnerHandler.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRole.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRoom.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRoomManager.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCUser.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MUCPersistenceManager.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/RemoteMUCRole.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/RemoteMUCUser.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/CacheFactory.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/webapp/muc-room-occupants.jsp (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/main/webapp/muc-service-summary.jsp (version 848379843cecebe2a850b149b7a0092df2b75dfb)
    • xmppserver/src/test/java/org/jivesoftware/openfire/muc/spi/MucPrivilegesTest.java (version 848379843cecebe2a850b149b7a0092df2b75dfb)
  • Guus der Kinderen

    Guus der Kinderen c94ce87f61facbc878891cf93659b0186df5b936

    Migrate routingtable cache maintenance from hazelcast plugin to Openfire

    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version c94ce87f61facbc878891cf93659b0186df5b936)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> d1c5397677d5a48749ab400e1c6b0fde7ef86a50

    Migrated cleanup handling of incoming server sessions cache from hazelcast plugin ClusterListener to openfire core SessionManager.

    • xmppserver/src/main/java/org/jivesoftware/openfire/SessionManager.java (version d1c5397677d5a48749ab400e1c6b0fde7ef86a50)
    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/ReverseLookupUpdatingCacheEntryListener.java (version d1c5397677d5a48749ab400e1c6b0fde7ef86a50)
    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version d1c5397677d5a48749ab400e1c6b0fde7ef86a50)
  • Guus der Kinderen

    Guus der Kinderen 64a005c16de0898bfc94af5f7464ea49f8a6a8dd

    OF-2272: Making MUCRole clusterable: use server's PacketRouter
    Instead of using a passed-around instance of PacketRouter, use the one from the server, which is the same instance as that's being passed around anyway. This makes it easier to share a MUCRole instance in a clustered cache.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/FMUCHandler.java (version 64a005c16de0898bfc94af5f7464ea49f8a6a8dd)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRole.java (version 64a005c16de0898bfc94af5f7464ea49f8a6a8dd)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRoom.java (version 64a005c16de0898bfc94af5f7464ea49f8a6a8dd)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> c53dae6deddf1206fc6a218354a831c241181055

    Bugfix: don't remove local route if it is removed on a remote node.

    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version c53dae6deddf1206fc6a218354a831c241181055)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 3cb2d562e0032904477f5a17d7593d413f164637

    When an other node leaves the cluster, don't rely on the senior cluster member to take all responsibility for clean up. Because, at that very instant, there may not be a senior cluster member appointed.

    • xmppserver/src/main/java/org/jivesoftware/openfire/SessionManager.java (version 3cb2d562e0032904477f5a17d7593d413f164637)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 36062c6c6c2e1bc906e8c2efcb381a3d8f310a8e

    Extra diagnostics for user sessions cache. More debug logging, which also needs to be removed again. Changed removeClientRoute to remove user sessions from cache more agressively (to be tested further).

    • xmppserver/src/main/java/org/jivesoftware/openfire/SessionManager.java (version 36062c6c6c2e1bc906e8c2efcb381a3d8f310a8e)
    • xmppserver/src/main/java/org/jivesoftware/openfire/roster/Roster.java (version 36062c6c6c2e1bc906e8c2efcb381a3d8f310a8e)
    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version 36062c6c6c2e1bc906e8c2efcb381a3d8f310a8e)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/ConsistencyChecks.java (version 36062c6c6c2e1bc906e8c2efcb381a3d8f310a8e)
    • xmppserver/src/main/webapp/system-clustering-data-consistency-check.jsp (version 36062c6c6c2e1bc906e8c2efcb381a3d8f310a8e)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 71b8e2b132c80944737843ff66c88139874487c0

    Improved some documentation and code quality. Removed the statement that made leftCluster for an other node only execute on the senior cluster member. Because it may just as well be that senior cluster member that gets disconnected from the cluster, not being able to do any cleanup. This is work in progress, needs to be improved further.

    • xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java (version 71b8e2b132c80944737843ff66c88139874487c0)
  • Guus der Kinderen

    Guus der Kinderen 963263ce97f81a6b42c589072d227805b6e4e014

    Minor MUC changes

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version 963263ce97f81a6b42c589072d227805b6e4e014)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCUser.java (version 963263ce97f81a6b42c589072d227805b6e4e014)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 963263ce97f81a6b42c589072d227805b6e4e014)
    • xmppserver/src/test/java/org/jivesoftware/openfire/muc/MUCUserTest.java (version 963263ce97f81a6b42c589072d227805b6e4e014)
  • Guus der Kinderen

    Guus der Kinderen 0f51e13d9a6e2b5f685909fd46e76f4ebf98ccb8

    OF-2272: Prevent duplicate presence updates when kicking user.
    Prior to this change, a kick resulted in two presence update broadcasts: one for the kick itself, and one, erroneously, for the event of someone leaving a room. The latter has now been prevented.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version 0f51e13d9a6e2b5f685909fd46e76f4ebf98ccb8)
  • Guus der Kinderen

    Guus der Kinderen 37ad974db59c0da0e9f793b00798bc45ead422cc

    OF-2272: Remove 'SeniorMemberServicesRequest' cluster task
    In a cluster, all MUC services are based on database content, which is shared by all cluster nodes. There should not be a need to sync these using a cluster task.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/SeniorMemberServicesRequest.java (version 37ad974db59c0da0e9f793b00798bc45ead422cc)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/ServiceInfo.java (version 37ad974db59c0da0e9f793b00798bc45ead422cc)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 416bc584e101e15d18ba0f9541c588c6e4eb5951

    Several improvements for cluster leave handling as identified in testing.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 416bc584e101e15d18ba0f9541c588c6e4eb5951)
  • Guus der Kinderen

    Guus der Kinderen d0063b517be3f7878c570533ff12f2c7831b50cb

    OF-2272: Test MUCUser externalizable
    When, instead of using a Remote and Local variant of MUCUser, the instance is going to be shared in a clustered datastructure (a Hazelcast cache), then it is vitally important that serialization and deserialization of an instance works. This commit adds a unit test that verifies this.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRole.java (version d0063b517be3f7878c570533ff12f2c7831b50cb)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCUser.java (version d0063b517be3f7878c570533ff12f2c7831b50cb)
    • xmppserver/src/test/java/org/jivesoftware/openfire/muc/MUCUserTest.java (version d0063b517be3f7878c570533ff12f2c7831b50cb)
  • Guus der Kinderen

    Guus der Kinderen 4412a7ebb82d67811321bba26754ee96425f1648

    OF-2272: Dropped unused parameter from MultiUserChatServiceImpl.getChatUser()

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRole.java (version 4412a7ebb82d67811321bba26754ee96425f1648)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 4412a7ebb82d67811321bba26754ee96425f1648)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 8a513fb45608e4dbd60aba6abc41e52296b33235

    New page for peeking in the local room registration and clustered room cache.

    • i18n/src/main/resources/openfire_i18n.properties (version 8a513fb45608e4dbd60aba6abc41e52296b33235)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRoomManager.java (version 8a513fb45608e4dbd60aba6abc41e52296b33235)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCUserManager.java (version 8a513fb45608e4dbd60aba6abc41e52296b33235)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 8a513fb45608e4dbd60aba6abc41e52296b33235)
    • xmppserver/src/main/java/org/jivesoftware/util/cache/CacheFactory.java (version 8a513fb45608e4dbd60aba6abc41e52296b33235)
    • xmppserver/src/main/resources/admin-sidebar.xml (version 8a513fb45608e4dbd60aba6abc41e52296b33235)
    • xmppserver/src/main/webapp/muc-room-cache.jsp (version 8a513fb45608e4dbd60aba6abc41e52296b33235)
  • Guus der Kinderen

    Guus der Kinderen 3df9bc52c796391ca6fb0f09c35c723e61dc2d8d

    OF-2272: Maintain MUCRoom instance in a cache
    Instead of maintaining a local view of the state of all Local- and RemoteMUCRooms, Openfire will now use a clustered Cache to store all MUCRoom instances.

    More work around various aspects is needed:
    - a local copy should (probably) be maintained, to allow the cache to be repopulated when leaving/joining the cluster (OF-2221)
    - when modifications to a MUC room are applied, the instance needs to be explicitly re-added to the cache, to let other cluster nodes be aware of the change (OF-2220)

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRole.java (version 3df9bc52c796391ca6fb0f09c35c723e61dc2d8d)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version 3df9bc52c796391ca6fb0f09c35c723e61dc2d8d)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRoomManager.java (version 3df9bc52c796391ca6fb0f09c35c723e61dc2d8d)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 3df9bc52c796391ca6fb0f09c35c723e61dc2d8d)
  • Guus der Kinderen

    Guus der Kinderen 1a4e3f5fc44a9d8d62e4bf84d74c84628ac043bb

    Removed redundant cast.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version 1a4e3f5fc44a9d8d62e4bf84d74c84628ac043bb)
  • Guus der Kinderen

    Guus der Kinderen 6e0ab8bc550903a9665735a2f7945c39e25d2d02

    Guard against NullPointerExceptions

    • xmppserver/src/main/java/org/jivesoftware/openfire/SessionManager.java (version 6e0ab8bc550903a9665735a2f7945c39e25d2d02)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> 655a493abb2ddd66b1b2a1d164bb9a24ec70fdaa

    Fixed bug in component routes consistency check, that caused a NPE to occur in certain situations.

    • xmppserver/src/main/java/org/jivesoftware/util/cache/ConsistencyChecks.java (version 655a493abb2ddd66b1b2a1d164bb9a24ec70fdaa)
  • Guus der Kinderen

    Guus der Kinderen aa0d142f6929da334557f55a5149ddb733e2c73b

    OF-2272: Remove unused and incorrect node-reference in MUCRole

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRole.java (version aa0d142f6929da334557f55a5149ddb733e2c73b)
  • Guus der Kinderen

    Guus der Kinderen e665cd886bdc0ddf86ee54794d2a178fb4033fd6

    OF-2220: Refactor management of MUCRoom and MUCUser
    The way that MUCRoom instances and MUCUser instances are managed 'in-memory' is consistent, as should their usage-patterns be. To facilitate this, the implementation for both is made similar.

    • xmppserver/src/main/java/org/jivesoftware/openfire/commands/admin/muc/CreateMUCRoom.java (version e665cd886bdc0ddf86ee54794d2a178fb4033fd6)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCRoom.java (version e665cd886bdc0ddf86ee54794d2a178fb4033fd6)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MUCUser.java (version e665cd886bdc0ddf86ee54794d2a178fb4033fd6)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MultiUserChatService.java (version e665cd886bdc0ddf86ee54794d2a178fb4033fd6)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/FMUCHandler.java (version e665cd886bdc0ddf86ee54794d2a178fb4033fd6)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/IQMUCRegisterHandler.java (version e665cd886bdc0ddf86ee54794d2a178fb4033fd6)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/IQMUCvCardHandler.java (version e665cd886bdc0ddf86ee54794d2a178fb4033fd6)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRoomManager.java (version e665cd886bdc0ddf86ee54794d2a178fb4033fd6)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCUserManager.java (version e665cd886bdc0ddf86ee54794d2a178fb4033fd6)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version e665cd886bdc0ddf86ee54794d2a178fb4033fd6)
  • Guus der Kinderen

    Guus der Kinderen 14380c3249b77f7392c43721316724030383219e

    New utility to check for duplicates in one or more collections
    Note that this implementation is based on an unsafe varargs/generics combination.

    • xmppserver/src/main/java/org/jivesoftware/util/CollectionUtils.java (version 14380c3249b77f7392c43721316724030383219e)
    • xmppserver/src/test/java/org/jivesoftware/util/CollectionUtilsTest.java (version 14380c3249b77f7392c43721316724030383219e)
  • Emiel van der Herberg <emiel.van.der.herberg@marviq.com>

    Emiel van der Herberg <emiel.van.der.herberg@marviq.com> c0589c3cca78c164e6acbbaff07408628a1e190c

    Added node-occupants information to room cache page.

    • i18n/src/main/resources/openfire_i18n.properties (version c0589c3cca78c164e6acbbaff07408628a1e190c)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/OccupantManager.java (version c0589c3cca78c164e6acbbaff07408628a1e190c)
    • xmppserver/src/main/webapp/muc-room-cache.jsp (version c0589c3cca78c164e6acbbaff07408628a1e190c)
  • Guus der Kinderen

    Guus der Kinderen ddcb0dd6aa7817beb129766f5d4f5c6c08f2228a

    PresenceUpdateHandler: simulate 'entryAdded' for pre-existing remote cluster data
    The PresenceUpdateHandler maintains a collection of directed presences as sent by each other cluster node. This change ensures that directed presences that are already available elsewhere in the cluster when the local node joins is added to this registration.

    • xmppserver/src/main/java/org/jivesoftware/openfire/handler/PresenceUpdateHandler.java (version ddcb0dd6aa7817beb129766f5d4f5c6c08f2228a)
  • Guus der Kinderen

    Guus der Kinderen 1d25ee4989fba5d1acc9ed75a4efc28e455f9098

    OF-2272: Making MUCRole clusterable: replace user with JID
    Instead of keeping a reference to the complex MUCUser instance, the MUCRole implementation now keeps a reference to its JID, using that to look up the desired instance when needed. This makes it easier to share a MUCRole instance in a clustered cache.

    To allow the MUCUser to be looked up by JID, additional API was added to MultiUserChatImpl. This needs some cleaning up (notably, the API is not defined in the interface, which is worked around by using a cast, and thread-safety has not been taken into account at all).

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRole.java (version 1d25ee4989fba5d1acc9ed75a4efc28e455f9098)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 1d25ee4989fba5d1acc9ed75a4efc28e455f9098)
  • Guus der Kinderen

    Guus der Kinderen 287760b540a347102ecabdc5c2357555a7d3927a

    OF-2229 OF-2230: Send presence leave when cluster nodes leave
    The previous fix neglected to actually send the stanza that was composed. That's corrected here.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 287760b540a347102ecabdc5c2357555a7d3927a)
  • Guus der Kinderen

    Guus der Kinderen 53aed0874df1a0d086a589758c916afba1cc729a

    Improving code comment/naming

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version 53aed0874df1a0d086a589758c916afba1cc729a)
  • Daniel Costa <costa@rushstreetinteractive.com>

    Daniel Costa <costa@rushstreetinteractive.com> cc3a73762661227052e4884f213267192dd8371b

    OF-2287 - Added MUCDelegate getter/setter to the interface instead of only in the implementation.

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MultiUserChatService.java (version cc3a73762661227052e4884f213267192dd8371b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/IQOwnerHandler.java (version cc3a73762661227052e4884f213267192dd8371b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/LocalMUCRoom.java (version cc3a73762661227052e4884f213267192dd8371b)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version cc3a73762661227052e4884f213267192dd8371b)
  • Guus der Kinderen

    Guus der Kinderen e04b68df6010453fc49329ce07ac7ee2e7d8f6c6

    OF-2164: MUC Service config changes should propagate through the cluster
    When a MUC service (eg 'conference') is being modified (currently only possible in the admin console), these changes should be picked up by all other cluster nodes.

    This commit achieves this by adding two modifications:
    1. Enabling the code that was foreseen to broadcast MUCServiceProperty changes by registering the class that already was a listener to the dispatcher (so that it actually gets invoked when an event occurs).
    2. Adding code that, when a service is updated, reloads the description and 'isHidden' flag from the database (these properties are no regular properties, and stored in a different database table).

    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/MultiUserChatManager.java (version e04b68df6010453fc49329ce07ac7ee2e7d8f6c6)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/cluster/ServiceUpdatedEvent.java (version e04b68df6010453fc49329ce07ac7ee2e7d8f6c6)
    • xmppserver/src/main/java/org/jivesoftware/openfire/muc/spi/MultiUserChatServiceImpl.java (version e04b68df6010453fc49329ce07ac7ee2e7d8f6c6)
  • Guus der Kinderen

    Guus der Kinderen b081005ec38858410225d1d32d2d3fa04b800a50

    OF-2282: Only re-configure logging when settings differ from default
    At boot time, do not overwrite the configuration of the logging system, unless there is something to change (eg: don't reconfigure using default values).

    This prevents an issue where the logging configuration at boot time is overwriting the log4j2.xml file-provided configuration while there's no need to (effectively making it impossible to have anything logged lower than 'info' at boot time).

    • xmppserver/src/main/java/org/jivesoftware/util/Log.java (version b081005ec38858410225d1d32d2d3fa04b800a50)
  • Guus der Kinderen

    Guus der Kinderen 49991554321b313fb14d438f70bbcb7bdae7c67f

    OF-2281: Prevent invalid sublist
    At times, a negative value is provided as the 'max amount of items' (probably signifying that there's no limit), when asking for a collection of published pubsub items for a particular node. In that case, an exception occurred while trying to get the sub-collection of the total collection of items to be returned.

    • xmppserver/src/main/java/org/jivesoftware/openfire/pubsub/InMemoryPubSubPersistenceProvider.java (version 49991554321b313fb14d438f70bbcb7bdae7c67f)
  • Amos Chu <hongweichu.ouc@gmail.com>

    Amos Chu <hongweichu.ouc@gmail.com> 5da291d75617fbad0ca6b32479f5009141ffa799

    Fix wrong typo for virutal, accomodate and heirarchy

    • xmppserver/src/main/java/org/jivesoftware/openfire/RoutingTable.java (version 5da291d75617fbad0ca6b32479f5009141ffa799)
  • Guus der Kinderen

    Guus der Kinderen 122b84c48b7d068212790fb7904161a5628cf048

    Fix more typos for accomodate and heirarchy

    • xmppserver/src/main/java/org/jivesoftware/openfire/user/package-info.java (version 122b84c48b7d068212790fb7904161a5628cf048)
    • xmppserver/src/main/java/org/jivesoftware/util/Base64.java (version 122b84c48b7d068212790fb7904161a5628cf048)
    • xmppserver/src/main/java/org/jivesoftware/util/ElementUtil.java (version 122b84c48b7d068212790fb7904161a5628cf048)
  • Dan Caseley <dan@caseley.me.uk>

    Dan Caseley <dan@caseley.me.uk> f4a1aac5bdbced5eea1e2db32bc821bfc9dad323

    Merge pull request #1874 from guusdk/OF-1840_logfile-and-viewer-adjustments
    OF-1840 & OF-2286: Modification of logviewer

  • Guus der Kinderen

    Guus der Kinderen 5afa1d8da672afac56c47b345b95f73fe5ea0f93

    OF-1840: Add jansi config to (windows) launchers
    Windows natively does not support ANSI control characters. To enable this, a system property needs to be configured that prevents bypassing of a library that ships with log4j.

    • distribution/src/bin/openfire.bat (version 5afa1d8da672afac56c47b345b95f73fe5ea0f93)
    • distribution/src/installer/openfire.install4j (version 5afa1d8da672afac56c47b345b95f73fe5ea0f93)