この前にWindows上にApache+Subversion+TortoiseSVN環境を構築したというエントリーを書いたが,運用検証をしている中でロックの取得ができないという事象が発覚し,いろいろと調べてみたものの,明確な答えには辿り着けず,ざっくりとApacheのバージョンを変えてみたら解決すんじゃね?的なことが書いてあった.類似事象に関して議論されてるエントリーはこのあたり.結果的にApacheのマイナーバージョンをダウングレードして解決したので,その事象をまとめておこうと思う.
Tried to attach multiple locks to a resource. [400, #405]
Subversion Users - FW: Locks return "Bad Request"
XAMPP:SVNでロックできない | ネットワークセキュリティのQ&A【OKWave】
発生事象詳細
各ソフトウェアのバージョンはこの前のエントリーに書いた通りで,こんな感じ.Apache+Subversionのバージョン互換性はAlagazam.netを見て判断してる.おまけでコマンドラインでもバージョンを出力してみた.
- Apache 2.2.23 (Apache Lounge Build)
- Subversion 1.7.8
- TortoiseSVN 1.7.11
>C:\Apache2\bin\httpd.exe -version
Server version: Apache/2.2.23 (Win32)
Server built: Aug 24 2012 11:30:00
>svn --version
svn, バージョン 1.7.8 (r1419691)
コンパイル日時: Dec 15 2012, 17:12:24
今回の問題はロックを取得すると"400 Bad Request"が返ってきてしまう点で,コマンドで実行しても,TortoiseSVNで「ロックを取得」を実行しても結果は同じ.以下のエラーが出る.
サーバが、リクエストへのレスポンスとして予想外の戻り値 (400 Bad Request) を送信してきました (リクエスト: LOCK, URL: '/svn/trunk/Hello.txt')
Apacheには以下のログが出力されていた.HTTPのLOCKリクエストが"400 Bad Request"で返ってきてるよう.
access.log
127.0.0.1 - kakku22 [24/Jan/2013:20:41:25 +0900] "OPTIONS /svn/trunk HTTP/1.1" 200 183
127.0.0.1 - kakku22 [24/Jan/2013:20:41:25 +0900] "LOCK /svn/trunk/Hello.txt HTTP/1.1" 400 226
error.log
[Thu Jan 24 20:41:25 2013] [error] [client 127.0.0.1] Tried to attach multiple locks to a resource. [400, #405]
Apache 2.2.22にダウングレードしたら解決した
"400 Bad Request"が返ってきていて,LOCKリクエストが適切に処理できてなさそうなので,まずはApacheのダウングレードをしてみようと考えた.またこの前はApache 2.2.23のWindows Installer形式が出ていなかったのでApache Lounge提供バイナリを使ったが,なんとなくそこら辺も関係ありそうな気がしたので,Apache Software Foundation提供バイナリにしてみた.ということで,厳密には2.2.22→2.2.23の問題なのか,提供元の違いによる問題なのかは判別できていないが,そっとしておくってことで.ということで,Apacheをダウングレードした.
>"C:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe" -version
Server version: Apache/2.2.22 (Win32)
Server built: Jan 28 2012 11:16:39
これですんなり解決したようで,問題なくロック取得ができるようになった.access.logを見てもLOCKリクエストに対して200が返ってきているので大丈夫そう(リクエスト処理時間が紛らわしく400になった奇跡ワロタwww).
>svn lock http://localhost/svn/trunk/Hello.txt
'Hello.txt' はユーザ 'kakku22' にロックされました。
access.log
127.0.0.1 - kakku22 [24/Jan/2013:21:25:36 +0900] "OPTIONS /svn/trunk HTTP/1.1" 200 183
127.0.0.1 - kakku22 [24/Jan/2013:21:25:36 +0900] "LOCK /svn/trunk/Hello.txt HTTP/1.1" 200 400
まとめ
もうホント勘弁してよ!この環境で検証Restartするぜー!
- Apache 2.2.22 (Apache Software Foundation)
- Subversion 1.7.8
- TortoiseSVN 1.7.11