ひとりでやるRiak Advent Calendar 2012 day11 - 豆知識その110

仮面/Mask
ひっそりと頑張っております。今日は些細な豆知識をふたつほど。

実行中でも設定値を変更できる

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でもできます。