1.1. 3.5.x Branch — Apache CouchDB® 3.5 Documentation
1.
Release Notes
1.1.
3.5.x Branch
View page source
1.1.
3.5.x Branch
1.1.1.
Version 3.5.1
1.1.1.1.
Features
#5626
#5665
: Debian Trixie support
#5709
: Automatic Nouveau and Clouseau index cleanup
#5697
: Add UUID v7 as a
uuid
algorithm option. The default is
still the default
sequential
algorithm.
#5713
#5697
#5701
#5704
: Purge
improvements and fixes. Optimize it up to ~30% faster for large batches.
max_document_id_number
setting was removed and
max_revisions_number
set to
unlimited
by default to match
_bulk_docs
and
_bulk_get
endpoints.
#5611
: Implement the ability to downgrade CouchDB versions
#5588
: Populate zone from
COUCHDB_ZONE
env variable in Docker
#5563
: Set Erlang/OTP 26 as minimum supported version
#5546
#5641
: Improve Clouseau service checks in
clouseau_rpc
module.
#5639
: Use OS certificates for replication
#5728
: Configurable reduce limit threshold and ratio
1.1.1.2.
Performance
#5625
: BTree engine term cache
#5617
: Optimize Nouveau searches when index is fresh
#5598
: Use HTTP/2 for Nouveau
#5701
: Optimize revid parsing: 50-90% faster. Should help purge
requests as well as
_bulk_docs
and
_bulk_get
endpoints.
#5564
: Use the built-in binary hex encode
#5613
: Improve scanner performance
#5545
: Bump process limit to 1M
1.1.1.3.
Bugfixes
#5722
#5683
#5678
#5646
#5630
#5615
#5696
: Scanner fixes. Add write
limiting and switch to traversing documents by sequence IDs instead of by
document IDs.
#5707
#5706
#5706
#5694
#5691
#5669
#5629
#5574
#5573
#5566
#5553
#5550
#5534
#5730
: QuickJS Updates. Optimized string operations,
faster context creation, a lot of bug fixes.
#5719
: Use “all” ring options for purged_infos
#5649
: Retry call to dreyfus index on noproc errors
#5663
: More informative error if epochs out of order
#5649
: Dreyfus retries on error
#5643
: Fix reduce_limit = log feature
#5620
: Use copy_props in the compactor instead of set_props
#5632
#5627
#5607
: Nouveau fixes. Enhance
_nouveau_cleanup
. Improve security on http/2.
#5614
: Stop replication jobs to nodes which are not part of the cluster
#5596
: Fix query args parsing during cluster upgrades
#5595
: Make replicator shutdown a bit more orderly
#5595
: Avoid making a mess in the logs when stopping replicator app
#5588
: Fix
couch_util:set_value/3
#5587
: Improve
mem3_rep:find_source_seq/4
logging
#5586
: Don’t wait indefinitely for replication jobs to stop
#5578
: Use
[sync]
option in
couch_bt_engine:commit_data/1
#5556
: Add guards to
fabric:design_docs/1
to prevent
function_clause
error
#5555
: Improve replicator client mailbox flush
#5551
: Handle
bad_generator
and
case_clause
in
ken_server
#5552
: Improve cluster startup logging
#5552
: Improve mem3 supervisor
#5552
: Handle shard opener tables not being initializes better
#5549
: Don’t spawn more than one
init_delete_dir
instance
#5535
: Disk monitor always allows
mem3_rep
checkpoints
#5536
: Fix
mem3_util
overlapping shards
#5533
: No cfile support for 32bit systems
#5688
: Handle timeout in
dreyfus_fabric_search
#5548
: Fix config key typo in mem3_reshard_dbdoc
#5540
: Ignore extraneous cookie in replicator session plugin
1.1.1.4.
Cleanups
#5717
: Do not check for Dreyfus. It’s part of the tree now.
#5715
: Remove Hastings references
#5714
: Cleanup fabric r/w parameter handling
#5693
: Remove explicit erlang module prefix for auto-imported functions
#5686
: Remove
erlang:
prefix from
erlang:error()
#5686
: Fix
case_clause
when got
missing_target
error
#5690
: Fix props caching in mem3
#5680
: Implement db doc updating
#5666
: Replace
gen_server:format_status/2
with
format_status/1
#5672
: Cache and store mem3 shard properties in one place only
#5644
: Remove redundant
*_to_list
list_to_*
conversion
#5633
: Use
config:get_integer/3
in couch_btree
#5618
: DRY out
couch_bt_engine
header pointer term access
#5614
: Stop replication jobs to nodes which are not part of the cluster
#5610
: Add a
range_to_hex/1
utility function
#5565
: Use maps comprehensions and generators in a few places
#5649
: Remove pointless message
#5649
: Remove obsolete clauses from dreyfus
#5621
: Minor couch_btree refactoring
1.1.1.5.
Docs
#5705
: Docs: Update the /_up endpoint docs to include status responses
#5653
: Document that _all_dbs endpoint supports inclusive_end query param
#5575
: Document how to mitigate high memory usage in docker
#5600
: Avoid “master” wording at setup cluster
#5381
: Change unauthorized example to 401 for replication
#5682
: Update install instructions
#5674
: Add setup documentation for two factor authentication
#5562
: Add AI policy
#5548
: Fix reshard doc section name
#5543
: Add
https
to allowed replication proxy protocols
1.1.1.6.
Tests/CI/Builds
#5720
: Update deps: Fauxton, meck and PropEr
#5708
: Improve search test
#5702
: Increase timeout for
process_response/3
to fix flaky tests
#5703
: Use deterministic doc IDs in Mango key test
#5692
: Implement ‘assert_on_status’ macro
#5684
: Sequester docker ARM builds and fail early
#5679
: Add
--disable-spidermonkey
to
--dev[-with-nouveau]
#5671
: Print request/response body on errors from mango test suite
#5670
: Fix
make
clean
after
dev/run
--enable-tls
#5668
: Update xxHash
#5667
: Update mochiweb to v3.3.0
#5664
: Disable ppc64le and s390x builds
#5604
: Use ASF fork of
gun
for
cowlib
dependency
#5636
: Reduce btree prop test count a bit
#5633
: Fix and improve couch_btree testing
#5572
: Remove a few more instances of Ubuntu Focal
#5571
: Upgrade Erlang for CI
#5570
: Skip macos CI for now and remove Ubuntu Focal
#5488
: Bump Clouseau to 2.25.0
#5541
: Enable Clouseau for the Windows CI
#5537
: Add retries to native full CI stage
#5531
: Fix Erlang cookie configuration in
dev/run
#5662
: Remove old Jenkinsfiles
#5661
: Unify CI jobs
1.1.2.
Version 3.5.0
1.1.2.1.
Highlights
#5399
#5441
#5443
#5460
#5461
: Implement parallel
pread
calls: lets clients issue
concurrent
pread
calls without blocking each other or having to wait for
all writes and
fsync
calls. This is enabled by default and can be
disabled with
[couchdb]
use_cfile
false
in the configuration.
CouchDB already employs a multiple-parallel-read and concurrent serial-write
design at the database engine layer, but below that in the storage engine,
each file representing a database shard is required to route all read / write
/ sync requests through a single Erlang process that owns the file descriptor
(fd).
An Erlang process can at most execute at the speed of a single CPU core. Two
scenarios can lead to a starvation of the fd-owning Erlang process message
inbox:
1000s of concurrent read requests with a constant stream of writes per shard,
or:
a high latency storage devices like network block storage.
Parallel preads re-implements the Erlang
file
module in parts as
couch_cfile
to allow multiple
dup()
’d file descriptors to be used for
reading and writing. Writes continue to be serialised at the database engine
layer, but reads now are no longer blocked by writes waiting to commit.
Comes with an extensive test suite that includes property testing to ensure
couch_cfile
behaves exactly like Erlang’s
file
in all other cases.
Performance is always equal or better than before. These scenarios show
preliminary improvements:
random document reads: 15% more throughput
read
_all_docs
: 15% more throughput
read
_all_docs
with
include_docs=true
: 25% more throughput
read
_changes
: 4% more throughput
single document writes: 8% more throughput
2000x concurrent clients, random document reads on a 12 node cluster: 30%
more throughput
concurrent constant document writes and concurrent single document reads on
a single shard: 40% more throughput.
This feature is not available on Windows.
#5435
: Improve default
chttpd_server
options. This helps with
faster processing of many concurrent TCP connections.
#5347
: Fix attachment size calculation. This could lead to shards
not being scheduled for compaction correctly.
#5494
: Implement
_top_N
and
_bottom_N
reducers. These
reducers return the top or bottom values from a map-reduce view.
is a
number between
and
100
. For instance, a
_top_5
reducer will
return the top 5 highest values for a group level.
#5498
: Implement
_first
and
_last
reducers. These reducers
return the first, and respectively, the last view row for a given group
level. For example,
_last
can be used to retrieve the last timestamp
update for each
device_id
if we had a key like
[device_id,
timestamp]
if we query the view with
group_level=1
#5466
: Conflict finder plugin. Enable the
couch_scanner_plugin_conflict_finder
plugin to find conflicting docs
across all the databases. It can be configured to report individual revisions
or aggregated statistics.
1.1.2.2.
Performance
#5499
: QuickJS rope based string implementation.
#5451
: Optimize config system to use persistent terms.
#5437
: Fix
atts_since
functionality for document
GET
requests. Avoids re-replicating attachment bodies on doc updates.
#5398
: Save 1
write
for each committing data to disk by using
fdatasync
while keeping the same level of storage reliability.
1.1.2.3.
Features
#5526
: Default
upgrade_hash_on_auth
to
true
. Downgrading to
3.4.1
3.4.2
, or
3.4.3
is safe. Those versions know how to verify
these new password hashes.
#5517
: Enable xxHash file checksums by default. Downgrading to
3.4.x
versions should be safe. Those versions know how to read and verify
xxHash checksums.
#5527
: Update Fauxton and xxHash dependencies.
#5525
: Array opcode optimization for QuickJS.
#5518
: More precise error location reporting for QuickJS.
#5507
#5510
#5509
: Erlang 28 compatibiliity.
#5516
: Detailed node membership info for Prometheus.
#5489
: Allow TLS client certs for Nouveau requests.
#5452
BigInt
support for QuickJS.
#5439
: Nouveau: upgrade
dropwizard
to 4.0.12.
#5429
: Add
simple+pbkdf2
migration password scheme.
#5424
: Scanner: reduce log noise, fix QuickJS plugin mocks,
gracefully handle broken search indexes.
#5421
: Nouveau: upgrade Lucene to 9.12.1.
#5414
: Remove unused
multi_workers
option from
couch_work_queue
#5402
: Remove unused, undocumented and detrimental idle check
timeout feature.
#5395
: Remove unused, undocumented and unreliabele
pread_limit
feature from
couch_file
#5385
: Clean up
fabric_doc_update
by introducing an
#acc
record.
#5372
: Upgrade to Elixir 1.17.
#5351
: Clouseau: show version in
/_version
endpoint.
#5338
: Scanner: add Nouveau and Clouseau design doc validation.
#5335
: Nouveau: support reading older Lucene 9x indexes.
#5327
#5329
#5419
: Allow switching JavaScript
engines at runtime.
#5326
#5328
: Allow clients to specify HTTP request ID,
including UUIDs.
#5321
#5366
#5413
: Add support for
SpiderMonkey versions 102, 115 and 128.
#5317
: Add
quickjs
to the list of welcome features.
1.1.2.4.
Bugfixes
#5515
: Make sure
query_limit
config takes effect. Raise default
limit from
2^28
to
2^59
. Allow
infinity
as a more ergonomic
config value.
#5522
: Reopen indexes closed by Lucene in Nouveau.
#5508
: Fix array
from()
and
at()
for QuickJS.
#5502
: Buffer overflow and segfault fix in QuickJS.
#5469
#5471
: Retry closed connections in Nouveau.
#5463
: Fix
badarith
in Nouveau index query.
#5447
: Fix arithmetic mean in
_prometheus
#5440
: Fix
_purged_infos
when exceeding
purged_infos_limit
#5431
: Restore the ability to return
Error
objects from
map()
#5417
: Clouseau: add a version check to
connected()
function to
reliably detect if a Clouseau node is ready to be used.
#5416
: Ensure we always map the documents in order in
couch_mrview_updater
. While views still built correctly, this behaviour
simplifies debugging.
#5373
: Fix checksumming in
couch_file
, consolidate similar
functions and bring test coverage from 66% to 90%.
#5367
: Scanner: be more resilient in the face of non-deterministic
functions.
#5345
: Scanner: be more resilient in the face of incomplete sample
data.
#5344
: Scanner: allow empty doc fields.
#5341
: Improve Mango test reliability.
#5337
: Prevent a broken
mem3
app from permanently failing
replication.
#5334
: Fix QuickJS scanner
function_clause
error.
#5332
: Skip deleted documents in the scanner.
#5331
: Skip validation for design docs in the scanner.
#5330
: Prevent inserting illegal design docs via Mango.
1.1.2.5.
Docs
#5433
: Mango: document Nouveau index type.
#5432
: Add conceptual docs for Mango.
#5428
: Fix wrong link in example in
CONTRIBUTING.md
#5400
: Clarify RHEL9 installation caveats.
#5380
#5404
: Fix various typos.
#5338
: Clouseau: document version in
/_version
endpoint.
#5340
#5412
: Nouveau: document search cleanup API.
#5316
#5325
#5426
#5442
#5445
: Document various JavaScript engine incompatibilities,
including SpiderMonkey 1.8.5 vs. newer SpiderMonkey and SpiderMonkey vs.
QuickJS.
#5320
#5374
: Improve auto-lockout feature documentation.
#5323
: Nouveau: improve install instructions.
1.1.2.5.1.
Tests
#5492
: Enable Clouseau testing for FreeBSD
#5490
: Enable Clouseau testing for MacOS
#5397
: Fix negative-steps error in Elixir tests.
1.1.2.6.
Builds
#5360
: Use
brew
--prefix
to find ICU paths on macOS.
1.1.2.7.
Other
There’s always IOPS in the banana stand.
US