サイトマップ 連絡先 トップに戻る 最初に戻る 前に戻る 次へ進む
$Date: 2018-07-07 06:49:13 +0900 (2018/07/07 (土)) $
$Revision: 1347 $

Subversion 1.5.0 での新機能 (fsfs の新リポジトリ形式: sharding)

概要

Subversion のファイルシステムには大きく分けて二つの形式があります。 fsfs の新リポジトリ形式(FSFS sharding) が Subversion 1.5 で導入されます。 この機能に関して簡単に紹介します。

リンク

前提条件

sharding とは?

sharding とは Subversion 1.5 で、 fsfs リポジトリに導入される新しいリポジトリ形式のことです。 fsfs 形式の場合、revprops と revs 以下に各リビジョンに対応するファイルが作成されます。 1リビジョンにつき、1つずつファイルが作成されます。

古い形式の例

repos
 └─db
     │
     ├─revprops
     │   ├─0
     │   ├─1
     │   │  ... (中略) ...
     │   ├─1005
     │   ├─1006
     │   └─1007
     │
     ├─revs
     │   ├─0
     │   ├─1
     │   │  ... (中略) ...
     │   ├─1005
     │   ├─1006
     │   └─1007
     │
     └─transactions

新しい形式の例

repos
 └─db
     │
     ├─revprops
     │   ├─0
     │   │  ├─0
     │   │  ├─1
     │   │  │  ... (中略) ...
     │   │  ├─998
     │   │  └─999
     │   │
     │   └─1
     │       ├─1000
     │       ├─1001
     │       │  ... (中略) ...
     │       ├─1006
     │       └─1007
     │
     ├─revs
     │   ├─0
     │   │  ├─0
     │   │  ├─1
     │   │  │  ... (中略) ...
     │   │  ├─998
     │   │  └─999
     │   │
     │   └─1
     │       ├─1000
     │       ├─1001
     │       │  ... (中略) ...
     │       ├─1006
     │       └─1007
     │
     └─transactions

コンパイル

r24576 以降の Subversion のソースコードを入手してコンパイルします。

shardingの確認

リポジトリの作成

新しいリポジトリ形式を利用するためには、svnadmin create で新たに リポジトリを作成し直す、あるいは fsfs-reshard.py で変換する必要が あります。なお fsfs-reshard.py で対応しているのは format 2 から format 3 への変換のみです。format 1 から format 3 に変換したい場合 あるいはformat 1 から format 2 に変換したい場合は、リポジトリの dump/load を行う必要があります。

r24576 以降のバージョンの svnadmin コマンドには --pre-1.5-compatible オプションが追加されています。

実行確認

svnadmin の create サブコマンドで、何もオプションを指定 せずに実行します。
D:\...\svnroot>svnadmin create repos
参考
D:\...\trunk>svnadmin help create
create: 使用方法: svnadmin create <リポジトリパス>

空のリポジトリを <リポジトリパス> に新規に作成します。

有効なオプション:
  --bdb-txn-nosync         : トランザクションコミット時の fsync を無効にしま
                             す [Berkeley DB]
  --bdb-log-keep           : ログファイルの自動削除を無効にします [Berkeley
                             DB]
  --config-dir        : ディレクトリ  からユーザ設定ファイルを読み
                             込みます
  --fs-type           : リポジトリ形式: 'fsfs' (デフォルト) または 'bdb'
  --pre-1.4-compatible     : Subversion バージョン 1.4 以前と互換性のある形式
                             を使用します
  --pre-1.5-compatible     : use format compatible with Subversion versions
                             earlier than 1.5 ← ver1.4 互換モードを使う場合

svnadmin create のオプションの意味(r24576 以降)

if( --pre-1.4-compatible )
    format 1     ← 〜 ver 1.3 形式
else if( --pre-1.5-compatible )
    format 2     ← ver 1.4 形式
else
    format 3     ← ver 1.5 形式
svnadmin create のオプションの意味(r24575 以前)
if( --pre-1.4-compatible )
    format 1     ← 〜 ver 1.3 形式
else
    format 2     ← ver 1.4 形式

互換性

旧形式から新形式への移行

旧形式から新形式への移行方法には大きく分けて二つの方法があります。

svnadmin を使う方法 (非常に長い時間がかかります)

  1. svnadmin dump
  2. いったんダンプします。
    svnadmin dump originalrepos > repos.dump
    
  3. svnadmin create
  4. オプションなしでリポジトリを作成します。
    svnadmin create newrepos
    
  5. svnadmin load
  6. 作成したリポジトリに、ダンプファイルをロードします。
    svnadmin load newrepos < repos.dump
    

tools/server-side/fsfs-reshard.py による変換

format 2 から format 3 への変換にのみ利用できます。

r24693 (2007/4/21) 現在ではまだ完成していないようです。
実行してみると、意図的に例外が発生するようになっています。 実運用には使うなという警告メッセージが出ます。
(例外が発生する部分をコメントアウトして使います)

C:\tmp>D:\svnwork\subversion\trunk\tools\server-side\fsfs-reshard.py
Traceback (most recent call last):
  File "D:\svnwork\subversion\trunk\tools\server-side\fsfs-reshard.py", line 354, in 
    Trust us."""
Exception: This script is unfinished and not ready to be used on live data.
    Trust us.

fsfs-reshard.py の入手先

fsfs-reshard.py では、以下の処理を行います。 ダンプ、ロードの手順が不要なので、dump/load の手順に比較するときわめて速いです。 ヘルプの表示
C:\tmp>fsfs-reshard.py
usage: fsfs-reshard.py REPOS_PATH MAX_FILES_PER_SHARD

Perform an offline conversion of an FSFS repository between linear
(readable by Subversion 1.4 or later) and sharded (readable by
Subversion 1.5 or later) layouts.

The MAX_FILES_PER_SHARD argument specifies the maximum number of
files that will be stored in each shard (directory), or zero to
specify a linear layout.  Subversion 1.5 uses a default value of
1000 files per shard.
実行例
C:\tmp>D:\svnwork\subversion\trunk\tools\server-side\fsfs-reshard.py tmprepos 10
Converting 'tmprepos' to a sharded structure with 10 files per directory
(will convert to a linear structure first)
- marking the repository as invalid
- linearising db/revs
- linearising db/revprops
- sharding db/revs
- sharding db/revprops
- marking the repository as a valid sharded repository
- done.