Release 4.15.0
Apache Bookkeeper release 4.15.0
Release 4.15 includes many upgrades to third party libraries marked with CVEs, adds more configuration options, extends REST API, adds an option to run without journal, improves memory utilization and stability, and more!
Apache BookKeeper users are encouraged to upgrade to 4.15.0. The technical details of this release are summarized below.
Breaking Changes
-
BookieServer
API changed and the code that creates its instances will require addition of theUncleanShutdownDetection
parameter. See PR 2936 for details and examples. -
Bookie
class now is an interface with implementation inBookieImpl
. Code that uses it may need changes. For details please refer to PR 2717. -
LedgerUnderreplicationManager
interface added a new method. Code that implements the interface will need changes. See PR 2805 for details. -
MetadataBookieDriver
interface added a new method and removed an old one.RegistrationManager
interface added a new method.ByteBufAllocatorWithOomHandler
interface is added and used instead of theByteBufAllocator
in multiple places. Code that implements the interfaces will need changes. See PR 2901 for details.
Highlights
Configuration
- ledgerMetadataVersion: BookKeeper-Client config to write ledger metadata with configured version.
- clientTcpUserTimeoutMillis: Added TCP_USER_TIMEOUT to Epoll channel config.
- auditorMaxNumberOfConcurrentOpenLedgerOperations and auditorAcquireConcurrentOpenLedgerOperationsTimeOutMSec Add auditor get ledger throttle to avoid auto recovery zk session.
- dbStorage_rocksDB_format_version make rocksdb format version configurable.
Features
- Running without journal. See BP-46 for details.
- A REST API to get or update bookie readOnly state. Details
- Separate config files for Rocks DB. Details
Improvements
- Build and tests work on JDK 17
- CLI: listunderreplicated command has an option to return count without printing all ledgers #3228
- Stream Storage: support an optional time to live (TTL) on a per table basis #2775
- Added dDb ledger index rebuild operation and CLI commands #2774
- Support multi ledger directories for rocksdb backend entryMetadataMap #2965
- Improved memory utilization
- Read speed rate limiter for scanning entry log file in entryMetadataMap rebuild #2963
- Other improvements in areas such as test, documentation, CI, metrics, logging, and CLI tools.
Notable fixes
- Bookkeeper client might not close the channel for several minutes after a Bookie crashes #2482
- Stream storage: Ensure progress while restoring from checkpoint. #2764
- Entry Log GC may get blocked when using entryLogPerLedgerEnabled option #2779
- Fix region aware placement policy use disk weight #2981
- Some cases that could cause RocksDB segfault
- DistributedLogManager can skip over a segment on read. #3064
- Backpressure: check all bookies of writeset are writable #3055
- Fix Journal.ForceWriteThread.forceWriteRequests.put deadlock #2962
- PendingReadOp: Fix ledgerEntryImpl reuse problem #3110
- Region/rack aware placement policy: replace bookie bug #2642
- ReplicationWorker: numLedgersReplicated metric does not update #3218
- Force GC doesn't work under forceAllowCompaction when disk is full #3205
Dependencies changes
Upgraded dependencies to address CVEs include:
- vertx
- freebuilder
- libthrift
- netty
- bouncycastle
- commonsIO
- jetty
- log4j
- grpc
- protobuf
- snakeyaml
- RocksDB
- jackson
- jackson-databind
- Zookeeper
- http-core
- dropwizard metrics
Dependency on log4j v.1 is removed.
Details
https://github.com/apache/bookkeeper/issues?q=+label%3Arelease%2F4.15.0