【しばらく編集不可モードで運営します】 編集(管理者用) | 差分 | 新規作成 | 一覧 | RSS | FrontPage | 検索 | 更新履歴

YukiWikiDBのロック機能 - Yuki::YukiWikiDBにロックの機能を入れようとしています。

目次

Yuki::YukiWikiDBにロックの機能を入れようとしています。 以下だと問題があるでしょうか? --結城浩

ロックする部分のコード

    sub lock_store {
        my ($filename, $value) = @_;
        open(FILE, "+< $filename") or open(FILE, "> $filename") or die "$filename cannot be created";
        eval("flock(FILE, LOCK_EX)");
        if ($@) {
            # Your platform does not support flock.
            # Implement another EXCLUSIVE LOCK here.
        }
        truncate(FILE, 0);
        binmode(FILE);
        print FILE $value;
        eval("flock(FILE, LOCK_UN)");
        if ($@) {
            # Your platform does not support flock.
            # Implement another UNLOCK here.
        }
        close(FILE);
    }

    sub lock_fetch {
        my ($filename) = @_;
        open(FILE, "$filename") or return(undef);
        eval("flock(FILE, LOCK_SH)");
        if ($@) {
            # Your platform does not support flock.
            # Implement another SHARED LOCK here.
        }
        local $/;
        my $value = <FILE>;
        eval("flock(FILE, LOCK_UN)");
        if ($@) {
            # Your platform does not support flock.
            # Implement another UNLOCK here.
        }
        close(FILE);
        return $value;
    }

それを使っている部分のコード

    # Store
    sub STORE {
        my ($self, $key, $value) = @_;
        my $filename = &make_filename($self, $key);
        &lock_store($filename, $value);
        return $value;
    }

    # Fetch
    sub FETCH {
        my ($self, $key) = @_;
        my $filename = &make_filename($self, $key);
        my $value = &lock_fetch($filename);
        return $value;
    }


YukiWikiDB.pmはどう実装されてるの?

YukiWkiDB.pmはtieでkey:valueの対を永続化するパッケージです。 YukiWikiではDBとして使います。

データ保存の構成

でいいんでしょうか? yaino


意見

(Too many spams ... embedded comments are not allowed now, sorry.)