これはバグフィックスのリリースです。主にセカンダリーインデックス、Riak Control、LevelDB に関する修正が含まれています。
-
riak_kv/615 で、完全一致のクエリに対するページネーションの問題が修正されました。
-
riak_kv/616 2iクエリでもタイムアウトを設定できるようになりました。
-
riak_kv/618 2iをMapReduceの入力として渡せなかった問題が解決しました。
-
riak_control/120 1.3系で動作するクラスタに1.4.0のノードを追加すると Riak Control がRiakノードをクラッシュさせる問題を解決しました。
-
leveldb/88 Basho 版の LevelDB の fadvise サポートが改善され、書き込み時の競合がいくつか解決されました。
- riak_core/351: Fix catch pattern to match all errors
- riak_core/352: Fix TCP mon to correctly spot nodes coming up
- riak_kv/615: Do not set the start_term to the last seen key for eq (2i)
- riak_kv/616: Add millisecond timeout parameter to API 2i endpoints
- riak_kv/618: Strip index term from result before passing to MR (2i)
- riak-erlang-client/108: Add timeouts to 2i queries
- riak_pb/50: Add timeout field to 2i messages
- riak_control/120: Handle incompatible records between the 1.3 and 1.4 release
- leveldb/88: More effective fadvise calls + fix write race conditions
- node_package/75: In RPMs: Do not error on post install script if usermod fails
- node_package/76: Fix
riak version
for RPM packages
Riakに保存されるデータのフォーマットがさらにコンパクトになりました。 新しいフォーマットはデータ保存時のオーバーヘッドを減らしています。 特に小さいオブジェクトや大きなバケット名、キー名、メタデータに対して効果を発揮します。
Riak1.4で新規に作ったRiakクラスターはデフォルトで新しいフォーマットが有効になっています。 Riak1.4へアップグレードする際は、アップグレードをおこなうと新しいフォーマットが有効になります。 新旧のフォーマットは双方共にサポートされますので、アップグレードに伴う追加のオペレーションは必要ありません。
どのフォーマットが用いられるかは app.config
の riak_kv
セクションで、object_format
を設定します。
設定値は v0
、v1
のどちらかであり、新しいフォーマットはv1
です。
この新しいフォーマットはクラスターがサポートすればhandoff でも使用されます。
Riak1.4へアップグレードして新しいフォーマットを有効にしたユーザーが前バージョンへのダウングレードするには、
新しいフォーマットになっているデータを書きかえる必要があります(以前のバージョンのRiakは新しいフォーマットを読み込めません)。
riak-admin
ではこのユーティリティが用意されています:
riak-admin downgrade-objects <kill-handoffs> [<concurrency>]
このユーティリティはダウングレードするにあたって、ノードごとに実行します。
<kill-handoffs>
は true
か false
のどちらかの値をとります。false
の場合、
再フォーマットの前に実行中のhandoffを待ちます。true
であればノードが受信もしくは
送信している実行中のhandoffは全てkillされます。
再フォーマット中やその後はtransfer-limitが0に設定されます。
<concurrency>
オプションは1以上の整数値を取ります。これはそのノード上で、
いくつのパーティションが並列で再フォーマットされるかを指定するものです。
デフォルトは2になっています。そしてクラスタ全体がダウングレードされることを見越して、
downgrade-objects
は推奨フォーマットを v0
に設定します。downgrade-objects
はエラーや、
ノードがクラッシュした場合に複数回実行できます。
riak attach
にすでに慣れているユーザーは1.4での変更は注目に値します。
riak attach
は稼働中のerlangノードと通信するためにerlangに提供されている
named pipeを使用していました。この機能は素晴らしいのですが、偶然にも Ctrl-C を押してしまうと
アタッチしたセッションと共に動作中のノードも終了させてしまいます。この振る舞いを今回、
-remsh
(remote shell)を使ったノード通信に変更しました。これはCtrl-Cが稼働中のノードをkillしないので、より安全です。
分散erlangの問題にぶつかったり、-remsh が望ましくない場合は、以前のriak attach
と同じ振る舞いする新しいコマンドの
riak attach-direct
を使ってください。
riak-admin transfers
でトランスファーごとの進捗を見られるようになりました。
また長いノード名の表示も改善しています。
進捗が表示されるかどうか、またどのように計算されるかはクラスターのバックエンドに依存します。
進捗は riak_kv_bitcask_backend
と riak_kv_eleveldb_backend
、riak_kv_memory_backend
で有効です。
riak_kv_multi_backend
を使うクラスタは進捗の表示が有効になりません。
riak_kv_bitcask_backend
と riak_kv_memory_backend
ではキーの総数と送信済み数により進捗が決まります。
バリューサイズが大きく変わる場合には進捗が素直に出ないことがあります。 riak_kv_eleveldb_backend
では、
進捗は保存されたバイトで測られます。総使用バイトは時に過大評価となるため、表示される進捗は、
実際の進捗を正しく表していることもありますが、最悪の場合には表示よりも先に進んでいる可能性があります。
Lager は Riak 1.3.x 系で用いられていた 1.2.2 から 2.0.0 へアップデートされました。 Lager 自体の新しい機能は https://github.com/basho/lager をご覧ください。
セカンダリーインデックス (2i) を拡張し、ページネーションを可能にしました。 max_results
オプションを指定することで、プロトコルバッファーと HTTP の両方で利用できます。完全な詳細は こちら をご覧ください。
クライアントタイムアウト値をミリ秒で指定できるようになりました。これはオブジェクトの取得、保存、削除に対するデフォルトの内部的なタイムアウトを上書きします。
プロトコルバッファーは既知のすべてのバケットプロパティーをサポートします。またリセットも可能になりました。
キーリストと同様に、バケットリストもストリーミング可能になりました。 Riak が各ノードからの応答をすべて集めてからクライアントに応答するのではなく、各ノードからの応答に応じてクライアントに送信します。
HTTP と同様に、プロトコルバッファーも複数のインターフェースにバインド出来るようになりました。設定は pb_port
と pb_ip
から変更され、単一の pb
となりました。そこでは IP とポートのリストを指定できます。
Riak 1.4 では、Riak で初めてとなる分散データ型である PN-カウンターを追加しました。PN-カウンターはインクリメント(P)とデクリメント(N)の両方が可能です。完全な詳細は こちら をご覧ください。私達は Riak の将来のデータ型を説明するため CRDT Cookbook にも取り組んでいます。
Riak Control はクラスタとスタンドアローンノードの管理を改善し、変更のステージングとコミットをサポートします。
コマンド riak-debug
はトラブルシューティングのための情報収集自動化の
助けとなるシェルスクリプトです。OS コマンド、Riak コマンド、Riak 設定ファイル、
Riak ログファイルの情報を集めます。スクリプトの使い方やワークフローへの組み込み方は
riak-debug -h
や man riak-debug
を参照してください。
Riak 1.4 は node_package を 用いてパッケージ化されるようになりました。Riak CS は初めてのリリースから このツールを用いています。 この共通化により、一貫性のある機能を提供し、またパッケージング品質を向上させています。 このリリースに対するパッケージングのバグフィックスは "Issues" セクションの node_package の項目をご覧ください。
Debian Wheezy と SmartOS 13.1 が 1.4 でサポートされます。 予定通り、 32 bit パッケージは削除されました。
- Deb と RPM システム向けの init.d スクリプトが、これらのディストリビューションの 標準に合わせて書き換えられました。 特に、 init スクリプトは失敗するとノンゼロの終了コードを返します。 これは他のツールとシームレスに動作するために大きな問題となっていました。
- start, stop, status コマンドは stdout を読まなくても、戻り値を 返すようになりました。 これは私達がずっと抱えていた主要な "技術的負債" で、ようやく修正されました。
riak start/stop
コマンドからriak.pid
ファイルが作成、削除 されるようになりました。他のツールは、riak スクリプトや nodetool を知らなくても .pid ファイルを活用できます。riak attach
とriak attach-direct
はユーザに q() と CTRL-C の意味について 警告するようになりました。riak
スクリプトはどのコマンドが riak ユーザ(または root ユーザ)で 実行されるべきかを明確にしました。getpid
やping
のステータスコマンドはどのユーザでも実行できますが、start
,stop
のようなデーモンコマンドは riak ユーザにより実行されていない 場合にはエラーとなります。
- bear/1: Remove native flag and add kernel,stdlib to app deps
- bitcask/89: add dialyzer targets
- bitcask/92: Fix merge logging bug introduced by bs-merge-expiration-change branch
- folsom/2: Improve performance of slide histogram
- leveldb/73: level work1
- leveldb/74: Add status query for total bytes used by a LevelDB instance
- leveldb/75: Merge of Google 1.6, 1.7, 1.8, and 1.9 releases
- leveldb/78: Repair updated for edge case created with new directory structure.
- leveldb/79: filecache tuning2
- leveldb/81: bloom size limit
- leveldb/84: level work3, change from 3 overlapped levels to 2
- merge_index/30: Remove delayed_write option
- mochiweb/7: Range header fix
- mochiweb/8: Remove parameterized modules.
- node_package/40: init script returns success even if riak does not start
- node_package/43: Add SRPMS and make RPM version field fully compatible
- node_package/44: Convert RPM init script to fall in line with Redhat style
- node_package/47: Add app_epath.sh, a POSIX app.config parsing utility.
- node_package/49: Create .pid files for package builds
- node_package/50: RPM %files changes behavior on Fedora 18
- node_package/51: Return nonzero exit codes on init function failure
- node_package/54: Fix %files section to not claim ownership of bindir and mandir
- node_package/55: Investigate shipping configuration to increase open files ulimit
- node_package/56: Name SunOS packages based on erlang architecture rather than uname
- node_package/57: Base architecture naming on erlc arch
- node_package/60: Add support for SmartOS 13.1
- node_package/61: add simple warnings on attach/attach-direct
- node_package/63: remove contract specification from SMF manifests (solaris)
- node_package/65: Create patches for SmartOS packages to handle differing behavior
- erlang_protobuffs/41: Fix some README example problems, callout deep lists change.
- erlang_protobuffs/42: Cleanup warnings
- erlang_protobuffs/45: Be more firewall-friendly :-)
- erlang_protobuffs/46: Fix parsing hex values
- erlang_protobuffs/47: fix compiler warnings about shadowed variables
- erlang_protobuffs/49: Fix enums when using packages
- erlang_protobuffs/51: Remove O(N^2) algorithm from repeated field extraction.
- riak/254: Changed
riak attach
to use a remsh - riak/268: Switch riak to use node_package for packaging
- riak/272: Add new rebar binary and erlydtl opts info toplevel rebar.config for solving dialyzer glitches
- riak/283: We insist on a minimum of 5 nodes in a cluster, adjust devrel
- riak/286: move and clarify ulimit check
- riak/288: remove embedded option
- riak/290: Support multiple PB listeners
- riak/294: Add missing rm -rf dev/$@/lib/riaknostic on dev target
- riak/303: update riak-admin transfers
- riak/310: Remove incorrect
-embedded
flag from riak startup command - riak/311: add "cluster resize-ring " to riak-admin
- riak/322: Add riak-debug, a command for automating the collection of information for diagnosing problems.
- riak/329: Riaknostic no longer escript. Alter build process accordingly.
- riak/331: Lower net_ticktime to check for aliveness more often
- riak/339: update vm.args for moving to OTP team scheduler patch
- riak/341: update app.config to activate v1 object format on new installs
- riak/345: Unable to build Riak from source tarball while offline
- riak_api/21: Move setting/fetching bucket properties out of riak_kv
- riak_api/22: Use init:script_id() for the server version.
- riak_api/23: Enable multiple PB listeners.
- riak_api/24: Add support for resetting bucket properties. Requires basho/riak_pb#35.
- riak_api/25: Remove lager dependency because it is specified by riak_core.
- riak_api/28: No PB listeners leads to repeated log messages concerning a failed stat calculation
- riak_control/54: Fixes to get dialyzer working.
- riak_control/59: Series of dialyzer and formatting changes.
- riak_control/71: Add cluster management.
- riak_control/80: Add ability to stop and down nodes.
- riak_control/81: Normalize resource names.
- riak_control/83: Make join node more explicit.
- riak_control/88: Provide a default selection.
- riak_control/111: Prevent badarith when memory is unavailable.
- riak_core/185: inbound handoffs never cleanup
- riak_core/241: potential fix for #185
- riak_core/270: Dialyzer Fixes
- riak_core/274: Allow parallel vnode initialization
- riak_core/282: Extract out and export pending claim function.
- riak_core/284: initial add of the Riak Core Connection Manager
- riak_core/290: Add support for tracking progress of individual handoffs
- riak_core/291: SSL support
- riak_core/297: don't use hardcoded app names in SSL utils
- riak_core/298: Race in vnode worker pool
- riak_core/299: Vnode nonblocking reply, First draft (3rd edition), ready for some review
- riak_core/300: Fix worker pool races
- riak_core/301: Ring Resizing
- riak_core/302: rework coverage fsm timeouts.
- riak_core/305: Support for
plan/2
andprocess_results/3
funs for coverage fsm - riak_core/312: Enhance transfer display + wrapping nodenames.
- riak_core/313: format _stat_ts in connection manager
- riak_core/316: handoff batching
- riak_core/319: Optimize to better handle large rings/nodes
- riak_core/321: proper return value for riak_core_console:transfers/1
- riak_core/322: Handle node up/down in tcp_mon
- riak_core/323: Permanently disable legacy gossip
- riak_core/325: Fix a typo in tcp_mon init
- riak_core/328: Fix overload test time outs
- riak_core/330: dont start coverage timeout timer if timeout is infinite
- riak_core/331: fix forced_ownership_handoff during resize
- riak_core/332: update bad value protection for timer value
- riak_core/334: Reporting 'normal' events is spammy, don't do it
- riak_core/336: Fix crashing stat mod never getting rescheduled
- riak_core/339: Fix repair handoff crash, missing not sent fun
- riak_core/340: only silently drop DOWN-normal messages in deleted modstate
- riak_kv/30: Bz982 - js_reload not working
- riak_kv/31: Key count reduce function
- riak_kv/334: Every read triggers a read-repair when Last-write-wins=true
- riak_kv/385: Objects cannot be updated if a bad CRC is encountered by Bitcask
- riak_kv/462: Expose FSM timeouts via the HTTP API
- riak_kv/467: add stats for coverage query starts
- riak_kv/479: More Compact Riak Object Binary Format
- riak_kv/487: provide a Location header for the same api version on POST
- riak_kv/488: Move setting/fetching bucket properties to riak_api
- riak_kv/489: Migrate mapred_test to riak_test
- riak_kv/491: Remove Link headers from bucket and key lists
- riak_kv/492: Make hashtree_eqc close trees before destroy.
- riak_kv/495: Add encoding capability for handoff.
- riak_kv/496: Standardize KV backend responses and handling
- riak_kv/498: Document the environment in the logs; advise on bad settings.
- riak_kv/500: vclock capability
- riak_kv/510: Remove merge_index dependency and unused erl_first_file.
- riak_kv/512: Protocol Buffers interface allows the creation of records with an empty key
- riak_kv/520: Adds X-Riak-Deleted where missing
- riak_kv/521: Changes needed to expose FSM timeouts to clients
- riak_kv/526: Expose Backend Size to Handoff for Progress Tracking
- riak_kv/527: List buckets timeout & streaming
- riak_kv/529: Count async MR results against the sink buffer size cap
- riak_kv/530: Ring Resizing Support
- riak_kv/532: kv_wm_utils expects ?MD_DELETED to be "true" not 'true'
- riak_kv/536: A simple way to store a PN-Counter in a riak_object
- riak_kv/542: add license header to riak_kv reformat
- riak_kv/546: Expose the put_fsm 'asis' option to clients
- riak_kv/552: Add new backend capability for Riak r_object use
- riak_kv/554: Optimize to better handle large rings/nodes
- riak_kv/555: Add init/final to AAE remote interface
- riak_kv/559: Alter env recommendations for 1.4
- riak_kv/560: Fix regression in 2i reformat status flag & add extra status function
- riak_kv/562: use old object format by default on upgrade
- riak_kv/563: Add binary format for counters
- riak_kv/569: Make sure client supplied N <= bucket N
- riak_kv/576: Add a capability for counters
- riak_kv/579: Skip start {val, key} pair if start_inclusive is false
- riak_kv/581: Wire up sidejob stats to /stats endpoint
- riak_kv/585: minor improvements to riak_object downgrade support
- riak_kv/586: Stop fold when a vnode reaches page size
- riak_kv/587: Fix incorrect arg in call to get_primary_apl/3 by put FSM
- riak_kv/588: Multi backend was missing data_size function
- riak_pb/30: Add remaining bucket properties to PBC
- riak_pb/31: Fix errors with repl bucket property.
- riak_pb/32: precommit/postcommit empty does not clear
- riak_pb/33: Fix commit hooks and symbolic properties as binaries
- riak_pb/35: Support reset bucket properties feature.
- riak_pb/36: Protoc dependency free version for Python Package Index
- riak_pb/38: Add timeouts to get, put, and delete
- riak_pb/41: Add messages for exporter tool & list timeouts
- riak_pb/42: Remove need to have protoc available in Python source package. Closes #36
- riak_pb/43: 2i pagination support
- riak_pb/44: Add asis flag for RpbPutReq.
- riak_pipe/50: fitting was done before startup
- riak_pipe/62: Move eunit system tests to riak_test
- riak_pipe/68: assume handoff if vnode exits 'normal' during queue requeuest
- riak_pipe/71: Fix opaque type warnings on R16B.
- riak_pipe/73: PULSE test & fix riak_pipe_fitting
- riak_pipe/75: lower "fitting was gone" log to debug level
- riak_pipe/76: limited support for ring resizing
- riak_search/140: remove guard on riak_search_vnode:start_vnode/1
- riaknostic/55: Remove misplaced parathesis (sysctl check)
- riaknostic/56: Add OpenBSD bits
- riaknostic/66: Un-escriptize riaknostic and modify for lager 2.0 compatability
- riaknostic/67: Add an extra log line for clarity when running non-existent checks
- webmachine/76: Add logging for when webmachine crashes and body exists.
- webmachine/115: Fix arguments to call to webmachine_request:recv_stream_body/2
- webmachine/117: Decode Content-MD5 with base64, not hex
- webmachine/124: Refine range header treatment
- webmachine/125: Guess text/css MIME type for .less files
- webmachine/128: Bugfix for multiple routers under Riak
- webmachine/134: collapse 4 separate send calls into 1 in send_chunk
- webmachine/141: Custom reason phrase
- webmachine/142: Read body when DELETE to keep alive connection
- webmachine/143: webmachine_dispatcher crashes on malformed Host header
- webmachine/144: Allow responses for all HTTP errors to be customized
- webmachine/151: Removing io:format/2 calls from log file processing
leveldb 1.3.x、1.2.xのデータを使ってleveldb 1.4.0を初めて起動すると、データの自動変換が始まります。これは、各ノードの起動を3分から7分停止する可能性があります。”level #1”内のleveldbのデータは”level #1”がソートされたデータレベルの代わりに、重複したデータレベルとしての役割を果たすよう、調整されてゆきます。この変換は”level #1”から”level #2”への通常のコンパクションを通じて、単に”level #1”内のファイル数を8より小さくするものです。これは一度だけ実行されます。
Ubuntu 11.04 Natty Narwhal は2012年10月でend-of-lifeになり、apt update、securityの公開リポジトリは削除されています。 これによりRiakは今後11.04に対してビルドされません。私たちは次のRiakのメジャーバージョンリリースのタイミングで、 最新のnon-LTSリリースに対するサポートを検討する予定です。
UbuntuのLTSリリース(10.04、12.04)は引き続きサポートされますので影響はありません。