FAQ

PERFORCE

ナレッジベースからの転載記事

ID.KB3193

Q. ジャーナルノート


原文: http://answers.perforce.com/articles/KB/3193

A.


概要

ジャーナルノートは、バージョン2010.2で初めて導入された、純粋なメタデータです。ジャーナルノートは、データベースのテーブル行を記録せずに、イベントに関するメタデータ情報を記録するという点において、@mx@@ex@に類似します。

詳細

ジャーナルやチェックポイントにジャーナルノートが存在することで、ジャーナルやチェックポイントを後ほど使用するユーザは、ノートを検証のうえそこに格納されている情報を使用して、振る舞いを管理することが可能となります。さらに、ジャーナルノートを用いてレプリカサーバの機能を有効化し、レプリカサーバが処理するジャーナルノートに基づき、同サーバの動作を決めることができます。

ジャーナルノートの基本的な構成内容は、以下のとおりです。

@nx@ type date @version@ i1 i2 i3 i4 i5 @s1@ @s2@ @s3@ @s4@ @s5@

ジャーナルノートにはすべて、以下3つの共通フィールドがあります。

@nx@ type date @version@ i1 i2 i3 i4 i5 @s1@ @s2@ @s3@ @s4@ @s5@

type = ジャーナルノートのタイプdate = ノートが生成時刻を示すタイムスタンプversion = ノートを生成したサーバのバージョン

これらに加えて、一連の正数(i1~i5)や文字列(s1~s5)の形式を用いたオプションで、ジャーナルノートのタイプに基づいた補足情報が保持されます。

@nx@ type date @version@ i1 i2 i3 i4 i5 @s1@ @s2@ @s3@ @s4@ @s5@

ジャーナルノートタイプの概要

タイプ 名前 オプション
0 チェックポイントのヘッダ i1 = 大文字小文字の識別
s1 = データベースのルート
s2 = ジャーナルファイル名
1 チェックポイントのトレーラ  
2 ジャーナルのヘッダ i1 = 大文字小文字の識別
i2 = ジャーナルのタイプ
s1 = データベースのルート
s2 = ジャーナルファイル名
s3 = サーバのバージョン

ジャーナルタイプフィールド(i2)は、ジャーナルファイルの生成方法を示します。
0 = 通常のジャーナル
1 = p4d -jd
2 = p4d -jds
3 = p4d -xx (jnl.fix)
4 = journaldbchecksums -u
3 ジャーナルのトレーラ  
4 テーブルの概要 i1 = テーブルのバージョン
i2 = 古いバージョン
i3 = テーブルのチェックサム
i4 = テーブルの不適切なunlock数
s1 = テーブル名
5 サーバのアップグレード i1 = アップグレードカウンタの開始値
i2 = アップグレードカウンタの反映先の値
6 テーブルのアップグレード i1 = 実行されるアップグレード
s1 = 呼び出されるアップグレード関数名
7 サーバの起動 s1 = サーバのポート番号
s2 = サーバのルート
s3 = サーバ名
s4 = サーバID
8 サーバの停止 s1 = サーバのポート番号
9 Unicodeの有効化  
10 パッチ対象のテーブル  
11 リプレイ対象のジャーナル i1 = ジャーナルのリプレイ中に有効なオプション
s1 = リプレイ対象のジャーナル名/チェックポイント名
12 テーブルのチェックサム i1 = テーブルのバージョン
i2 = テーブルのチェックサム
i3 = テーブルの不適切なunlock数
i4 = テーブルの生成
s1 = テーブル名
13 ヘッダのアンロード i1 = ドメインタイプ(クライアント/ラベル/ストリーム)
s1 = ドメイン名
s2 = アンロード対象のファイル名
14 トレーラのアンロード  
15 チェンジリストの変更 i1 = チェンジリスト番号
i2 = チェンジリストのリビジョン番号
i3 = journaldbchecksums (0)またはsubmit (1)で記録されたノート
s1 = チェンジリストのチェックサム
16 テーブルのダンプ i1 = テーブルのバージョン
i2 = テーブルのチェックサム
i3 = レコード数
i4 = isCompressed
s1 = テーブル名
s2 = ダンプファイル名
17 ブロックチェックサム i1 = テーブルのバージョン
i2 = ブロック番号
i3 = ブロックサイズ
i4 = ダウンプバージョン
s1 = テーブル名
s2 = ブロックの最初のキー
s3 = ブロックの最後のキー
s4 = ブロックのチェックサム
18 マスターの有効化 s1 = ポート番号
s2 = 名前(空白の場合有)
s3 = サーバID(空白の場合有)
19 マスターの無効化 s1 = ポート番号
s2 = 名前(空白の場合有)
s3 = サーバID(空白の場合有)
20 マスターの移行 s1 = ポート番号
s2 =名前(空白の場合有)
s3 = サーバID(空白の場合有)
21 スタンバイの有効化 s1 = ポート番号
s2 = 名前(空白の場合有)
s3 = サーバID(空白の場合有)
22 ワークスペースの有効化 s1 = ポート番号
s2 = 名前(空白の場合有)
s3 = サーバID(空白の場合有)
23 レプリカの移行 s1 = このレプリカのサーバID
s2 = このレプリカの現在のステータスファイルがある場所
i1 = ターゲットから最後に参照された@ex@あるいは@mx@レコード内のpid
i2 = ターゲットから最後に参照された@ex@あるいは@mx@レコード内のタイムスタンプ

使用例

ジャーナルノートのタイプは多岐にわたり、それらの情報を、さまざまな目的で使用することが可能です。以下に、チェックポイントに存在するヘッダ/トレーラのノートが、いかに有用であるかを説明します。

チェックポイントごとに、チェックポイントのヘッダノートが存在します。

@nx@ 0 1296517759 @30@ 2 0 0 0 0 @/p4root@ @journal@ @@ @@ @@

以下は、チェックポイントのトレーラノートです。

@nx@ 1 1296517767 @30@ 0 0 0 0 0 @@ @@ @@ @@ @@

チェックポイントのヘッダノートは、その補足情報の中に、チェックポイントが取得された際に有効な大文字小文字の識別方法とUnicodeオプションが保持されています。これによってPerforceサーバは、必ず同じオプションを有効のうえ、チェックポイントをリストアします。

$ p4d -r /p4root -jr checkpoint.9Perforce db files in '.' will be created if missing...Recovering from checkpoint.9...Perforce server error:Journal file 'checkpoint.9' replay failed at line 1!Bad transaction marker!Case-handling mismatch:server uses Windows-style (-C1) but journal flags are Unix-style (-C0)!

チェックポイントのヘッダノートでサーバのバージョンが指定されている状態で、それより新しいサーバのバージョンで生成されたチェックポイントをリストアすると、警告メッセージが出力されます。

$ p4d -r /p4root -jr checkpoint.9Recovering from checkpoint.9...Perforce server info:Server version 30 is replaying a version 31 journal.

ジャーナルノートは、チェックポイントやジャーナルの他のコンテンツからは独立しているため、障害が発生した場合には、簡単にこれらのノートを削除することが可能です。

例:

grep -v '^@nx@' checkpoint.N > checkpoint.N.new

チェックポイントのトレーラノートは、存在するだけで、チェックポイントが正常に完了したことを確認するために使用することが可能です。

チェックポイントのヘッダ/トレーラに記録されているタイムスタンプの差分から、チェックポイントの作成に費やされた時間を算出できます。


<< ナレッジベースからの転載記事に関するFAQ一覧へ戻る