Build: #2699 was successful

Job: Debian Workflow was successful

Stages & jobs

  1. Build and Package

  2. Copy to Website

Code commits

Openfire (master)

  • Guus der Kinderen

    Guus der Kinderen c3243f830b248d9d14b9eada175a63549080914f

    OF-3208: Fix plugin unload failure on Windows caused by JVM file locks
    On Windows, the JVM holds mandatory file locks on JAR/class files opened by a plugin's class loader. These locks are not released until the underlying ZipFile/JarFile handles are garbage-collected, which prevented the extracted plugin directory from being deleted during unload. Because the cleanup of internal data structures (pluginsLoaded, childPluginMap, parentPluginMap) was sequenced after directory deletion, isLoaded() would incorrectly return true for plugins that had been unloaded, causing testDelete_Node_A and testReload_Node_A to fail on Windows CI.

    Changes:
    - Move pluginsLoaded/childPluginMap/parentPluginMap removal to immediately after doDestroyClassLoader, so that isLoaded() reflects logical state regardless of whether physical file deletion succeeds.
    - Add System.runFinalization() alongside the existing System.gc() hints in doDestroyExtractedFiles to improve the likelihood of lock release between deletion attempts. Note: System.runFinalization() is deprecated since Java 18 and will need to be removed when support for it is dropped.
    - Register all remaining files and directories with File.deleteOnExit() if the extracted plugin directory still exists after all retry attempts.

    • xmppserver/src/main/java/org/jivesoftware/openfire/container/PluginManager.java (version c3243f830b248d9d14b9eada175a63549080914f)
    • xmppserver/src/test/java/org/jivesoftware/openfire/container/PluginLoadingComplexHierarchyTest.java (version c3243f830b248d9d14b9eada175a63549080914f)
  • Guus der Kinderen

    Guus der Kinderen b2914509228e99b722e7339a02bf0a5d10613e12

    OF-3211: Make plugin directory destruction timeout configurable
    This commit introduces two properties, without changing its default values.

    - `plugins.unloading.directory.destroy.delay` (2 seconds) - A delay that is observed between the time a plugin's unloading starts, and the plugin directory actually being removed.
    - `plugins.unloading.directory.destroy.timeout` (40 seconds) - The maximum time that Openfire will wait for a plugin directory to be destroyed after the plugin is unloaded.

    Instead of iterating 5 times up until the destroy timeout, the code now iterates more frequently. This should give faster response times in cases where the plugin directory destruction was successful only moments after the initial iteration failed.

    Unit tests have been modified to reduce these values during their runtime. This is expected to reduce the runtime of tests.

    • i18n/src/main/resources/openfire_i18n.properties (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • i18n/src/main/resources/openfire_i18n_cs_CZ.properties (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • i18n/src/main/resources/openfire_i18n_de.properties (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • i18n/src/main/resources/openfire_i18n_es.properties (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • i18n/src/main/resources/openfire_i18n_fa_IR.properties (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • i18n/src/main/resources/openfire_i18n_fr.properties (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • i18n/src/main/resources/openfire_i18n_he.properties (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • i18n/src/main/resources/openfire_i18n_ja_JP.properties (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • i18n/src/main/resources/openfire_i18n_nl.properties (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • i18n/src/main/resources/openfire_i18n_pl_PL.properties (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • i18n/src/main/resources/openfire_i18n_pt_BR.properties (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • i18n/src/main/resources/openfire_i18n_pt_PT.properties (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • i18n/src/main/resources/openfire_i18n_ru_RU.properties (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • i18n/src/main/resources/openfire_i18n_sk.properties (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • i18n/src/main/resources/openfire_i18n_uk_UA.properties (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • i18n/src/main/resources/openfire_i18n_zh_CN.properties (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • xmppserver/src/main/java/org/jivesoftware/openfire/container/PluginManager.java (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • xmppserver/src/test/java/org/jivesoftware/openfire/container/PluginLoadingComplexHierarchyTest.java (version b2914509228e99b722e7339a02bf0a5d10613e12)
    • xmppserver/src/test/java/org/jivesoftware/openfire/container/PluginLoadingSimpleHierarchyTest.java (version b2914509228e99b722e7339a02bf0a5d10613e12)
  • Guus der Kinderen

    Guus der Kinderen 04c7179e0c16072b7eeeafb28cbd8dd8379db41c

    OF-3209: Introduce more reliable flag to signal plugin reload
    Previously, a plugin was marked to be reloaded by having its 'last modified' date reset. This is an operation that's not guaranteed to be successful on all operating systems. In this commit, a more explicit flag is used.

    • xmppserver/src/main/java/org/jivesoftware/openfire/container/PluginManager.java (version 04c7179e0c16072b7eeeafb28cbd8dd8379db41c)
    • xmppserver/src/main/java/org/jivesoftware/openfire/container/PluginMonitor.java (version 04c7179e0c16072b7eeeafb28cbd8dd8379db41c)
  • Guus der Kinderen

    Guus der Kinderen f26db140d1942b853059a7b7946313ced57295af

    OF-3209: Fix plugin unload/reload failures on Windows caused by orphaned directories
    On Windows, mandatory JVM file locks can prevent the extracted plugin directory from being deleted during unload. This causes two problems:

    1. A deleted plugin whose JAR is gone may be reloaded from its orphaned directory. Fixed by filtering the directory stream to skip directories without a corresponding JAR/WAR file.
    2. A reloaded plugin may be re-extracted from a stale directory if the previous directory deletion failed. Fixed by comparing JAR and directory modification times in unzipPlugin, forcing re-extraction when the JAR is newer than the existing directory.

    Resolves test failures in PluginLoadingSimpleHierarchyTest and PluginLoadingComplexHierarchyTest on Windows.

    • xmppserver/src/main/java/org/jivesoftware/openfire/container/PluginMonitor.java (version f26db140d1942b853059a7b7946313ced57295af)
    • xmppserver/src/test/java/org/jivesoftware/openfire/container/PluginLoadingComplexHierarchyTest.java (version f26db140d1942b853059a7b7946313ced57295af)
    • xmppserver/src/test/java/org/jivesoftware/openfire/container/PluginLoadingSimpleHierarchyTest.java (version f26db140d1942b853059a7b7946313ced57295af)
  • Guus der Kinderen

    Guus der Kinderen 1dfffea56831d5711d6f77c7e13c32718e8890f9

    OF-3209: More reliably test if plugin got reloaded
    This modifies a unit test to no longer determine based on file attributes (last modified timestamp) if a plugin got (re)loaded. These attributes are not reliably set on all operating systems. The new approach registers an event listener instead.

    • xmppserver/src/test/java/org/jivesoftware/openfire/container/PluginLoadingComplexHierarchyTest.java (version 1dfffea56831d5711d6f77c7e13c32718e8890f9)
    • xmppserver/src/test/java/org/jivesoftware/openfire/container/PluginLoadingSimpleHierarchyTest.java (version 1dfffea56831d5711d6f77c7e13c32718e8890f9)