2008年03月12日

repcached-1.2をリリースしました

はてなブックマークに登録

repcached-1.2 (memcached-1.2.4ベース) を公開しましたのでお知らせします。

今回のバージョンアップは以下の2件の不具合修正になります。

  • flush_allのレプリケーション時にマスタでメモリリークする可能性があったのを修正しました
  • flagsパラメータがレプリケーションされていなかったのを修正しました

ダウンロードやインストール方法などの詳しい情報は、プロジェクトページをご覧ください


flagsパラメータがレプリケーションされない不具合の詳細


memcachedプロトコルでは更新系コマンドにflagsというパラメータがあります。
set key 0 0 5
        ↑これ
本来であれば、このパラメータもレプリケーションすべきですが、以前のバージョンではバックアップで常に0をセットしてしまっていました。
master: set key 1 0 5  ← Masterはflags=1なのに
backup: set key 0 0 5  ← backupはflags=0になっちゃってる

flagsパラメータを利用していないアプリケーションには影響ありませんが、PHPのMemcache::set関数などを使ってオブジェクトを格納しているようなアプリケーションでは致命的な問題となります。例えば、以下のようなコードです。
※環境は php-5.2.5 + memcache-2.2.3.tgz です。

【ソースコード】
#!/usr/bin/php
<?PHP
$memcacheM = new Memcache;
$memcacheB = new Memcache;
$memcacheM->connect('master', 11211) or die ("connect errorM\n");
$memcacheB->connect('backup', 11211) or die ("connect errorB\n");
$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;
$memcacheM->set('key', $tmp_object, false, 10) or die ("set error\n");

$get_resultM = $memcacheM->get('key');
echo "Master\n";
var_dump($get_resultM);
echo "\n";

$get_resultB = $memcacheB->get('key');
echo "Backup\n";
var_dump($get_resultB);
?>

実行結果は以下のようになります。

【実行結果】
 
Master
object(stdClass)#5 (2) {
  ["str_attr"]=>
  string(4) "test"
  ["int_attr"]=>
  int(123)
}
 
Backup
string(66) "O:8:"stdClass":2:{s:8:"str_attr";s:4:"test";s:8:"int_attr";i:123;}"

なんと、Masterからgetした場合はオブジェクトとして扱われているのに対し、Backupでgetすると文字列として扱われてしまっています。PHPのMemcache関数は、データをシリアライズして格納しているかどうかを判断するためにflagsを利用しているようです。もしかすると他のライブラリでも同様の問題があるかもしれませんのでご注意下さい。


repcached-2.0の近況


現在、memcached-1.2.5をベースにしたrepcached-2.0を開発中です。実装のほうはほとんど終わっていまして、今はコードを見直しながらストレステストの準備をしています。早ければ今月中、遅くとも来月の頭にはリリースできると思いますのでご期待下さいませ!



(や)

klab_gijutsu2 at 03:12│Comments(0)TrackBack(0)repcached 

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Blog内検索
Archives
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在5ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。
最新コメント