From 6693ef4b213703a79909f89de09bb5d097363437 Mon Sep 17 00:00:00 2001 From: Ruslan Dautkhanov Date: Thu, 27 Aug 2026 23:48:04 -0600 Subject: [PATCH 1/2] Prepare release 0.11: version bump + complete changelog Bump version 0.10.9.9 -> 0.11 across the 5 release-controlled files (ant.properties, gradle.properties, pom.xml, build.gradle POM block, version.py) and rewrite the changelog into a complete 0.11 entry. The prior 'Unreleased' section listed only 3 of ~15 notable changes; enumerated all 26 commits since the 0.10.9.9 tag. Breaking changes first: Python 2 removal (#585), attribute-cache identity shift (#596), decode_bytearray (#593), cold-start (#595), TCP_NODELAY (#592), Py3 modernization (#594), fixes (#499, #554), listener-lifecycle + graceful-shutdown, perf-framework / CodSpeed / CI work. Release date and milestone link left as TBD; index.rst news line deferred to publish time. Version floor verified as Python >=3.9. Co-authored-by: Isaac --- py4j-java/ant.properties | 2 +- py4j-java/build.gradle | 2 +- py4j-java/gradle.properties | 4 +-- py4j-java/pom.xml | 2 +- py4j-python/src/py4j/version.py | 2 +- py4j-web/changelog.rst | 44 +++++++++++++++++++++++++++++++-- 6 files changed, 48 insertions(+), 8 deletions(-) diff --git a/py4j-java/ant.properties b/py4j-java/ant.properties index b69a4ad4..dd2eb2ae 100644 --- a/py4j-java/ant.properties +++ b/py4j-java/ant.properties @@ -1,5 +1,5 @@ # Version of the software -version=0.10.9.9 +version=0.11 # Path to the JUnit 4 jar. YOU MUST SET THIS VALUE. Otherwise, the test classes won't compile. junit.path=junit-4.10.jar diff --git a/py4j-java/build.gradle b/py4j-java/build.gradle index 1a2bff91..a8518c6b 100644 --- a/py4j-java/build.gradle +++ b/py4j-java/build.gradle @@ -168,7 +168,7 @@ task createPom { packaging 'jar' groupId 'net.sf.py4j' artifactId 'py4j' - version '0.10.9.9' + version '0.11' name 'Py4J' description 'Py4J enables Python programs running in a Python interpreter to dynamically access Java objects in a Java Virtual Machine. Methods are called as if the Java objects resided in the Python interpreter and Java collections can be accessed through standard Python collection methods. Py4J also enables Java programs to call back Python objects.' scm { diff --git a/py4j-java/gradle.properties b/py4j-java/gradle.properties index 69f0e6d9..d12c475c 100644 --- a/py4j-java/gradle.properties +++ b/py4j-java/gradle.properties @@ -1,6 +1,6 @@ group=py4j -bundleVersion=0.10.9.9 -version=0.10.9.9 +bundleVersion=0.11 +version=0.11 sourceCompatibility=1.6 targetCompatibility=1.6 # Define the jdk6BootClasspath in your ~/.gradle/gradle.properties diff --git a/py4j-java/pom.xml b/py4j-java/pom.xml index 1c00f161..89015e1e 100644 --- a/py4j-java/pom.xml +++ b/py4j-java/pom.xml @@ -8,7 +8,7 @@ net.sf.py4j py4j - 0.10.9.9 + 0.11 Py4J Py4J enables Python programs running in a Python interpreter to dynamically access Java objects in a Java Virtual Machine. Methods are called as if the Java objects resided in the Python interpreter and Java collections can be accessed through standard Python collection methods. Py4J also enables Java programs to call back Python objects. diff --git a/py4j-python/src/py4j/version.py b/py4j-python/src/py4j/version.py index 259653bd..438a041f 100644 --- a/py4j-python/src/py4j/version.py +++ b/py4j-python/src/py4j/version.py @@ -1 +1 @@ -__version__ = '0.10.9.9' +__version__ = '0.11' diff --git a/py4j-web/changelog.rst b/py4j-web/changelog.rst index 1f9e39f2..506d9214 100644 --- a/py4j-web/changelog.rst +++ b/py4j-web/changelog.rst @@ -4,8 +4,20 @@ Changelog The changelog describes in plain English the changes that occurred between Py4J releases. -Unreleased ----------- +Py4J 0.11 +--------- + +- Release date: TBD + +This is the first release since Py4J 0.10.9.9 (January 2025). It drops Python 2 +support, adds a suite of performance improvements, introduces a local +performance-testing framework and continuous benchmarking in CI, and fixes +several lifecycle and correctness bugs. The most important +backwards-incompatible changes are listed first. + +- Python side: **Python 2 is no longer supported.** The Python 2 compatibility + layer has been removed. Py4J now requires Python 3.9 or newer (tested on + 3.9–3.13). (#585) - Python side: Memoize attribute lookups on ``JVMView``, ``JavaPackage``, and ``JavaClass`` via a per-instance bounded LRU @@ -21,6 +33,26 @@ Unreleased attribute cache so cached references no longer pin the gateway client past shutdown. Closes issue #128; refs #557. +- Python side: Faster ``bytearray`` decoding and hot-path shortcuts in + ``smart_decode`` on the protocol layer. Closes #570; credit to @markjm + (#575). (#593) + +- Python side: Cold-start improvements — tight-polling callback-server + readiness instead of a blind sleep, plus cold-start benchmark scenarios. + Refs #557. (#595) + +- Python + Java side: Disable Nagle's algorithm (``TCP_NODELAY``) on all Py4J + socket connections, reducing small-message round-trip latency. (#592) + +- Python side: Python 3 modernization — ``super()`` without arguments, + ``raise ... from``, packaging/version metadata, and light type hints. (#594) + +- Python side: Use the module logger instead of the root logger when sending a + command. (#499) + +- Java side: ``Iterator.next`` no longer silently ignores exceptions other than + the end-of-iteration signal. (#554) + - Java side: Fix listener-lifecycle correctness bugs in ``GatewayServer`` / ``ClientServer``: @@ -51,6 +83,14 @@ Unreleased active connections, silently dropping work in flight — a real-world data-loss risk for callback-heavy workflows. +- Build, CI & testing: Add a local-run performance-testing framework (#578) and + CodSpeed continuous benchmarking, opt-in on pull requests via the + ``perf-check`` label (#584, #586, #587). Add bandwidth / cold-start / + latency-curve baseline coverage (#591) and close protocol / auth / + concurrency test-coverage gaps while hardening flaky tests and process + teardown (#590). Drop the sunset jcenter repository and retry Gradle on + transient CDN failures (#589). Upgrade GitHub Actions versions (#572). + Py4J 0.10.9.9 ------------- From 02ac4b5d1919c7e436a197099e38302615137521 Mon Sep 17 00:00:00 2001 From: Ruslan Dautkhanov Date: Thu, 27 Aug 2026 23:53:25 -0600 Subject: [PATCH 2/2] Address release-prep audit: add index.rst news line + graceful-shutdown PR ref MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two fixes from the fan-out audit of PR #18: - index.rst: add the 0.11 news entry (date TBD) — every release commit since 0.10.9.7 has added one; ours was missing it. - changelog: add (#582) to the graceful-shutdown bullet, the only feature that lacked a PR reference. Deferred to publish time: the 'tickets closed for 0.11' milestone link (needs the GitHub milestone created first) and the real release date. Co-authored-by: Isaac --- py4j-web/changelog.rst | 2 +- py4j-web/index.rst | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/py4j-web/changelog.rst b/py4j-web/changelog.rst index 506d9214..b6591f72 100644 --- a/py4j-web/changelog.rst +++ b/py4j-web/changelog.rst @@ -81,7 +81,7 @@ backwards-incompatible changes are listed first. ``shutdown(boolean)`` is unchanged (``gracePeriodMs == 0`` = abrupt, back-compat). Before this fix, ``shutdown()`` immediately force-closed all active connections, silently dropping work in flight — a real-world - data-loss risk for callback-heavy workflows. + data-loss risk for callback-heavy workflows. (#582) - Build, CI & testing: Add a local-run performance-testing framework (#578) and CodSpeed continuous benchmarking, opt-in on pull requests via the diff --git a/py4j-web/index.rst b/py4j-web/index.rst index 0a84685e..3328ddca 100644 --- a/py4j-web/index.rst +++ b/py4j-web/index.rst @@ -73,6 +73,9 @@ Support & Resources News ==== +* **TBD** - Py4J 0.11 has been released. See the + :doc:`changelog` for more details about the bug fixes and new features. + * **January 15th 2024** - Py4J 0.10.9.9 has been released. See the :doc:`changelog` for more details about the bug fixes and new features.