github apache/pulsar v5.0.0-M2

pre-release5 hours ago

2026-09-17

Approved PIPs

  • [improve][pip] PIP-445: Add Builder Methods to Create Message-based TableView (#24842)
  • [improve][pip] PIP-486: Scalable Topic Key-Shared Consumption (#26077)
  • [improve][pip] PIP-492: Add pulsar_subscription_storage_backlog_age_seconds metric (#26362)
  • [feat][pip] PIP-478: Asynchronous v5 client auth plugin interfaces and TLS material provider plugin interface (#25890)
  • [feat][pip]PIP-487 Add event count metrics for InflightReadsLimiter acquire and release operations (#26092)

Library updates

  • [improve][build] Switch default JDK to 25 for 5.0.0-M2 (#26070)
  • [fix][sec] Bump github.com/go-jose/go-jose/v4 from 4.1.3 to 4.1.4 in /pulsar-function-go (#26142)
  • [fix][sec] Bump google.golang.org/grpc from 1.79.3 to 1.82.1 in /pulsar-function-go/examples (#26231)
  • [fix][sec] Bump google.golang.org/grpc from 1.82.1 to 1.83.1 in /pulsar-function-go (#26446)
  • [fix][sec] Bump google.golang.org/grpc from 1.83.1 to 1.83.2 in /pulsar-function-go (#26541)
  • [fix][sec] Bump log4j2 from 2.26.0 to 2.26.1 (#26329)
  • [fix][sec] Downgrade Jackson version to 2.21.5 LTS (#26166)
  • [fix][sec] Pin httpclient5 to 5.6.4 and httpcore5 to 5.4.3 (#26331)
  • [fix][sec] Upgrade avro to 1.12.2 (#24992)
  • [fix][sec] Upgrade grpc in pulsar-function-go to 1.82.1 to fix GHSA-hrxh-6v49-42gf (#26235)
  • [fix][sec] Upgrade Jackson to 2.21.6 (#26338)
  • [fix][sec] Upgrade Jackson to 2.22.0 (#26101)
  • [fix][sec] Upgrade jline to 4.2.1 and picocli to 4.7.7, drop unused jline2 (#26068)
  • [fix][sec] Upgrade lz4-java to 1.11.1 to address CVE-2026-59949 (#26250)
  • [fix][sec] Upgrade Netty to 4.2.16.Final to address CVEs (#26167)
  • [fix][sec] Upgrade Netty to 4.2.17 to address several CVEs and bugs (#26300)
  • [fix][sec] Upgrade Netty to 4.2.18 to address several CVEs and bugs (#26514)
  • [fix][sec] Upgrade pulsar-client-go to v0.20.0 in pulsar-function-go, also address CVEs (#26140)
  • [fix][ci] Upgrade sandboxed-trivy-action to approved sha (#26169)
  • [improve][fn] Upgrade pulsar-client-python to 3.12.0 (#26033)
  • [improve][fn] Upgrade pulsar-client-python to 3.13.0 (#26139)
  • [improve][meta] Upgrade Oxia client to 0.9.4 (#26193)
  • [improve][monitor] Upgrade Dropwizard Metrics to 4.2.39 and HdrHistogram to 2.2.2 (#26353)
  • [improve][build] Upgrade Apache Commons libraries (#26348)
  • [improve][build] Upgrade async-http-client to 3.0.13 and netty-reactive-streams to 2.0.19 (#26366)
  • [improve][build] Upgrade BouncyCastle to 1.85 and BouncyCastle FIPS to 2.1.x (#26349)
  • [improve][build] Upgrade data structure and compression libraries (#26357)
  • [improve][build] Upgrade docker base image Alpine to 3.24 (#26225)
  • [improve][build] Upgrade Gradle plugins and move to the io.github.ben-manes.versions plugin id (#26350)
  • [improve][build] Upgrade Gradle to 9.7.0 (#26332)
  • [improve][build] Upgrade Gradle to 9.7.1 (#26440)
  • [improve][build] Upgrade gRPC to 1.83.1 and Protobuf to 4.35.1 (#26356)
  • [improve][build] Upgrade Gson to 2.14.0 and json-smart to 2.6.0 (#26355)
  • [improve][build] Upgrade Jakarta and servlet APIs within the Jakarta EE 10 level (#26354)
  • [improve][build] Upgrade Jersey to 3.1.12 (#26347)
  • [improve][build] Upgrade lightproto to 0.8.1 (#26445)
  • [improve][build] Upgrade misc tooling, annotation and utility libraries (#26359)
  • [improve][build] Upgrade networking and infrastructure client libraries (#26358)
  • [improve][build] Upgrade OkHttp to 5.5.0 and Okio to 3.18.1 (#26352)
  • [improve][build] Upgrade OpenTelemetry to 1.65.0, instrumentation to 2.30.0, semconv to 1.43.0 (#26334)
  • [improve][build] Upgrade Oxia Java client to 0.9.5 (#26538)
  • [improve][build] Upgrade Shadow plugin to 9.6.1 and merge service descriptor files in shaded jars (#26333)
  • [improve][build] Upgrade slog to 0.10.0 (#26226)
  • [improve][test] Upgrade test libraries (#26351)
  • [improve][misc] Upgrade Conscrypt to 2.6.1 to add aarch64 native support (#26314)
  • [improve][misc] Upgrade Conscrypt to 2.6.2 to restore the native library glibc baseline (#26315)
  • [improve][misc] Upgrade Jetty to 12.1.11 (#26233)
  • [improve][misc] Upgrade Jetty to 12.1.12 (#26302)

Broker

  • [fix][broker] Add missing bundle Prometheus metrics for extensible load manager (#26192)
  • [fix][broker] Avoid attaching a consumer to a migrated non-persistent topic on subscribe (#26075)
  • [fix][broker] Avoid blocking metadata read on the IO thread when redirecting migrated producers/consumers (#26051)
  • [fix][broker] Avoid blocking the bundle-throughput lookup on per-bundle metadata reads (#26054)
  • [fix][broker] Avoid blocking the dispatcher close path on delayed-delivery tracker close (#26053)
  • [fix][broker] Avoid blocking the metrics thread on the pending-ack managed ledger (#26062)
  • [fix][broker] Avoid blocking the PulsarAdmin callback thread on the post-unload load-report write (#26061)
  • [fix][broker] Avoid load shedding and metadata writes from a former leader (#26253)
  • [fix][broker] Bound the topic deletion retries triggered by a replication cluster removal (#26432)
  • [fix][broker] Cancel queued transaction snapshot recovery on topic close (#26335)
  • [fix][broker] Check deliverAt before containsMessage in bucket addMessage (#26230)
  • [fix][broker] Debit un-acked messages only when the consumer is actually removed (#26422)
  • [fix][broker] Do not log an error when the tenant does not exist (#26361)
  • [fix][broker] Don't let a closing topic-policies reader abort a concurrent cache-init reload (#26132)
  • [fix][broker] Don't serve topic policies from a cache whose init future has not completed (#26513)
  • [fix][broker] Fix getEstimatedSizeSinceMarkDeletePosition throw IllegalArgumentException (#26184)
  • [fix][broker] Fix assignment and ownership cleanup races in the extensible load manager (#26520)
  • [fix][broker] Fix AvgShedder assignment cache keying with stable bundle names (#26246)
  • [fix][broker] Fix bucket delayed delivery counter and dedup consistency (#26251)
  • [fix][broker] Fix bucket delayed message index metrics reset on scrape (#26171)
  • [fix][broker] Fix BucketDelayedDeliveryTracker recovery after LightProto migration (#26160)
  • [fix][broker] Fix delayed message index data loss when trimming overlapping bucket snapshots (#26240)
  • [fix][broker] Fix delayed-delivery bucket merge failures when delayedDeliveryMaxNumBuckets is 1-3 (#26242)
  • [fix][broker] Fix dispatcherPauseOnAckStatePersistentEnabled and schemaValidationEnforced returning wrong values when applied=true (#26472)
  • [fix][broker] Fix early completion and false timeouts in SplitManager and UnloadManager (#26363)
  • [fix][broker] Fix geo-replication stuck after a failed publish to the remote cluster (#26002)
  • [fix][broker] Fix incorrect listener URLs returned by ModularLoadManager lookups (#26245)
  • [fix][broker] Fix Key_Shared delivery stall when look-ahead triggers at the end of the topic (#26236)
  • [fix][broker] Fix multi-role authorization regressions and optimize nested checks (#26551)
  • [fix][broker] Fix NPE in ManagedLedgerInterceptorImpl when AppendIndexMetadataInterceptor isn't configured (#26497)
  • [fix][broker] Fix ownership-generation races in OwnershipCache removeOwnership and lock-expiry cleanup (#26197)
  • [fix][broker] Fix persistent throughput degradation caused by permit loss during frequent reconnects on Shared subscriptions (#26289)
  • [fix][broker] Fix replication stall when a cursor rewind skips an in-flight read (#26106)
  • [fix][broker] Fix replicator getting stuck under rate limiter throttling and honor readBatchSize/maxReadSizeBytes on the default read path (#26005)
  • [fix][broker] Fix silently dropped acknowledgement failures in PulsarMetadataEventSynchronizer (#26237)
  • [fix][broker] Fix TableViewLoadDataStoreImpl close deadlock that stalls broker shutdown (#26243)
  • [fix][broker] Forward topic policy updates after init failures (#26110)
  • [fix][broker] Guard BucketDelayedDeliveryTracker.nextDeliveryTime against empty queues (#26080)
  • [fix][broker] Log exception in PulsarMetadataEventSynchronizer failure path (#26203)
  • [fix][broker] PIP-468: don't let namespace consumers auto-recreate deleted scalable topics (#26066)
  • [fix][broker] Prevent automatic TTL expiry from skipping reader messages (#26505)
  • [fix][broker] Prevent completing replicated snapshot before marker publish (#26119)
  • [fix][broker] Prevent early replay of non-strict delayed messages (#26188)
  • [fix][broker] Prevent Key_Shared out-of-order replay starvation at the end of topic (#26268)
  • [fix][broker] Prevent NPE when the last ACK races with sticky hash reassignment (#26471)
  • [fix][broker] Prevent partition expansion from inheriting delayed-delivery bucket state (#26179)
  • [fix][broker] Prevent stale read completions from stranding Failover subscriptions (#26174)
  • [fix][broker] Prevent stale service unit callbacks from dropping active lookup and cleanup jobs (#26146)
  • [fix][broker] Prevent stale topic unload cleanup from removing active cache entries (#26145)
  • [fix][broker] Prevent topic policy initialization race with a buffering listener wrapper (#26044)
  • [fix][broker] Read subscription properties directly from cursor (#26159)
  • [fix][broker] Reject topic names with leading or trailing whitespace on creation (#26281)
  • [fix][broker] Release entry on GetLastMessageId when parseMessageMetadata throws (#26089)
  • [fix][broker] Remove lock contention in delayed delivery stats read paths (#25990)
  • [fix][broker] Resolve replicator remote cluster by prefix so cluster names containing a dot work (#26451)
  • [fix][broker] Run the message expiry check off the topic policy update path (#26040)
  • [fix][broker] Run topic policy notifications on the topic-ordered executor (#26042)
  • [fix][broker] Send ActiveConsumerChange for non-persistent Failover subscriptions (#26482)
  • [fix][broker] Stop reporting a deliberate ownership release as an expired resource lock (#26533)
  • [fix][broker] Trigger max read position callback for messages published during transaction buffer recovery (#26234)
  • [fix][broker] Wait for in-flight snapshot creation when trimming orphaned delayed-delivery buckets (#26309)
  • [fix][broker]Do not trigger topic GC if replication is still active (#25915)
  • [fix][admin] Allow defaultNumPartitions for non-partitioned autoTopicCreation override (#25163)
  • [fix][admin] Avoid creating subscriptions when peeking messages if auto-creation is disabled (#26279)
  • [fix][admin] PIP-478: off-load the admin's v4 credential and lend it a bounded auth executor (#26327)
  • [fix][admin] Reject empty cluster migration URL: fix inverted ClusterUrl.isEmpty() (#26473)
  • [fix][ml] Fix active cursor retention and deferred-update synchronization (#26511)
  • [fix][ml] Fix batch ACK index loss when recovering cursor from MetadataStore (#26474)
  • [fix][ml] Make inflight reads limiter work even if managed ledger cache is disabled (#26296)
  • [fix][ml] Parse the cached entry's message metadata from the buffer the cache keeps (#26495)
  • [fix][ml] Preserve cursor properties when recovering from an unreadable cursor ledger (#26512)
  • [fix][ml] Preserve ledger entries/size when transformLedgerInfo callback completes after a concurrent close (#26228)
  • [fix][ml] Preserve ledger properties when closing ledger (#26227)
  • [fix][ml] Preserve ledger properties when recovering the last ledger on open (#26509)
  • [fix][ml] Skip contiguous deleted ranges during reads (#26299)
  • [fix][ml] Tolerate concurrent creation of the managed ledger z-node (#26247)
  • [fix][ml] Track all pending read callbacks for timeouts (#26081)
  • [fix][offload] Cache and reuse entry offsets discovered while skipping in BlobStoreBackedReadHandleImpl (#26424)
  • [fix][offload] Normalize offloader cache directory path (#26372)
  • [fix][meta] Complete handleMetadataEvent future exceptionally when the initial get fails (#26199)
  • [fix][meta] Fix NPE in shouldIgnoreEvent when MetadataEvent options is null (#26200)
  • [fix][meta] Fix RocksdbMetadataStore instanceId not advancing across restarts (#26218)
  • [fix][meta] Record get op stats on the correct completion branch in AbstractMetadataStore (#26201)
  • [fix][meta] Run ledger-underreplication notification callbacks off the metadata-store listener thread (#26065)
  • [improve][broker] Add LongBitmap abstraction and migrate RoaringBitmap usage to LongBitmap (#26117)
  • [improve][broker] Add pulsar_subscription_storage_backlog_age_seconds metric (#26313)
  • [improve][broker] Add reason label for topic_load_failed_total (#26264)
  • [improve][broker] Avoid iterator allocation in BrokerInterceptors hot paths and restore configured ordering (#26462)
  • [improve][broker] Avoid lookup positions when batch-index state is empty (#26528)
  • [improve][broker] Bridge JUL to Log4j2 to unify third-party library logging under the project's Log4j2 configuration (#26330)
  • [improve][broker] Change partition metadata not-found log to warn (#26381)
  • [improve][broker] Conflate concurrent readMoreEntries calls (#26539)
  • [improve][broker] Copy small entries into a flat buffer when prepending broker entry metadata (#26464)
  • [improve][broker] Expose interface for the replicator in ManagedLedger instead of cast the class (#26298)
  • [improve][broker] Implemets PIP-487: add event count metrics for InflightReadsLimiter acquire and release operations (#26093)
  • [improve][broker] Improve dispatch performance by skipping redundant null ack-set writes (#26057)
  • [improve][broker] Improve dispatch performance by summing entry bytes with a loop (#26055)
  • [improve][broker] Load topic policies on non-persistent topic load and gate the policy replay (#26134)
  • [improve][broker] Make exposing topic level metric dynamic (#21006)
  • [improve][broker] Optimize bucket delayed-delivery bitmap point operations (#26205)
  • [improve][broker] Optimize SegmentedLongArray with heap-backed long[][] (#26183)
  • [improve][broker] PIP-468: auto-create scalable topics on lookup when policy allows (#26048)
  • [improve][broker] PIP-486 (PR2): controller entry-bucket budget per segment (#26118)
  • [improve][broker] PIP-486 (PR3): entry-bucket foundation (single-active by default) (#26129)
  • [improve][broker] PIP-486 (PR4): bucket-shared consumption for scale-up fan-out (#26173)
  • [improve][broker] PIP-486 (PR5): broker-side entry-bucket handoff for orderly consumer scaling (#26208)
  • [improve][broker] PIP-486: entry-bucket wire format, hash & layout foundation (#26114)
  • [improve][broker] PIP-486: rebucket rollover and the segments-vs-buckets auto-scale policy (#26434)
  • [improve][broker] Pre-size individual acknowledgment lists (#26517)
  • [improve][broker] Reduce PendingAcksMap memory by replacing IntIntPair values with packed longs (#26030)
  • [improve][broker] Reduce persistent topic backlog check overhead with ManagedCursor.hasBacklog (#26058)
  • [improve][broker] Skip system cursor when check inactive cursor. (#26149)
  • [improve][broker] Support OpenID multi-role authorization and improve proxy authentication defaults (#26549)
  • [improve][broker] Trace the asynchronous tasks in logs when loading topics (#26163)
  • [improve][broker] Trim orphaned bucket snapshots when ledgers are deleted (#25984)
  • [improve][broker] Use AVL trees for pending acknowledgment entries (#26522)
  • [improve][broker][proxy] Add httpMaxResponseHeaderSize config (#26255)
  • [fix][txn] Do not fail topic deletion when the aborted txn snapshot cannot be cleared (#26431)
  • [fix][txn] Fix X-Pulsar-txn-uncommitted header semantics and add X-Pulsar-txn-consumable for peek messages (#26073)
  • [improve][ml] Avoid capturing cache insertion arguments (#26524)
  • [improve][ml] Avoid temporary positions when deleting cursor entries (#26532)
  • [improve][ml] Back LongBitmap with the on-heap RoaringBitmap to fix ack allocation hotspot (#26500)
  • [improve][ml] Build cached read results without an intermediate collection (#26529)
  • [improve][ml] Optimize individual-ack filtering by skipping scans for batches without acked entries (#26311)
  • [improve][ml] Parse message metadata at entry cache insert time instead of under the wrapper write lock (#26463)
  • [improve][ml] Replace RangeSetWrapper with PositionRangeSet backed by LongBitmap (#26127)
  • [improve][ml] Share immutable publish positions with cached entries (#26526)
  • [improve][ml] Share read-permit release callbacks within a batch (#26523)
  • [improve][offload] Support credentials from offload policies for S3 and Aliyun OSS drivers (#26232)
  • [improve][meta] Support tuning Oxia MetadataStoreConfig through metadata-store URIs (#26067)
  • [cleanup][broker] Remove configuration entries that no longer exist in the code (#26291)
  • [cleanup][ml] Remove unused metadata quorum configuration fields (#26293)
  • [feat][broker] Expose managed ledger properties via topic internal stats (#26079)
  • [feat][broker] PIP-470: Close inactive topics without deleting their data (#25574)
  • [Fix][broker]Get a fenced error when loading a topic that does not allowed the cluster to access (#26276)

Client

  • [fix][client] Apply backpressure in the V5 producer before a send is queued (#26540)
  • [fix][client] Apply no-memory-limit producer queue defaults at producer creation (#26342)
  • [fix][client] Avoid exception in ConsumerImpl hasMessageAvailable before first receive (#25857)
  • [fix][client] Cancel pending HTTP requests on authentication client shutdown (#26537)
  • [fix][client] Cancel stale per-topic retry timers in v5 multi-topic consumers (#26130)
  • [fix][client] Defer op cmd release to the write event loop on send timeout (#26456)
  • [fix][client] Divide the across-partitions budget only when it was set explicitly (#26384)
  • [fix][client] Fix incorrect topic in OTel spans for multi-topic consumers (#25894)
  • [fix][client] Fix incorrect topic in OTel spans for partitioned producers (#25896)
  • [fix][client] Fix lookup permit double-release, waiting queue starvation and timeout-response races in ClientCnx (#26143)
  • [fix][client] Fix UnAckedMessageRedeliveryTracker to skip cancelled timeouts (#26043)
  • [fix][client] Fix unAckedMessageTracker cleanup on multi-topics batch ack (#26001)
  • [fix][client] Isolate shaded implementations from the v5 client (#26544)
  • [fix][client] Keep transactional and non-transactional messages in separate batches (#26547)
  • [fix][client] Make V5 async producer flush() await the caller's send futures (#26287)
  • [fix][client] PIP-486: explicit unsubscribe for scalable consumers' clean close (#26433)
  • [fix][client] Preserve null values in pulsar-admin schema output (#26196)
  • [fix][client] Prevent client shutdown from leaking event loop threads when DNS resolver close fails (#26045)
  • [fix][client] Release the command header when send serialization fails (#26492)
  • [fix][client] Release the reserved memory only once when failing a send in a terminal state (#26476)
  • [fix][client] Run the failover health probe off the Netty event-loop thread (#26064)
  • [fix][client] Scalable topics: stream consumer must not acknowledge on close or topic-removal (#26172)
  • [fix][client] Stop tracking ack timeouts on non-persistent topics (#26548)
  • [fix][client] Sync ackSet in client with broker to stop acked messages reaching the DLQ (#26135)
  • [improve][client] Apply receiver-queue backpressure in v5 scalable consumers (#26151)
  • [improve][client] Avoid eager broker metadata allocation for outgoing messages (#26521)
  • [improve][client] Avoid per-message cross-topic vector deep copy in v5 multi-topic stream consumer (#26162)
  • [improve][client] Avoid recomputing entry-bucket hashes (#26383)
  • [improve][client] Avoid unused send-stat snapshots for default callbacks (#26519)
  • [improve][client] Dispatch individual acknowledgments without capturing functions (#26525)
  • [improve][client] Initialize message builder metadata lazily (#26518)
  • [improve][client] Log the exception in ControlledClusterFailover.close (#25925)
  • [improve][client] Make v5 scalable consumer receiveAsync truly non-blocking (#26131)
  • [improve][client] PIP-478: Athenz and SASL v5 authentication plugins (#26319)
  • [improve][client] PIP-478: drive the v5 authentication model natively in the client (#26317)
  • [improve][client] PIP-486 (PR1): producer entry-bucketing for scalable topics (#26115)
  • [improve][client] Seed MessageCryptoBc from the BC-FIPS DRBG when that provider is registered (#26154)
  • [improve][client] Serialize grouped acknowledgments using existing message IDs (#26530)
  • [improve][client] Use SHA-256 for generated reader subscription names (#26153)
  • [feat][client] Add combined unshaded and shaded v4/v5 client artifacts (#26545)
  • [feat][client] PIP-478: asynchronous v5 client authentication and TLS factory integration (core migration) (#26282)

Pulsar IO and Pulsar Functions

  • [fix][fn] Allow retainKeyOrdering on Go functions (#26421)
  • [fix][fn] Bound function package downloads from BookKeeper and stop SchedulerManager.close() from hanging on a stuck scheduling round (#26556)
  • [fix][fn] Forward source message properties in Python runtime (#26191)
  • [fix][fn] Honour negativeAckRedeliveryDelayMs in the Go function runtime (#26415)
  • [fix][fn] Honour negativeAckRedeliveryDelayMs in the Python function runtime (#26413)
  • [fix][fn] Honour producerSpec batching configuration in the Go function runtime (#26393)
  • [fix][fn] Honour producerSpec batching configuration in the Python function runtime (#26392)
  • [fix][fn] Honour retainOrdering and retainKeyOrdering in the Go function runtime (#26414)
  • [fix][fn] Make exclusiveLeaderProducer volatile in FunctionMetaDataManager (#26046)
  • [fix][fn] Reorder Function Worker shutdown to stop scheduler before runtime manager (#26136)
  • [fix][fn] Return descriptive errors for unknown JSON properties (#26441)
  • [fix][fn] Return inputSpecs consumerProperties in function GET info (#26217)
  • [improve][fn] Standardize log4j2 Root logger configuration to use system property (#26121)
  • [improve][io] Replace Spring Framework with cron-utils in CronTriggerer (#26269)

Others

  • [fix][proxy] Avoid blocking the proxy IO thread on a cold broker cache (#26052)
  • [fix][proxy] PIP-478: resolve the proxy's broker-client credential off the event loop (#26328)
  • [fix][cli] Apply PULSAR_MEM and PULSAR_GC in bin/pulsar-perf (#26465)
  • [fix][cli] Fix V5 scalable-topics property parsing (#26177)
  • [fix][cli] pulsar-perf: register subcommand classes with picocli instead of instances (#26467)
  • [fix][cli] Set --enable-native-access=ALL-UNNAMED for the CLI tools on Java 24+ (#26365)
  • [fix][misc] Remove unnecessary " {}" suffix from log lines when there are no context attributes (#26285)
  • [fix][misc] Resolve void by name in Reflections.loadClass (#26478)
  • [fix][misc] Restore PKCS#1 RSA support and add SEC1 EC private key parsing (#26543)
  • [improve][doc] Require imports over fully qualified class names (#26516)
  • [improve][cli] Add v4-client subcommands to pulsar-perf and pulsar-client (#26480)
  • [improve][cli] Default the pulsar-perf client memory limit to half of the JVM max direct memory (#26491)
  • [improve][cli] pulsar-perf: cut latency histogram memory ~100x, fix range units and static stats state (#26466)
  • [improve][misc] Add LongArrayAckSets for allocation-free ack set operations (#26128)
  • [improve][misc] PIP-472: Drop Jetty ee8 usage and adapt legacy javax.servlet additional servlets (#26444)
  • [improve][misc] PIP-478: close out the migration follow-ups, add the JCA provider keys, and reconcile the PIP (#26326)
  • [improve][misc] PIP-478: remove the superseded PIP-337 TLS stack (#26322)
  • [improve][misc] Replace MD5 NAR/archive checksums with SHA-256 (#26152)
  • [fix][common] Handle synchronous failures from future suppliers (#25939)
  • [fix][metadata] Fix orphaned UR parent nodes not cleaned up with Oxia metadata backend (#26158)
  • [feat][misc] PIP-478: dedicated pulsar-tls-factory-api and pulsar-http-client-api SPI modules (#26222)
  • [feat][misc] PIP-478: default file-based TLS factory implementation (#26271)
  • [fix] functions: Run worker leader-election off the consumer event-listener thread (#26059)
  • [improve] Exclude filesystem offloader NAR from base image (#26085)

Tests & CI

  • [fix][build] Align protobuf proto-path and avroTools configs with the version platform (#26047)
  • [fix][ci] Update setup-gradle action to v6.2.0 to match ASF actions allowlist (#26156)
  • [fix][test] Await reader reconnect after seek() to fix flaky TopicReaderTest assertions (#26141)
  • [fix][test] Await schema policy updates in OneWayReplicatorTest (#26554)
  • [fix][test] Fix flaky AdminApiTest caused by leaked brokerShutdownTimeoutMs (#26249)
  • [fix][test] Fix flaky AuditorBookieTest.testBookieClusterRestart (#26122)
  • [fix][test] Fix flaky AuditorPeriodicCheckTest.testFailedWriteRecovery (#26316)
  • [fix][test] Fix flaky GeoReplicationTest.testTopicReplication (#26090)
  • [fix][test] Fix flaky IsolatedBookieEnsemblePlacementPolicyTest by awaiting the initial rack config load (#26429)
  • [fix][test] Fix flaky PendingAckInMemoryDeleteTest.txnAckTestBatchAndSharedSubMemoryDeleteTest (#26116)
  • [fix][test] Fix flaky PersistentTopicsTest setup caused by concurrent Mockito stubbing (#26083)
  • [fix][test] Fix flaky test testCompactionPriority (#26198)
  • [fix][test] Fix flaky testPrepareInitPoliciesCacheAsyncThrowExceptionAfterCreateReader (#26049)
  • [fix][test] Fix flaky TestReplicationWorker.testRepairedNotAdheringPlacementPolicyLedgerFragmentsOnRack (#26308)
  • [fix][test] Fix flaky V5DagWatchAutoReconnectTest producer test (#26510)
  • [fix][test] Fix OneWayReplicatorSchemaValidationEnforcedTest racing the replicator's remote topic creation (#26382)
  • [fix][test] Join assignment tailer before asserting its last message ID (#26536)
  • [fix][test] Make consistent hashing consumer selection test deterministic (#26534)
  • [fix][test] Run makeReadEntryProbFail's errorOrNot on a caller-provided executor (#26123)
  • [fix][test] Wait for compaction before reloading deleted topic policies (#26535)
  • [improve][build] Allow building with Java 26 (#26461)
  • [improve][build] Profile Pulsar tests with async-profiler from Gradle (#26460)
  • [improve][build] Restore fastutil and minimize it in the client and server distributions (#26032)
  • [improve][build] Run checkstyle/spotless without compiling and add quickCheck/sanityCheck tasks (#26050)
  • [improve][build] Set --enable-native-access=ALL-UNNAMED for test JVMs on Java 24+ (#26367)
  • [improve][build] Trim unused JDK modules from the Docker image runtime (#26086)
  • [improve][ci] Gate CI in apache/pulsar on the pull request being ready for testing (#26323)
  • [improve][ci] Run the Python function instance tests in CI (#26399)
  • [improve][test] Add randomized TripleLongPriorityQueue correctness test (#26022)
  • [improve][test] Cover reverse equality for topic message IDs (#26449)
  • [improve][test] Make PulsarProfilingTest test Scalable Topics and adjust memory parameters (#26468)
  • [improve][test] Reduce perf-producer traversal and completion overhead (#26527)
  • [improve][test] Split PulsarProfilingTest into v5 and v4 variants (#26503)
  • [improve][test]Add test: test/testTopicPartitionCannotBeCreatedAfterTopicDeleted (#26038)

For the complete list, check the full changelog.

Don't miss a new pulsar release

NewReleases is sending notifications on new releases.