JetBrains Xodus v1.3.232 Release NotesRelease Date: 2020-05-03 // 29 days ago
🚀 This release brings bug fixes and performance improvements related to database ciphering and memory usage control.
ChaCha20 implementation by JetBrains
The new implementation of ChaCha20, modern stream ciphering algorithm widely used nowadays, is written in Kotlin. Prior to this release, ChaCha20 had the only implementation provided by the
Legion of the Bouncy Castle. The new implementation is identical to the Bouncy Castle's one in terms of ciphering, but consumes 13% less CPU:
Benchmark Mode Cnt Score Error Units JMHStreamCipherBenchmarks.chaChaCrypt thrpt 12 97.439 ± 1.069 ops/us JMHStreamCipherBenchmarks.jbChaChaCrypt thrpt 12 110.342 ± 0.543 ops/us
🚚 The new implementation has been used already for two months in YouTrack InCloud servers, as well as in the main production instance of JetBrains YouTrack. So it's quite safe to just replace the the Bouncy Castle's implementation (cipherId:
jetbrains.exodus.crypto.streamciphers.ChaChaStreamCipherProvider) by the new one (cipherId:
jetbrains.exodus.crypto.streamciphers.JBChaChaStreamCipherProvider) and have less CPU consumption as a benefit. The Bouncy Castle's implementation won't be removed in future versions.
🌲 Log Cache can use Soft References
👀 As of 1.3.232, it is possible to configure shared log cache to use Soft References (see
EnvironmentConfig#setLogCacheUseSoftReferences). If this setting is turned on, Java GC would be able to reclaim some heap memory occupied by log cache. As before, log cache can't use more memory than certain memory control settings allow. Such memory-flexible log cache can be extremely useful during load peaks, if and when memory consumption and/or memory traffic increases explosively. The setting should be turned on explicitly, any defaults remain unchanged. Thanks to Martin Häusler for the proposal.
🐛 Bug fixes
- XD-793 — GarbageCollector can miss BTree leaf in certain case of data corruption
- XD-802 — Forced close of Environment can result in deadlock under load
- XD-801 — NumberOfCachingJobs in EntityStoreStatistics is always 0
Previous changes from v1.3.124
🚀 This release brings bug fixes and minor performance improvements related to Entity Stores.
Starting from version 1.3.124,
EntityStore.close()doesn't close underlying explicitly created
Environment. Prior to 1.3.124, this contract was undefined.
🐛 Bug fixes