よかろうもん!

アプリからインフラまで幅広くこなすいまどきのクラウドエンジニアが記す技術ブログ

Subversion WebDAV transparent write-through proxy を試してみた〜障害時の動作確認編〜

昨日のエントリ『Subversion WebDAV transparent write-through proxy を試してみた〜導入編〜』に引き続き、今回は、マスタサーバとスレーブサーバのpost-commitでのsyncが失敗する場合を想定して、その時の各サーバの挙動と、障害発生時にどのような対応をすればよいかを確認していきます。

今回の動作確認の構成は以下のようになっています。

f:id:interu:20081203010042p:image

それでは、クライアントで実際にコミットをして、失敗することを確認します。

[svn-client]$ svn ci -m "Test Commit"
送信しています subversion.txt
ファイルのデータを送信しています .
リビジョン 10 をコミットしました。

警告: post-commit hook failed (exit code 1) with output:
svnsync: Couldn't get lock on destination repos after 10 attempts

この結果より、マスタサーバのリポジトリはリビジョン10のコミットが成功したが、スレーブサーバの同期に失敗しており、スレーブサーバのリポジトリのリビジョンは9になっているはずです。

続いて、適当にファイルを編集し、再度コミットしてみます。

[svn-client]$ vi subversion.txt
[svn-client]$ svn ci -m "Test Commit"
svn: コミットに失敗しました (詳しい理由は以下のとおりです):
svn: The specified baseline is not the latest baseline, so it may not be checked out.

スレーブサーバのリポジトリの状態とマスタサーバのリポジトリに差異が生じてしまっているため、
コミット失敗するようです。

この状態でupdateすると、リビジョン10のデータを取得できるかどうかを確認しています。

[svn-client]$ svn up
svn: No such revision 10

pre-revprop-changeは正常に動作しており、post-commitのみ失敗しているため、リビジョン10なんてないぞと言われているようです。
ちなみにupdateではなく新規にチェックアウトすると、リビジョン9がチェックアウトされました。

ここで、マスタサーバのpost-commitが正常に行えるように設定を変更して、
再度コミットをしてみます。

[svn-client]$ svn ci -m "Test Commit"
svn: コミットに失敗しました (詳しい理由は以下のとおりです):
svn: The specified baseline is not the latest baseline, so it may not be checked out.

やはり、NGです。
それでは、マスタサーバからスレーブサーバに向けて以下のコマンドを実行して、
リポジトリの同期を行います。

[svn-master]$ svnsync sync http://192.168.1.17/sync/

マスタサーバとスレーブサーバのリポジトリの同期がとれさえすれば、
以降はクライアントで正常に操作することが可能した。

今回はものすごく簡単な動作確認を実施しました。
次回は、複数のスレーブサーバを準備し、同一のファイルを変更したもの(変更内容は異なる)を同時に別スレーブサーバにコミットしても、競合が発生しないことを確認するか、もしくは、性能検証を実施しようと思います。