■探索ロックの保管

現状は探索ロックは全ての探索ノードに全てのロックがコピーされて保管される．
問い合わせはめちゃくちゃ高速だが，探索ノードの個数が増加するとメモリをかなり圧迫する
→ できれば探索履歴の管理のためにメモリを使いたいので，ロック保有にメモリを使いたくない

全てのロックを探索ノードで保有しないようにする場合，少なくともロックを分散して保管する
必要がある．
また，問い合わせの速度を向上させるには，リモートシステムに対しての問い合わせはしない．
ローカルにコピーされたキャッシュを使って問い合わせをし，OKであれば非同期的にロック情報
をリモートシステムを介して全てのノードへ回送する．

■AとBの探索ノードで，同じサーバーに対するロックを保有している場合の処理:

Aが先にロックを取得し，あとからBが保有した場合，
BからAに対する差分情報の適用の際，ロックがぶつかる事態が発生するので，この場合は
Aのロックを破棄する．以降，Bがそのサーバーに対する探索を担当する．

■ロック保有の原則:

・探索ノード自身が発行したものについては，必ずローカルで保持する．自分の作成したロックが
ほかから転送されてきた場合，転送されてきたものが有効．

・ロックを取得する場合，探索ノードにて保管されているロック情報の中でのみ可能/不可能を
判定する．

・ロックを取得した場合，差分情報として保管しておいて，同期デーモンがしかるべきタイミングで
リモートシステムに対して送信する．また，自身でロックを解除した場合(タイムアウトなどの理由で)も
同様に同期デーモンが転送をする．
→ ロックのかちあいで消滅したロック消去情報の扱いは?



--------------------
(1) 探索ノードＡのロック情報の全てが経路決定ノードのクライアント管理オブジェクトに転送され，
そこで経路決定ノード下での調整がされる．衝突しているものについては，個別に探索ノードへ
除去命令が発行される．

(2)クライアント管理オブジェクト内に格納されたロック情報は，経路決定ノードクライアントファクトリで収集され
衝突の処理がされる．解決された衝突のデータは，クライアント管理オブジェクトに除去命令として
転送される．

(3) (2)で経路決定ノードクライアントファクトリにて収集されたロック情報は，経路決定ファクトリセレクタに全て
転送され，収集される．そこで衝突の解決がされ，衝突したデータは経路決定ノードクライアントファクトリに転送される．

※現状との差異は，探索ノードは他の探索ノードのロック情報を保有しない点と，下方向へ有効情報が
※されない点である．下方向へは，同期の衝突で発生したダブリ解決情報のみである．


■上の方法で発生する問題:

◎上流になるにつれて，調整しなければならないロック情報が非常に多くなる

→ パフォーマンステストの結果，メモリさえあれば大きな問題にならんことがわかった

------------------
2003-07-23

org.logical_paradox.rss.syncd.RSSSyncDaemon
	各ノードで動作する共通の同期デーモン本体
	派生したクラスで特殊な機能を追加する

org.logical_paradox.rss.syncd.RSSSyncInterface
	同期させる2つのシステムを接続するためのインターフェース
	同期対象によって実装をかえる

org.logical_paradox.rss.syncd.SyncQueue
	同期させるための情報をキューイングするオブジェクト

org.logical_paradox.rss.syncd.SyncCommand
	送受信されたオブジェクトに対して与えられた命令を保有するオブジェクト
	内部にObject型のデータオブジェクトを保有する(例: SiteLock, String)
	SyncQueueに入れて使用する

■SNODE〜RMGR
	インターフェース	: RSSRoutingNodeClientを使用する
	同期デーモン		: 探索ロックの回送と，未処理URLの回送を行なう機能を持つ
	起動元				: RSSWebNavigator

■RMGR〜RMF
	インターフェース	: 何らかのローカルインターフェース
	同期デーモン		: 探索ロックの回送と，未処理URLの回送を行なう機能を持つ
	起動元				: RSSRoutingMgr

■RMF〜RNS
	インターフェース	: 何らかのローカルインターフェース
	同期デーモン		: 探索ロックの回送と，未処理URLの回送を行なう機能を持つ
	起動元				: RSSRNodeClientFactory

■RNS〜RNS
	インターフェース	: 何らかのリモートインターフェース
	同期デーモン		: 探索ロックの回送と，未処理URLの回送を行なう機能を持つ
	起動元				: RSSRoutingNodeSelector



	/**
	 * 探索ロックの差分情報を保存する
	 */
	public void reserveSiteLocks( SiteLockSyncElement[] locks, RSSNodeElement[] childNodes ) throws Exception {
		for( int i = 0; i < locks.length; i++ ) {
			for( int j = 0; j < childNodes; j++ ) {
				if( childNodes[j].getNodeId().equals( locks[i].getRobotId() ) == false ) {
					syncQueue.add( new SyncObject( locks[i], locks[i].getRobotId(), childNodes[j].getNodeId() ) );
				}
			}
		}
	}

