Riak KV 2.0.4 Release Notes
Changes
- Improve AAE fullsync by estimating total number of keys. This allows
for better sizing of the bloom filter when performing a
bloom-fold-based exchange and enhances the adaptive exchange logic
that was added previously in Riak 2.0.1. In that version, the new
riak_repl.fullsync_direct_percentage_limit
setting was added, which allowed the limit to be specified as a percentage of total keys rather than as a fixed number. - Added
last_fullsync_complete
stat tracking riak_repl/642 - Expose AAE tree status in the logs riak_kv/1056
- Improve AAE fullsync by using breadth-first exchange
- Riak now uses Exometer for collecting metrics and has an improved CLI
for finding and displaying them
- riak/651
- riak_api/70
- riak_api/71
- riak_api/72
- riak_core/650
- riak_core/654
- riak_core/655
- riak_core/663
- riak_core/665
- riak_core/668
- riak_kv/1044
- riak_kv/1048
- riak_kv/1050
- riak_kv/1058
- riak_kv/1059
- riak_kv/1067
- riak_pipe/89
- riak_pipe/90
- riak_pipe/91
- riak_search/168
- riak_search/169
- riak_search/172
- yokozuna/434
- yokozuna/435
- yokozuna/440
- yokozuna/441
- riak_ee/296
- Internal components can process partial configurations as if they were in the global config file. This supports the handoff visibility changes.
- Riak now uses Clique for managing CLI commands. The initial commands covered exist to increase visibility into the handoff process and provide Cuttlefish config support from the CLI.
AAE Fullsync Performance Improvements
In version 2.0.4, a number of improvements to the AAE fullsync feature were added, improvements that were initially introduced in Riak version 1.4.12 but had not yet been introduced into Riak 2.0.x. The following improvements have been introduced:
- Data transfers are now pipelined instead of individually acknowledged, in the name of maximizing throughput
- The code now avoids redundant scans of replcated data. For a
replication factor of, say, 3 (i.e. an
n_val
of 3), only a third of the relevant vnodes are scanned. - The algorithm is now smarter about small differences
Performing an AAE fullsync operation between two identical clusters is very fast. The time it takes to finish an AAE fullsync is much closer to linear on the number of differences between the clusters. Below are the results of one of our benchmarks. Two 8-node clusters were used, each with the following characteristics:
- Each node has 630 GB of SSD storage
- Each node is running only two vnodes (16-partition ring)
- 23 million objects per vnode
- 99% of objects are 8 KB
- 1% of objects are a mix of 8 KB to 40 MB outliers
- 450 GB of data on disk per server
The results for each stage of fullsync:
- Empty cluster to empty cluster: 6 seconds
- Full cluster to empty cluster: 14 hours, 40 minutes
- 10% changes: 3 hours, 45 minutes
- 1% changes: 40.5 minutes
- No changes: 42.5 seconds
Fixes
- Fix stats process crash if no leader riak_repl/645
- Address some minor bugs around establishing SSL connections riak_repl/644
- 2.0 port of AAE transient filesystem failures riak_repl/640
- Fix error/retry exit counts on location down messages riak_repl/639
- Fix deadlock when performing AAE fullsync over SSL (Erlang VM patch)
- Prevent servers from accepting SSLv3 connections (Erlang VM patch)
- The map Data Type is now more efficient when merging
- Fix a case in which sibling explosion could occur during handoff
- Special handling for the
net_ticktime
setting in admin scripts node_package/166 - Add a missing function clause in
riak_kv_node
that could result in crashes riak_core/693 - Avoid timeouts when handoff sender is folding over a large number of keys riak_core/627
- No more extra work for handoff sender after TCP error makes that work useless riak_core/626
- Report error when failing to open file instead of crashing when
calling
riak_core_util:replace_file/2
riak_core/646 - Debian package fixes
- Ensure creation of ensembles when strongly consistent bucket types
with different
n_val
s from default bucket type do not yet have buckets riak_kv/1008 - Avoid SSL deadlocks that occur when sending data bidirectionally using Erlang SSL sockets. The fix is a patch to the Erlang VM shipped with the build.
Merged Pull Requests
- bitcask/202: Unpin cuttlefish from tag
- node_package/166: add support for custom exit codes to nodetool rpc & friends
- node_package/170: Handle net_ticktime argument specially. Resolves RIAK-1281
- node_package/173: Fixes for debian control template
- riak_kv/1008: Use SC bucket types and buckets to know ensembles
- riak_kv/1026: Update to use new breadth-first AAE exchange
- riak_kv/1027: Attempt to make vnodeids on the same node unique
- riak_kv/1030: Implement key count estimation via AAE trees
- riak_kv/1035: Consuming the vnode_status output in stats was brittle
- riak_kv/1044: Introduce exometer metrics into 2.0
- riak_kv/1048: Remove afunix from EXOMETER_PACKAGES.
- riak_kv/1050: Add skipped_repairs stat.
- riak_kv/1056: Expose logs about AAE tree status.
- riak_kv/1058: Use exometer_core
- riak_kv/1059: add missing aliases
- riak_kv/1062: Fixes sibling explosion bug caused by forwarding coordination
- riak_kv/1063: Bugfix for precondition_context test failures.
- riak_kv/1065: Fix bug related to riak_dt#110 serialization changes
- riak_kv/1067: Make read-repair stats be ‘proplist’ instead of ‘value’
- riak_kv/1068: Set schema dirs for riak_core in riak_kv_test_util
- riak_core/626: Allow handoff sender to abort handoff by throw’ing from fold fun
- riak_core/627: Handoff sender sends sync periodically
- riak_core/629: Add breadth-first AAE exchange
- riak_core/633: Implement key count estimation via AAE trees
- riak_core/646: Tell the caller when you fail to open a file, too
- riak_core/650: Introduce exometer metrics into 2.0
- riak_core/654: Remove afunix from EXOMETER_PACKAGES.
- riak_core/655: add skipped_read_repairs to legacy stat map
- riak_core/663: use exometer_core instead of exometer
- riak_core/665: add missing aliases
- riak_core/668: Replaces feuerlabs/exometer with basho/exometer
- riak_core/669: Add transfer_limit config callback to handoff_cli
- riak_core/672: Fixes sibling explosion bug caused by forwarding coordination requests d…
- riak_core/674: Feature/revised/riak cli handoff status 1239
- riak_core/675: rename riak_cli to clique
- riak_core/677: Standardize usage/command registration
- riak_core/678: Integration/riak admin handoff team
- riak_core/679: Handle down nodes consistently
- riak_core/680: Make riak_core_status:active_partitions safe if a node is down.
- riak_core/681: Cleanup after review
- riak_core/682: add riak-admin handoff config support
- riak_core/685: Improve handoff enable/disable config naming
- riak_core/686: add whitelisted config variables to riak_core_handoff_cli
- riak_core/692: Allow schema loading with an environment variable
- riak_core/693: mod_set_forwarding crashes [JIRA: RIAK-1459]
- riak_core/695: change git url for clique to fix PR #694 [JIRA: RIAK-1460]
- riak/651: Use exometer_core
- riak/654: change riak_cli to clique
- riak/655: Add handoff; remove cluster members
- riak/656: Add set, show and describe to usage
- riak/657: Integration/riak admin handoff team
- riak_api/66: Do not treat errors as success
- riak_api/70: Exometer metrics in 2.0
- riak_api/71: Remove afunix from EXOMETER_PACKAGES.
- riak_api/72: Use exometer_core & exometer aliases
- yokozuna/430: merged develop into 2.0
- yokozuna/431: update-readme-to-up-to-date-riak-version
- yokozuna/432: merge dev into 2.0 for test readme updates
- yokozuna/434: Introduce exometer metrics into 2.0
- yokozuna/435: Remove afunix from EXOMETER_PACKAGES.
- yokozuna/440: Use exometer_core & exometer aliases
- yokozuna/441: minor alias typo
- riak_search/168: Introduce exometer metrics into 2.0
- riak_search/169: Remove afunix from EXOMETER_PACKAGES.
- riak_search/172: Fix dep error in rebar.config
- cuttlefish/165: Add case for incomplete/syntax-error when parsing conf file.
- cuttlefish/166: Add cuttlefish:warn/1 for use in translations.
- cuttlefish/172: Backport #169 and #171 from develop
- cuttlefish/173: Handle case where advanced.config contains > 1 terms
- cuttlefish/174: Add cuttlefish_generator:minimal_map/2.
- riak_dt/110: Swap orddict for dict in orswot and map
- riak_pipe/89: Introduce exometer metrics into 2.0
- riak_pipe/90: Remove afunix from EXOMETER_PACKAGES.
- riak_pipe/91: Use exometer_core & exometer aliases
Added Repositories
Known Issues
- Clique can’t handle config values with Cuttlefish transformations
Download
Please see our downloads page.
Feedback
We would love to hear from you. You can reach us at any of the following links:
- http://lists.riak.com/mailman/listinfo/riak-users_lists.riak.com
- https://github.com/basho/basho_docs
- https://github.com/basho/riak
Or via email at info@riak.com.
Riak 2.0.3 Release Notes
Merged PRs
- riak/621: Introduce exometer metrics into 2.0
- riak/623: Remove afunix from EXOMETER_PACKAGES.
- riak/647: remove afunix from reltool.config