ProbePickerの簡単な実現。
1.基本はじめに
1にまとめた複数のためのキャッシュクライアント:
2.外交ノード
ProbePickerアダプタ外交ノードは、下流ノードへの接続、およびパラメータの受渡しのためのノードです。
ここで下流ノードパラメータの変化が上流のノードに送信されない、下流ノードがProbePickerを参照するように適応パラメータが下流ノードへアップストリームノードに送信し、処理をマージすることができるキャッシュ・クライアント・パラメータは、クライアントが併合しましたパラメータ少ない合併クライアントのうちの一部。
1)clientFn
右から左の要素への一つのオリジナル1内のクライアントは、新しいクライアントのパラメータとして結合された結果を組み合わせること:
2)コンバイン
ここでの仮定は、アドレスのセット(可視性)連続クライアントアクセスが注文されています。
。Aヘッド及び次のオーバーラップは、結合することができない場合は、ヘッドを組み合わせることができないので、要素を組み込むことのできる最初のものであることを意味し、その後、ヘッドが最終クライアント配列である出力に追加され、その意味を失うことになる、と次の要素は、最初の要素は次のヘッドを組み合わせ、即ち、次の要素をチェックするためにマージすることが可能となります。
。Bは、ヘッドに対して墨消して、次のSourceID / nodePathを比較視認性を無視するので、必要なそのような名前/ requireFifo / supportsXXXなどの他のフィールド、それを尋ねます。
。Cは、結合のSourceIDヘッドを吸引し、次の二つを合わせて視認されます。
3)合併のSourceID
そして、のSourceIDの次のヘッドはどのような関係を持っていますか?
。一致:部分的に重複または完全に重複し、
b. 不重合;
3.怠惰なモジュール
の内部ロジックProbePickerを実装するための怠惰なモジュール:
因为diplomacy node中可能把上游节点的多个clients合并到一起了,所以下游节点看到的sourceId实际上也是合并之后的,即下游节点发起Probe消息时,使用的是合并之后的source值。需要ProbePicker把这个source值区分成合并前的某一个client再转发给上游节点。
1) 成对的输入边和输出边
2) 默认直连
3) 区分source
a. edgeIn.client.clients.size是输入边的clients的数量,即ProbePicker看到的上游节点的clients的数量;edgeOut.client.clients.size是输出边的clients的数量,即ProbePicker的下游节点看到的ProbePicker的clients的数量。两者相等,表明没有进行合并;两者不等,则表明进行了合并,则需要对source域进行区分;
b. 判断source属于哪一个client:edgeOut.client.clients.map(_.sourceId contains out.b.bits.source)
c. 如果合并前只有一个client的sourceId被合并后的client包含,则表明这个client没有与其他client进行合并,所以无需区分;
d. 否则需要根据地址确定是属于哪一个合并前的client(这些client的visibility不重叠),而后转换为对应client的sourceId: