2018年4月10日火曜日

Subversionのリポジトリは壊れていなかった!

gitの柔軟性と便利を知ってしまうと敢えてsvnを使う理由はないのですが、それでもsvnで管理したままになっている古いプロジェクトも現存しているので、たまに使うことがあります。

今回、ある古いsvnリポジトリをsvnadmin dumpしようとするとエラーが出る問題に遭遇しました。
 svnadmin: E160062: Malformed node revisions ID string
必ず決まったrevision番号でこのエラーが出るのですが、意味も原因も全然分かりません。

svnadmin verifyやsvnrdump dumpでも同じrevisionで、同じか似たようなエラーが発生していました。
 svnrdump: E210008: Error while replaying commit

しばらくこのプロジェクトは触っていなかったのですが、リポジトリ内の特定のrevision情報が壊れてしまったのだと思っていました。確認のため、丸ごとバックアップしていた何年も前の古いリポジトリを取り出して、同じようにdump/verifyしてみました。しかし、やはり同じrevisionで同じエラーが出ます。2~3年くらい前、その古いリポジトリでsvnadmin dumpが成功していたことははっきりと覚えており間違いありません。では、なぜエラーが出るようになったのか?

リポジトリが壊れているのではなく、svnadminコマンドの方がおかしいのではないかと考えました。

いま使っているsvnは最新版の1.9.7ですが、古いバージョンを探して同じことをやってみました。すると、svn 1.8.13を境に何やら動作がおかしいです。
1.8.13では少し症状は違いますが、問題のrevisionでsvnadminがクラッシュしてcoreを吐きました。その直前の1.8.11(なぜか1.8.12は無かった)では、問題なくverifyが通り、dump/loadも成功しました。
やはり、svn 1.8.13以降は何かおかしいみたいです。これはエンバグなのか、あるいは古いリポジトリの一部の機能をサポートしなくなったせい(互換性問題?)なのかは調べていませんが、少なくとも古いバージョンで問題を回避できることが分かりました。

0 件のコメント:

コメントを投稿