Subversion WebDAV transparent write-through proxy を試してみた〜障害時の動作確認編〜
昨日のエントリ『Subversion WebDAV transparent write-through proxy を試してみた〜導入編〜』に引き続き、今回は、マスタサーバとスレーブサーバのpost-commitでのsyncが失敗する場合を想定して、その時の各サーバの挙動と、障害発生時にどのような対応をすればよいかを確認していきます。
今回の動作確認の構成は以下のようになっています。
それでは、クライアントで実際にコミットをして、失敗することを確認します。
[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のデータを取得できるかどうかを確認しています。
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/
マスタサーバとスレーブサーバのリポジトリの同期がとれさえすれば、
以降はクライアントで正常に操作することが可能した。
今回はものすごく簡単な動作確認を実施しました。
次回は、複数のスレーブサーバを準備し、同一のファイルを変更したもの(変更内容は異なる)を同時に別スレーブサーバにコミットしても、競合が発生しないことを確認するか、もしくは、性能検証を実施しようと思います。