# HG changeset patch # User sugi # Date 1420082873 -32400 # Node ID cacc83aea5391ed50825598b4f4d1cbeba5ba313 # Parent 33246fe15eb58eb15e79daa742c5033a55a60e4d modify chapter3 diff -r 33246fe15eb5 -r cacc83aea539 .hgignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Thu Jan 01 12:27:53 2015 +0900 @@ -0,0 +1,2 @@ +syntax:regexp +DS_Store diff -r 33246fe15eb5 -r cacc83aea539 paper/chapter1.tex --- a/paper/chapter1.tex Mon Dec 29 06:22:37 2014 +0900 +++ b/paper/chapter1.tex Thu Jan 01 12:27:53 2015 +0900 @@ -17,7 +17,7 @@ \section{Data Segment} Data Segmentはデータを細かく分割したものであり、数値や文字列などのデータを構造的に保持する。AliceはData Segmentをデータベースとして扱っている。Data Segmentには必ず対になるKeyが存在する。つまりKey Value Storeとして考える事ができる。 -Aliceのデータベースは通常のKVSとは異なっている点がある。通常のKVSはプログラミング言語の連想配列やMapと同様に 「Key(キー)」と「Value(値)」がペアとなっている。そのため1つのKeyに対して値は1つである。しかし、Aliceの場合は「Key」と「Queue」がペアとなっているため、Keyに対して複数回putできる。従って取得できるValueも複数存在できる。便宜上これをKey Value Queueと呼ぶものとする。Key毎の追加と取得はLindaに準じた設計になっている。 +Aliceのデータベースは通常のKVSとは異なっている点がある。通常のKVSはプログラミング言語の連想配列やMapと同様に 「Key(キー)」と「Value(値)」がペアとなっている。そのため1つのKeyに対して値は1つである。しかし、Aliceの場合は「Key」と「Queue」がペアとなっているため、Keyに対して複数回putできる。従って取得できるValueも複数存在できる。Key毎の追加と取得はLindaに準じた設計になっている。 Data SegmentはData Segment Manager(以下DSM)によって管理されている。ノード毎にLocal DSMとRemote DSMが存在する。Local DSMは各ノード固有のKVSとなっている。従ってRemote DSMを指定するKeyはノード内部でuniqueなものである。Remote DSMは他のノードのLocal DSMのproxyと考えられる。つまりRemote DSMは複数存在し、それぞれに対応するノードは異なる。 @@ -29,7 +29,7 @@ \label{fig:RemoteDSM} \end{figure} -KVQへのアクセスはqueueによって、ノード内部で逐次化される。それ以外は、すべてJavaのThread Poolにより並列実行される。 +KVSへのアクセスはqueueによって、ノード内部で逐次化される。それ以外は、すべてJavaのThread Poolにより並列実行される。 \subsection{Data Segment API} 以下が用意されているData Segment APIである。これらを用いてデータの送受信を行う。 \begin{itemize} @@ -52,16 +52,33 @@ updateはデータを置き換える特急メッセージのように動作する。Lindaのupdate()に相当する。(図 \ref{fig:update}) \begin{figure}[htbp] \begin{center} -\includegraphics[width=100mm]{./images/update.pdf} +\includegraphics[width=100mm]{images/update.pdf} \end{center} \caption{update"は先頭データを取り除き、queueにデータを追加する} \label{fig:update} \end{figure} \subsubsection{peek} -peekはデータを読み込むAPIである。読み込まれたデータはQueueに残る。要求したデータが存在しなければ、Code Segmentの待ち合わせ (Blocking)が起こる。putやupdateによりデータに更新があった場合、peekが直ちに実行される。Lindaのread()に相当する。 +peekはデータを読み込むAPIである。読み込まれたデータはQueueに残る。要求したデータが存在しなければ、Code Segmentの待ち合わせ (Blocking)が起こる。putやupdateによりデータに更新があった場合、peekが直ちに実行される。Lindaのread()に相当する。(図 \ref{fig:peek}) + +\begin{figure}[htbp] +\begin{center} +\includegraphics[width=90mm]{images/peek.pdf} +\end{center} +\caption{peekはデータをreceiverに読み込む。希望のデータがない場合は保留する} +\label{fig:peek} +\end{figure} + \subsubsection{take} -takeもデータを読み込むためのAPIである。読み込まれたデータはQueueから削除される。Lindaのin()に相当する。 +takeもデータを読み込むためのAPIである。peekとの違いは読み込まれたデータはQueueから削除される。Lindaのin()に相当する。(図 \ref{fig:take}) +\begin{figure}[htbp] +\begin{center} +\includegraphics[width=70mm]{images/take.pdf} +\end{center} +\caption{"take" はデータを receiver に読み込む。その際、読み込んだデータは削除される} +\label{fig:take} +\end{figure} + \subsection{Data Segment の表現} Data Segmentの表現にはMessage Packを利用している。Message Packに関してJavaにおけるデータ表現は以下の3種類があり、制限を伴うが互いに変換可能である。 \begin{itemize} @@ -71,7 +88,7 @@ \end{itemize} Data Segment APIの内部においてデータは、一般的なJavaのクラスオブジェクトまたはbyteArrayで表現されたbinaryで表現されている。 -Localからデータがputされた場合は一般的なJavaのクラスオブジェクトの状態でenqueueされる。RemoteからデータがputされるとbyteArrayで表現されたbinaryの(シリアライズされた)状態でenqueueされる。 +Localからデータがputされた場合は一般的なJavaのクラスオブジェクトの状態でenqueueされる。RemoteからデータがputされるとbyteArrayで表現されたbinaryの状態でenqueueされる。 ユーザーが一般的なクラスをIDL(Interface Definition Language)のように用いてデータを表現することができる。 この場合、クラス宣言時に@Messageというアノテーションをつける必要がある。もちろん、MessagePackで扱うことのできるデータのみをフィールドに入れなければならない。 @@ -79,25 +96,53 @@ Remoteに対してputできるデータは、@MessageをもつクラスオブジェクトかMessage Packで扱える型に限られる。 \section{Code Segment} -Code SegmentとはAlice上で実行されるタスクの単位である。ユーザーはCode Segmentを組み合わせることでプログラミングを行う。Code Segmentをユーザーが記述する際に、内部で使用するData Segmentの作成を記述する。入力時のData SegmentをInput Data Segment、出力時をOutput Data Segmentと呼ぶ。Input Data SegmentとOutput Data SegmentによってCode Segmentの間の依存関係が自動的に記述される。 +Code SegmentとはAlice上で実行されるタスクの単位である。ユーザーはCode Segmentを組み合わせることでプログラミングを行う。Code Segmentをユーザーが記述する際に、内部で使用するData Segmentの作成を記述する。入力時のData SegmentをInput Data Segment、出力時をOutput Data Segmentと呼ぶ。(図 \ref{fig:dsandcs}) + +\begin{figure}[htbp] +\begin{center} +\includegraphics[width=110mm]{images/dsandcs.pdf} +\end{center} +\caption{Code SegmentはInput Data Segment とOutput Data Segmentが存在する} +\label{fig:dsandcs} +\end{figure} Input Data Segment と Output Data SegmentはCode Segmentに用意されているAPIを用いて作成する。 Input Data Segmentは、LocalかRemoteか、またkeyを指定する必要がある。Code Segmentは、記述したInput Data Segmentが全て揃うとThread poolに送られ、実行される。 Out Data SegmentもLocalかRemoteか、またkeyを指定する必要がある。 +Input Data SegmentとOutput Data SegmentによってCode Segmentの間の依存関係が自動的に記述される。(図 \ref{fig:dsandcs2}) + +\begin{figure}[htbp] +\begin{center} +\includegraphics[width=120mm]{images/dsandcs2.pdf} +\end{center} +\caption{Input Data Segment とOut put Data SegmentがCode Segment間の依存関係を自動的に記述する} +\label{fig:dsandcs2} +\end{figure} 現在、Inputの場合はsetKeyを呼ぶ際、Outputはput(またはupdate)の際にノードとkeyの指定を行っている。 しかし、どの時点でノードとkeyの指定を行えばよいか、どのようなAPIを用意するべきかは、議論の余地がある。 + \section{Meta Data Segment} +Meta Data SegmentはData Segmentの一種である。Data Segmentは、ユーザーがput(またはupdate)したデータを管理するData Baseであるのに対して、Meta Data Segmentは、分散フレームワークAliceがputしたデータを管理するData Baseである。管理されているデータは、主にTopology Nodeの状態を表すメタデータである。ユーザーがメタデータを扱うこともできる。 + +例えば、"start"というkeyにはTopology NodeがStart Code Segmentを実行することができる状態を表す。他にも"\_CLIST"というkeyでは、利用可能なRemote Data Segmentの名前のリストが保存されている。ユーザーはリストをpeekし、putする際にリストにある名前を指定することで、動的にデータの伝搬などを行うことができる。 + +また、Input Data Segmentに付随しているものもある。Input Data SegmentはCode Segment内部でReceiverという入れ物に格納される。ユーザーは、Receiverに対して操作することでData Segmentを入手できる。 +このReceiverには、fromというフィールドがあり、このデータを誰がputしたという情報が入っている。この情報をデータの伝搬する際に利用することで、データをputしたノードに送り返すことを防ぐことができる。 + +現在のAliceでは、メタデータはデータと同じ領域にputされているため、データと同じAPIを用いて取得できる。 + \section{Meta Code Segment} +Meta Code SegmentはAlice内部で動いているCode Segmentである。つまり、daemonのことである。 \section{Topology Manager} Aliceは複数のノードで構成され、相互に接続される。通信するノードはURLにより直接指定するのではなくTopology Managerで管理する。 -Topology Managerはトポロジーダイルを読み込み、参加を表明したクライアント(以下、Topology Node)に接続するべきTopology NodeのIPアドレス、ポート番号、接続名を送りトポロジーファイルに記述されたとおりにトポロジーを作成する。(図\ref{fig:topologymanager}) +Topology Managerはトポロジーファイルを読み込み、参加を表明したクライアント(以下、Topology Node)に接続するべきTopology NodeのIPアドレス、ポート番号、接続名を送りトポロジーファイルに記述されたとおりにトポロジーを作成する。(図\ref{fig:topologymanager}) \begin{figure}[htbp] \begin{center} -\includegraphics{images/topologymanager.pdf} +\includegraphics[width=70mm]{images/topologymanager.pdf} \end{center} \caption{Topology Manager はトポロジーファイルの記述に従ってトポロジーを生成する} \label{fig:topologymanager} @@ -110,14 +155,14 @@ DOT Languageはプレーンテキストを用いてデータ構造としてのグラフ構造を表現するデータ記述する言語の一種である。 このDOT Languageを用いてクライアント間の接続を表現する。 -クライアント間の接続はlabelを用いて名前が割り振られている。この接続名を指定することでユーザーは他のノードのRemote Data Segmentにアクセスすることができる。ReceiverにsetKeyを行う際、odsでput、updateする際のmanagerKeyがlabelである。(図\ref{fig:ring}) +クライアント間の接続はlabelを用いて名前が割り振られている。この接続名を指定することでユーザーは他のノードのRemote Data Segmentにアクセスすることができる。ReceiverにsetKeyを行う際、odsでput、updateする際のmanagerKeyがlabelである。(ソースコード\ref{src:ring}) \begin{table}[htbp] -\lstinputlisting[label=ring, caption=3台でリングを組んだ時の例]{source/ring.dot} +\lstinputlisting[label=src:ring, caption=3台でリングを組んだ時の例]{source/ring.dot} \end{table} テキストのみではユーザーが望む形のトポロジーかどうかを判断しにくい。ノードの数が少なければ、可能であるがノードの数が増加するに連れて困難になるが、dotコマンドを用いることでその問題を解決することができる。 -dotコマンドでトポロジーファイルを画像として出力することができるので、記述したトポロジーが正しいことを可視化して判断することができる。 +dotコマンドでトポロジーファイルを画像として出力することができるので、記述したトポロジーが正しいことを可視化して判断することができる。(図\ref{fig:ring}) \begin{figure}[htbp] \begin{itemize} @@ -130,5 +175,22 @@ \caption{dotコマンドで作成された3台で構成されたリングのグラフ} \label{fig:ring} \end{figure} +リングトポロジーの場合、各Topology Nodeは"right"と"left"という2つのkeyでRemote Data Segmentへのアクセスが可能である。 +また、Topology Nodeへの名前は、Topology Managerへの先着順に"node0"、"node1"、"node2"とトポロジーファイルに記述されている抽象名が割り当てられる。 + +\subsection{Topology Managerの参加表明処理} +Topology Managerへの参加表明は、Topology Node起動時にコマンドライン引数からTopology ManagerのIPアドレスとポート番号を指定すればよい。 +指定されたTopology Managerに接続を行うと、Topology Manager側のキー"hosts"に、自分自身のIPアドレスとポート番号をputする。 + +参加表明を受け取ったTopology Managerは、抽象名を参加表明したTopology Nodeのキー"host"にputする。 +その後、Topology Manager上のTopology Node名のキーに、接続すべきTopology Nodeの情報(IP アドレス、ポート番号等)を全てputする。Topology Nodeは、その情報を1つずつTakeし接続処理を行う。全ての接続処理が終わるとTopology ManagerからTopology Nodeに対してStart Code Segmentの実行命令が出され、アプリケーションが開始される。 + +\begin{figure}[htbp] +\begin{center} +\includegraphics[width=120mm]{images/topologymanagerandnode.pdf} +\end{center} +\caption{Topology ManagerとTopology Node間の通信} +\label{fig:topologymanagerandnode} +\end{figure} \section{Aliceによるプログラミング手法} \ No newline at end of file diff -r 33246fe15eb5 -r cacc83aea539 paper/chapter3.tex --- a/paper/chapter3.tex Mon Dec 29 06:22:37 2014 +0900 +++ b/paper/chapter3.tex Thu Jan 01 12:27:53 2015 +0900 @@ -6,19 +6,35 @@ \section{Dynamic Topologyへの対応} 第2章で示したように分散フレームワークAliceはTopology Fileを読み込むことでTopologyを構成する。 つまり、予め参加するノードの台数が決まっている必要がある。また、Topologyに全ノードが参加するまでアプリケーションが起動しない。 + しかし、実際のアプリケーションでは、参加するノードの数は決まっていないため、Topologyを動的に変化させる必要がある。 -そこで、Topology Fileの代わりにTopologyを指定して起動させた場合、ノードがTopologyに従い、順次追加されるようにTopology Managerに機能を追加した。 +そこで、Topology Fileの代わりにTopologyを指定して起動させた場合(ソースコード \ref{src:DynamicTopologyManager})、ノードがTopologyに従い、順次追加されるようにTopology Managerに機能を追加した。 \begin{table}[htbp] -\lstinputlisting[label=fig:TopologyManager, caption=Topology Managerの起動方法]{source/TopologyManager.sh} +\lstinputlisting[label=src:DynamicTopologyManager, caption=Dynamic Topology Managerの起動方法]{source/TopologyManager.sh} \end{table} 現在は、TreeVNCのTopologyである木構造のみ指定可能である。引数Childの後に子供の数を指定することで2分木だけではなく3分木などのTopologyを作ることができる。デフォルトでは2分木になっている。 +\subsection{Dynamic Topology Managerの参加表明処理} +トポロジーファイルを指定して起動した場合は、図 \ref{fig:topologymanagerandnode}で示したように、アプリケーションが起動する前に全ての接続すべきTopology Nodeの情報がTopology Nodeにputされ,、接続処理が行われる。 + +Dynamic Topologyの場合は、新しくTopology Nodeがアプリケーションに参加するたびにTopology ManagerからTopology Nodeに対して、接続すべきTopology Nodeの情報がputされ、接続処理が行われる。(図 \ref{fig:DynamicTopology}) + +Dynamic Topologyへの参加表明の方法は、従来の方法と同じく、Topology Nodeの起動時にコマンドライン引数からTopology ManagerのIPアドレスとポート番号を指定するだけでよい。 + +\begin{figure}[htbp] +\begin{center} +\includegraphics[width=100mm]{images/DynamicTopologymanagerandnode.pdf} +\end{center} +\caption{Topology Nodeが参加する毎に接続すべき情報がTopology Nodeに伝えられる} +\label{fig:DynamicTopology} +\end{figure} + \section{Keep Alive} -ノード間の通信は、Remote Data Segmentに対してputやpeekを行うことでのみ発生する。従って、Code Segmentの実装次第では、長時間通信が行われない可能性がある。通信が行われない間にRemote Data Segmentとの接続が切れた場合、切断されたことを通信が行われるまで確認することができない。また、接続状態ではあるが問題が発生し、応答に時間がかかる場合も考えられる。 +ノード間の通信は、Remote Data Segmentに対してputやpeekを行うことでのみ発生する。従って、Code Segmentの実装次第では、長時間通信が行われない可能性がある。通信が行われない間にRemote Data Segmentとの接続が切れた場合、次の通信が行われるまで切断を発見することができない。また、接続状態ではあるが問題が発生し、応答に時間がかかる場合も考えられる。 以上の問題を検知するために分散アプリケーションではKeep Aliveという、定期的にheart beatを送り生存確認を行う機能を持つことが望ましい。 -そこで、AliceにKeep Aliveの機能を実装した。 +そこで、Alice自体にKeep Aliveの機能を実装した。 一定時間内にノードから応答がない場合、Keep Aliveにより、そのノードのRemote Data Segmentが切断される。 diff -r 33246fe15eb5 -r cacc83aea539 paper/images/DynamicTopologymanagerandnode.graffle --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/images/DynamicTopologymanagerandnode.graffle Thu Jan 01 12:27:53 2015 +0900 @@ -0,0 +1,2069 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGraffle6 + 156.11.0.206384 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {558.99997329711914, 783}} + Class + SolidGraphic + ID + 2 + Style + + stroke + + Draws + NO + + + + BaseZoom + 0 + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2012-02-09 04:46:08 +0000 + Creator + Kazuki AKAMINE + DisplayScale + 1 in = 1 in + GraphDocumentVersion + 11 + GraphicsList + + + AllowLabelDrop + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 302 + + ID + 310 + Points + + {325.23180443068946, 714.10073756196743} + {268.51819556931054, 638.86801243803257} + + Style + + stroke + + HeadArrow + 0 + HeadScale + 1.4285709857940674 + Legacy + + TailArrow + 0 + TailScale + 0.5 + + + Tail + + ID + 307 + + + + Bounds + {{315.125, 762.5}, {57, 14}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 308 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 IP_C:1000} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{303.125, 714.5}, {81, 48}} + Class + ShapedGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 307 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 Topology\ +Node} + + + + AllowLabelDrop + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 302 + + ID + 306 + Points + + {181.59917400105238, 710.87371481511332} + {232.7758259989476, 638.87628518488668} + + Style + + stroke + + HeadArrow + 0 + HeadScale + 1.4285709857940674 + Legacy + + TailArrow + 0 + TailScale + 0.5 + + + Tail + + ID + 304 + + + + Bounds + {{135.75, 759.28125}, {57, 14}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 305 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 IP_B:1000} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{123.75, 711.28125}, {81, 48}} + Class + ShapedGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 304 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 Topology\ +Node} + + + + Bounds + {{221.625, 638.46875}, {57, 14}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 303 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 IP_A:1000} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{209.625, 590.46875}, {81, 48}} + Class + ShapedGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 302 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 Topology\ +Node} + + + + Bounds + {{373.10604510875214, 463.76953125}, {57, 28}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 301 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 put\ +IP_C:1000} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{245.125, 20.875}, {57, 28}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 300 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 put\ +IP_A:1000} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{239.5625, 452.37109375}, {105, 28}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 299 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 reply\ +\'93parent\'94, IP_A:1000} + VerticalPad + 0 + + Wrap + NO + + + AllowLabelDrop + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 298 + Points + + {343.5625, 504.38671875000011} + {406.90921393016993, 429.12359109355884} + + Rotation + 180 + Style + + stroke + + CornerRadius + 41 + HeadArrow + FilledArrow + HeadScale + 1.4285709857940674 + Legacy + + TailArrow + 0 + TailScale + 0.5 + + + + + Bounds + {{258.75, 279.4609375}, {57, 28}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 295 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 put\ +IP_B:1000} + VerticalPad + 0 + + Wrap + NO + + + AllowLabelDrop + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 294 + Points + + {154.28790978249577, 329.9921875} + {378.25, 227.6484375} + + Rotation + 180 + Style + + stroke + + CornerRadius + 41 + HeadArrow + FilledArrow + HeadScale + 1.4285709857940674 + Legacy + + TailArrow + 0 + TailScale + 0.5 + + + + + AllowLabelDrop + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 292 + Points + + {223.125, 55.250000000000007} + {324.125, 55.249999999999993} + + Rotation + 180 + Style + + stroke + + CornerRadius + 44 + HeadArrow + FilledArrow + HeadScale + 1.4285709857940674 + Legacy + + TailArrow + 0 + TailScale + 0.5 + + + + + Bounds + {{279.0625, 552.38671875}, {57, 14}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 291 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 IP_C:1000} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{267.0625, 504.38671875}, {81, 48}} + Class + ShapedGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 290 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 Topology\ +Node} + + + + AllowLabelDrop + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 284 + + ID + 289 + Points + + {145.53667400105238, 500.76043356511332} + {196.7133259989476, 428.76300393488668} + + Style + + stroke + + HeadArrow + 0 + HeadScale + 1.4285709857940674 + Legacy + + TailArrow + 0 + TailScale + 0.5 + + + Tail + + ID + 286 + + + + Bounds + {{363.5625, 380.35546875}, {96, 48}} + Class + ShapedGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 288 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 Topology\ +Manager} + + + + Bounds + {{99.6875, 549.16796875}, {57, 14}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 287 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 IP_B:1000} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{87.6875, 501.16796875}, {81, 48}} + Class + ShapedGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 286 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 Topology\ +Node} + + + + Bounds + {{185.5625, 428.35546875}, {57, 14}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 285 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 IP_A:1000} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{173.5625, 380.35546875}, {81, 48}} + Class + ShapedGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 284 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 Topology\ +Node} + + + + Bounds + {{257.5625, 365.91796875}, {103, 28}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 282 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 reply\ +\'93child1\'94, IP_C:1000} + VerticalPad + 0 + + Wrap + NO + + + AllowLabelDrop + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 290 + + ID + 281 + Points + + {391.11728070500004, 428.73860438156697} + {328.0077192949999, 504.00358311843308} + + Style + + stroke + + CornerRadius + 41 + HeadArrow + FilledArrow + HeadScale + 1.4285709857940674 + Legacy + + TailArrow + 0 + TailScale + 0.5 + + + Tail + + ID + 288 + + + + AllowLabelDrop + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 284 + + ID + 280 + Points + + {363.0625, 404.3554585086867} + {255.0625, 404.3554585086867} + + Style + + stroke + + CornerRadius + 41 + HeadArrow + FilledArrow + HeadScale + 1.4285709857940674 + Legacy + + TailArrow + 0 + TailScale + 0.5 + + + Tail + + ID + 288 + + + + Bounds + {{346.25, 173.2109375}, {96, 48}} + Class + ShapedGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 255 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 Topology\ +Manager} + + + + Bounds + {{82.875, 347.5859375}, {57, 14}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 254 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 IP_B:1000} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{70.875, 299.5859375}, {81, 48}} + Class + ShapedGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 253 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 Topology\ +Node} + + + + Bounds + {{154.25, 221.2421875}, {57, 14}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 252 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 IP_A:1000} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{142.25, 173.2421875}, {81, 48}} + Class + ShapedGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 251 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 Topology\ +Node} + + + + Bounds + {{116, 252.2421875}, {101, 28}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 240 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 reply\ +"parent, IP_A:1000} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{229.25, 151.2421875}, {103, 28}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 239 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 reply\ +\'93child0\'94, IP_B:1000} + VerticalPad + 0 + + Wrap + NO + + + AllowLabelDrop + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 253 + + ID + 241 + Points + + {345.79348605349213, 218.85898680474884} + {152.33151394625867, 305.28852887611276} + + Style + + stroke + + CornerRadius + 41 + HeadArrow + FilledArrow + HeadScale + 1.4285709857940674 + Legacy + + TailArrow + 0 + TailScale + 0.5 + + + Tail + + ID + 255 + + + + AllowLabelDrop + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 251 + + ID + 249 + Points + + {345.75000000545776, 197.21810354723033} + {223.74999999454201, 197.23612948047321} + + Style + + stroke + + CornerRadius + 41 + HeadArrow + FilledArrow + HeadScale + 1.4285709857940674 + Legacy + + TailArrow + 0 + TailScale + 0.5 + + + Tail + + ID + 255 + + + + Bounds + {{150.875, 92.125}, {57, 14}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 191 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 IP_A:1000} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{262.375, 78.125}, {27, 28}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 192 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 reply\ +\'93null\'94} + VerticalPad + 0 + + Wrap + NO + + + AllowLabelDrop + + Class + LineGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + Head + + ID + 197 + + ID + 246 + Points + + {321.375, 68.124990879811577} + {220.375, 68.124990879811577} + + Style + + stroke + + CornerRadius + 44 + HeadArrow + FilledArrow + HeadScale + 1.4285709857940674 + Legacy + + TailArrow + 0 + TailScale + 0.5 + + + Tail + + ID + 200 + + + + Bounds + {{138.875, 44.125}, {81, 48}} + Class + ShapedGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 197 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 Topology\ +Node} + + + + Bounds + {{321.875, 44.125}, {96, 48}} + Class + ShapedGraphic + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 200 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf1265\cocoasubrtf210 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 Topology\ +Manager} + + + + GridInfo + + GuidesLocked + NO + GuidesVisible + YES + HPages + 1 + ImageCounter + 1 + KeepToScale + + Layers + + + Lock + NO + Name + レイヤー 1 + Print + YES + View + YES + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoLineLength + 0.20000000298023224 + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2015-01-01 01:58:44 +0000 + Modifier + YuSugimoto + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSHorizonalPagination + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSLeftMargin + + float + 18 + + NSPaperSize + + size + {594.99997329711914, 842} + + NSPrintReverseOrientation + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSRightMargin + + float + 18 + + NSTopMargin + + float + 18 + + + PrintOnePage + + ReadOnly + NO + RowAlign + 1 + RowSpacing + 36 + SheetTitle + キャンバス 1 + SmartAlignmentGuidesActive + YES + SmartDistanceGuidesActive + YES + UniqueID + 1 + UseEntirePage + + VPages + 1 + WindowInfo + + BottomSlabHeight + 714 + CurrentSheet + 0 + Expanded_Canvases + + Frame + {{5, -0}, {1893, 1058}} + ShowInfo + + ShowRuler + + Sidebar + + SidebarWidth + 230 + VisibleRegion + {{-393, -66}, {1346, 916}} + Zoom + 1 + ZoomValues + + + キャンバス 1 + 1 + 1 + + + + + diff -r 33246fe15eb5 -r cacc83aea539 paper/images/DynamicTopologymanagerandnode.pdf Binary file paper/images/DynamicTopologymanagerandnode.pdf has changed