ひっそりと頑張っております。今日は些細な豆知識をふたつほど。
実行中でも設定値を変更できる
RiakはErlangというプログラミング言語で書かれており、Erlangは実行中にプログラムにアタッチして、中の軽量プロセスにメッセージを送ったり、テーブルの値を安全に変更できたりする。それを利用する。まずRiakを動かしてみる。
$ git clone git://github.com/basho/riak $ cd riak $ make rel $ cd rel/riak && ulimit -n 4096 $ bin/riak start $ bin/riak ping pong $ curl -i http://localhost:8098/ping HTTP/1.1 200 OK Server: MochiWeb/1.1 WebMachine/1.9.2 (someone had painted it blue) Date: Thu, 07 Feb 2013 13:03:49 GMT Content-Type: text/html Content-Length: 2 OK $
はいふつうにMochiWebのServerが返ってくる。これを、Riakを止めずに変更する。
$ bin/riak attach $ bin/riak attach Attaching to /tmp//home/kuenishi/src/riak/rel/riak/erlang.pipe.1 (^D to exit) (riak@127.0.0.1)1> application:set_env(webmachine, server_name, "hogehoge"). ok (riak@127.0.0.1)2> [Quit] $ curl -i http://localhost:8098/ping HTTP/1.1 200 OK Server: hogehoge Date: Thu, 07 Feb 2013 13:03:26 GMT Content-Type: text/html Content-Length: 2 OK
これは簡単。同様にして、etc/app.configで設定されている様々な値を、オン中に変更することができる。ただし変な値にするとおかしくなったりするので、用法用量を守って正しくお使いください。システムの挙動が怪しくなったんだけど止められない、けどなんとかしたい、というときに効果を発揮する。具体的にどういうケースで使えるか、知りたい人はSean Cribbsのスライドを見ていただきたい。バグが発覚したけど止められないので、サーバーを止めずにHandoffを一旦停止して落ち着かせてからライブパッチを当ててHandoffを再開するという離れ業である。
HTTPヘッダ"Server: "を変更できる
これはetc/app.configを直接変更しても同じことだ。こんどはファイルを読み込むので、Riakを一旦とめる。
$ bin/riak stop ok $ emacs etc/app.config $ bin/riak start
次の一文を適当なところに追加する。どこでもいいというわけではないので、うまく入れてくれよな!
{webmachine, [
{server_name, "erlang-users.jpをよろしく!"}
]},
さてこれでどうなっているか。
$ curl -i http://localhost:8098/ping HTTP/1.1 200 OK Server: erlang-users.jpをよろしく! Date: Thu, 07 Feb 2013 13:07:34 GMT Content-Type: text/html Content-Length: 2 OK
おおおできましたね。すごいわ。ちなみに今日の知識、全部Riak CSでもできます。